[pve-devel] [PATCH v2 pve-manager 1/2] Move pvereport functionality into a separate PVE package

Emmanuel Kasper e.kasper at proxmox.com
Tue Nov 3 15:00:12 CET 2015


---
 PVE/Makefile  |   1 +
 PVE/Report.pm | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 bin/pvereport |  95 ++--------------------------------------------------
 3 files changed, 108 insertions(+), 93 deletions(-)
 create mode 100644 PVE/Report.pm

diff --git a/PVE/Makefile b/PVE/Makefile
index 98ae341..5472580 100644
--- a/PVE/Makefile
+++ b/PVE/Makefile
@@ -15,6 +15,7 @@ PERLSOURCE = 			\
 	APLInfo.pm		\
 	AutoBalloon.pm		\
 	CephTools.pm		\
+	Report.pm		\
 	VZDump.pm
 
 all: pvecfg.pm ${SUBDIRS}
diff --git a/PVE/Report.pm b/PVE/Report.pm
new file mode 100644
index 0000000..4d15ef5
--- /dev/null
+++ b/PVE/Report.pm
@@ -0,0 +1,105 @@
+package PVE::Report;
+
+use strict;
+use warnings;
+use PVE::pvecfg;
+use PVE::Tools;
+
+my $report;
+
+my @general = ('hostname', 'pveversion --verbose', 'cat /etc/hosts', 'top -b -n 1  | head -n 15',
+  'pvesubscription get', 'lscpu');
+
+my @storage = ('cat /etc/pve/storage.cfg', 'pvesm status', 'cat /etc/fstab', 'mount', 'df --human');
+
+my @volumes = ('lvdisplay', 'vgdisplay', 'zpool status', 'zfs list');
+
+my @machines = ('qm list', sub { dir2text('/etc/pve/qemu-server/', '\d.*conf') });
+
+my @net = ('ifconfig', 'cat /etc/network/interfaces', sub { dir2text('/etc/pve/firewall/', '.*fw') },
+  'iptables-save');
+
+my @cluster = ('pvecm nodes', 'pvecm status');
+
+my @bios = ('dmidecode -t bios');
+
+if (PVE::pvecfg::version() >= 4.0) {
+    push @cluster, 'cat /etc/pve/corosync.conf 2> /dev/null' ;
+    push @machines, sub { dir2text('/etc/pve/lxc/', '\d.*conf') };
+} else {
+    push @general, 'grep --max-count=1 "model name" /proc/cpuinfo';
+    push @machines, sub { dir2text('/etc/pve/openvz/', '\d.*conf') };
+    push @cluster,  'clustat', 'cat /etc/cluster.conf 2> /dev/null';
+}
+
+my $general_report = {
+    title => 'general system info',
+    commands => \@general,
+};
+
+my $storage_report = {
+    title => 'info about storage (lvm and zfs)',
+    commands => \@storage,
+};
+
+my $volume_report = {
+    title => 'info about virtual machines',
+    commands => \@machines,
+};
+
+my $net_report = {
+    title => 'info about network and firewall',
+    commands => \@net,
+};
+
+my $cluster_report = {
+    title => 'info about clustering',
+    commands => \@cluster,
+};
+
+my $bios_report = {
+    title => 'info about bios',
+    commands => \@bios,
+};
+
+my @global_report = ($general_report, $storage_report, $volume_report, $net_report, $cluster_report, $bios_report);
+
+# output the content of all the files of a directory
+sub dir2text {
+    my ($target_dir, $regexp) = @_;
+
+    PVE::Tools::dir_glob_foreach($target_dir, $regexp, sub {
+	my ($file) = @_;
+	$report .=  "# cat $target_dir$file\n";
+	$report .= PVE::Tools::file_get_contents($target_dir.$file)."\n";
+    });
+}
+
+# execute commands and display their output as if they've been done on a interactive shell
+# so the local sysadmin can reproduce what we're doing
+sub do_execute {
+    my ($command) = @_;
+    $report .= "# $command \n";
+    open (COMMAND, "$command 2>&1 |");
+    while (<COMMAND>) {
+	$report .= $_;
+    }
+}
+
+sub generate {
+    foreach my $subreport (@global_report) {
+	my $title = $subreport->{'title'};
+	my @commands = @{$subreport->{'commands'}};
+
+	$report .= "\n==== $title ====\n";
+	foreach my $command (@commands) {
+	    if (ref $command eq 'CODE') {
+		&$command;
+	    } else {
+		do_execute($command);
+		next;
+	    }
+	}
+    }
+return $report;
+}
diff --git a/bin/pvereport b/bin/pvereport
index 0e2fb3d..e7e7f83 100755
--- a/bin/pvereport
+++ b/bin/pvereport
@@ -2,102 +2,11 @@
 
 use strict;
 use warnings;
