[pve-devel] [PATCH v3 pve-manager] Pretty format the output of multiple files in a directory

Emmanuel Kasper e.kasper at proxmox.com
Thu Oct 29 14:35:16 CET 2015


Also, don't "cat" non existing files
---
 bin/pvereport | 42 ++++++++++++++++++++++++++++++------------
 1 file changed, 30 insertions(+), 12 deletions(-)

diff --git a/bin/pvereport b/bin/pvereport
index 514cc9a..0e2fb3d 100755
--- a/bin/pvereport
+++ b/bin/pvereport
@@ -3,19 +3,31 @@
 use strict;
 use warnings;
 use PVE::pvecfg;
+use PVE::Tools;
 
 ($> == 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', 'grep --max-count=1 "model name" /proc/cpuinfo' );
+  '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', 'grep . /etc/pve/qemu-server/*');
+my @machines = ('qm list', sub { dir2text('/etc/pve/qemu-server/', '\d.*conf') });
 
-my @net = ('ifconfig', 'cat /etc/network/interfaces', 'grep . /etc/pve/firewall/*',
+my @net = ('ifconfig', 'cat /etc/network/interfaces', sub { dir2text('/etc/pve/firewall/', '.*fw') },
   'iptables-save');
 
 my @cluster = ('pvecm nodes', 'pvecm status');
@@ -23,11 +35,12 @@ my @cluster = ('pvecm nodes', 'pvecm status');
 my @bios = ('dmidecode -t bios');
 
 if (PVE::pvecfg::version() >= 4.0) {
-    push @machines, 'grep . /etc/pve/lxc/*' ;
-    push @cluster, 'cat /etc/pve/corosync.conf' ;
+    push @cluster, 'cat /etc/pve/corosync.conf 2> /dev/null' ;
+    push @machines, sub { dir2text('/etc/pve/lxc/', '\d.*conf') };
 } else {
-    push @machines, 'grep . /etc/pve/openvz/*' ;
-    push @cluster,  'clustat', 'cat /etc/cluster.conf' ;
+    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 = {
@@ -65,9 +78,9 @@ my @global_report = ($general_report, $storage_report, $volume_report, $net_repo
 # 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 ($shell_command) = @_;
-    print "$shell_command \n";
-    system $shell_command;
+    my ($command) = @_;
+    print "# $command \n";
+    system $command;
     print "\n";
 }
 
@@ -76,8 +89,13 @@ foreach my $subreport (@global_report) {
     my @commands = @{$subreport->{'commands'}};
 
     print "==== ".$title." ====\n";
-    foreach my $shell_command (@commands) {
-	do_execute($shell_command);
+    foreach my $command (@commands) {
+	if (ref $command eq 'CODE') {
+	    &$command;
+	} else {
+	   do_execute($command);
+	   next;
+	}
     }
 }
 
-- 
2.1.4





More information about the pve-devel mailing list