[pve-devel] [RFC guest-common 1/3] fix #1291: implement remove_vmid_from_cronjobs

Christian Ebner c.ebner at proxmox.com
Tue Jun 25 14:27:31 CEST 2019


remove_vmid_from_cronjobs updates the vzdump.cron backup jobs,
excluding the given vmid.

Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
---
 PVE/VZDump/Plugin.pm | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/PVE/VZDump/Plugin.pm b/PVE/VZDump/Plugin.pm
index 9933ef6..28f018b 100644
--- a/PVE/VZDump/Plugin.pm
+++ b/PVE/VZDump/Plugin.pm
@@ -7,6 +7,8 @@ use POSIX qw(strftime);
 
 use PVE::Tools;
 use PVE::SafeSyslog;
+use PVE::Cluster qw(cfs_read_file cfs_write_file cfs_lock_file);
+use PVE::API2::Backup;
 
 my $log_level = {
     err =>  'ERROR:',
@@ -168,4 +170,53 @@ sub cleanup {
     die "internal error"; # implement in subclass
 }
 
+sub exclude_vmid_from_list {
+    my ($list, $exclude_vmid) = @_;
+
+    my $updated_list = [];
+    foreach my $vmid (PVE::Tools::split_list($list)) {
+	push @$updated_list, $vmid if $vmid ne $exclude_vmid;
+    }
+    return join ",", @$updated_list;
+}
+
+sub exclude_vmid_from_jobs {
+    my ($jobs, $exclude_vmid) = @_;
+
+    my $updated_jobs = [];
+    foreach my $job (@$jobs) {
+	if (defined $job->{vmid}) {
+	    my $list = exclude_vmid_from_list($job->{vmid}, $exclude_vmid);
+	    if ($list) {
+		$job->{vmid} = $list;
+		push @$updated_jobs, $job;
+	    }
+	} elsif (defined $job->{exclude}) {
+	    my $list = exclude_vmid_from_list($job->{exclude}, $exclude_vmid);
+	    if ($list) {
+		$job->{exclude} = $list;
+	    } else {
+		delete $job->{exclude};
+	    }
+	    push @$updated_jobs, $job;
+	} else {
+	    push @$updated_jobs, $job;
+	}
+    }
+    return $updated_jobs;
+}
+
+sub remove_vmid_from_cronjobs {
+    my ($vmid) = @_;
+
+    my $update_cron = sub {
+	my $cron_cfg = cfs_read_file('vzdump.cron');
+	my $jobs = $cron_cfg->{jobs} || [];
+	$cron_cfg->{jobs} = exclude_vmid_from_jobs($jobs, $vmid);
+	cfs_write_file('vzdump.cron', $cron_cfg);
+    };
+    cfs_lock_file('vzdump.cron', undef, $update_cron);
+    die "$@" if ($@);
+}
+
 1;
-- 
2.11.0




More information about the pve-devel mailing list