03.07.2015 20:26, Dmitry Guryanov пишет:
There should be at least one domain for each guest
in cababilities. And in current code we don't add
domain for this guest for example.
if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM,
VIR_ARCH_X86_64,
"vz",
NULL, 0, NULL)) == NULL)
Anyway, with two virt types it looks a litte messy, so let's
move adding guest and domain to a separate function.
Signed-off-by: Dmitry Guryanov <dguryanov(a)parallels.com>
---
src/vz/vz_driver.c | 92 ++++++++++++++++++++++--------------------------------
1 file changed, 38 insertions(+), 54 deletions(-)
diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c
index 47c5023..8c3c818 100644
--- a/src/vz/vz_driver.c
+++ b/src/vz/vz_driver.c
@@ -78,14 +78,45 @@ vzDriverUnlock(vzConnPtr driver)
virMutexUnlock(&driver->lock);
}
+static int
+vzCapsAddGuestDomain(virCapsPtr caps,
+ virDomainOSType ostype,
+ virArch arch,
+ const char * emulator,
+ virDomainVirtType virt_type)
+{
+ virCapsGuestPtr guest;
+
+ if ((guest = virCapabilitiesAddGuest(caps, ostype, arch, emulator,
+ NULL, 0, NULL)) == NULL)
+ return -1;
+
+
+ if (virCapabilitiesAddGuestDomain(guest, virt_type,
+ NULL, NULL, 0, NULL) == NULL)
+ return -1;
+
+ return 0;
+}
+
static virCapsPtr
vzBuildCapabilities(void)
{
virCapsPtr caps = NULL;
virCPUDefPtr cpu = NULL;
virCPUDataPtr data = NULL;
- virCapsGuestPtr guest;
virNodeInfo nodeinfo;
+ virDomainOSType ostypes[] = {
+ VIR_DOMAIN_OSTYPE_HVM,
+ VIR_DOMAIN_OSTYPE_EXE
+ };
+ virArch archs[] = { VIR_ARCH_I686, VIR_ARCH_X86_64 };
+ const char *const emulators[] = { "parallels", "vz" };
+ virDomainVirtType virt_types[] = {
+ VIR_DOMAIN_VIRT_PARALLELS,
+ VIR_DOMAIN_VIRT_VZ
+ };
+ size_t i, j, k;
if ((caps = virCapabilitiesNew(virArchFromHost(),
false, false)) == NULL)
@@ -94,59 +125,12 @@ vzBuildCapabilities(void)
if (nodeCapsInitNUMA(caps) < 0)
goto error;
- if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM,
- VIR_ARCH_X86_64,
- "parallels",
- NULL, 0, NULL)) == NULL)
- goto error;
-
- if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM,
- VIR_ARCH_I686,
- "parallels",
- NULL, 0, NULL)) == NULL)
- goto error;
-
-
- if (virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_PARALLELS,
- NULL, NULL, 0, NULL) == NULL)
- goto error;
-
- if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_EXE,
- VIR_ARCH_X86_64,
- "parallels",
- NULL, 0, NULL)) == NULL)
- goto error;
-
- if (virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_PARALLELS,
- NULL, NULL, 0, NULL) == NULL)
- goto error;
-
- if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM,
- VIR_ARCH_X86_64,
- "vz",
- NULL, 0, NULL)) == NULL)
- goto error;
-
- if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM,
- VIR_ARCH_I686,
- "vz",
- NULL, 0, NULL)) == NULL)
- goto error;
-
-
- if (virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_VZ,
- NULL, NULL, 0, NULL) == NULL)
- goto error;
-
- if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_EXE,
- VIR_ARCH_X86_64,
- "vz",
- NULL, 0, NULL)) == NULL)
- goto error;
-
- if (virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_VZ,
- NULL, NULL, 0, NULL) == NULL)
- goto error;
+ for (i = 0; i < 2; i++)
+ for (j = 0; j < 2; j++)
+ for (k = 0; k < 2; k++)
+ if (vzCapsAddGuestDomain(caps, ostypes[i], archs[j],
+ emulators[k], virt_types[k]) < 0)
+ goto error;
if (nodeGetInfo(&nodeinfo))
goto error;
ACK. Looks good.