qemu: Refactor hotplug to introduce qemuDomain{Add|Del}TLSObjects
Refactor the TLS object adding code to make two separate API's that will handle the add/remove of the "secret" and "tls-creds-x509" objects including the Enter/Exit monitor commands. Signed-off-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
e49af42c22
commit
ee4f382a9c
@ -1528,6 +1528,85 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
qemuDomainDelTLSObjects(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm,
|
||||||
|
const char *secAlias,
|
||||||
|
const char *tlsAlias)
|
||||||
|
{
|
||||||
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
|
virErrorPtr orig_err;
|
||||||
|
|
||||||
|
if (!tlsAlias && !secAlias)
|
||||||
|
return;
|
||||||
|
|
||||||
|
orig_err = virSaveLastError();
|
||||||
|
|
||||||
|
qemuDomainObjEnterMonitor(driver, vm);
|
||||||
|
|
||||||
|
if (tlsAlias)
|
||||||
|
ignore_value(qemuMonitorDelObject(priv->mon, tlsAlias));
|
||||||
|
|
||||||
|
if (secAlias)
|
||||||
|
ignore_value(qemuMonitorDelObject(priv->mon, secAlias));
|
||||||
|
|
||||||
|
ignore_value(qemuDomainObjExitMonitor(driver, vm));
|
||||||
|
|
||||||
|
if (orig_err) {
|
||||||
|
virSetError(orig_err);
|
||||||
|
virFreeError(orig_err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
qemuDomainAddTLSObjects(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm,
|
||||||
|
const char *secAlias,
|
||||||
|
virJSONValuePtr *secProps,
|
||||||
|
const char *tlsAlias,
|
||||||
|
virJSONValuePtr *tlsProps)
|
||||||
|
{
|
||||||
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
|
int rc;
|
||||||
|
virErrorPtr orig_err;
|
||||||
|
|
||||||
|
if (!tlsAlias && !secAlias)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
qemuDomainObjEnterMonitor(driver, vm);
|
||||||
|
|
||||||
|
if (secAlias) {
|
||||||
|
rc = qemuMonitorAddObject(priv->mon, "secret",
|
||||||
|
secAlias, *secProps);
|
||||||
|
*secProps = NULL; /* qemuMonitorAddObject consumes */
|
||||||
|
if (rc < 0)
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tlsAlias) {
|
||||||
|
rc = qemuMonitorAddObject(priv->mon, "tls-creds-x509",
|
||||||
|
tlsAlias, *tlsProps);
|
||||||
|
*tlsProps = NULL; /* qemuMonitorAddObject consumes */
|
||||||
|
if (rc < 0)
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
return qemuDomainObjExitMonitor(driver, vm);
|
||||||
|
|
||||||
|
error:
|
||||||
|
orig_err = virSaveLastError();
|
||||||
|
ignore_value(qemuDomainObjExitMonitor(driver, vm));
|
||||||
|
if (orig_err) {
|
||||||
|
virSetError(orig_err);
|
||||||
|
virFreeError(orig_err);
|
||||||
|
}
|
||||||
|
qemuDomainDelTLSObjects(driver, vm, secAlias, tlsAlias);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
qemuDomainGetChardevTLSObjects(virQEMUDriverConfigPtr cfg,
|
qemuDomainGetChardevTLSObjects(virQEMUDriverConfigPtr cfg,
|
||||||
qemuDomainObjPrivatePtr priv,
|
qemuDomainObjPrivatePtr priv,
|
||||||
@ -1584,8 +1663,6 @@ int qemuDomainAttachRedirdevDevice(virConnectPtr conn,
|
|||||||
char *charAlias = NULL;
|
char *charAlias = NULL;
|
||||||
char *devstr = NULL;
|
char *devstr = NULL;
|
||||||
bool chardevAdded = false;
|
bool chardevAdded = false;
|
||||||
bool tlsobjAdded = false;
|
|
||||||
bool secobjAdded = false;
|
|
||||||
virJSONValuePtr tlsProps = NULL;
|
virJSONValuePtr tlsProps = NULL;
|
||||||
virJSONValuePtr secProps = NULL;
|
virJSONValuePtr secProps = NULL;
|
||||||
char *tlsAlias = NULL;
|
char *tlsAlias = NULL;
|
||||||
@ -1621,26 +1698,12 @@ int qemuDomainAttachRedirdevDevice(virConnectPtr conn,
|
|||||||
&secProps, &secAlias) < 0)
|
&secProps, &secAlias) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
if (qemuDomainAddTLSObjects(driver, vm, secAlias, &secProps,
|
||||||
|
tlsAlias, &tlsProps) < 0)
|
||||||
|
goto audit;
|
||||||
|
|
||||||
qemuDomainObjEnterMonitor(driver, vm);
|
qemuDomainObjEnterMonitor(driver, vm);
|
||||||
|
|
||||||
if (secAlias) {
|
|
||||||
rc = qemuMonitorAddObject(priv->mon, "secret",
|
|
||||||
secAlias, secProps);
|
|
||||||
secProps = NULL;
|
|
||||||
if (rc < 0)
|
|
||||||
goto exit_monitor;
|
|
||||||
secobjAdded = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tlsAlias) {
|
|
||||||
rc = qemuMonitorAddObject(priv->mon, "tls-creds-x509",
|
|
||||||
tlsAlias, tlsProps);
|
|
||||||
tlsProps = NULL; /* qemuMonitorAddObject consumes */
|
|
||||||
if (rc < 0)
|
|
||||||
goto exit_monitor;
|
|
||||||
tlsobjAdded = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (qemuMonitorAttachCharDev(priv->mon,
|
if (qemuMonitorAttachCharDev(priv->mon,
|
||||||
charAlias,
|
charAlias,
|
||||||
redirdev->source) < 0)
|
redirdev->source) < 0)
|
||||||
@ -1674,15 +1737,12 @@ int qemuDomainAttachRedirdevDevice(virConnectPtr conn,
|
|||||||
/* detach associated chardev on error */
|
/* detach associated chardev on error */
|
||||||
if (chardevAdded)
|
if (chardevAdded)
|
||||||
ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias));
|
ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias));
|
||||||
if (tlsobjAdded)
|
|
||||||
ignore_value(qemuMonitorDelObject(priv->mon, tlsAlias));
|
|
||||||
if (secobjAdded)
|
|
||||||
ignore_value(qemuMonitorDelObject(priv->mon, secAlias));
|
|
||||||
ignore_value(qemuDomainObjExitMonitor(driver, vm));
|
ignore_value(qemuDomainObjExitMonitor(driver, vm));
|
||||||
if (orig_err) {
|
if (orig_err) {
|
||||||
virSetError(orig_err);
|
virSetError(orig_err);
|
||||||
virFreeError(orig_err);
|
virFreeError(orig_err);
|
||||||
}
|
}
|
||||||
|
qemuDomainDelTLSObjects(driver, vm, secAlias, tlsAlias);
|
||||||
goto audit;
|
goto audit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1860,10 +1920,8 @@ int qemuDomainAttachChrDevice(virConnectPtr conn,
|
|||||||
virDomainChrSourceDefPtr dev = chr->source;
|
virDomainChrSourceDefPtr dev = chr->source;
|
||||||
char *charAlias = NULL;
|
char *charAlias = NULL;
|
||||||
bool chardevAttached = false;
|
bool chardevAttached = false;
|
||||||
bool tlsobjAdded = false;
|
|
||||||
bool teardowncgroup = false;
|
bool teardowncgroup = false;
|
||||||
bool teardowndevice = false;
|
bool teardowndevice = false;
|
||||||
bool secobjAdded = false;
|
|
||||||
virJSONValuePtr tlsProps = NULL;
|
virJSONValuePtr tlsProps = NULL;
|
||||||
char *tlsAlias = NULL;
|
char *tlsAlias = NULL;
|
||||||
virJSONValuePtr secProps = NULL;
|
virJSONValuePtr secProps = NULL;
|
||||||
@ -1910,24 +1968,11 @@ int qemuDomainAttachChrDevice(virConnectPtr conn,
|
|||||||
&secProps, &secAlias) < 0)
|
&secProps, &secAlias) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
qemuDomainObjEnterMonitor(driver, vm);
|
if (qemuDomainAddTLSObjects(driver, vm, secAlias, &secProps,
|
||||||
if (secAlias) {
|
tlsAlias, &tlsProps) < 0)
|
||||||
rc = qemuMonitorAddObject(priv->mon, "secret",
|
goto audit;
|
||||||
secAlias, secProps);
|
|
||||||
secProps = NULL;
|
|
||||||
if (rc < 0)
|
|
||||||
goto exit_monitor;
|
|
||||||
secobjAdded = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tlsAlias) {
|
qemuDomainObjEnterMonitor(driver, vm);
|
||||||
rc = qemuMonitorAddObject(priv->mon, "tls-creds-x509",
|
|
||||||
tlsAlias, tlsProps);
|
|
||||||
tlsProps = NULL; /* qemuMonitorAddObject consumes */
|
|
||||||
if (rc < 0)
|
|
||||||
goto exit_monitor;
|
|
||||||
tlsobjAdded = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (qemuMonitorAttachCharDev(priv->mon, charAlias, chr->source) < 0)
|
if (qemuMonitorAttachCharDev(priv->mon, charAlias, chr->source) < 0)
|
||||||
goto exit_monitor;
|
goto exit_monitor;
|
||||||
@ -1968,16 +2013,13 @@ int qemuDomainAttachChrDevice(virConnectPtr conn,
|
|||||||
/* detach associated chardev on error */
|
/* detach associated chardev on error */
|
||||||
if (chardevAttached)
|
if (chardevAttached)
|
||||||
qemuMonitorDetachCharDev(priv->mon, charAlias);
|
qemuMonitorDetachCharDev(priv->mon, charAlias);
|
||||||
if (tlsobjAdded)
|
|
||||||
ignore_value(qemuMonitorDelObject(priv->mon, tlsAlias));
|
|
||||||
if (secobjAdded)
|
|
||||||
ignore_value(qemuMonitorDelObject(priv->mon, secAlias));
|
|
||||||
ignore_value(qemuDomainObjExitMonitor(driver, vm));
|
ignore_value(qemuDomainObjExitMonitor(driver, vm));
|
||||||
if (orig_err) {
|
if (orig_err) {
|
||||||
virSetError(orig_err);
|
virSetError(orig_err);
|
||||||
virFreeError(orig_err);
|
virFreeError(orig_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qemuDomainDelTLSObjects(driver, vm, secAlias, tlsAlias);
|
||||||
goto audit;
|
goto audit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2002,8 +2044,6 @@ qemuDomainAttachRNGDevice(virConnectPtr conn,
|
|||||||
bool teardowndevice = false;
|
bool teardowndevice = false;
|
||||||
bool chardevAdded = false;
|
bool chardevAdded = false;
|
||||||
bool objAdded = false;
|
bool objAdded = false;
|
||||||
bool tlsobjAdded = false;
|
|
||||||
bool secobjAdded = false;
|
|
||||||
virJSONValuePtr props = NULL;
|
virJSONValuePtr props = NULL;
|
||||||
virJSONValuePtr tlsProps = NULL;
|
virJSONValuePtr tlsProps = NULL;
|
||||||
virJSONValuePtr secProps = NULL;
|
virJSONValuePtr secProps = NULL;
|
||||||
@ -2078,28 +2118,14 @@ qemuDomainAttachRNGDevice(virConnectPtr conn,
|
|||||||
charAlias, &tlsProps, &tlsAlias,
|
charAlias, &tlsProps, &tlsAlias,
|
||||||
&secProps, &secAlias) < 0)
|
&secProps, &secAlias) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
if (qemuDomainAddTLSObjects(driver, vm, secAlias, &secProps,
|
||||||
|
tlsAlias, &tlsProps) < 0)
|
||||||
|
goto audit;
|
||||||
}
|
}
|
||||||
|
|
||||||
qemuDomainObjEnterMonitor(driver, vm);
|
qemuDomainObjEnterMonitor(driver, vm);
|
||||||
|
|
||||||
if (secAlias) {
|
|
||||||
rv = qemuMonitorAddObject(priv->mon, "secret",
|
|
||||||
secAlias, secProps);
|
|
||||||
secProps = NULL;
|
|
||||||
if (rv < 0)
|
|
||||||
goto exit_monitor;
|
|
||||||
secobjAdded = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tlsAlias) {
|
|
||||||
rv = qemuMonitorAddObject(priv->mon, "tls-creds-x509",
|
|
||||||
tlsAlias, tlsProps);
|
|
||||||
tlsProps = NULL; /* qemuMonitorAddObject consumes */
|
|
||||||
if (rv < 0)
|
|
||||||
goto exit_monitor;
|
|
||||||
tlsobjAdded = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rng->backend == VIR_DOMAIN_RNG_BACKEND_EGD &&
|
if (rng->backend == VIR_DOMAIN_RNG_BACKEND_EGD &&
|
||||||
qemuMonitorAttachCharDev(priv->mon, charAlias,
|
qemuMonitorAttachCharDev(priv->mon, charAlias,
|
||||||
rng->source.chardev) < 0)
|
rng->source.chardev) < 0)
|
||||||
@ -2154,10 +2180,6 @@ qemuDomainAttachRNGDevice(virConnectPtr conn,
|
|||||||
ignore_value(qemuMonitorDelObject(priv->mon, objAlias));
|
ignore_value(qemuMonitorDelObject(priv->mon, objAlias));
|
||||||
if (rng->backend == VIR_DOMAIN_RNG_BACKEND_EGD && chardevAdded)
|
if (rng->backend == VIR_DOMAIN_RNG_BACKEND_EGD && chardevAdded)
|
||||||
ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias));
|
ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias));
|
||||||
if (tlsobjAdded)
|
|
||||||
ignore_value(qemuMonitorDelObject(priv->mon, tlsAlias));
|
|
||||||
if (secobjAdded)
|
|
||||||
ignore_value(qemuMonitorDelObject(priv->mon, secAlias));
|
|
||||||
if (qemuDomainObjExitMonitor(driver, vm) < 0)
|
if (qemuDomainObjExitMonitor(driver, vm) < 0)
|
||||||
releaseaddr = false;
|
releaseaddr = false;
|
||||||
if (orig_err) {
|
if (orig_err) {
|
||||||
@ -2165,6 +2187,7 @@ qemuDomainAttachRNGDevice(virConnectPtr conn,
|
|||||||
virFreeError(orig_err);
|
virFreeError(orig_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qemuDomainDelTLSObjects(driver, vm, secAlias, tlsAlias);
|
||||||
goto audit;
|
goto audit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,6 +33,19 @@ int qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
|
|||||||
virDomainDiskDefPtr disk,
|
virDomainDiskDefPtr disk,
|
||||||
virStorageSourcePtr newsrc,
|
virStorageSourcePtr newsrc,
|
||||||
bool force);
|
bool force);
|
||||||
|
|
||||||
|
void qemuDomainDelTLSObjects(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm,
|
||||||
|
const char *secAlias,
|
||||||
|
const char *tlsAlias);
|
||||||
|
|
||||||
|
int qemuDomainAddTLSObjects(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm,
|
||||||
|
const char *secAlias,
|
||||||
|
virJSONValuePtr *secProps,
|
||||||
|
const char *tlsAlias,
|
||||||
|
virJSONValuePtr *tlsProps);
|
||||||
|
|
||||||
int qemuDomainAttachControllerDevice(virQEMUDriverPtr driver,
|
int qemuDomainAttachControllerDevice(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
virDomainControllerDefPtr controller);
|
virDomainControllerDefPtr controller);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user