From 444376d97e5311abfbc47ee9dc297b8f44e2240f Mon Sep 17 00:00:00 2001 From: Maarten Vanraes Date: Sun, 7 Feb 2016 16:42:12 +0100 Subject: Plugin: define external tools and use tools in plugins --- lib/ManaTools/Shared/disk_backend/Plugin.pm | 114 ++++++++++++++++++++- lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm | 6 ++ lib/ManaTools/Shared/disk_backend/Plugin/Loop.pm | 9 +- .../Shared/disk_backend/Plugin/Partition.pm | 8 +- 4 files changed, 132 insertions(+), 5 deletions(-) diff --git a/lib/ManaTools/Shared/disk_backend/Plugin.pm b/lib/ManaTools/Shared/disk_backend/Plugin.pm index e38553a5..8bcd84bd 100644 --- a/lib/ManaTools/Shared/disk_backend/Plugin.pm +++ b/lib/ManaTools/Shared/disk_backend/Plugin.pm @@ -94,6 +94,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. use Moose; +use ManaTools::Shared::RunProgram; + ## class DATA has 'dependencies' => ( is => 'ro', @@ -102,13 +104,24 @@ has 'dependencies' => ( lazy => 1, default => sub { return []; - } + }, +); + +has 'tools' => ( + traits => ['Hash'], + is => 'ro', + isa => 'HashRef[Str]', + default => sub { return {}; }, + init_arg => undef, + handles => { + tool => 'get', + }, ); has 'parent' => ( is => 'ro', isa => 'ManaTools::Shared::disk_backend', - required => 1 + required => 1, ); #============================================================= @@ -178,6 +191,10 @@ sub probe { =head2 loadio +=head3 INPUT + + $io: ManaTools::Shared::disk_backend::IO + =head3 OUTPUT 0 if failed, 1 if success @@ -200,6 +217,10 @@ sub loadio { =head2 savepart +=head3 INPUT + + $part: ManaTools::Shared::disk_backend::Part + =head3 OUTPUT 0 if failed, 1 if success @@ -222,6 +243,10 @@ sub savepart { =head2 probeio +=head3 INPUT + + $io: ManaTools::Shared::disk_backend::IO + =head3 OUTPUT 0 if failed, 1 if success @@ -240,4 +265,89 @@ sub probeio { 1; } +#============================================================= + +=head2 tool_lines + +=head3 INPUT + + $toolname: Str + @args: Array[Str] + +=head3 OUTPUT + + Array[Str] + +=head3 DESCRIPTION + + this is a default method for executing a tool and getting all the STDOUT + lines in an ARRAY + +=cut + +#============================================================= +sub tool_lines { + my $self = shift; + my $toolname = shift; + my @args = @_; + my $tool = $self->tool($toolname); + # exit early if tool doesn't exit + return undef if (!defined($tool) || !$tool); + + # insert tool before @args + unshift @args, $self->tool($toolname); + + # get lines + return ManaTools::Shared::RunProgram::get_stdout(join(' ', @args). ' 2>/dev/null'); +} + +#============================================================= + +=head2 tool_fields + +=head3 INPUT + + $toolname: Str + $separator: Str + @args: Array[Str] + +=head3 OUTPUT + + 0 if failed, 1 if success + +=head3 DESCRIPTION + + this is a default method for executing a tool and getting all the STDOUT + in a HASH depending on the separator + +=cut + +#============================================================= +sub tool_fields { + my $self = shift; + my $toolname = shift; + my $separator = shift; + my @args = @_; + my %fields = (); + + # get lines from tool + my @lines = $self->tool_lines($toolname, @args); + for my $line (@lines) { + + # split into key & value + my ($key, @value) = split($separator, $line); + my $value = join($separator, @value); + + # trim key & value + $key =~ s/^\s+//; + $key =~ s/\s+$//; + $value =~ s/^\s+//; + $value =~ s/\s+$//; + + # assign into fields + $fields{$key} = $value if ($key ne ''); + } + return %fields; +} + 1; diff --git a/lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm b/lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm index 58890c84..5dd3165f 100644 --- a/lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm +++ b/lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm @@ -69,6 +69,12 @@ has '+dependencies' => ( } ); +has '+tools' => ( + default => sub { + return {'btrfs' => '/usr/sbin/btrfs'}; + } +); + has 'filesystems' => ( is => 'ro', isa => 'HashRef[ManaTools::Shared::disk_backend::Part::Btrfs]', diff --git a/lib/ManaTools/Shared/disk_backend/Plugin/Loop.pm b/lib/ManaTools/Shared/disk_backend/Plugin/Loop.pm index b82ab80a..5f4f602f 100644 --- a/lib/ManaTools/Shared/disk_backend/Plugin/Loop.pm +++ b/lib/ManaTools/Shared/disk_backend/Plugin/Loop.pm @@ -54,7 +54,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. use Moose; use File::Basename; -use ManaTools::Shared::RunProgram; ## Requires /usr/sbin/losetup @@ -67,6 +66,12 @@ has '+dependencies' => ( } ); +has '+tools' => ( + default => sub { + return {'losetup' => '/usr/sbin/losetup'}; + } +); + #============================================================= =head2 _sanitize_string @@ -126,7 +131,7 @@ override ('probe', sub { return 0; } } - my @lines = ManaTools::Shared::RunProgram::get_stdout('/usr/sbin/losetup --list --noheadings --raw --output MAJ:MIN,NAME,SIZELIMIT,OFFSET,AUTOCLEAR,RO,BACK-MAJ:MIN,BACK-INO,BACK-FILE'); + my @lines = $self->tool_lines('losetup', '--list', '--noheadings', '--raw', '--output', 'MAJ:MIN,NAME,SIZELIMIT,OFFSET,AUTOCLEAR,RO,BACK-MAJ:MIN,BACK-INO,BACK-FILE'); for my $line (@lines) { chomp($line); my @fields = split(' ', $line); diff --git a/lib/ManaTools/Shared/disk_backend/Plugin/Partition.pm b/lib/ManaTools/Shared/disk_backend/Plugin/Partition.pm index e8496c3b..1e4fee60 100644 --- a/lib/ManaTools/Shared/disk_backend/Plugin/Partition.pm +++ b/lib/ManaTools/Shared/disk_backend/Plugin/Partition.pm @@ -64,6 +64,12 @@ has '+dependencies' => ( } ); +has '+tools' => ( + default => sub { + return {parted => '/usr/sbin/parted'}; + } +); + #============================================================= =head2 load @@ -83,7 +89,7 @@ override ('loadio', sub { my $self = shift; my $io = shift; # get the partition table - my $pt = ManaTools::Shared::disk_backend::PartitionTable->new(disk => $io->file()); + my $pt = ManaTools::Shared::disk_backend::PartitionTable->new(parted => $self->tool('parted'), disk => $io->file()); # get partitions and mkio them all for my $p (values %{$pt->partitions()}) { my @stat = stat($p->{'file'}); -- cgit v1.2.1