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
Exemplo n.º 2
0
    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))
Exemplo n.º 3
0
    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))
Exemplo n.º 4
0
 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=''))
Exemplo n.º 5
0
    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))