如何使用 pysphere 设置 vsphere 5.x 中的虚拟机的启动顺序

如何使用 pysphere 设置 vsphere 5.x 中的虚拟机的启动顺序

我正在使用以下 python 代码来设置 extra_config 参数 bios.bootOrder:

#!/bin/env python
from pysphere import VIServer, VITask
from pysphere.resources import VimService_services as VI

server = VIServer()
server.connect("vcenter-server", "myusername", "supersecrete")

vm = server.get_vm_by_name( 'targetvm' )
vm.set_extra_config({'bios.bootOrder': 'cdrom,hdd'}, sync_run=True)

不幸的是,重新配置任务成功完成,但启动顺序没有改变。据报道,该脚本适用于 ESXi 4.x。

有人可能遇到过同样的问题吗?

答案1

我找到了一个解决方案。API 随 vSphere 5 而改变。因此上述代码不再起作用。

...可能对其他人有帮助:https://gist.github.com/st0ne-dot-at/9984414

答案2

这是一个相当粗糙的脚本,但可以作为使用 pyvmomi 将启动顺序设置为 cd 的示例,对于从网络(pxe)启动 VM 也同样适用:

/usr/bin/python 的 #!
导入系统
导入时间
导入时间
导入 atexit
导入 argparse
从 pyVmomi 导入 vim、vmodl
从 pyVim 导入连接
从 pyVim.connect 导入 Disconnect、SmartConnect、GetSi

系统 = sys.argv[1]

        输入 = {'vcenter_ip':'ip.ad.re.ss',
          ‘vcenter_password’:‘密码’,
          ‘vcenter_user’:‘用户’,
          ‘vm_name’ :系统,
          ‘操作’ : ‘停止’,
          ‘force’ :是的,
          }

# 功能

def get_obj(内容,vimtype,名称):
    对象 = 无
    容器 = 内容.viewManager.CreateContainerView(内容.rootFolder,vimtype,True)
    对于容器中的 c.view:
        如果 c.name == 名称:
            对象 = c
            休息
    返回对象


si = 连接。连接(输入['vcenter_ip'],443,输入['vcenter_user'],输入['vcenter_password'])
内容 = si.RetrieveContent()
vm = get_obj(内容,[vim.VirtualMachine],输入['vm_name'])
vm.关机()


# 设置为从 cd/network 启动。# 输出的内容是你用于 network/pxe 启动的内容

#bn = vim.option.OptionValue(key='bios.bootDeviceClasses',value='allow:cd')
bn = vim.option.OptionValue(key='bios.bootDeviceClasses',value='allow:net')
vmconf = vim.vm.ConfigSpec()
vmconf.extraConfig = [bn]
vm.ReconfigVM_Task(vmconf)
时间.睡眠(10)
虚拟机.PowerOnVM_Task()
时间.睡眠(30)


# 再次将系统设置为从硬盘启动

bn = vim.option.OptionValue(key='bios.bootDeviceClasses',value='allow:hd,cd,fd,net')
vmconf = vim.vm.ConfigSpec()
vmconf.extraConfig = [bn]
vm.ReconfigVM_Task(vmconf)

相关内容