[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