[libvirt] [PATCH] bhyve: support domain undefine

Re-add domain undefine support. I have already implemented it in v9 of my initial bhyve patch, but, apparently, based v10 not on v9, but on v8, so this change didn't make it into the tree (shame on me). Roman Bogorodskiy (1): bhyve: support domain undefine src/bhyve/bhyve_driver.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++ src/bhyve/bhyve_utils.h | 1 + 2 files changed, 80 insertions(+) -- 1.8.4.2

Implement domainUndefine and required helper functions: - domainIsActive - domainIsPersistent --- src/bhyve/bhyve_driver.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++ src/bhyve/bhyve_utils.h | 1 + 2 files changed, 80 insertions(+) diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index accb37f..23fab90 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -256,6 +256,44 @@ cleanup: return ret; } +static int +bhyveDomainIsActive(virDomainPtr domain) +{ + virDomainObjPtr obj; + int ret = -1; + + if (!(obj = bhyveDomObjFromDomain(domain))) + goto cleanup; + + if (virDomainIsActiveEnsureACL(domain->conn, obj->def) < 0) + goto cleanup; + + ret = virDomainObjIsActive(obj); + +cleanup: + virObjectUnlock(obj); + return ret; +} + +static int +bhyveDomainIsPersistent(virDomainPtr domain) +{ + virDomainObjPtr obj; + int ret = -1; + + if (!(obj = bhyveDomObjFromDomain(domain))) + goto cleanup; + + if (virDomainIsPersistentEnsureACL(domain->conn, obj->def) < 0) + goto cleanup; + + ret = obj->persistent; + +cleanup: + virObjectUnlock(obj); + return ret; +} + static char * bhyveDomainGetXMLDesc(virDomainPtr domain, unsigned int flags) { @@ -313,6 +351,44 @@ cleanup: } static int +bhyveDomainUndefine(virDomainPtr domain) +{ + bhyveConnPtr privconn = domain->conn->privateData; + virDomainObjPtr vm; + int ret = -1; + + if (!(vm = bhyveDomObjFromDomain(domain))) + goto cleanup; + + if (virDomainUndefineEnsureACL(domain->conn, vm->def) < 0) + goto cleanup; + + if (!vm->persistent) { + virReportError(VIR_ERR_OPERATION_INVALID, + "%s", _("Cannot undefine transient domain")); + goto cleanup; + } + + if (virDomainDeleteConfig(BHYVE_CONFIG_DIR, + BHYVE_AUTOSTART_DIR, + vm) < 0) + goto cleanup; + + if (virDomainObjIsActive(vm)) { + vm->persistent = 0; + } else { + virDomainObjListRemove(privconn->domains, vm); + vm = NULL; + } + + ret = 0; + +cleanup: + virObjectUnlock(vm); + return ret; +} + +static int bhyveConnectListDomains(virConnectPtr conn, int *ids, int maxids) { bhyveConnPtr privconn = conn->privateData; @@ -620,7 +696,10 @@ static virDriver bhyveDriver = { .domainLookupByUUID = bhyveDomainLookupByUUID, /* 1.2.2 */ .domainLookupByName = bhyveDomainLookupByName, /* 1.2.2 */ .domainDefineXML = bhyveDomainDefineXML, /* 1.2.2 */ + .domainUndefine = bhyveDomainUndefine, /* 1.2.2 */ .domainGetXMLDesc = bhyveDomainGetXMLDesc, /* 1.2.2 */ + .domainIsActive = bhyveDomainIsActive, /* 1.2.2 */ + .domainIsPersistent = bhyveDomainIsPersistent, /* 1.2.2 */ .nodeGetCPUStats = bhyveNodeGetCPUStats, /* 1.2.2 */ .nodeGetMemoryStats = bhyveNodeGetMemoryStats, /* 1.2.2 */ }; diff --git a/src/bhyve/bhyve_utils.h b/src/bhyve/bhyve_utils.h index 7579f4a..0810caa 100644 --- a/src/bhyve/bhyve_utils.h +++ b/src/bhyve/bhyve_utils.h @@ -27,6 +27,7 @@ # include "configmake.h" # include "virthread.h" +# define BHYVE_AUTOSTART_DIR SYSCONFDIR "/libvirt/bhyve/autostart" # define BHYVE_CONFIG_DIR SYSCONFDIR "/libvirt/bhyve" # define BHYVE_STATE_DIR LOCALSTATEDIR "/run/libvirt/bhyve" # define BHYVE_LOG_DIR LOCALSTATEDIR "/log/libvirt/bhyve" -- 1.8.4.2

On 02/28/2014 12:30 PM, Roman Bogorodskiy wrote:
Implement domainUndefine and required helper functions: - domainIsActive - domainIsPersistent --- src/bhyve/bhyve_driver.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++ src/bhyve/bhyve_utils.h | 1 + 2 files changed, 80 insertions(+)
ACK, worth having in 1.2.2 to avoid an incomplete feature addition. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org

Eric Blake wrote:
On 02/28/2014 12:30 PM, Roman Bogorodskiy wrote:
Implement domainUndefine and required helper functions: - domainIsActive - domainIsPersistent --- src/bhyve/bhyve_driver.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++ src/bhyve/bhyve_utils.h | 1 + 2 files changed, 80 insertions(+)
ACK, worth having in 1.2.2 to avoid an incomplete feature addition.
Pushed, thanks! Roman Bogorodskiy
participants (2)
-
Eric Blake
-
Roman Bogorodskiy