1 package PVE
::VZDump
::Plugin
;
6 use POSIX
qw(strftime);
10 use PVE
::Cluster
qw(cfs_read_file cfs_write_file cfs_lock_file);
11 use PVE
::VZDump
::Common
; # register parser/writer for vzdump.cron
20 my ($mtype, $msg, $logfd, $syslog) = @_;
26 my $level = $log_level->{$mtype} ?
$mtype : 'err';
27 my $pre = $log_level->{$level};
29 my $timestr = strftime
("%F %H:%M:%S", CORE
::localtime);
31 syslog
($level, "$pre $msg") if $syslog;
33 foreach my $line (split (/\n/, $msg)) {
34 print STDERR
"$pre $line\n";
35 print $logfd "$timestr $pre $line\n" if $logfd;
40 my ($self, $logfd) = @_;
42 $self->{logfd
} = $logfd;
46 my ($self, $cmdstr, %param) = @_;
50 debugmsg
('info', $line, $self->{logfd
});
53 PVE
::Tools
::run_command
($cmdstr, %param, logfunc
=> $logfunc);
57 my ($self, $cmdstr, %param) = @_;
60 eval { $res = $self->cmd($cmdstr, %param); };
61 $self->logerr ($@) if $@;
66 my ($self, $level, $msg, $to_syslog) = @_;
68 debugmsg
($level, $msg, $self->{logfd
}, $to_syslog);
72 my ($self, $msg) = @_;
74 debugmsg
('info', $msg, $self->{logfd
}, 0);
78 my ($self, $msg) = @_;
80 debugmsg
('err', $msg, $self->{logfd
}, 0);
90 return [ keys %{$self->{vmlist
}} ] if $self->{vmlist
};
96 my ($self, $vmid) = @_;
98 die "internal error"; # implement in subclass
102 my ($self, $task, $vmid, $mode) = @_;
104 die "internal error"; # implement in subclass
108 my ($self, $vmid) = @_;
110 die "internal error"; # implement in subclass
114 my ($self, $vmid) = @_;
116 die "internal error"; # implement in subclass
120 my ($self, $task, $vmid) = @_;
122 die "internal error"; # implement in subclass
126 my ($self, $task, $vmid) = @_;
128 die "internal error"; # implement in subclass
132 my ($self, $task, $vmid) = @_;
134 die "internal error"; # implement in subclass
138 my ($self, $task, $vmid) = @_;
140 die "internal error"; # implement in subclass
144 my ($self, $task, $vmid) = @_;
146 die "internal error"; # implement in subclass
149 sub copy_data_phase2
{
150 my ($self, $task, $vmid) = @_;
152 die "internal error"; # implement in subclass
156 my ($self, $task, $vmid) = @_;
158 die "internal error"; # implement in subclass
162 my ($self, $task, $vmid, $filename, $comp) = @_;
164 die "internal error"; # implement in subclass
168 my ($self, $task, $vmid) = @_;
170 die "internal error"; # implement in subclass
173 sub remove_vmid_from_list
{
174 my ($list, $rm_vmid) = @_;
175 # this removes the given vmid from the list, if present
176 return join(',', grep { $_ ne $rm_vmid } PVE
::Tools
::split_list
($list));
179 sub remove_vmid_from_jobs
{
180 my ($jobs, $exclude_vmid) = @_;
182 my $updated_jobs = [];
183 foreach my $job (@$jobs) {
184 if (defined $job->{vmid
}) {
185 my $list = remove_vmid_from_list
($job->{vmid
}, $exclude_vmid);
187 $job->{vmid
} = $list;
188 push @$updated_jobs, $job;
190 } elsif (defined $job->{exclude
}) {
191 my $list = remove_vmid_from_list
($job->{exclude
}, $exclude_vmid);
193 $job->{exclude
} = $list;
195 delete $job->{exclude
};
197 push @$updated_jobs, $job;
199 push @$updated_jobs, $job;
202 return $updated_jobs;
205 sub remove_vmid_from_backup_jobs
{
208 cfs_lock_file
('vzdump.cron', undef, sub {
209 my $vzdump_jobs = cfs_read_file
('vzdump.cron');
210 my $jobs = $vzdump_jobs->{jobs
} || [];
211 $vzdump_jobs->{jobs
} = remove_vmid_from_jobs
($jobs, $vmid);
212 cfs_write_file
('vzdump.cron', $vzdump_jobs);