diff options
| author | Maarten Vanraes <alien@mageia.org> | 2016-02-07 16:42:12 +0100 | 
|---|---|---|
| committer | Maarten Vanraes <alien@mageia.org> | 2016-05-14 09:25:24 +0200 | 
| commit | 444376d97e5311abfbc47ee9dc297b8f44e2240f (patch) | |
| tree | 09dd5e32c0accf41b079112767c0fd5823fc6ed0 /lib | |
| parent | 2558df611f60f12244c282f24b30d029aee94900 (diff) | |
| download | manatools-444376d97e5311abfbc47ee9dc297b8f44e2240f.tar manatools-444376d97e5311abfbc47ee9dc297b8f44e2240f.tar.gz manatools-444376d97e5311abfbc47ee9dc297b8f44e2240f.tar.bz2 manatools-444376d97e5311abfbc47ee9dc297b8f44e2240f.tar.xz manatools-444376d97e5311abfbc47ee9dc297b8f44e2240f.zip | |
Plugin: define external tools and use tools in plugins
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/ManaTools/Shared/disk_backend/Plugin.pm | 114 | ||||
| -rw-r--r-- | lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm | 6 | ||||
| -rw-r--r-- | lib/ManaTools/Shared/disk_backend/Plugin/Loop.pm | 9 | ||||
| -rw-r--r-- | lib/ManaTools/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'}); | 
