made VG name display size dynamic, added --active, added --terse

This commit is contained in:
Patrick Van der Veken 2017-12-12 10:51:48 +01:00
parent 4c8ba61b88
commit a314a065e5

View File

@ -42,6 +42,7 @@ $|++;
my ($os, $version, $footer); my ($os, $version, $footer);
my %options; my %options;
my @vgdisplay; my @vgdisplay;
my $vg_str_size=15;
#****************************************************************************** #******************************************************************************
@ -61,6 +62,8 @@ if ( @ARGV > 0 ) {
help|h|? help|h|?
size|s=s size|s=s
vg|g=s vg|g=s
active|a
terse|t
)); ));
} }
# check options # check options
@ -71,10 +74,14 @@ if ($options{'help'}) {
unless ($options{'size'}) { unless ($options{'size'}) {
$options{'size'} = 'GB'; $options{'size'} = 'GB';
}; };
if ($options{'vg'}) {
# print header if ($options{'vg'} =~ m#/dev#) {
printf STDOUT ("\n%-15s %-5s %-5s %-20s %-8s %-8s %-10s %-10s %-10s %-12s\n", print STDERR "ERROR: do not specify your VG with '/dev/...'. Only use the short VG name\n\n";
"VG", "PVs", "LVs", "Status", "Version", "PE Size", "VG Size", "VG Free", "VG Max", "VG Major/Minor"); exit (0);
}
# force --active off
delete $options{'active'};
};
# fetch vgdisplay # fetch vgdisplay
if ($options{'vg'}) { if ($options{'vg'}) {
@ -82,12 +89,30 @@ if ($options{'vg'}) {
} else { } else {
@vgdisplay = `/usr/sbin/vgdisplay -F 2>/dev/null`; @vgdisplay = `/usr/sbin/vgdisplay -F 2>/dev/null`;
} }
die "failed to execute: $!" if ($?); die "ERROR: could not retrieve VG info for $options{'vg'}" if ($?);
# find max display size for VG name
# loop over vgdisplay
foreach my $vg_entry (@vgdisplay) { foreach my $vg_entry (@vgdisplay) {
my @vg_data = split (/:/, $vg_entry);
my $str_size = 0;
# loop over VG data
foreach my $vg_field (@vg_data) {
$str_size = length ($1) if ($vg_field =~ m%^vg_name=/dev/(.*)%);
$vg_str_size = $str_size if ($str_size > $vg_str_size);
}
}
# print header
unless ($options{'terse'}) {
printf STDOUT ("\n%-${vg_str_size}s %-5s %-5s %-20s %-8s %-8s %-10s %-10s %-10s %-12s\n",
"VG", "PVs", "LVs", "Status", "Version", "PE Size", "VG Size", "VG Free", "VG Max", "VG Major/Minor");
}
# loop over vgdisplay (ASCII sorted)
foreach my $vg_entry (sort (@vgdisplay)) {
my ($vg_name, $vg_status, $vg_version, $lsvg, $vg_major, $vg_minor,) = ("","","n/a","","n/a","n/a"); my ($vg_name, $vg_status, $vg_version, $lsvg, $vg_major, $vg_minor,) = ("","","n/a","","n/a","n/a");
my ($vg_total_pe, $vg_size_pe, $vg_free_pe, $vg_cur_pvs, $vg_cur_lvs, $vg_max_pe) = (0,0,0,0,0,0); my ($vg_total_pe, $vg_size_pe, $vg_free_pe, $vg_cur_pvs, $vg_cur_lvs, $vg_max_pe) = (0,0,0,0,0,0);
my ($vg_size, $vg_free, $vg_max) = (0,0,0); my ($vg_size, $vg_free, $vg_max) = (0,0,0);
@ -127,21 +152,25 @@ foreach my $vg_entry (@vgdisplay) {
} }
# report data # report data
printf STDOUT ("%-15s %-5s %-5s %-20s %-8s %-8d %-10d %-10d %-10d %3s/%-8s\n", unless ($options{'active'} and ($vg_status eq "deactivated")) {
${vg_name}, printf STDOUT ("%-${vg_str_size}s %-5s %-5s %-20s %-8s %-8d %-10d %-10d %-10d %3s/%-8s\n",
${vg_cur_pvs}, $vg_name,
${vg_cur_lvs}, $vg_cur_pvs,
${vg_status}, $vg_cur_lvs,
${vg_version}, $vg_status,
${vg_size_pe}, $vg_version,
${vg_size}, $vg_size_pe,
${vg_free}, $vg_size,
${vg_max}, $vg_free,
${vg_major}, $vg_max,
${vg_minor}) $vg_major,
$vg_minor)
}
} }
# footer # footer
unless ($options{'terse'}) {
$footer = qq{ $footer = qq{
Note 1: 'PE Size' values are expressed in MB Note 1: 'PE Size' values are expressed in MB
Note 2: 'VG Size', 'VG Free', 'VG Max' values are expressed in GB by default (see --help) Note 2: 'VG Size', 'VG Free', 'VG Max' values are expressed in GB by default (see --help)
@ -149,6 +178,7 @@ Note 3: more detailed information can be obtained by running the pvdisplay(1M),
}; };
print STDOUT $footer; print STDOUT $footer;
};
exit (0); exit (0);
@ -171,6 +201,8 @@ vgs.pl - Show volume group information in a terse way (Linux style).
vgs.pl [-h|--help] vgs.pl [-h|--help]
[(-g|--vg)=<vg_name>] [(-g|--vg)=<vg_name>]
[(-s|--size)=<MB|GB>] [(-s|--size)=<MB|GB>]
[(-a|--active)]
[(-t|--terse)]
=head1 OPTIONS =head1 OPTIONS
@ -180,6 +212,10 @@ vgs.pl - Show volume group information in a terse way (Linux style).
S< >Show the help page. S< >Show the help page.
=item -a | --active
S< >Hide non-active VGs. Cannot be used in conjunction with --vg.
=item -g | --vg =item -g | --vg
S< >Display information for a specific volume group. S< >Display information for a specific volume group.
@ -188,11 +224,16 @@ S< >Display information for a specific volume group.
S< >Show volume group sizes in MB or GB (default is GB). S< >Show volume group sizes in MB or GB (default is GB).
=item -t | --terse
S< >Do not show header and footer information.
=head1 AUTHOR =head1 AUTHOR
(c) KUDOS BVBA - Patrick Van der Veken (c) KUDOS BVBA - Patrick Van der Veken
=head1 history =head1 history
@(#) 2016-04-12: VRF 1.0.0: first version [Patrick Van der Veken] @(#) 2016-04-12: first version [Patrick Van der Veken]
@(#) 2016-04-27: VRF 1.0.1: added 'VG Major/Minor' [Patrick Van der Veken] @(#) 2016-04-27: added 'VG Major/Minor' [Patrick Van der Veken]
@(#) 2017-12-12: made VG name display size dynamic, added --active, added --terse [Patrick Van der Veken]