chiark / gitweb /
delete associated libvirt domain/image when destroying builder vm
authorMichael Pöhn <michael.poehn@fsfe.org>
Tue, 7 Mar 2017 14:14:10 +0000 (15:14 +0100)
committerHans-Christoph Steiner <hans@eds.org>
Tue, 23 May 2017 18:04:08 +0000 (20:04 +0200)
fdroidserver/build.py

index d9ef9a0e46940d5418ce644549f682639f09c3b2..ceaf76d0629a3ff39d2f18704c48d269b509f93b 100644 (file)
@@ -220,6 +220,25 @@ def get_clean_vm(reset=False):
         if os.path.exists('builder'):
             logging.info("Removing broken/incomplete/unwanted build server")
             vagrant(['destroy', '-f'], cwd='builder')
+            if provider == 'libvirt':
+                import libvirt
+                virConnect = None
+                virDomain = None
+                try:
+                    virConnect = libvirt.open('qemu:///system')
+                    virDomain = virConnect.lookupByName('builder_default')
+                except libvirt.libvirtError:
+                    logging.debug("no libvirt domain found, skipping delete attempt")
+                if virDomain:
+                    virDomain.undefineFlags(libvirt.VIR_DOMAIN_UNDEFINE_MANAGED_SAVE
+                                            | libvirt.VIR_DOMAIN_UNDEFINE_SNAPSHOTS_METADATA
+                                            | libvirt.VIR_DOMAIN_UNDEFINE_NVRAM)
+                if virConnect:
+                    storagePool = virConnect.storagePoolLookupByName('default')
+                    if storagePool:
+                        for vol in storagePool.listAllVolumes():
+                            if vol.name().startswith('builder'):
+                                vol.delete()
             shutil.rmtree('builder')
         os.mkdir('builder')