mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
conf: Add 'fdgroup' attribute for 'file' disks
The 'fdgroup' will allow users to specify a passed FD (via the 'virDomainFDAssociate()' API) to be used instead of opening a path. This is useful in cases when e.g. the file is not accessible from inside a container. Since this uses the same disk type as when we open files via names this patch also introduces a hypervisor feature which the hypervisor asserts that code paths are ready for this possibility. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
0fcdb512d4
commit
98bd201678
@ -2701,6 +2701,14 @@ paravirtualized driver is specified via the ``disk`` element.
|
||||
``file``
|
||||
The ``file`` attribute specifies the fully-qualified path to the file
|
||||
holding the disk. :since:`Since 0.0.3`
|
||||
|
||||
:since:`Since 9.0.0` a new optional attribute ``fdgroup`` can be added
|
||||
instructing to access the disk via file descriptiors associated to the
|
||||
domain object via the ``virDomainFDAssociate()`` API rather than opening
|
||||
the files. The files do not necessarily have to be accessible by libvirt
|
||||
via the filesystem. The filename passed via ``file`` can still be used
|
||||
to generate paths to write into image metadata when doing block operations
|
||||
but libvirt will not access these natively.
|
||||
``block``
|
||||
The ``dev`` attribute specifies the fully-qualified path to the host
|
||||
device to serve as the disk. :since:`Since 0.0.3`
|
||||
|
@ -7345,6 +7345,7 @@ virDomainStorageSourceParse(xmlNodePtr node,
|
||||
switch (src->type) {
|
||||
case VIR_STORAGE_TYPE_FILE:
|
||||
src->path = virXMLPropString(node, "file");
|
||||
src->fdgroup = virXMLPropString(node, "fdgroup");
|
||||
break;
|
||||
case VIR_STORAGE_TYPE_BLOCK:
|
||||
src->path = virXMLPropString(node, "dev");
|
||||
@ -21877,6 +21878,7 @@ virDomainDiskSourceFormat(virBuffer *buf,
|
||||
switch (src->type) {
|
||||
case VIR_STORAGE_TYPE_FILE:
|
||||
virBufferEscapeString(&attrBuf, " file='%s'", src->path);
|
||||
virBufferEscapeString(&attrBuf, " fdgroup='%s'", src->fdgroup);
|
||||
break;
|
||||
|
||||
case VIR_STORAGE_TYPE_BLOCK:
|
||||
|
@ -3167,6 +3167,7 @@ typedef enum {
|
||||
VIR_DOMAIN_DEF_FEATURE_NO_BOOT_ORDER = (1 << 6),
|
||||
VIR_DOMAIN_DEF_FEATURE_FW_AUTOSELECT = (1 << 7),
|
||||
VIR_DOMAIN_DEF_FEATURE_NET_MODEL_STRING = (1 << 8),
|
||||
VIR_DOMAIN_DEF_FEATURE_DISK_FD = (1 << 9),
|
||||
} virDomainDefFeatures;
|
||||
|
||||
|
||||
|
@ -885,6 +885,15 @@ virDomainDeviceDefPostParseCheckFeatures(virDomainDeviceDef *dev,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (dev->type == VIR_DOMAIN_DEVICE_DISK &&
|
||||
dev->data.disk->src->fdgroup &&
|
||||
UNSUPPORTED(VIR_DOMAIN_DEF_FEATURE_DISK_FD)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("driver does not support FD passing for disk '%s'"),
|
||||
dev->data.disk->dst);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#undef UNSUPPORTED
|
||||
|
@ -1806,6 +1806,9 @@
|
||||
<ref name="vmwarePath"/>
|
||||
</choice>
|
||||
</attribute>
|
||||
<optional>
|
||||
<attribute name="fdgroup"/>
|
||||
</optional>
|
||||
</optional>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<optional>
|
||||
|
@ -817,6 +817,7 @@ virStorageSourceCopy(const virStorageSource *src,
|
||||
def->drv = NULL;
|
||||
|
||||
def->path = g_strdup(src->path);
|
||||
def->fdgroup = g_strdup(src->fdgroup);
|
||||
def->volume = g_strdup(src->volume);
|
||||
def->relPath = g_strdup(src->relPath);
|
||||
def->backingStoreRaw = g_strdup(src->backingStoreRaw);
|
||||
@ -1123,6 +1124,7 @@ virStorageSourceClear(virStorageSource *def)
|
||||
return;
|
||||
|
||||
VIR_FREE(def->path);
|
||||
VIR_FREE(def->fdgroup);
|
||||
VIR_FREE(def->volume);
|
||||
VIR_FREE(def->snapshot);
|
||||
VIR_FREE(def->configFile);
|
||||
|
@ -289,6 +289,7 @@ struct _virStorageSource {
|
||||
unsigned int id; /* backing chain identifier, 0 is unset */
|
||||
virStorageType type;
|
||||
char *path;
|
||||
char *fdgroup; /* name of group of file descriptors the user wishes to use instead of 'path' */
|
||||
int protocol; /* virStorageNetProtocol */
|
||||
char *volume; /* volume name for remote storage */
|
||||
char *snapshot; /* for storage systems supporting internal snapshots */
|
||||
|
@ -607,7 +607,8 @@ virDomainDefParserConfig virAAHelperDomainDefParserConfig = {
|
||||
.features = VIR_DOMAIN_DEF_FEATURE_MEMORY_HOTPLUG |
|
||||
VIR_DOMAIN_DEF_FEATURE_OFFLINE_VCPUPIN |
|
||||
VIR_DOMAIN_DEF_FEATURE_INDIVIDUAL_VCPUS |
|
||||
VIR_DOMAIN_DEF_FEATURE_NET_MODEL_STRING,
|
||||
VIR_DOMAIN_DEF_FEATURE_NET_MODEL_STRING |
|
||||
VIR_DOMAIN_DEF_FEATURE_DISK_FD,
|
||||
};
|
||||
|
||||
static int
|
||||
|
40
tests/qemuxml2argvdata/disk-source-fd.xml
Normal file
40
tests/qemuxml2argvdata/disk-source-fd.xml
Normal file
@ -0,0 +1,40 @@
|
||||
<domain type='qemu'>
|
||||
<name>QEMUGuest1</name>
|
||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
<memory unit='KiB'>219136</memory>
|
||||
<currentMemory unit='KiB'>219136</currentMemory>
|
||||
<vcpu placement='static'>1</vcpu>
|
||||
<os>
|
||||
<type arch='x86_64' machine='pc'>hvm</type>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||
<disk type='file' device='disk'>
|
||||
<driver name='qemu' type='qcow2'/>
|
||||
<source file='/path/to/blah' fdgroup='testgroup2'/>
|
||||
<target dev='vde' bus='virtio'/>
|
||||
</disk>
|
||||
<disk type='file' device='disk'>
|
||||
<driver name='qemu' type='qcow2'/>
|
||||
<source file='/var/lib/libvirt/images/rhel7.1484071880' fdgroup='testgroup5'/>
|
||||
<backingStore type='file'>
|
||||
<format type='qcow2'/>
|
||||
<source file='/var/lib/libvirt/images/rhel7.1484071877' fdgroup='testgroup6'/>
|
||||
<backingStore type='file'>
|
||||
<format type='qcow2'/>
|
||||
<source file='/var/lib/libvirt/images/rhel7.1484071876'/>
|
||||
<backingStore/>
|
||||
</backingStore>
|
||||
</backingStore>
|
||||
<target dev='vdf' bus='virtio'/>
|
||||
</disk>
|
||||
<controller type='usb'/>
|
||||
<controller type='pci' model='pci-root'/>
|
||||
<memballoon model='virtio'/>
|
||||
</devices>
|
||||
</domain>
|
Loading…
Reference in New Issue
Block a user