]> git.proxmox.com Git - pve-guest-common.git/commitdiff
vzdump: re-factor remove_vmid_from_jobs to checking a single job
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Sat, 12 Nov 2022 13:18:06 +0000 (14:18 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Sat, 12 Nov 2022 13:18:08 +0000 (14:18 +0100)
that way we'll be able to re-use it for adding support of cleaning
out vzdump jobs from the newish job.cfg

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
src/PVE/VZDump/Plugin.pm

index 73bbae16d738b0268f0f0f40e8c6cf1ce4bd16a4..421c53066c4b343ab3a1a055c5c1371d8c62f705 100644 (file)
@@ -176,30 +176,24 @@ sub remove_vmid_from_list {
     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;
+sub remove_vmid_from_job {
+    my ($job, $exclude_vmid) = @_;
+
+    if (defined $job->{vmid}) {
+       if (my $list = remove_vmid_from_list($job->{vmid}, $exclude_vmid)) {
+           $job->{vmid} = $list;
+       } else {
+           return undef;
+       }
+    } elsif (defined $job->{exclude}) {
+       my $list = remove_vmid_from_list($job->{exclude}, $exclude_vmid);
+       if ($list) {
+           $job->{exclude} = $list;
        } else {
-           push @$updated_jobs, $job;
+           delete $job->{exclude};
        }
     }
-    return $updated_jobs;
+    return $job;
 }
 
 sub remove_vmid_from_backup_jobs {
@@ -208,10 +202,17 @@ sub remove_vmid_from_backup_jobs {
     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);
+
+       my $updated_jobs = [];
+       foreach my $job ($jobs->@*) {
+           $job = remove_vmid_from_job($job, $vmid);
+           push @$updated_jobs, $job if $job;
+       }
+       $vzdump_jobs->{jobs} = $updated_jobs;
+
        cfs_write_file('vzdump.cron', $vzdump_jobs);
     });
-    die "$@" if ($@);
+    die "$@" if $@;
 }
 
 1;