remove_vmid_from_backup_jobs updates the vzdump.cron backup jobs, excluding the given vmid.
Signed-off-by: Christian Ebner <c.eb...@proxmox.com> --- PVE/VZDump/Plugin.pm | 46 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/PVE/VZDump/Plugin.pm b/PVE/VZDump/Plugin.pm index 9933ef6..f415242 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,48 @@ sub cleanup { die "internal error"; # implement in subclass } +sub remove_vmid_from_list { + my ($list, $rm_vmid) = @_; + # this removes the given vmid from the list, if present + return join(',', grep { $_ ne $rm_vmid } PVE::Tools::split_list($list)); +} + +sub remove_vmid_from_jobs { + my ($jobs, $exclude_vmid) = @_; + + my $updated_jobs = []; + foreach my $job (@$jobs) { + if (defined $job->{vmid}) { + my $list = remove_vmid_from_list($job->{vmid}, $exclude_vmid); + if ($list) { + $job->{vmid} = $list; + push @$updated_jobs, $job; + } + } elsif (defined $job->{exclude}) { + my $list = remove_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_backup_jobs { + my ($vmid) = @_; + + cfs_lock_file('vzdump.cron', undef, sub { + my $vzdump_jobs = cfs_read_file('vzdump.cron'); + my $jobs = $vzdump_jobs->{jobs} || []; + $vzdump_jobs->{jobs} = remove_vmid_from_jobs($jobs, $vmid); + cfs_write_file('vzdump.cron', $vzdump_jobs); + }); + die "$@" if ($@); +} + 1; -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel