1818
1919from com .vmware .content .library_client import Item
2020from com .vmware .vcenter .ovf_client import LibraryItem
21- from com .vmware .vcenter_client import ResourcePool
21+ from com .vmware .vcenter_client import ResourcePool , Folder
2222from vmware .vapi .vsphere .client import create_vsphere_client
2323
2424from samples .vsphere .common import sample_cli , sample_util
@@ -34,24 +34,37 @@ class DeployOvfTemplate:
3434 """
3535
3636 def __init__ (self ):
37- parser = sample_cli .build_arg_parser ()
3837
39- parser .add_argument ('--resourcepoolname' ,
40- default = 'Compute-ResourcePool' ,
41- help = 'The name of the resource pool to be used.' )
38+ self .vm_name = 'deployed-vm-' + str (generate_random_uuid ())
4239
40+ parser = sample_cli .build_arg_parser ()
4341 parser .add_argument ('--libitemname' ,
4442 required = True ,
45- help = 'The name of the library item to deploy.'
43+ help = '(Required) The name of the library item to deploy. '
4644 'The library item should contain an OVF package.' )
4745
46+ parser .add_argument ('--vmname' ,
47+ default = self .vm_name ,
48+ help = '(Optional) The name of the Virtual Machine to be deployed. '
49+ 'Default: "{}"' .format (self .vm_name ))
50+
51+ parser .add_argument ('--resourcepoolname' ,
52+ default = 'Compute-ResourcePool' ,
53+ help = '(Optional) The name of the resource pool to be used. '
54+ 'Default: "Compute-ResourcePool"' )
55+
56+ parser .add_argument ('--foldername' ,
57+ default = 'Workloads' ,
58+ help = '(Optional) The name of the folder to be used. '
59+ 'Default: "Workloads"' )
60+
4861 args = sample_util .process_cli_args (parser .parse_args ())
4962
5063 self .vm_id = None
51- self .vm_name = 'deployed-vm-' + str (generate_random_uuid ())
52-
5364 self .lib_item_name = args .libitemname
65+ self .vm_name = args .vmname
5466 self .resourcepoolname = args .resourcepoolname
67+ self .foldername = args .foldername
5568 self .cleardata = args .cleardata
5669
5770 # Connect to vAPI Endpoint on vCenter Server
@@ -61,16 +74,27 @@ def __init__(self):
6174
6275 def deploy_ovf_template (self ):
6376
64- # Build the deployment target with resource pool ID
65- filter_spec = ResourcePool .FilterSpec (names = set ([self .resourcepoolname ]))
66- resource_pool_summaries = self .client .vcenter .ResourcePool .list (filter_spec )
77+ # Build the deployment target with resource pool ID and folder ID
78+ rp_filter_spec = ResourcePool .FilterSpec (names = set ([self .resourcepoolname ]))
79+ resource_pool_summaries = self .client .vcenter .ResourcePool .list (rp_filter_spec )
6780 if not resource_pool_summaries :
6881 raise ValueError ("Resource pool with name '{}' not found" .
6982 format (self .resourcepoolname ))
7083 resource_pool_id = resource_pool_summaries [0 ].resource_pool
7184 print ('Resource pool ID: {}' .format (resource_pool_id ))
85+
86+ folder_filter_spec = Folder .FilterSpec (names = set ([self .foldername ]))
87+ folder_summaries = self .client .vcenter .Folder .list (folder_filter_spec )
88+ if not folder_summaries :
89+ raise ValueError ("Folder with name '{}' not found" .
90+ format (self .foldername ))
91+ folder_id = folder_summaries [0 ].folder
92+ print ('Folder ID: {}' .format (folder_id ))
93+
7294 deployment_target = LibraryItem .DeploymentTarget (
73- resource_pool_id = resource_pool_id )
95+ resource_pool_id = resource_pool_id ,
96+ folder_id = folder_id
97+ )
7498
7599 # Find the library item
76100 find_spec = Item .FindSpec (name = self .lib_item_name )
@@ -108,8 +132,8 @@ def deploy_ovf_template(self):
108132
109133 # The type and ID of the target deployment is available in the deployment result.
110134 if result .succeeded :
111- print ('Deployment successful. Result resource: {} , ID: {} '
112- .format (result . resource_id . type , result .resource_id .id ))
135+ print ('Deployment successful. VM Name: "{}" , ID: "{}" '
136+ .format (self . vm_name , result .resource_id .id ))
113137 self .vm_id = result .resource_id .id
114138 error = result .error
115139 if error is not None :
0 commit comments