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