[libvirt] [PATCH v2 02/12] qemu: Introduce qemuDomainSecretPrepare and Destroy
John Ferlan
jferlan at redhat.com
Thu Apr 28 12:06:20 UTC 2016
[...]
>>
>> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>> index 26c19ff..24ed8ed 100644
>> --- a/src/qemu/qemu_command.c
>> +++ b/src/qemu/qemu_command.c
>> @@ -832,7 +832,7 @@ qemuBuildNetworkDriveURI(virStorageSourcePtr src,
>>
>> int
>> qemuGetDriveSourceString(virStorageSourcePtr src,
>> - virConnectPtr conn,
>> + qemuDomainSecretInfoPtr secinfo,
>> char **source)
>> {
>> int actualType = virStorageSourceGetActualType(src);
>> @@ -846,31 +846,6 @@ qemuGetDriveSourceString(virStorageSourcePtr src,
>> if (virStorageSourceIsEmpty(src))
>> return 1;
>>
>> - if (conn) {
>> - if (actualType == VIR_STORAGE_TYPE_NETWORK &&
>> - src->auth &&
>> - (src->protocol == VIR_STORAGE_NET_PROTOCOL_ISCSI ||
>> - src->protocol == VIR_STORAGE_NET_PROTOCOL_RBD)) {
>> - bool encode = false;
>> - int secretType = VIR_SECRET_USAGE_TYPE_ISCSI;
>> - const char *protocol = virStorageNetProtocolTypeToString(src->protocol);
>> - username = src->auth->username;
>> -
>> - if (src->protocol == VIR_STORAGE_NET_PROTOCOL_RBD) {
>> - /* qemu requires the secret to be encoded for RBD */
>> - encode = true;
>> - secretType = VIR_SECRET_USAGE_TYPE_CEPH;
>> - }
>> -
>> - if (!(secret = virSecretGetSecretString(conn,
>> - protocol,
>> - encode,
>> - src->auth,
>> - secretType)))
>> - goto cleanup;
>> - }
>> - }
>> -
This whole pile is what moves into qemuDomainSecretDiskPrepare. The
check for 'conn' was here it seems was a result of commit id '816f0f93'
where qemuDomainSnapshotCreateSingleDiskActive calls
qemuGetDriveSourceString.
>> switch ((virStorageType) actualType) {
>> case VIR_STORAGE_TYPE_BLOCK:
>> case VIR_STORAGE_TYPE_FILE:
>> @@ -881,6 +856,11 @@ qemuGetDriveSourceString(virStorageSourcePtr src,
>> break;
>>
>> case VIR_STORAGE_TYPE_NETWORK:
>> + if (secinfo) {
>> + username = secinfo->s.plain.username;
>> + secret = secinfo->s.plain.secret;
>> + }
>> +
[...]
>> +/* qemuDomainSecretDiskPrepare:
>> + * @conn: Pointer to connection
>> + * @disk: Pointer to a disk definition
>> + *
>> + * For the right disk, generate the qemuDomainSecretInfo structure.
>> + *
>> + * Returns 0 on success, -1 on failure
>> + */
>> +int
>> +qemuDomainSecretDiskPrepare(virConnectPtr conn,
>> + virDomainDiskDefPtr disk)
>> +{
>> + virStorageSourcePtr src = disk->src;
>> + qemuDomainSecretInfoPtr secinfo = NULL;
>> +
>> + if (conn && !virStorageSourceIsEmpty(src) &&
>> + virStorageSourceGetActualType(src) == VIR_STORAGE_TYPE_NETWORK &&
>> + src->auth &&
>> + (src->protocol == VIR_STORAGE_NET_PROTOCOL_ISCSI ||
>> + src->protocol == VIR_STORAGE_NET_PROTOCOL_RBD)) {
>> +
>
> Is conn ever going to be NULL here?
>
This code is the former qemuGetDriveSourceString code... So it was
mostly a "move" of code. I was being more cautious due to number of callers.
I did find one path that explicitly passes NULL:
testQemuHotplugAttach -> qemuDomainAttachDeviceDiskLive ->
qemuDomainAttachDeviceDiskLive ... which can call either
qemuDomainAttachVirtioDiskDevice or qemuDomainAttachSCSIDisk which would
call the qemuDomainSecretDiskPrepare
And one comment in qemuAutostartDomains that I suppose could be updated
to indicate the conn is also possibly needed for secrets.
>> + qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
>> +
>> + if (VIR_ALLOC(secinfo) < 0)
>> + return -1;
>> +
>> + if (qemuDomainSecretPlainSetup(conn, secinfo, src->protocol,
>> + src->auth) < 0)
>> + goto error;
>> +
>> + diskPriv->secinfo = secinfo;
>> + }
>> +
>> + return 0;
>> +
>> + error:
>> + qemuDomainSecretInfoFree(&secinfo);
>> + return -1;
>> +}
>> +
>> +
[...]
>> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
>> index ef8696b..692e3e7 100644
>> --- a/src/qemu/qemu_hotplug.c
>> +++ b/src/qemu/qemu_hotplug.c
>> @@ -148,7 +148,6 @@ qemuDomainPrepareDisk(virQEMUDriverPtr driver,
>> /**
>> * qemuDomainChangeEjectableMedia:
>> * @driver: qemu driver structure
>> - * @conn: connection structure
>> * @vm: domain definition
>> * @disk: disk definition to change the source of
>> * @newsrc: new disk source to change to
>> @@ -163,7 +162,6 @@ qemuDomainPrepareDisk(virQEMUDriverPtr driver,
>> */
>> int
>> qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
>> - virConnectPtr conn,
>> virDomainObjPtr vm,
>> virDomainDiskDefPtr disk,
>> virStorageSourcePtr newsrc,
>> @@ -223,7 +221,8 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
>> } while (rc < 0);
>>
>> if (!virStorageSourceIsEmpty(newsrc)) {
>> - if (qemuGetDriveSourceString(newsrc, conn, &sourcestr) < 0)
>> + /* cdrom/floppy won't have secret */
>> + if (qemuGetDriveSourceString(newsrc, NULL, &sourcestr) < 0)
>> goto error;
>>
>
> Why not? Can't you have an rbd backed cdrom device?
>
Trying to remember why I wrote that comment... Ahh I see... I must've
read the return virStorageSourceIsEmpty incorrectly when I changed that
code... good catch!
I will insert/squash in a:
qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
and change NULL to diskPriv->secinfo
John
> ACK otherwise
>
> - Cole
>
More information about the libvir-list
mailing list