]> git.proxmox.com Git - qemu-server.git/blobdiff - PVE/QemuConfig.pm
create_efidisk: poll the real size after volume creation
[qemu-server.git] / PVE / QemuConfig.pm
index edbf1a7c432f3c004cab4a028a3426396fbd7cf5..f13c7b05982940351a5e6029ba9b477113ed6765 100644 (file)
@@ -5,7 +5,10 @@ use warnings;
 
 use PVE::AbstractConfig;
 use PVE::INotify;
+use PVE::QemuServer::Helpers;
+use PVE::QemuServer::Monitor qw(mon_cmd);
 use PVE::QemuServer;
+use PVE::QemuServer::Machine;
 use PVE::Storage;
 use PVE::Tools;
 
@@ -14,14 +17,26 @@ use base qw(PVE::AbstractConfig);
 my $nodename = PVE::INotify::nodename();
 
 mkdir "/etc/pve/nodes/$nodename";
-my $confdir = "/etc/pve/nodes/$nodename/qemu-server";
-mkdir $confdir;
+mkdir "/etc/pve/nodes/$nodename/qemu-server";
 
 my $lock_dir = "/var/lock/qemu-server";
 mkdir $lock_dir;
 
 my $MAX_UNUSED_DISKS = 256;
 
+sub assert_config_exists_on_node {
+    my ($vmid, $node) = @_;
+
+    $node //= $nodename;
+
+    my $filename = __PACKAGE__->config_file($vmid, $node);
+    my $exists = -f $filename;
+
+    my $type = guest_type();
+    die "unable to find configuration file for $type $vmid on node '$node'\n"
+       if !$exists;
+}
+
 # BEGIN implemented abstract methods from PVE::AbstractConfig
 
 sub guest_type {
@@ -151,7 +166,7 @@ sub __snapshot_save_vmstate {
     $name .= ".raw" if $scfg->{path}; # add filename extension for file base storage
 
     my $statefile = PVE::Storage::vdisk_alloc($storecfg, $target, $vmid, 'raw', $name, $size*1024);
-    my $runningmachine = PVE::QemuServer::get_current_qemu_machine($vmid);
+    my $runningmachine = PVE::QemuServer::Machine::get_current_qemu_machine($vmid);
 
     if ($suspend) {
        $conf->{vmstate} = $statefile;
@@ -167,7 +182,7 @@ sub __snapshot_save_vmstate {
 
 sub __snapshot_check_running {
     my ($class, $vmid) = @_;
-    return PVE::QemuServer::check_running($vmid);
+    return PVE::QemuServer::Helpers::vm_running_locally($vmid);
 }
 
 sub __snapshot_check_freeze_needed {
@@ -185,10 +200,10 @@ sub __snapshot_freeze {
     my ($class, $vmid, $unfreeze) = @_;
 
     if ($unfreeze) {
-       eval { PVE::QemuServer::vm_mon_cmd($vmid, "guest-fsfreeze-thaw"); };
+       eval { mon_cmd($vmid, "guest-fsfreeze-thaw"); };
        warn "guest-fsfreeze-thaw problems - $@" if $@;
     } else {
-       eval { PVE::QemuServer::vm_mon_cmd($vmid, "guest-fsfreeze-freeze"); };
+       eval { mon_cmd($vmid, "guest-fsfreeze-freeze"); };
        warn "guest-fsfreeze-freeze problems - $@" if $@;
     }
 }
@@ -204,9 +219,9 @@ sub __snapshot_create_vol_snapshots_hook {
                my $path = PVE::Storage::path($storecfg, $snap->{vmstate});
                PVE::Storage::activate_volumes($storecfg, [$snap->{vmstate}]);
 
-               PVE::QemuServer::vm_mon_cmd($vmid, "savevm-start", statefile => $path);
+               mon_cmd($vmid, "savevm-start", statefile => $path);
                for(;;) {
-                   my $stat = PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "query-savevm");
+                   my $stat = mon_cmd($vmid, "query-savevm");
                    if (!$stat->{status}) {
                        die "savevm not active\n";
                    } elsif ($stat->{status} eq 'active') {
@@ -219,18 +234,18 @@ sub __snapshot_create_vol_snapshots_hook {
                    }
                }
            } else {
-               PVE::QemuServer::vm_mon_cmd($vmid, "savevm-start");
+               mon_cmd($vmid, "savevm-start");
            }
        } elsif ($hook eq "after") {
            eval {
-               PVE::QemuServer::vm_mon_cmd($vmid, "savevm-end");
+               mon_cmd($vmid, "savevm-end");
                PVE::Storage::deactivate_volumes($storecfg, [$snap->{vmstate}]) if $snap->{vmstate};
            };
            warn $@ if $@;
        } elsif ($hook eq "after-freeze") {
            # savevm-end is async, we need to wait
            for (;;) {
-               my $stat = PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "query-savevm");
+               my $stat = mon_cmd($vmid, "query-savevm");
                if (!$stat->{bytes}) {
                    last;
                } else {
@@ -359,8 +374,7 @@ sub __snapshot_rollback_vm_start {
     my ($class, $vmid, $vmstate, $data) = @_;
 
     my $storecfg = PVE::Storage::config();
-    my $statefile = PVE::Storage::path($storecfg, $vmstate);
-    PVE::QemuServer::vm_start($storecfg, $vmid, $statefile, undef, undef, undef, $data->{forcemachine});
+    PVE::QemuServer::vm_start($storecfg, $vmid, $vmstate, undef, undef, undef, $data->{forcemachine});
 }
 
 sub __snapshot_rollback_get_unused {