aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaarten Vanraes <alien@mageia.org>2016-02-07 16:42:12 +0100
committerMaarten Vanraes <alien@mageia.org>2016-05-14 09:25:24 +0200
commit444376d97e5311abfbc47ee9dc297b8f44e2240f (patch)
tree09dd5e32c0accf41b079112767c0fd5823fc6ed0
parent2558df611f60f12244c282f24b30d029aee94900 (diff)
downloadmanatools-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
-rw-r--r--lib/ManaTools/Shared/disk_backend/Plugin.pm114
-rw-r--r--lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm6
-rw-r--r--lib/ManaTools/Shared/disk_backend/Plugin/Loop.pm9
-rw-r--r--lib/ManaTools/Shared/disk_backend/Plugin/Partition.pm8
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'});