]>
git.proxmox.com Git - pmg-api.git/blob - src/PMG/PBSConfig.pm
1 package PMG
::PBSConfig
;
3 # section config implementation for PBS integration in PMG
8 use PVE
::Tools
qw(extract_param);
9 use PVE
::SectionConfig
;
10 use PVE
::JSONSchema
qw(get_standard_option);
13 use base
qw(PVE::SectionConfig);
15 my $inotify_file_id = 'pmg-pbs.conf';
16 my $secret_dir = '/etc/pmg/pbs';
17 my $config_filename = "${secret_dir}/pbs.conf";
21 type
=> 'integer', minimum
=> '0',
22 format_description
=> 'N',
25 my %prune_properties = (
28 description
=> 'Keep the last <N> backups.',
32 description
=> 'Keep backups for the last <N> different hours. If there is'
33 .' more than one backup for a single hour, only the latest one is kept.'
37 description
=> 'Keep backups for the last <N> different days. If there is'
38 .' more than one backup for a single day, only the latest one is kept.'
42 description
=> 'Keep backups for the last <N> different weeks. If there is'
43 .'more than one backup for a single week, only the latest one is kept.'
47 description
=> 'Keep backups for the last <N> different months. If there is'
48 .' more than one backup for a single month, only the latest one is kept.'
52 description
=> 'Keep backups for the last <N> different years. If there is'
53 .' more than one backup for a single year, only the latest one is kept.'
59 type
=> { description
=> "Section type." },
61 description
=> "Proxmox Backup Server ID.",
62 type
=> 'string', format
=> 'pve-configid',
67 my $SAFE_ID_RE = '(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)';
68 my $NS_RE = "(?:${SAFE_ID_RE}/){0,7}(?:${SAFE_ID_RE})?";
73 description
=> "Proxmox Backup Server datastore name.",
74 pattern
=> $SAFE_ID_RE,
79 description
=> "Proxmox Backup Server namespace in the datastore, defaults to the root NS.",
84 description
=> "Proxmox Backup Server address.",
85 type
=> 'string', format
=> 'address',
89 description
=> "Flag to disable (deactivate) the entry.",
94 description
=> "Password or API token secret for the user on the"
95 ." Proxmox Backup Server.",
100 description
=> "Non-default port for Proxmox Backup Server.",
107 username
=> get_standard_option
('pmg-email-address', {
108 description
=> "Username or API token ID on the Proxmox Backup Server"
110 fingerprint
=> get_standard_option
('fingerprint-sha256'),
112 description
=> "Specify when to notify via e-mail",
114 enum
=> [ 'always', 'error', 'never' ],
117 'include-statistics' => {
118 description
=> "Include statistics in scheduled backups",
130 namespace
=> { optional
=> 1 },
131 disable
=> { optional
=> 1 },
132 username
=> { optional
=> 1 },
133 password
=> { optional
=> 1 },
134 port
=> { optional
=> 1 },
135 fingerprint
=> { optional
=> 1 },
136 notify
=> { optional
=> 1 },
137 'include-statistics' => { optional
=> 1 },
138 'keep-last' => { optional
=> 1 },
139 'keep-hourly' => { optional
=> 1 },
140 'keep-daily' => { optional
=> 1 },
141 'keep-weekly' => { optional
=> 1 },
142 'keep-monthly' => { optional
=> 1 },
143 'keep-yearly' => { optional
=> 1 },
156 my ($self, $remote) = @_;
158 my $remote_cfg = $self->{ids
}->{$remote};
162 foreach my $keep_opt (keys %prune_properties) {
163 if (defined($remote_cfg->{$keep_opt})) {
165 $res->{$keep_opt} = $remote_cfg->{$keep_opt};
168 return $pruning_setup ?
$res : undef;
174 my $class = ref($type) || $type;
176 my $cfg = PVE
::INotify
::read_file
($inotify_file_id);
178 $cfg->{secret_dir
} = $secret_dir;
180 return bless $cfg, $class;
186 PVE
::INotify
::write_file
($inotify_file_id, $self);
190 my ($code, $errmsg) = @_;
192 my $lockfile = "/var/lock/pmgpbsconfig.lck";
194 my $p = PVE
::Tools
::lock_file
($lockfile, undef, $code);
196 $errmsg ?
die "$errmsg: $err" : die $err;
200 __PACKAGE__-
>register();
203 sub read_pmg_pbs_conf
{
204 my ($filename, $fh) = @_;
206 my $raw = defined($fh) ?
do { local $/ = undef; <$fh> } : '';
208 return __PACKAGE__-
>parse_config($filename, $raw);
211 sub write_pmg_pbs_conf
{
212 my ($filename, $fh, $cfg) = @_;
214 my $raw = __PACKAGE__-
>write_config($filename, $cfg);
216 PVE
::Tools
::safe_print
($filename, $fh, $raw);
219 PVE
::INotify
::register_file
(
223 \
&write_pmg_pbs_conf
,
225 always_call_parser
=> 1