mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-08-08 00:49:11 +00:00
fix bug #97: execute 'clusvcadm' commands for HA managed VMs
This commit is contained in:
parent
191435c643
commit
88fc87b467
2
Makefile
2
Makefile
@ -2,7 +2,7 @@ RELEASE=2.0
|
|||||||
|
|
||||||
VERSION=2.0
|
VERSION=2.0
|
||||||
PACKAGE=qemu-server
|
PACKAGE=qemu-server
|
||||||
PKGREL=28
|
PKGREL=29
|
||||||
|
|
||||||
DESTDIR=
|
DESTDIR=
|
||||||
PREFIX=/usr
|
PREFIX=/usr
|
||||||
|
@ -1089,6 +1089,16 @@ __PACKAGE__->register_method({
|
|||||||
return $res;
|
return $res;
|
||||||
}});
|
}});
|
||||||
|
|
||||||
|
my $vm_is_ha_managed = sub {
|
||||||
|
my ($vmid) = @_;
|
||||||
|
|
||||||
|
my $cc = PVE::Cluster::cfs_read_file('cluster.conf');
|
||||||
|
if (PVE::Cluster::cluster_conf_lookup_pvevm($cc, 0, $vmid, 1)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
|
||||||
__PACKAGE__->register_method({
|
__PACKAGE__->register_method({
|
||||||
name => 'vm_status',
|
name => 'vm_status',
|
||||||
path => '{vmid}/status/current',
|
path => '{vmid}/status/current',
|
||||||
@ -1116,12 +1126,7 @@ __PACKAGE__->register_method({
|
|||||||
my $vmstatus = PVE::QemuServer::vmstatus($param->{vmid});
|
my $vmstatus = PVE::QemuServer::vmstatus($param->{vmid});
|
||||||
my $status = $vmstatus->{$param->{vmid}};
|
my $status = $vmstatus->{$param->{vmid}};
|
||||||
|
|
||||||
my $cc = PVE::Cluster::cfs_read_file('cluster.conf');
|
$status->{ha} = &$vm_is_ha_managed($param->{vmid});
|
||||||
if (PVE::Cluster::cluster_conf_lookup_pvevm($cc, 0, $param->{vmid}, 1)) {
|
|
||||||
$status->{ha} = 1;
|
|
||||||
} else {
|
|
||||||
$status->{ha} = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $status;
|
return $status;
|
||||||
}});
|
}});
|
||||||
@ -1169,6 +1174,26 @@ __PACKAGE__->register_method({
|
|||||||
|
|
||||||
my $storecfg = PVE::Storage::config();
|
my $storecfg = PVE::Storage::config();
|
||||||
|
|
||||||
|
if (&$vm_is_ha_managed($vmid)) {
|
||||||
|
|
||||||
|
my $hacmd = sub {
|
||||||
|
my $upid = shift;
|
||||||
|
|
||||||
|
my $service = "pvevm:$vmid";
|
||||||
|
|
||||||
|
my $cmd = ['clusvcadm', '-e', $service, '-m', $node];
|
||||||
|
|
||||||
|
print "Executing HA start for VM $vmid\n";
|
||||||
|
|
||||||
|
PVE::Tools::run_command($cmd);
|
||||||
|
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
return $rpcenv->fork_worker('hastart', $vmid, $authuser, $hacmd);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
my $realcmd = sub {
|
my $realcmd = sub {
|
||||||
my $upid = shift;
|
my $upid = shift;
|
||||||
|
|
||||||
@ -1180,6 +1205,7 @@ __PACKAGE__->register_method({
|
|||||||
};
|
};
|
||||||
|
|
||||||
return $rpcenv->fork_worker('qmstart', $vmid, $authuser, $realcmd);
|
return $rpcenv->fork_worker('qmstart', $vmid, $authuser, $realcmd);
|
||||||
|
}
|
||||||
}});
|
}});
|
||||||
|
|
||||||
__PACKAGE__->register_method({
|
__PACKAGE__->register_method({
|
||||||
@ -1236,6 +1262,25 @@ __PACKAGE__->register_method({
|
|||||||
|
|
||||||
my $storecfg = PVE::Storage::config();
|
my $storecfg = PVE::Storage::config();
|
||||||
|
|
||||||
|
if (&$vm_is_ha_managed($vmid)) {
|
||||||
|
|
||||||
|
my $hacmd = sub {
|
||||||
|
my $upid = shift;
|
||||||
|
|
||||||
|
my $service = "pvevm:$vmid";
|
||||||
|
|
||||||
|
my $cmd = ['clusvcadm', '-d', $service];
|
||||||
|
|
||||||
|
print "Executing HA stop for VM $vmid\n";
|
||||||
|
|
||||||
|
PVE::Tools::run_command($cmd);
|
||||||
|
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
return $rpcenv->fork_worker('hastop', $vmid, $authuser, $hacmd);
|
||||||
|
|
||||||
|
} else {
|
||||||
my $realcmd = sub {
|
my $realcmd = sub {
|
||||||
my $upid = shift;
|
my $upid = shift;
|
||||||
|
|
||||||
@ -1248,6 +1293,7 @@ __PACKAGE__->register_method({
|
|||||||
};
|
};
|
||||||
|
|
||||||
return $rpcenv->fork_worker('qmstop', $vmid, $authuser, $realcmd);
|
return $rpcenv->fork_worker('qmstop', $vmid, $authuser, $realcmd);
|
||||||
|
}
|
||||||
}});
|
}});
|
||||||
|
|
||||||
__PACKAGE__->register_method({
|
__PACKAGE__->register_method({
|
||||||
@ -1585,15 +1631,35 @@ __PACKAGE__->register_method({
|
|||||||
if !$param->{online};
|
if !$param->{online};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (&$vm_is_ha_managed($vmid)) {
|
||||||
|
|
||||||
|
my $hacmd = sub {
|
||||||
|
my $upid = shift;
|
||||||
|
|
||||||
|
my $service = "pvevm:$vmid";
|
||||||
|
|
||||||
|
my $cmd = ['clusvcadm', '-M', $service, '-m', $target];
|
||||||
|
|
||||||
|
print "Executing HA migrate for VM $vmid to node $target\n";
|
||||||
|
|
||||||
|
PVE::Tools::run_command($cmd);
|
||||||
|
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
return $rpcenv->fork_worker('hamigrate', $vmid, $authuser, $hacmd);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
my $realcmd = sub {
|
my $realcmd = sub {
|
||||||
my $upid = shift;
|
my $upid = shift;
|
||||||
|
|
||||||
PVE::QemuMigrate->migrate($target, $targetip, $vmid, $param);
|
PVE::QemuMigrate->migrate($target, $targetip, $vmid, $param);
|
||||||
};
|
};
|
||||||
|
|
||||||
my $upid = $rpcenv->fork_worker('qmigrate', $vmid, $authuser, $realcmd);
|
return $rpcenv->fork_worker('qmigrate', $vmid, $authuser, $realcmd);
|
||||||
|
}
|
||||||
|
|
||||||
return $upid;
|
|
||||||
}});
|
}});
|
||||||
|
|
||||||
__PACKAGE__->register_method({
|
__PACKAGE__->register_method({
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
qemu-server (2.0-29) unstable; urgency=low
|
||||||
|
|
||||||
|
* fix bug #97: execute 'clusvcadm' commands for HA managed VMs
|
||||||
|
|
||||||
|
-- Proxmox Support Team <support@proxmox.com> Tue, 27 Mar 2012 10:36:23 +0200
|
||||||
|
|
||||||
qemu-server (2.0-28) unstable; urgency=low
|
qemu-server (2.0-28) unstable; urgency=low
|
||||||
|
|
||||||
* use Digest::SHA instead of Digest::SHA1
|
* use Digest::SHA instead of Digest::SHA1
|
||||||
|
Loading…
Reference in New Issue
Block a user