Added an option to disable a backup job while preserving its
settings. When a job is disabled a '#' is added in front of the vzdump
command in the vzdump.cron file. So the cron job still fires,
but only a comment gets executed. If we would comment out the cron job
a bit more changes to the parser would be needed.

Signed-off-by: Thomas Lamprecht <t.lampre...@proxmox.com>
---
 PVE/API2/Backup.pm | 25 ++++++++++++++++++++-----
 PVE/VZDump.pm      |  3 ++-
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/PVE/API2/Backup.pm b/PVE/API2/Backup.pm
index 990fb1e..e86b723 100644
--- a/PVE/API2/Backup.pm
+++ b/PVE/API2/Backup.pm
@@ -101,12 +101,13 @@ sub parse_vzdump_cron_config {
        next if $line =~ m/^\s*$/;
        next if $line =~ m/^PATH\s*=/; # we always overwrite path
 
-       if ($line =~ 
m|^(\d+)\s+(\d+)\s+\*\s+\*\s+(\S+)\s+root\s+(/\S+/)?vzdump(\s+(.*))?$|) {
+       if ($line =~ 
m|^(\d+)\s+(\d+)\s+\*\s+\*\s+(\S+)\s+root\s+(/\S+/)?(#)?vzdump(\s+(.*))?$|) {
            eval {
                my $minute = int($1);
                my $hour = int($2);
                my $dow = $3;
-               my $param = $6;
+               my $param = $7;
+               my $enabled = $5;
 
                my $dowhash = parse_dow($dow, 1);
                die "unable to parse day of week '$dow' in '$filename'\n" if 
!$dowhash;
@@ -114,6 +115,7 @@ sub parse_vzdump_cron_config {
                my $args = PVE::Tools::split_args($param);
                my $opts = PVE::JSONSchema::get_options($vzdump_properties, 
$args, 'vmid');
 
+               $opts->{enabled} = !defined($enabled);
                $opts->{id} = "$digest:$jid";
                $jid++;
                $opts->{starttime} = sprintf "%02d:%02d", $hour, $minute;
@@ -151,6 +153,7 @@ sub write_vzdump_cron_config {
 
     my $jobs = $cfg->{jobs} || [];
     foreach my $job (@$jobs) {
+       my $enabled = ($job->{enabled}) ? '' : '#';
        my $dh = parse_dow($job->{dow});
        my $dow;
        if ($dh->{mon} && $dh->{tue} && $dh->{wed} && $dh->{thu} &&
@@ -176,7 +179,7 @@ sub write_vzdump_cron_config {
 
        my $cmd = PVE::VZDump::command_line($job);
 
-       $out .= sprintf "$minute $hour * * %-11s root $cmd\n", $dow;
+       $out .= sprintf "$minute $hour * * %-11s root $enabled$cmd\n", $dow;
     }
 
     my $ejobs = $cfg->{ejobs} || [];
@@ -246,6 +249,12 @@ __PACKAGE__->register_method({
                description => "Day of week selection.",
                default => 'mon,tue,wed,thu,fri,sat,sun',
            },
+           enabled => {
+               type => 'boolean',
+               optional => 1,
+               description => "Enable or disable the job.",
+               default => '1',
+           },
        }),
     },
     returns => { type => 'null' },
@@ -258,7 +267,7 @@ __PACKAGE__->register_method({
        my $data = cfs_read_file('vzdump.cron');
 
        $param->{dow} = 'mon,tue,wed,thu,fri,sat,sun' if 
!defined($param->{dow});
-
+       $param->{enabled} = 1 if !defined($param->{enabled});
        PVE::VZDump::verify_vzdump_parameters($param, 1);
 
        push @{$data->{jobs}}, $param;
@@ -323,7 +332,7 @@ __PACKAGE__->register_method({
                type => 'string',
                description => "The job ID.",
                maxLength => 50,
-           }
+           },
        },
     },
     returns => { type => 'null' },
@@ -389,6 +398,12 @@ __PACKAGE__->register_method({
                description => "A list of settings you want to delete.",
                optional => 1,
            },
+           enabled => {
+               type => 'boolean',
+               optional => 1,
+               description => "Enable or disable the job.",
+               default => '1',
+           },
        }),
     },
     returns => { type => 'null' },
diff --git a/PVE/VZDump.pm b/PVE/VZDump.pm
index 61341ca..852a7d0 100644
--- a/PVE/VZDump.pm
+++ b/PVE/VZDump.pm
@@ -1293,7 +1293,8 @@ sub command_line {
     }
 
     foreach my $p (keys %$param) {
-       next if $p eq 'id' || $p eq 'vmid' || $p eq 'starttime' || $p eq 'dow' 
|| $p eq 'stdout';
+       next if $p eq 'id' || $p eq 'vmid' || $p eq 'starttime' ||
+               $p eq 'dow' || $p eq 'stdout' || $p eq 'enabled';
        my $v = $param->{$p};
        my $pd = $confdesc->{$p} || die "no such vzdump option '$p'\n";
        if ($p eq 'exclude-path') {
-- 
2.1.4

_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to