[libvirt] [PATCH v2 3/9] pvs: add functions to list domains and get info
Stefan Berger
stefanb at linux.vnet.ibm.com
Wed Apr 18 19:06:05 UTC 2012
On 04/18/2012 02:07 PM, Dmitry Guryanov wrote:
> PVS driver is 'stateless', like vmware or openvz drivers.
> It collects information about domains during startup using
> command-line utility prlctl. VMs in PVS identified by UUIDs
> or unique names, which can be used as respective fields in
> virDomainDef structure. Currently only basic info, like
> description, virtual cpus number and memory amount implemented.
> Quering devices information will be added in the next patches.
>
> PVS does't support non-persistent domains - you can't run
> a domain having only disk image, it must always be registered
> in system.
>
> Functions for quering domain info have been just copied from
> test driver with some changes - they extract needed data from
> previouly created list of virDomainObj objects.
>
> Signed-off-by: Dmitry Guryanov<dguryanov at parallels.com>
> ---
[...]
> +
> static virCapsPtr
> pvsBuildCapabilities(void)
> {
> @@ -126,6 +135,206 @@ pvsGetCapabilities(virConnectPtr conn)
> return xml;
> }
>
> +/*
> + * Must be called with privconn->lock held
> + */
> +static virDomainObjPtr
> +pvsLoadDomain(pvsConnPtr privconn, virJSONValuePtr jobj)
> +{
> + virDomainObjPtr dom = NULL;
> + virDomainDefPtr def = NULL;
> + pvsDomObjPtr pdom = NULL;
> + virJSONValuePtr jobj2, jobj3;
> + const char *tmp;
> + unsigned int x;
> +
> + if (VIR_ALLOC(def)< 0)
> + goto cleanup;
goto no_memory;
> +
> + def->virtType = VIR_DOMAIN_VIRT_PVS;
> + def->id = -1;
> +
> + tmp = virJSONValueObjectGetString(jobj, "Name");
> + if (!tmp) {
> + pvsParseError();
> + goto cleanup;
> + }
> + if (!(def->name = strdup(tmp)))
> + goto no_memory;
> +
> + tmp = virJSONValueObjectGetString(jobj, "ID");
> + if (!tmp) {
> + pvsParseError();
> + goto cleanup;
> + }
> +
> + if (virUUIDParse(tmp, def->uuid) == -1) {
Replace '== -1' with '< 0'.
> + tmp = virJSONValueObjectGetString(jobj3, "size");
> +
> + def->mem.max_balloon = atoi(tmp);
I think you should use virStrToLong_ul here.
> + def->mem.max_balloon<<= 10;
> + def->mem.cur_balloon = def->mem.max_balloon;
> +
> + if (!(def->os.type = strdup("hvm")))
> + goto no_memory;
> +
> + if (!(def->os.init = strdup("/sbin/init")))
> + goto no_memory;
> +
> + if (!(dom = virDomainAssignDef(privconn->caps,
> +&privconn->domains, def, false)))
> + goto cleanup;
> + /* dom is locked here */
> +
> + if (VIR_ALLOC(pdom))
if (VIR_ALLOC(pdom)<0)
Stefan
More information about the libvir-list
mailing list