Hi,

When I used function esxListDefinedDomains at esx_driver.c  to list defined domains  and found that retuned array include some templates.

Template just is a master image of a VM that can be used to create a new VM, maybe our function should not return this type of VM.

So I changed some code to get config.template property and then discarded the  ‘true’ items. Code changes may look like as following:

if (esxVI_String_AppendValueListToList(&propertyNameList,

                                           "name\0"

                                           "runtime.powerState\0") < 0 ||

        esxVI_LookupVirtualMachineList(priv->primary, propertyNameList,

                                       &virtualMachineList) < 0)

 

Change  to

if (esxVI_String_AppendValueListToList(&propertyNameList, "name\0"

                                                "config.template\0"

                                                "runtime.powerState\0") < 0

                                                || esxVI_LookupVirtualMachineList(priv->primary, propertyNameList,

                                                                                &virtualMachineList) < 0)

 

After line 2493,insert

if (esxVI_DomainIsTemplate(virtualMachine, &isTemplate)

                                                                                                < 0) {

                                                                goto cleanup;

}

 

if (isTemplate == esxVI_Boolean_True) {

continue;

}

 

The function esxVI_DomainIsTemplate looks like this:

int esxVI_DomainIsTemplate(esxVI_ObjectContent *virtualMachine,

                                esxVI_Boolean *isTemplate) {

                esxVI_DynamicProperty *dynamicProperty;

 

                for (dynamicProperty = virtualMachine->propSet; dynamicProperty != NULL;

                                                dynamicProperty = dynamicProperty->_next) {

                                if (STREQ(dynamicProperty->name, "config.template")) {

                                                if (esxVI_AnyType_ExpectType(dynamicProperty->val,

                                                                                                                                esxVI_Type_Boolean) < 0) {

                                                                  return -1;

                                                }

 

                                                *isTemplate = dynamicProperty->val->boolean;

                                                return 0;

                                }

                }

 

                ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR,

                                                "%s", _("Missing 'config.template' property"));

 

                return -1;

}

 

 

Regards,

Dennis