Introduce prune-backups property for directory-based storages
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
This commit is contained in:
committed by
Thomas Lamprecht
parent
0dffc7ba55
commit
3353698f45
@ -134,6 +134,7 @@ sub options {
|
||||
nodes => { optional => 1 },
|
||||
disable => { optional => 1 },
|
||||
maxfiles => { optional => 1 },
|
||||
'prune-backups' => { optional => 1 },
|
||||
content => { optional => 1 },
|
||||
format => { optional => 1 },
|
||||
username => { optional => 1 },
|
||||
|
||||
@ -150,6 +150,7 @@ sub options {
|
||||
fuse => { optional => 1 },
|
||||
bwlimit => { optional => 1 },
|
||||
maxfiles => { optional => 1 },
|
||||
'prune-backups' => { optional => 1 },
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@ -49,10 +49,11 @@ sub properties {
|
||||
sub options {
|
||||
return {
|
||||
path => { fixed => 1 },
|
||||
nodes => { optional => 1 },
|
||||
nodes => { optional => 1 },
|
||||
shared => { optional => 1 },
|
||||
disable => { optional => 1 },
|
||||
maxfiles => { optional => 1 },
|
||||
maxfiles => { optional => 1 },
|
||||
'prune-backups' => { optional => 1 },
|
||||
content => { optional => 1 },
|
||||
format => { optional => 1 },
|
||||
mkdir => { optional => 1 },
|
||||
|
||||
@ -129,9 +129,10 @@ sub options {
|
||||
server2 => { optional => 1 },
|
||||
volume => { fixed => 1 },
|
||||
transport => { optional => 1 },
|
||||
nodes => { optional => 1 },
|
||||
nodes => { optional => 1 },
|
||||
disable => { optional => 1 },
|
||||
maxfiles => { optional => 1 },
|
||||
maxfiles => { optional => 1 },
|
||||
'prune-backups' => { optional => 1 },
|
||||
content => { optional => 1 },
|
||||
format => { optional => 1 },
|
||||
mkdir => { optional => 1 },
|
||||
|
||||
@ -79,9 +79,10 @@ sub options {
|
||||
path => { fixed => 1 },
|
||||
server => { fixed => 1 },
|
||||
export => { fixed => 1 },
|
||||
nodes => { optional => 1 },
|
||||
nodes => { optional => 1 },
|
||||
disable => { optional => 1 },
|
||||
maxfiles => { optional => 1 },
|
||||
maxfiles => { optional => 1 },
|
||||
'prune-backups' => { optional => 1 },
|
||||
options => { optional => 1 },
|
||||
content => { optional => 1 },
|
||||
format => { optional => 1 },
|
||||
|
||||
@ -55,6 +55,7 @@ sub options {
|
||||
password => { optional => 1 },
|
||||
'encryption-key' => { optional => 1 },
|
||||
maxfiles => { optional => 1 },
|
||||
'prune-backups' => { optional => 1 },
|
||||
fingerprint => { optional => 1 },
|
||||
};
|
||||
}
|
||||
|
||||
@ -10,7 +10,7 @@ use File::Basename;
|
||||
use File::stat qw();
|
||||
|
||||
use PVE::Tools qw(run_command);
|
||||
use PVE::JSONSchema qw(get_standard_option);
|
||||
use PVE::JSONSchema qw(get_standard_option register_standard_option);
|
||||
use PVE::Cluster qw(cfs_register_file);
|
||||
|
||||
use JSON;
|
||||
@ -43,6 +43,62 @@ cfs_register_file ('storage.cfg',
|
||||
sub { __PACKAGE__->parse_config(@_); },
|
||||
sub { __PACKAGE__->write_config(@_); });
|
||||
|
||||
my %prune_option = (
|
||||
optional => 1,
|
||||
type => 'integer', minimum => '0',
|
||||
format_description => 'N',
|
||||
);
|
||||
|
||||
my $prune_backups_format = {
|
||||
'keep-last' => {
|
||||
%prune_option,
|
||||
description => 'Keep the last <N> backups.',
|
||||
},
|
||||
'keep-hourly' => {
|
||||
%prune_option,
|
||||
description => 'Keep backups for the last <N> different hours. If there is more' .
|
||||
'than one backup for a single hour, only the latest one is kept.'
|
||||
},
|
||||
'keep-daily' => {
|
||||
%prune_option,
|
||||
description => 'Keep backups for the last <N> different days. If there is more' .
|
||||
'than one backup for a single day, only the latest one is kept.'
|
||||
},
|
||||
'keep-weekly' => {
|
||||
%prune_option,
|
||||
description => 'Keep backups for the last <N> different weeks. If there is more' .
|
||||
'than one backup for a single week, only the latest one is kept.'
|
||||
},
|
||||
'keep-monthly' => {
|
||||
%prune_option,
|
||||
description => 'Keep backups for the last <N> different months. If there is more' .
|
||||
'than one backup for a single month, only the latest one is kept.'
|
||||
},
|
||||
'keep-yearly' => {
|
||||
%prune_option,
|
||||
description => 'Keep backups for the last <N> different years. If there is more' .
|
||||
'than one backup for a single year, only the latest one is kept.'
|
||||
},
|
||||
};
|
||||
PVE::JSONSchema::register_format('prune-backups', $prune_backups_format, \&validate_prune_backups);
|
||||
sub validate_prune_backups {
|
||||
my ($keep) = @_;
|
||||
|
||||
die "at least one keep-option must be set and positive\n"
|
||||
if !grep { $_ } values %{$keep};
|
||||
|
||||
return $keep;
|
||||
}
|
||||
register_standard_option('prune-backups', {
|
||||
description => "The retention options with shorter intervals are processed first " .
|
||||
"with --keep-last being the very first one. Each option covers a " .
|
||||
"specific period of time. We say that backups within this period " .
|
||||
"are covered by this option. The next option does not take care " .
|
||||
"of already covered backups and only considers older backups.",
|
||||
optional => 1,
|
||||
type => 'string',
|
||||
format => 'prune-backups',
|
||||
});
|
||||
|
||||
my $defaultData = {
|
||||
propertyList => {
|
||||
@ -68,6 +124,7 @@ my $defaultData = {
|
||||
minimum => 0,
|
||||
optional => 1,
|
||||
},
|
||||
'prune-backups' => get_standard_option('prune-backups'),
|
||||
shared => {
|
||||
description => "Mark storage as shared.",
|
||||
type => 'boolean',
|
||||
|
||||
Reference in New Issue
Block a user