CustomizaitonSpec Clone_VM

本文介绍如何使用Python和PyVmomi库克隆虚拟机,并通过CustomizationSpec自动配置克隆后的虚拟机的IP地址、DNS及域等网络信息。提供了两种实现方式:一种是在Python中完全自定义CustomizationSpec;另一种是先在vSphere WebClient中创建CustomizationSpec,再用Python补充动态信息。

克隆虚拟机可以加上CustomizationSpec来自动配置好:IP地址、DNS、Domain等信息

1、可以利用PyVmimo中的vim模块在python中完全自定义CustomizationSpec(比较复杂)

2、可以首先在vSphere Web Client中创建好一个CustomizationSpec,然后在python中去完善动态的信息(比较简单)

配置示例:

完善IP地址信息

guest_customization_spec = self.content.customizationSpecManager.GetCustomizationSpec(name=customization_spec_name)
        guest_customization_spec.spec.nicSettingMap[0].adapter.ip = vim.vm.customization.FixedIp()
        guest_customization_spec.spec.nicSettingMap[0].adapter.ip.ipAddress = "1.1.1.1"
        guest_customization_spec.spec.nicSettingMap[0].adapter.subnetMask = "255.255.255.0"
        guest_customization_spec.spec.nicSettingMap[0].adapter.gateway = ["1.1.1.254"]

完成克隆示例

'''
Created on 25.10.2014
@author: yfauser
'''
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, vm_ip, vm_mask, vm_gateway):

    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

    guest_customization_spec = content.customizationSpecManager.GetCustomizationSpec(name=customization_spec_name)
    guest_customization_spec.spec.nicSettingMap[0].adapter.ip = vim.vm.customization.FixedIp()
    guest_customization_spec.spec.nicSettingMap[0].adapter.ip.ipAddress = "1.1.1.1"
    guest_customization_spec.spec.nicSettingMap[0].adapter.subnetMask = "255.255.255.0"
    guest_customization_spec.spec.nicSettingMap[0].adapter.gateway = ["1.1.1.254"]


    # 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 = 'Ubuntu09'
    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)
【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值