]>
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.",
99 username
=> get_standard_option
('pmg-email-address', {
100 description
=> "Username or API token ID on the Proxmox Backup Server"
102 fingerprint
=> get_standard_option
('fingerprint-sha256'),
104 description
=> "Specify when to notify via e-mail",
106 enum
=> [ 'always', 'error', 'never' ],
109 'include-statistics' => {
110 description
=> "Include statistics in scheduled backups",
122 namespace
=> { optional
=> 1 },
123 disable
=> { optional
=> 1 },
124 username
=> { optional
=> 1 },
125 password
=> { optional
=> 1 },
126 fingerprint
=> { optional
=> 1 },
127 notify
=> { optional
=> 1 },
128 'include-statistics' => { optional
=> 1 },
129 'keep-last' => { optional
=> 1 },
130 'keep-hourly' => { optional
=> 1 },
131 'keep-daily' => { optional
=> 1 },
132 'keep-weekly' => { optional
=> 1 },
133 'keep-monthly' => { optional
=> 1 },
134 'keep-yearly' => { optional
=> 1 },
147 my ($self, $remote) = @_;
149 my $remote_cfg = $self->{ids
}->{$remote};
153 foreach my $keep_opt (keys %prune_properties) {
154 if (defined($remote_cfg->{$keep_opt})) {
156 $res->{$keep_opt} = $remote_cfg->{$keep_opt};
159 return $pruning_setup ?
$res : undef;
165 my $class = ref($type) || $type;
167 my $cfg = PVE
::INotify
::read_file
($inotify_file_id);
169 $cfg->{secret_dir
} = $secret_dir;
171 return bless $cfg, $class;
177 PVE
::INotify
::write_file
($inotify_file_id, $self);
181 my ($code, $errmsg) = @_;
183 my $lockfile = "/var/lock/pmgpbsconfig.lck";
185 my $p = PVE
::Tools
::lock_file
($lockfile, undef, $code);
187 $errmsg ?
die "$errmsg: $err" : die $err;
191 __PACKAGE__-
>register();
194 sub read_pmg_pbs_conf
{
195 my ($filename, $fh) = @_;
197 local $/ = undef; # slurp mode
199 my $raw = defined($fh) ?
<$fh> : '';
201 return __PACKAGE__-
>parse_config($filename, $raw);
204 sub write_pmg_pbs_conf
{
205 my ($filename, $fh, $cfg) = @_;
207 my $raw = __PACKAGE__-
>write_config($filename, $cfg);
209 PVE
::Tools
::safe_print
($filename, $fh, $raw);
212 PVE
::INotify
::register_file
(
216 \
&write_pmg_pbs_conf
,
218 always_call_parser
=> 1