def get_placement_spec_for_resource_pool(stub_config,
                                         datacenter_name,
                                         vm_folder_name,
                                         datastore_name):
    """
    Returns a VM placement spec for a resourcepool. Ensures that the
    vm folder and datastore are all in the same datacenter which is specified.
    """
    resource_pool = resource_pool_helper.get_resource_pool(stub_config,
                                                           datacenter_name)

    folder = folder_helper.get_folder(stub_config,
                                      datacenter_name,
                                      vm_folder_name)

    datastore = datastore_helper.get_datastore(stub_config,
                                               datacenter_name,
                                               datastore_name)

    # Create the vm placement spec with the datastore, resource pool and vm
    # folder
    placement_spec = VM.PlacementSpec(folder=folder,
                                      resource_pool=resource_pool,
                                      datastore=datastore)

    print("get_placement_spec_for_resource_pool: Result is '{}'".
          format(placement_spec))
    return placement_spec
Example #2
0
    def _execute(self):
        # Get the identifiers
        vm_id = get_vm(self.vsphere_client, self.vm_name)
        assert vm_id
        resource_pool_id = get_resource_pool(self.vsphere_client,
                                             self.datacenter_name,
                                             self.resource_pool_name)
        assert resource_pool_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_spec.placement = VmtxLibraryItem.CreatePlacementSpec(
            resource_pool=resource_pool_id)

        # 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))
Example #3
0
    def _execute(self):
        # Get the identifiers
        item_id = self.helper.get_item_id_by_name(self.item_name)
        assert item_id

        resource_pool_id = get_resource_pool(self.vsphere_client,
                                             self.datacenter_name,
                                             self.resource_pool_name)
        assert resource_pool_id

        version_before_check_out = self.client.library_item_service.get(
            item_id).content_version

        self.print_live_versions(item_id)

        # Build the check out spec
        check_out_spec = CheckOuts.CheckOutSpec()
        placement_spec = CheckOuts.PlacementSpec()
        placement_spec.resource_pool = resource_pool_id
        check_out_spec.placement = placement_spec
        check_out_spec.name = self.vm_name

        # Check out VM from item
        vm_id = self.client.check_outs_service.check_out(
            item_id, check_out_spec)
        print("VM (ID: {}) checked out from item".format(vm_id))

        # Get library id associated with checked out VM
        info = self.vsphere_client.vcenter.vm.LibraryItem.get(vm_id)
        assert info.check_out
        print("Library item associated with checked out VM is {}".format(
            info.check_out.library_item))

        # Check in VM into the library item
        check_in_spec = CheckOuts.CheckInSpec()
        check_in_spec.message = "Check in message"
        version_after_check_in = self.client.check_outs_service.check_in(
            item_id, vm_id, check_in_spec)
        print("VM (ID: {}) checked into item {}".format(vm_id, item_id))
        self.print_live_versions(item_id)

        # Rollback to previous version
        rollback_message = "Rollback to v{}".format(version_before_check_out)
        rollback_spec = Versions.RollbackSpec(rollback_message)
        version_after_rollback = self.client.versions_service.rollback(
            item_id, version_before_check_out, rollback_spec)
        print("Item rolled back to version {}. New item version is {}".format(
            version_before_check_out, version_after_rollback))
        self.print_live_versions(item_id)

        # Delete previous version
        self.client.versions_service.delete(item_id, version_after_check_in)
        print("Deleted version {} of item".format(version_after_check_in))
        self.print_live_versions(item_id)
        self.print_change_history(item_id)
Example #4
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))