storage: add volume_support_qemu_snapshot
Returns if the volume is supporting qemu snapshot: 'internal' : do the snapshot with qemu internal snapshot 'external' : do the snapshot with qemu external snapshot undef : does not support qemu snapshot Signed-off-by: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
This commit is contained in:
committed by
Wolfgang Bumiller
parent
5f916079ea
commit
a8d8bdf9ef
@ -29,6 +29,14 @@ Future changes should be documented in here.
|
||||
* Introduce rename_snapshot() plugin method
|
||||
This method allow to rename a vm disk snapshot name to a different snapshot name.
|
||||
|
||||
* Introduce volume_support_qemu_snapshot() plugin method
|
||||
This method is used to known if the a snapshot need to be done by qemu
|
||||
or by the storage api.
|
||||
returned values are :
|
||||
'internal' : support snapshot with qemu internal snapshot
|
||||
'external' : support snapshot with qemu external snapshot
|
||||
undef : don't support qemu snapshot
|
||||
|
||||
## Version 11:
|
||||
|
||||
* Allow declaring storage features via plugin data
|
||||
|
||||
@ -2370,6 +2370,21 @@ sub rename_snapshot {
|
||||
);
|
||||
}
|
||||
|
||||
sub volume_support_qemu_snapshot {
|
||||
my ($cfg, $volid) = @_;
|
||||
|
||||
my ($storeid, $volname) = parse_volume_id($volid, 1);
|
||||
|
||||
if ($storeid) {
|
||||
my $scfg = storage_config($cfg, $storeid);
|
||||
|
||||
my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
|
||||
|
||||
return $plugin->volume_support_qemu_snapshot($storeid, $scfg, $volname);
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
||||
# Various io-heavy operations require io/bandwidth limits which can be
|
||||
# configured on multiple levels: The global defaults in datacenter.cfg, and
|
||||
# per-storage overrides. When we want to do a restore from storage A to storage
|
||||
|
||||
@ -314,4 +314,14 @@ sub get_import_metadata {
|
||||
};
|
||||
}
|
||||
|
||||
sub volume_support_qemu_snapshot {
|
||||
my ($class, $storeid, $scfg, $volname) = @_;
|
||||
|
||||
my $format = ($class->parse_volname($volname))[6];
|
||||
return if $format ne 'qcow2';
|
||||
|
||||
my $type = $scfg->{'external-snapshots'} ? 'external' : 'internal';
|
||||
return $type;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
@ -872,4 +872,11 @@ sub rename_snapshot {
|
||||
die "rename_snapshot is not implemented for $class";
|
||||
}
|
||||
|
||||
sub volume_support_qemu_snapshot {
|
||||
my ($class, $storeid, $scfg, $volname) = @_;
|
||||
|
||||
my $format = ($class->parse_volname($volname))[6];
|
||||
return 'external' if $format eq 'qcow2';
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
@ -2262,6 +2262,26 @@ sub new_backup_provider {
|
||||
die "implement me if enabling the feature 'backup-provider' in plugindata()->{features}\n";
|
||||
}
|
||||
|
||||
=pod
|
||||
|
||||
=head3 volume_support_qemu_snapshot
|
||||
|
||||
$blockdev = $plugin->volume_support_qemu_snapshot($storeid, $scfg, $volname)
|
||||
|
||||
Returns a string with the type of snapshot that qemu can do for a specific volume
|
||||
|
||||
'internal' : support snapshot with qemu internal snapshot
|
||||
'external' : support snapshot with qemu external snapshot
|
||||
undef : don't support qemu snapshot
|
||||
=cut
|
||||
|
||||
sub volume_support_qemu_snapshot {
|
||||
my ($class, $storeid, $scfg, $volname) = @_;
|
||||
|
||||
my $format = ($class->parse_volname($volname))[6];
|
||||
return 'internal' if $format eq 'qcow2';
|
||||
}
|
||||
|
||||
sub config_aware_base_mkdir {
|
||||
my ($class, $scfg, $path) = @_;
|
||||
|
||||
|
||||
@ -1063,4 +1063,10 @@ sub rename_snapshot {
|
||||
die "rename_snapshot is not implemented for $class";
|
||||
}
|
||||
|
||||
sub volume_support_qemu_snapshot {
|
||||
my ($class, $storeid, $scfg, $volname) = @_;
|
||||
|
||||
return 'internal' if !$scfg->{krbd};
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
Reference in New Issue
Block a user