def create_vmtx_item_from_vm(self, library_id, source_vm_id, vmtx_item_name): # Create a VMTX item using the given VM as source create_spec = VmtxLibraryItem.CreateSpec() create_spec.source_vm = source_vm_id create_spec.library = library_id create_spec.name = vmtx_item_name create_spec.description = 'sample-vmtx-description' create_spec.placement = VmtxLibraryItem.CreatePlacementSpec() create_spec.placement.resource_pool = self.resource_pool_id vmtx_item_id = self.client.vmtx_service.create(create_spec) print("VMTX item created id: {0}".format(vmtx_item_id)) return vmtx_item_id
def _execute(self): # Get the identifier of the source VM vm_id = get_vm(self.servicemanager.stub_config, self.vm_name) assert vm_id # Create a library storage_backings = self.helper.create_storage_backings( self.servicemanager, self.datastore_name) self.library_id = self.helper.create_local_library(storage_backings, self.library_name) # Build the create specification create_spec = VmtxLibraryItem.CreateSpec() create_spec.source_vm = vm_id create_spec.library = self.library_id create_spec.name = self.item_name # Create a new library item from the source VM self.item_id = self.client.vmtx_service.create(create_spec) print("Created VM template item '{0}' with ID: {1}".format( self.item_name, self.item_id)) # Retrieve the library item info info = self.client.vmtx_service.get(self.item_id) print('VM template guest OS: {0}'.format(info.guest_os))
def _execute(self): # Get the identifiers of the resources used for deployment item_id = self.helper.get_item_id_by_name(self.item_name) assert item_id folder_id = get_folder(self.vsphere_client, self.datacenter_name, self.folder_name) assert folder_id resource_pool_id = get_resource_pool(self.vsphere_client, self.datacenter_name, self.resource_pool_name) assert resource_pool_id datastore_id = get_datastore_id(self.servicemanager, self.datastore_name) assert datastore_id # Build the deployment specification placement_spec = VmtxLibraryItem.DeployPlacementSpec( folder=folder_id, resource_pool=resource_pool_id) vm_home_storage_spec = VmtxLibraryItem.DeploySpecVmHomeStorage( datastore=datastore_id) disk_storage_spec = VmtxLibraryItem.DeploySpecDiskStorage( datastore=datastore_id) deploy_spec = VmtxLibraryItem.DeploySpec( name=self.vm_name, placement=placement_spec, vm_home_storage=vm_home_storage_spec, disk_storage=disk_storage_spec) # Deploy a virtual machine from the VM template item self.vm_id = self.client.vmtx_service.deploy(item_id, deploy_spec) self.vm = get_obj_by_moId(self.servicemanager.content, [vim.VirtualMachine], self.vm_id) print("Deployed VM '{0}' with ID: {1}".format(self.vm.name, self.vm_id)) # Print a summary of the deployed VM vm_summary = self.vm.summary.config print('Guest OS: {0}'.format(vm_summary.guestId)) print('{0} CPU(s)'.format(vm_summary.numCpu)) print('{0} MB memory'.format(vm_summary.memorySizeMB)) print('{0} disk(s)'.format(vm_summary.numVirtualDisks)) print('{0} network adapter(s)'.format(vm_summary.numEthernetCards))
def deploy_vm_from_template(self, power_on=False): # Find the datacenter by the given datacenter name self.datacenter_id = self.get_datacenter_by_name( datacenter_name=self.datacenter) if not self.datacenter_id: self.module.fail_json(msg="Failed to find the datacenter %s" % self.datacenter) # Find the datastore by the given datastore name self.datastore_id = self.get_datastore_by_name(self.datacenter, self.datastore) if not self.datastore_id: self.module.fail_json(msg="Failed to find the datastore %s" % self.datastore) # Find the LibraryItem (Template) by the given LibraryItem name self.library_item_id = self.get_library_item_by_name( self.template_name) if not self.library_item_id: self.module.fail_json(msg="Failed to find the library Item %s" % self.template_name) # Find the folder by the given folder name self.folder_id = self.get_folder_by_name(self.datacenter, self.folder) if not self.folder_id: self.module.fail_json(msg="Failed to find the folder %s" % self.folder) # Find the Host by given HostName self.host_id = self.get_host_by_name(self.datacenter, self.host) if not self.host_id: self.module.fail_json(msg="Failed to find the Host %s" % self.host) # Find the resourcepool by the given resourcepool name self.resourcepool_id = None if self.resourcepool: self.resourcepool_id = self.get_resource_pool_by_name( self.datacenter, self.resourcepool) if not self.resourcepool_id: self.module.fail_json( msg="Failed to find the resource_pool %s" % self.resourcepool) # Find the Cluster by the given Cluster name self.cluster_id = None if self.cluster: self.cluster_id = self.get_resource_pool_by_name( self.datacenter, self.resourcepool) if not self.cluster_id: self.module.fail_json(msg="Failed to find the Cluster %s" % self.cluster) # Create VM placement specs self.placement_spec = LibraryItems.DeployPlacementSpec( folder=self.folder_id, host=self.host_id) if self.resourcepool_id or self.cluster_id: self.placement_spec.resource_pool = self.resourcepool_id self.placement_spec.cluster = self.cluster_id self.vm_home_storage_spec = LibraryItems.DeploySpecVmHomeStorage( datastore=to_native(self.datastore_id)) self.disk_storage_spec = LibraryItems.DeploySpecDiskStorage( datastore=to_native(self.datastore_id)) self.deploy_spec = LibraryItems.DeploySpec( name=self.vm_name, placement=self.placement_spec, vm_home_storage=self.vm_home_storage_spec, disk_storage=self.disk_storage_spec, powered_on=power_on) vm_id = self.template_service.deploy(self.library_item_id, self.deploy_spec) if vm_id: self.module.exit_json(changed=True, vm_deploy_info=dict( msg="Deployed Virtual Machine '%s'." % self.vm_name, vm_id=vm_id, )) self.module.exit_json(changed=False, vm_deploy_info=dict( msg="Virtual Machine deployment failed", vm_id=''))
def deploy_vm_from_template(self, power_on=False): # Find the datacenter by the given datacenter name self._datacenter_id = self.get_datacenter_by_name(self.datacenter) if not self._datacenter_id: self._fail(msg="Failed to find the datacenter %s" % self.datacenter) # Find the datastore by the given datastore name if self.datastore: self._datastore_id = self.get_datastore_by_name( self.datacenter, self.datastore) if not self._datastore_id: self._fail(msg="Failed to find the datastore %s" % self.datastore) # Find the datastore by the given datastore cluster name if self.datastore_cluster and not self._datastore_id: dsc = self._pyv.find_datastore_cluster_by_name( self.datastore_cluster) if dsc: self.datastore = self._pyv.get_recommended_datastore(dsc) self._datastore_id = self.get_datastore_by_name( self.datacenter, self.datastore) else: self._fail(msg="Failed to find the datastore cluster %s" % self.datastore_cluster) if not self._datastore_id: self._fail( msg= "Failed to find the datastore using either datastore or datastore cluster" ) # Find the LibraryItem (Template) by the given LibraryItem name if self.library: self._library_item_id = self.get_library_item_from_content_library_name( self.template, self.library) if not self._library_item_id: self._fail( msg= "Failed to find the library Item %s in content library %s" % (self.template, self.library)) else: self._library_item_id = self.get_library_item_by_name( self.template) if not self._library_item_id: self._fail(msg="Failed to find the library Item %s" % self.template) # Find the folder by the given FQPN folder name # The FQPN is I(datacenter)/I(folder type)/folder name/... for # example Lab/vm/someparent/myfolder is a vm folder in the Lab datacenter. folder_obj = self._pyv.find_folder_by_fqpn(self.folder, self.datacenter, folder_type='vm') if folder_obj: self._folder_id = folder_obj._moId if not self._folder_id: self._fail(msg="Failed to find the folder %s" % self.folder) # Find the Host by the given name if self.host: self._host_id = self.get_host_by_name(self.datacenter, self.host) if not self._host_id: self._fail(msg="Failed to find the Host %s" % self.host) # Find the Cluster by the given Cluster name if self.cluster: self._cluster_id = self.get_cluster_by_name( self.datacenter, self.cluster) if not self._cluster_id: self._fail(msg="Failed to find the Cluster %s" % self.cluster) cluster_obj = self.api_client.vcenter.Cluster.get(self._cluster_id) self._resourcepool_id = cluster_obj.resource_pool # Find the resourcepool by the given resourcepool name if self.resourcepool and self.cluster and self.host: self._resourcepool_id = self.get_resource_pool_by_name( self.datacenter, self.resourcepool, self.cluster, self.host) if not self._resourcepool_id: self._fail(msg="Failed to find the resource_pool %s" % self.resourcepool) # Create VM placement specs self.placement_spec = LibraryItems.DeployPlacementSpec( folder=self._folder_id) if self._host_id: self.placement_spec.host = self._host_id if self._resourcepool_id: self.placement_spec.resource_pool = self._resourcepool_id if self._cluster_id: self.placement_spec.cluster = self._cluster_id self.vm_home_storage_spec = LibraryItems.DeploySpecVmHomeStorage( datastore=to_native(self._datastore_id)) self.disk_storage_spec = LibraryItems.DeploySpecDiskStorage( datastore=to_native(self._datastore_id)) self.deploy_spec = LibraryItems.DeploySpec( name=self.vm_name, placement=self.placement_spec, vm_home_storage=self.vm_home_storage_spec, disk_storage=self.disk_storage_spec, powered_on=power_on) vm_id = '' try: vm_id = self._template_service.deploy(self._library_item_id, self.deploy_spec) except Error as error: self._fail(msg="%s" % self.get_error_message(error)) except Exception as err: self._fail(msg="%s" % to_native(err)) if not vm_id: self.result['vm_deploy_info'] = dict( msg="Virtual Machine deployment failed", vm_id='') self._fail(msg="Virtual Machine deployment failed") self.result['changed'] = True self.result['vm_deploy_info'] = dict( msg="Deployed Virtual Machine '%s'." % self.vm_name, vm_id=vm_id, ) self._exit()
def deploy_vm_from_template(self, power_on=False): # Find the datacenter by the given datacenter name self.datacenter_id = self.get_datacenter_by_name( datacenter_name=self.datacenter) if not self.datacenter_id: self.module.fail_json(msg="Failed to find the datacenter %s" % self.datacenter) if self.datastore: # Find the datastore by the given datastore name self.datastore_id = self.get_datastore_by_name( self.datacenter, self.datastore) if self.datastore_cluster: # Find the datastore by the given datastore cluster name datastore_cluster = self.pyv.find_datastore_cluster_by_name( self.datastore_cluster, folder=self.datastore_id.datastoreFolder) if not datastore_cluster: self.module.fail_json( msg="Failed to find the datastore cluster %s" % self.datastore_cluster) self.datastore_id = self.pyv.get_recommended_datastore( datastore_cluster) if not self.datastore_id: if self.datastore: self.module.fail_json(msg="Failed to find the datastore %s" % self.datastore) if self.datastore_cluster: self.module.fail_json( msg= "Failed to find the datastore using datastore cluster %s" % self.datastore_cluster) # Find the LibraryItem (Template) by the given LibraryItem name if self.content_library_name: self.library_item_id = self.get_library_item_from_content_library_name( self.template_name, self.content_library_name) if not self.library_item_id: self.module.fail_json( msg= "Failed to find the library Item %s in content library %s" % (self.template_name, self.content_library_name)) else: self.library_item_id = self.get_library_item_by_name( self.template_name) if not self.library_item_id: self.module.fail_json( msg="Failed to find the library Item %s" % self.template_name) # Find the folder by the given folder name self.folder_id = self.get_folder_by_name(self.datacenter, self.folder) if not self.folder_id: self.module.fail_json(msg="Failed to find the folder %s" % self.folder) # Find the Host by given HostName self.host_id = None if self.host: self.host_id = self.get_host_by_name(self.datacenter, self.host) if not self.host_id: self.module.fail_json(msg="Failed to find the Host %s" % self.host) # Find the resourcepool by the given resourcepool name self.cluster_id = None self.resourcepool_id = None if self.resourcepool: self.resourcepool_id = self.get_resource_pool_by_name( self.datacenter, self.resourcepool, self.cluster, self.host) if not self.resourcepool_id: self.module.fail_json( msg="Failed to find the resource_pool %s" % self.resourcepool) # Find the Cluster by the given Cluster name if self.cluster: self.cluster_id = self.get_cluster_by_name(self.datacenter, self.cluster) if not self.cluster_id: self.module.fail_json(msg="Failed to find the Cluster %s" % self.cluster) cluster_obj = self.api_client.vcenter.Cluster.get(self.cluster_id) self.resourcepool_id = cluster_obj.resource_pool # Create VM placement specs self.placement_spec = LibraryItems.DeployPlacementSpec( folder=self.folder_id) if self.host_id: self.placement_spec.host = self.host_id if self.resourcepool_id: self.placement_spec.resource_pool = self.resourcepool_id if self.cluster_id: self.placement_spec.cluster = self.cluster_id self.vm_home_storage_spec = LibraryItems.DeploySpecVmHomeStorage( datastore=to_native(self.datastore_id)) self.disk_storage_spec = LibraryItems.DeploySpecDiskStorage( datastore=to_native(self.datastore_id)) self.deploy_spec = LibraryItems.DeploySpec( name=self.vm_name, placement=self.placement_spec, vm_home_storage=self.vm_home_storage_spec, disk_storage=self.disk_storage_spec, powered_on=power_on) vm_id = '' try: vm_id = self.template_service.deploy(self.library_item_id, self.deploy_spec) except Error as error: self.module.fail_json(msg="%s" % self.get_error_message(error)) except Exception as err: self.module.fail_json(msg="%s" % to_native(err)) if vm_id: self.module.exit_json(changed=True, vm_deploy_info=dict( msg="Deployed Virtual Machine '%s'." % self.vm_name, vm_id=vm_id, )) self.module.exit_json(changed=False, vm_deploy_info=dict( msg="Virtual Machine deployment failed", vm_id=vm_id))