]> git.proxmox.com Git - pve-manager.git/blob - PVE/Jobs/VZDump.pm
fix #4026: add 'repeat-missed' option for jobs
[pve-manager.git] / PVE / Jobs / VZDump.pm
1 package PVE::Jobs::VZDump;
2
3 use strict;
4 use warnings;
5
6 use PVE::INotify;
7 use PVE::VZDump::Common;
8 use PVE::API2::VZDump;
9 use PVE::Cluster;
10 use PVE::JSONSchema;
11
12 use base qw(PVE::Jobs::Plugin);
13
14 sub type {
15 return 'vzdump';
16 }
17
18 my $props = PVE::VZDump::Common::json_config_properties();
19
20 sub properties {
21 return $props;
22 }
23
24 sub options {
25 my $options = {
26 enabled => { optional => 1 },
27 schedule => {},
28 comment => { optional => 1 },
29 'repeat-missed' => { optional => 1 },
30 };
31 foreach my $opt (keys %$props) {
32 if ($props->{$opt}->{optional}) {
33 $options->{$opt} = { optional => 1 };
34 } else {
35 $options->{$opt} = {};
36 }
37 }
38
39 return $options;
40 }
41
42 sub decode_value {
43 my ($class, $type, $key, $value) = @_;
44
45 if ($key eq 'prune-backups' && !ref($value)) {
46 $value = PVE::JSONSchema::parse_property_string(
47 'prune-backups',
48 $value,
49 );
50 }
51
52 return $value;
53 }
54
55 sub encode_value {
56 my ($class, $type, $key, $value) = @_;
57
58 if ($key eq 'prune-backups' && ref($value) eq 'HASH') {
59 $value = PVE::JSONSchema::print_property_string(
60 $value,
61 'prune-backups',
62 );
63 }
64
65 return $value;
66 }
67
68 sub run {
69 my ($class, $conf) = @_;
70
71 # remove all non vzdump related options
72 foreach my $opt (keys %$conf) {
73 delete $conf->{$opt} if !defined($props->{$opt});
74 }
75
76 my $retention = $conf->{'prune-backups'};
77 if ($retention && ref($retention) eq 'HASH') { # fixup, its required as string parameter
78 $conf->{'prune-backups'} = PVE::JSONSchema::print_property_string($retention, 'prune-backups');
79 }
80
81 $conf->{quiet} = 1; # do not write to stdout/stderr
82
83 PVE::Cluster::cfs_update(); # refresh vmlist
84
85 return PVE::API2::VZDump->vzdump($conf);
86 }
87
88 1;