zoukankan      html  css  js  c++  java
  • PyVmomi Clone_VM with CustomizaitonSpec

    调用CustomizaitonSpec来Clone VM

    '''
    Created on 2017-09-03
    @author: Vincen
    '''
    from pyVmomi import vim
    from pyVim.connect import SmartConnectNoSSL, Disconnect
    import atexit
    import time
    
    
    def wait_for_task(task, action_name='job', hide_result=False):
        """
         Waits and provides updates on a vSphere task
        """
        while task.info.state == vim.TaskInfo.State.running:
            print("%s is running" % action_name)
            time.sleep(2)
    
        if task.info.state == vim.TaskInfo.State.success:
            if task.info.result is not None and not hide_result:
                out = '%s completed successfully, result: %s' % (action_name, task.info.result)
                print(out)
            else:
                out = '%s completed successfully.' % action_name
                print(out)
        else:
            out = '%s did not complete successfully: %s' % (action_name, task.info.error)
            print(out)
            raise task.info.error  # should be a Fault... check XXX
    
        # may not always be applicable, but can't hurt.
        return task.info.result
    
    
    def get_obj(content, vim_type, name):
        """
        Return an object by name, if name is None the
        first found object is returned
        """
        obj = None
        container = content.viewManager.CreateContainerView(content.rootFolder, vim_type, True)
        for c in container.view:
            if name:
                if c.name == name:
                    obj = c
                    break
            else:
                obj = c
                break
    
        return obj
    
    
    def connect_vc(host, user, pwd, port):
        si = SmartConnectNoSSL(host=host, user=user, pwd=pwd, port=port)
    
        # disconnect this thing
        atexit.register(Disconnect, si)
    
        return si.RetrieveContent()
    
    # This will connect us to vCenter
    
    # With this we are searching for the MOID of the VM to clone from
    
    def clone_vm(content, template_name, resource_pool, customization_spec_name, vm_name, vm_folder, datastore_name, cluster_name):
    
        template_vm = get_obj(content, [vim.VirtualMachine], template_name)
    
        # This gets the MOID of the Guest Customization Spec that is saved in the vCenter DB
        guest_customization_spec = content.customizationSpecManager.GetCustomizationSpec(name=customization_spec_name)
    
        # This will retrieve the Cluster MOID
        datastore = get_obj(content, [vim.Datastore], datastore_name)
    
        cluster = get_obj(content, [vim.ClusterComputeResource], cluster_name)
        if resource_pool:
            resource_pool = get_obj(content, [vim.ResourcePool], resource_pool)
        else:
            resource_pool = cluster.resourcePool
    
        relocate_spec = vim.vm.RelocateSpec()
        relocate_spec.datastore = datastore
        relocate_spec.pool = resource_pool
    
        # The folder of the new vm.
        dest_folder = get_obj(content, [vim.Folder], vm_folder)
    
        # This constructs the clone specification and adds the customization spec and location spec to it
        cloneSpec = vim.vm.CloneSpec(powerOn=True, template=False, location=relocate_spec, customization=guest_customization_spec.spec)
    
        # Finally this is the clone operation with the relevant specs attached
        clone = template_vm.Clone(name=vm_name, folder=dest_folder, spec=cloneSpec)
        wait_for_task(clone, "VM clone task")
    
    
    if __name__ == '__main__':
        username = 'administrator@vsphere.local'
        password = 'vmware'
        vcenter_ip = '172.16.65.99'
        vcenter_port = '443'
        cluster_name = 'BJ_Cluster'
        datastore_name = "SSD"
        template_name = 'Ubuntu16.04'
        customization_spec_name = 'Ubuntu_Customization'
        vm_name = 'Ubuntu08'
        vm_folder = "Linux"
        resource_pool = ""
    
        content = connect_vc(host=vcenter_ip, user=username, pwd=password, port=vcenter_port)
        clone_vm(content, template_name, resource_pool, customization_spec_name, vm_name, vm_folder, datastore_name, cluster_name)
  • 相关阅读:
    drf之频率器拓展
    drf之分页器
    drf之异常处理
    drf之过滤与排序
    drf之频率
    drf之权限
    drf之认证
    drf之路由
    drf之视图家族
    性能优化
  • 原文地址:https://www.cnblogs.com/vincenshen/p/7469477.html
Copyright © 2011-2022 走看看