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

Signed-off-by: Christian Ebner <c.eb...@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

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

Reply via email to