@ -519,6 +519,56 @@ def deploy_template(vsphere_client, guest, resource_pool, template_src, esxi, mo
vmTemplate = vsphere_client . get_vm_by_name ( template_src )
vmTemplate = vsphere_client . get_vm_by_name ( template_src )
vmTarget = None
vmTarget = None
if esxi :
datacenter = esxi [ ' datacenter ' ]
esxi_hostname = esxi [ ' hostname ' ]
# Datacenter managed object reference
dclist = [ k for k ,
v in vsphere_client . get_datacenters ( ) . items ( ) if v == datacenter ]
if dclist :
dcmor = dclist [ 0 ]
else :
vsphere_client . disconnect ( )
module . fail_json ( msg = " Cannot find datacenter named: %s " % datacenter )
dcprops = VIProperty ( vsphere_client , dcmor )
# hostFolder managed reference
hfmor = dcprops . hostFolder . _obj
# Grab the computerResource name and host properties
crmors = vsphere_client . _retrieve_properties_traversal (
property_names = [ ' name ' , ' host ' ] ,
from_node = hfmor ,
obj_type = ' ComputeResource ' )
# Grab the host managed object reference of the esxi_hostname
try :
hostmor = [ k for k ,
v in vsphere_client . get_hosts ( ) . items ( ) if v == esxi_hostname ] [ 0 ]
except IndexError , e :
vsphere_client . disconnect ( )
module . fail_json ( msg = " Cannot find esx host named: %s " % esxi_hostname )
# Grab the computeResource managed object reference of the host we are
# creating the VM on.
crmor = None
for cr in crmors :
if crmor :
break
for p in cr . PropSet :
if p . Name == " host " :
for h in p . Val . get_element_ManagedObjectReference ( ) :
if h == hostmor :
crmor = cr . Obj
break
if crmor :
break
crprops = VIProperty ( vsphere_client , crmor )
rpmor = crprops . resourcePool . _obj
elif resource_pool :
try :
try :
cluster = [ k for k ,
cluster = [ k for k ,
v in vsphere_client . get_clusters ( ) . items ( ) if v == cluster_name ] [ 0 ]
v in vsphere_client . get_clusters ( ) . items ( ) if v == cluster_name ] [ 0 ]
@ -535,6 +585,8 @@ def deploy_template(vsphere_client, guest, resource_pool, template_src, esxi, mo
vsphere_client . disconnect ( )
vsphere_client . disconnect ( )
module . fail_json ( msg = " Cannot find Resource Pool named: %s " %
module . fail_json ( msg = " Cannot find Resource Pool named: %s " %
resource_pool )
resource_pool )
else :
module . fail_json ( msg = " You need to specify either esxi:[datacenter,hostname] or [cluster,resource_pool] " )
try :
try :
vmTarget = vsphere_client . get_vm_by_name ( guest )
vmTarget = vsphere_client . get_vm_by_name ( guest )