]>
git.proxmox.com Git - pve-ha-manager.git/blob - src/PVE/HA/Resources/PVEVM.pm
55d4368a6dede7e6ccee10d7513765728030309f
1 package PVE
::HA
::Resources
::PVEVM
;
12 use base
qw(PVE::HA::Resources);
19 my ($class, $name) = @_;
21 die "invalid VMID\n" if $name !~ m/^[1-9][0-9]+$/;
26 state => { optional
=> 1 },
27 group
=> { optional
=> 1 },
28 comment
=> { optional
=> 1 },
29 max_restart
=> { optional
=> 1 },
30 max_relocate
=> { optional
=> 1 },
35 my ($class, $vmid, $nodename) = @_;
37 return PVE
::QemuConfig-
>config_file($vmid, $nodename);
41 my ($class, $vmid, $noerr) = @_;
43 my $vmlist = PVE
::Cluster
::get_vmlist
();
45 if(!defined($vmlist->{ids
}->{$vmid})) {
46 die "resource 'vm:$vmid' does not exists in cluster\n" if !$noerr;
54 my ($class, $haenv, $id) = @_;
56 my $nodename = $haenv->nodename();
63 my $upid = PVE
::API2
::Qemu-
>vm_start($params);
64 PVE
::HA
::Tools
::upid_wait
($upid, $haenv);
68 my ($class, $haenv, $id) = @_;
70 my $nodename = $haenv->nodename();
71 my $shutdown_timeout = 60; # fixme: make this configurable
76 timeout
=> $shutdown_timeout,
80 my $upid = PVE
::API2
::Qemu-
>vm_shutdown($params);
81 PVE
::HA
::Tools
::upid_wait
($upid, $haenv);
86 my ($class, $haenv, $id, $target, $online) = @_;
88 my $nodename = $haenv->nodename();
97 # explicitly shutdown if $online isn't true (relocate)
98 if (!$online && $class->check_running($haenv, $id)) {
99 $class->shutdown($haenv, $id);
102 my $oldconfig = $class->config_file($id, $nodename);
104 my $upid = PVE
::API2
::Qemu-
>migrate_vm($params);
105 PVE
::HA
::Tools
::upid_wait
($upid, $haenv);
107 # check if vm really moved
108 return !(-f
$oldconfig);
112 my ($class, $haenv, $vmid) = @_;
114 my $nodename = $haenv->nodename();
116 return PVE
::QemuServer
::check_running
($vmid, 1, $nodename);
120 my ($self, $haenv, $id, $locks, $service_node) = @_;
122 $service_node = $service_node || $haenv->nodename();
124 my $conf = PVE
::QemuConfig-
>load_config($id, $service_node);
126 return undef if !defined($conf->{lock});
128 foreach my $lock (@$locks) {
129 if ($conf->{lock} eq $lock) {
130 delete $conf->{lock};
132 my $cfspath = PVE
::QemuConfig-
>cfs_config_path($id, $service_node);
133 PVE
::Cluster
::cfs_write_file
($cfspath, $conf);