mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-02 09:55:18 +00:00
qemu: domain: Extract preparation of hostdev specific data to a separate function
Historically we've prepared secrets for all objects in one place. This doesn't make much sense and it's semantically more appealing to prepare everything for a single device type in one place. Move the setup of the (iSCSI|SCSI) hostdev secrets into a new function which will be used to setup other things as well in the future. This is a similar approach we do for disks. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
82b60ec8ce
commit
3673bdbe13
@ -1596,13 +1596,7 @@ qemuDomainSecretPrepare(virQEMUDriverPtr driver,
|
|||||||
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
/* disk secrets are prepared when preparing disks */
|
/* disk and hostdev secrets are prepared when preparing internal data */
|
||||||
|
|
||||||
for (i = 0; i < vm->def->nhostdevs; i++) {
|
|
||||||
if (qemuDomainSecretHostdevPrepare(priv,
|
|
||||||
vm->def->hostdevs[i]) < 0)
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < vm->def->nserials; i++) {
|
for (i = 0; i < vm->def->nserials; i++) {
|
||||||
if (qemuDomainSecretChardevPrepare(cfg, priv,
|
if (qemuDomainSecretChardevPrepare(cfg, priv,
|
||||||
@ -10455,6 +10449,57 @@ qemuDomainPrepareDiskSource(virDomainDiskDefPtr disk,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
qemuDomainPrepareHostdev(virDomainHostdevDefPtr hostdev,
|
||||||
|
qemuDomainObjPrivatePtr priv)
|
||||||
|
{
|
||||||
|
if (virHostdevIsSCSIDevice(hostdev)) {
|
||||||
|
virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
|
||||||
|
virStorageSourcePtr src = NULL;
|
||||||
|
|
||||||
|
switch ((virDomainHostdevSCSIProtocolType) scsisrc->protocol) {
|
||||||
|
case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_NONE:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI:
|
||||||
|
src = scsisrc->u.iscsi.src;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_LAST:
|
||||||
|
default:
|
||||||
|
virReportEnumRangeError(virDomainHostdevSCSIProtocolType, scsisrc->protocol);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (src) {
|
||||||
|
if (src->auth) {
|
||||||
|
bool iscsiHasPS = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_ISCSI_PASSWORD_SECRET);
|
||||||
|
virSecretUsageType usageType = VIR_SECRET_USAGE_TYPE_ISCSI;
|
||||||
|
qemuDomainStorageSourcePrivatePtr srcPriv = qemuDomainStorageSourcePrivateFetch(src);
|
||||||
|
|
||||||
|
if (!qemuDomainSupportsEncryptedSecret(priv) || !iscsiHasPS) {
|
||||||
|
srcPriv->secinfo = qemuDomainSecretInfoNewPlain(usageType,
|
||||||
|
src->auth->username,
|
||||||
|
&src->auth->seclookupdef);
|
||||||
|
} else {
|
||||||
|
srcPriv->secinfo = qemuDomainSecretAESSetupFromSecret(priv,
|
||||||
|
hostdev->info->alias,
|
||||||
|
NULL,
|
||||||
|
usageType,
|
||||||
|
src->auth->username,
|
||||||
|
&src->auth->seclookupdef);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!srcPriv->secinfo)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* qemuDomainDiskCachemodeFlags:
|
* qemuDomainDiskCachemodeFlags:
|
||||||
*
|
*
|
||||||
|
@ -970,6 +970,10 @@ qemuDomainDiskCachemodeFlags(int cachemode,
|
|||||||
bool *direct,
|
bool *direct,
|
||||||
bool *noflush);
|
bool *noflush);
|
||||||
|
|
||||||
|
int
|
||||||
|
qemuDomainPrepareHostdev(virDomainHostdevDefPtr hostdev,
|
||||||
|
qemuDomainObjPrivatePtr priv);
|
||||||
|
|
||||||
char * qemuDomainGetManagedPRSocketPath(qemuDomainObjPrivatePtr priv);
|
char * qemuDomainGetManagedPRSocketPath(qemuDomainObjPrivatePtr priv);
|
||||||
|
|
||||||
bool qemuDomainDefHasManagedPR(virDomainObjPtr vm);
|
bool qemuDomainDefHasManagedPR(virDomainObjPtr vm);
|
||||||
|
@ -2604,7 +2604,7 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver,
|
|||||||
if (qemuAssignDeviceHostdevAlias(vm->def, &hostdev->info->alias, -1) < 0)
|
if (qemuAssignDeviceHostdevAlias(vm->def, &hostdev->info->alias, -1) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (qemuDomainSecretHostdevPrepare(priv, hostdev) < 0)
|
if (qemuDomainPrepareHostdev(hostdev, priv) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (!(data = qemuBuildHostdevSCSIAttachPrepare(hostdev, &backendalias,
|
if (!(data = qemuBuildHostdevSCSIAttachPrepare(hostdev, &backendalias,
|
||||||
|
@ -6213,6 +6213,23 @@ qemuProcessPrepareDomainStorage(virQEMUDriverPtr driver,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
qemuProcessPrepareDomainHostdevs(virDomainObjPtr vm,
|
||||||
|
qemuDomainObjPrivatePtr priv)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < vm->def->nhostdevs; i++) {
|
||||||
|
virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
|
||||||
|
|
||||||
|
if (qemuDomainPrepareHostdev(hostdev, priv) < 0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
qemuProcessPrepareAllowReboot(virDomainObjPtr vm)
|
qemuProcessPrepareAllowReboot(virDomainObjPtr vm)
|
||||||
{
|
{
|
||||||
@ -6315,6 +6332,10 @@ qemuProcessPrepareDomain(virQEMUDriverPtr driver,
|
|||||||
if (qemuProcessPrepareDomainStorage(driver, vm, priv, cfg, flags) < 0)
|
if (qemuProcessPrepareDomainStorage(driver, vm, priv, cfg, flags) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
VIR_DEBUG("Setting up host devices");
|
||||||
|
if (qemuProcessPrepareDomainHostdevs(vm, priv) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
VIR_DEBUG("Prepare chardev source backends for TLS");
|
VIR_DEBUG("Prepare chardev source backends for TLS");
|
||||||
qemuDomainPrepareChardevSource(vm->def, cfg);
|
qemuDomainPrepareChardevSource(vm->def, cfg);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user