-use PVE::pvecfg;
-use PVE::Tools;
+use PVE::Report;
 
 ($> == 0 ) || die "please run as root\n";
 
-# output the content of all the files of a directory
-sub dir2text {
-    my ($target_dir, $regexp) = @_;
-
-    PVE::Tools::dir_glob_foreach($target_dir, $regexp, sub {
-        my ($file) = @_;
-        print "# cat $target_dir$file\n";
-        print PVE::Tools::file_get_contents($target_dir.$file)."\n";
-    });
-}
-
-my @general = ('hostname', 'pveversion --verbose', 'cat /etc/hosts', 'top -b -n 1  | head -n 15',
-  'pvesubscription get', 'lscpu');
-
-my @storage = ('cat /etc/pve/storage.cfg', 'pvesm status', 'cat /etc/fstab', 'mount', 'df --human');
-
-my @volumes = ('lvdisplay', 'vgdisplay', 'zpool status', 'zfs list');
-
-my @machines = ('qm list', sub { dir2text('/etc/pve/qemu-server/', '\d.*conf') });
-
-my @net = ('ifconfig', 'cat /etc/network/interfaces', sub { dir2text('/etc/pve/firewall/', '.*fw') },
-  'iptables-save');
-
-my @cluster = ('pvecm nodes', 'pvecm status');
-
-my @bios = ('dmidecode -t bios');
-
-if (PVE::pvecfg::version() >= 4.0) {
-    push @cluster, 'cat /etc/pve/corosync.conf 2> /dev/null' ;
-    push @machines, sub { dir2text('/etc/pve/lxc/', '\d.*conf') };
-} else {
-    push @general, 'grep --max-count=1 "model name" /proc/cpuinfo';
-    push @machines, sub { dir2text('/etc/pve/openvz/', '\d.*conf') };
-    push @cluster,  'clustat', 'cat /etc/cluster.conf 2> /dev/null';
-}
-
-my $general_report = {
-    title => 'general system info',
-    commands => \@general,
-};
-
-my $storage_report = {
-    title => 'info about storage (lvm and zfs)',
-    commands => \@storage,
-};
-
-my $volume_report = {
-    title => 'info about virtual machines',
-    commands => \@machines,
-};
-
-my $net_report = {
-    title => 'info about network and firewall',
-    commands => \@net,
-};
-
-my $cluster_report = {
-    title => 'info about clustering',
-    commands => \@cluster,
-};
-
-my $bios_report = {
-    title => 'info about bios',
-    commands => \@bios,
-};
-
-my @global_report = ($general_report, $storage_report, $volume_report, $net_report, $cluster_report, $bios_report);
-
-# execute commands and display their output as if they've been done on a interactive shell
-# so the local sysadmin can reproduce what we're doing
-sub do_execute {
-    my ($command) = @_;
-    print "# $command \n";
-    system $command;
-    print "\n";
-}
-
-foreach my $subreport (@global_report) {
-    my $title = $subreport->{'title'};
-    my @commands = @{$subreport->{'commands'}};
-
-    print "==== ".$title." ====\n";
-    foreach my $command (@commands) {
-	if (ref $command eq 'CODE') {
-	    &$command;
-	} else {
-	   do_execute($command);
-	   next;
-	}
-    }
-}
+print PVE::Report::generate();
 
 __END__
 
-- 
2.1.4




More information about the pve-devel mailing list