summaryrefslogtreecommitdiff
path: root/morphlib
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2014-04-14 13:19:20 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2014-04-15 12:04:54 +0300
commit4e0b47cc3035ef4691b6e902d27fac74c4a51edd (patch)
tree1c4d520589ec1c98922c31159375ab6bae797c9d /morphlib
parente0eb010bbe8fdb2ee4b5607d9a5288a078fcb1b0 (diff)
downloadmorph-4e0b47cc3035ef4691b6e902d27fac74c4a51edd.tar.gz
deploy: Extra checks for KVM deployments
Test that a VM with the given name does not already exist, and check that the files specified in ATTACH_DISKS do already exist.
Diffstat (limited to 'morphlib')
-rwxr-xr-xmorphlib/exts/kvm.check21
1 files changed, 21 insertions, 0 deletions
diff --git a/morphlib/exts/kvm.check b/morphlib/exts/kvm.check
index 6ce52e7e..957d0893 100755
--- a/morphlib/exts/kvm.check
+++ b/morphlib/exts/kvm.check
@@ -41,6 +41,8 @@ class KvmPlusSshCheckExtension(morphlib.writeexts.WriteExtension):
ssh_host, vm_name, vm_path = self.check_and_parse_location(location)
self.check_ssh_connectivity(ssh_host)
+ self.check_no_existing_libvirt_vm(ssh_host, vm_name)
+ self.check_extra_disks_exist(ssh_host, self.parse_attach_disks())
def check_and_parse_location(self, location):
'''Check and parse the location argument to get relevant data.'''
@@ -57,5 +59,24 @@ class KvmPlusSshCheckExtension(morphlib.writeexts.WriteExtension):
return x.netloc, m.group('guest'), m.group('path')
+ def check_no_existing_libvirt_vm(self, ssh_host, vm_name):
+ try:
+ cliapp.ssh_runcmd(ssh_host,
+ ['virsh', '--connect', 'qemu:///system', 'domstate', vm_name])
+ except cliapp.AppException as e:
+ pass
+ else:
+ raise cliapp.AppException(
+ 'Host %s already has a VM named %s. You can use the ssh-rsync '
+ 'write extension to deploy upgrades to existing machines.' %
+ (ssh_host, vm_name))
+
+ def check_extra_disks_exist(self, ssh_host, filename_list):
+ for filename in filename_list:
+ try:
+ cliapp.ssh_runcmd(ssh_host, ['ls', filename])
+ except cliapp.AppException as e:
+ raise cliapp.AppException('Did not find file %s on host %s' %
+ (filename, ssh_host))
KvmPlusSshCheckExtension().run()