[pve-devel] [PATCH qemu-server 1/3] refactor finding of vmstate storage
Dominik Csapak
d.csapak at proxmox.com
Thu Dec 5 15:38:17 CET 2019
we need that on another place, so refactor in its own sub
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
PVE/QemuConfig.pm | 15 ++-------------
PVE/QemuServer.pm | 23 +++++++++++++++++++++++
2 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/PVE/QemuConfig.pm b/PVE/QemuConfig.pm
index f13c7b0..f69b5d8 100644
--- a/PVE/QemuConfig.pm
+++ b/PVE/QemuConfig.pm
@@ -135,21 +135,10 @@ sub __snapshot_save_vmstate {
# first, use explicitly configured storage
# either directly via API, or via conf
- my $target = $statestorage // $conf->{vmstatestorage};
+ my $target = $statestorage;
if (!$target) {
- my ($shared, $local);
- PVE::QemuServer::foreach_storage_used_by_vm($conf, sub {
- my ($sid) = @_;
- my $scfg = PVE::Storage::storage_config($storecfg, $sid);
- my $dst = $scfg->{shared} ? \$shared : \$local;
- $$dst = $sid if !$$dst || $scfg->{path}; # prefer file based storage
- });
-
- # second, use shared storage where VM has at least one disk
- # third, use local storage where VM has at least one disk
- # fall back to local storage
- $target = $shared // $local // 'local';
+ $target = PVE::QemuServer::find_vmstate_storage($conf, $storecfg);
}
my $defaults = PVE::QemuServer::load_defaults();
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 0d0e610..33b1d50 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -7205,6 +7205,29 @@ sub resolve_first_disk {
return $firstdisk;
}
+sub find_vmstate_storage {
+ my ($conf, $storecfg) = @_;
+
+ # return storage from conf if set
+ return $conf->{vmstatestorage} if $conf->{vmstatestorage};
+
+ my ($target, $shared, $local);
+
+ foreach_storage_used_by_vm($conf, sub {
+ my ($sid) = @_;
+ my $scfg = PVE::Storage::storage_config($storecfg, $sid);
+ my $dst = $scfg->{shared} ? \$shared : \$local;
+ $$dst = $sid if !$$dst || $scfg->{path}; # prefer file based storage
+ });
+
+ # second, use shared storage where VM has at least one disk
+ # third, use local storage where VM has at least one disk
+ # fall back to local storage
+ $target = $shared // $local // 'local';
+
+ return $target;
+}
+
sub generate_uuid {
my ($uuid, $uuid_str);
UUID::generate($uuid);
--
2.20.1
More information about the pve-devel
mailing list