[pve-devel] [PATCH v3 guest-common 1/2] fix #1291: implement remove_vmid_from_backup_jobs
Thomas Lamprecht
t.lamprecht at proxmox.com
Wed Sep 4 16:41:37 CEST 2019
On 01.07.19 15:43, Christian Ebner wrote:
> remove_vmid_from_backup_jobs updates the vzdump.cron backup jobs,
> excluding the given vmid.
>
> Signed-off-by: Christian Ebner <c.ebner at 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;
^^^^^^^^^^^^^^^^^
above won't fly, that's a module from pve-manager and thus would create a cyclic
build dependency.. And I'd rather reduce than increase them ;)
The use is for the vzdump cron parser/writer which are cfs_registered in that
file.. So either we move that out to a module here (or even higher up) or do
something else, avoiding use of modules which are lower in the dependency chain.
>
> 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;
>
More information about the pve-devel
mailing list