diff --git a/mxproxmox/mxproxmox b/mxproxmox/mxproxmox index a8437af..d7e304e 100755 --- a/mxproxmox/mxproxmox +++ b/mxproxmox/mxproxmox @@ -15,6 +15,7 @@ usage: $0 cmd $0 client [cmd...] : call proxmox-backup-client (add key file if required) $0 tclient [cmd...] : same with workaround for reiserfs /tmp $0 active-jobs : list jobs active on server + $0 check-pbackup : cross-check pbackup and mxproxmox jobs Examples: @@ -248,6 +249,55 @@ sub cmd_local_backups { } } +sub cmd_check_pbackup { + + read_backup_list(); + + my %jobs; + for my $p ( + do_map('home', 'auto.home', 0), + do_map('cfdl', 'auto.confidential', 0), + do_map('prj', 'auto.project', 0), + do_map('pkg', 'auto.package', 0), + do_map('cfdl', 'auto.confidential', 0), + do_map('src', 'auto.src', 0), + ) { + my ($ident, $path) = @$p; + $jobs{$ident} = $path if $ident =~ /^home_/; + $jobs{$ident} = $path if exists $INCLUDE{$ident}; + } + + my %pbackup_jobs; + open my $pipe, '-|', '/project/admin/pbackup/bin/pbackup', 'parse-jobs' or die "/project/admin/pbackup/bin/pbackup: $!\n"; + for (<$pipe>) { + chomp; + my ($ident, $path) = split " ", $_, 2; + next if $ident =~ /^sys_/; + $path =~ s/^[a-z0-9]+://i; + $pbackup_jobs{$ident} = $path; + } + close $pipe or exit 1; + + print "\n\n# The following output war generated by `mxproxmox check-pbackup`:\n\n"; + + for my $ident (sort keys %jobs) { + if (!exists $pbackup_jobs{$ident}) { + print "# consider to remove $ident, because it is not a a pbackup job\n"; + } + } + print "\n"; + + for my $ident (sort keys %pbackup_jobs) { + if (exists $jobs{$ident}) { + if ($pbackup_jobs{$ident} ne $jobs{$ident}) { + warn "$ident: path differ. pbackup: ", $pbackup_jobs{$ident}, " proxmox: ", $jobs{$ident}, "\n"; + } + } else { + printf "# %-30s # consider to add, because its a pbackup job\n", $ident; + } + } +} + sub cmd_client { my @cmd = ('proxmox-backup-client', @_); if ( $_[0] =~ /^(catalog|restore|mount|map|backup)$/ ) { @@ -291,6 +341,9 @@ if ($cmd eq 'api') { read_cred_file(); init_ua(); cmd_active_jobs(@ARGV); +} elsif ($cmd eq 'check-pbackup') { + @ARGV==0 or die USAGE; + cmd_check_pbackup(@ARGV); } else { die USAGE; }