我已经找到了pyvmomi示例,介绍了如何将磁盘添加到已存在的VM中,但我希望自定义VM模板,然后进行克隆。设置CPU和内存是非常简单的,但是在现有模板中添加一个或多个磁盘(从引导磁盘中删除)让我无法理解
# Add an additional 200 GB disk
new_disk_kb = int(20) * 1024 * 1024
disk_spec = vim.vm.device.VirtualDeviceSpec()
disk_spec.fileOperation = "create"
disk_spec.operation = vim.vm.device.VirtualDeviceSpec.Operation.add
disk_spec.device = vim.vm.device.VirtualDisk()
disk_spec.device.backing = vim.vm.device.VirtualDisk.RawDiskMappingVer1BackingInfo()
disk_spec.device.backing.diskMode = 'persistent'
disk_spec.device.unitNumber = 3
disk_spec.device.capacityInKB = new_disk_kb
# vm configuration
vmconf = vim.vm.ConfigSpec()
vmconf.numCPUs = 8 # change the template's cpus from 4 to 8
vmconf.memoryMB = 16 * 1024 # change the template's memory from 4 GB to 16 GB
# change the template's disks from
# 1 250 GB boot, 1 x 200 GB disk
# to
# 1 250 gB boot, 2 x 200 GB disks
vmconf.deviceChange = [ disk_spec ] # something is not right
clonespec = vim.vm.CloneSpec()
clonespec.location = relospec
clonespec.powerOn = True
clonespec.config = vmconf
clonespec.customization = customspec
task = template.Clone(folder = destfolder, name = vmname, spec = clonespec)
代码在没有vmconf.deviceChange的情况下工作。一旦我尝试添加磁盘,我就会看到错误
Invalid configuration for device '0'.
或
Incompatible device backing specified for device '0'.
我刚刚遇到了向vm添加RDM磁盘的问题
问题是:
disk_spec.device.backing=vim.vm.device.VirtualDisk.RawDiskMappingVer1BackingInfo()
您需要为您的规范提供backing.deviceName和backing.lunUuid。之后就可以使用了。我很自信,因为我看到了完全相同的错误消息,它为我修复了它
您可以从host.config.storageDevice.scsiLun获取感兴趣lun的lun uuid和deviceName
您得到的错误似乎表明您需要修复
unit_number
。请记住,7是为scsi控制器保留的,16是VMWare支持的最大磁盘数(查看sample code)这个问题有多个移动部分,包括创建模板、修改模板和克隆VM
让我们先解决最简单的问题。这部分代码不正确:
在查看了多个
pyvmomi
示例脚本之后,我发现您没有正确设置unitNumber
。根据这些脚本,您需要确定磁盘的数量,并分配下一个可用的unitNumber
,在您的情况下,我假设它是2
,而不是3
下面的代码是从add raw disk to vm{}脚本中提取的
关于你想解决的其他问题。有几个pyvmomi script可能是有用的。特别是Clone VM,它提供了从您试图创建的模板克隆VM的详细信息
我不确定这个脚本有多有用,因为看起来您正在寻找一个完整的解决方案来解决您的用例
我建议看一下这个旧的
Github
{a4},它有很多有用的代码用于创建模板、修改模板和克隆VM关于您对使用已有一个磁盘(启动磁盘)的现有模板以及在克隆过程中添加辅助磁盘的评论
根据我对VM文档的解释,我目前认为这是不可能的,原因何在:
VM模板是虚拟机的主副本映像,其中包括VM磁盘、虚拟设备和设置。此模板可用于VM克隆过程。此模板是静态的,应视为配置基线
在克隆过程中无法修改此模板。若出于任何原因需要修改此静态模板,则需要使用新添加的内容重新创建它。这意味着需要将原始模板转换为VM,需要编辑此VM,然后再转换回新模板
如果不可能,您可以在新VM上克隆基线模板,并使用
pyvmomi
添加磁盘scripts中的一个来启用VM上的新磁盘我不知道您的具体用例,但我认为重新创建模板是合乎逻辑的选择,但是您的用例在克隆后创建新磁盘可能会更好
我前面提到的GitHub项目使用一个基线模板来克隆VM,并且它还有一个
addDisks
函数。后者用于向克隆过程中创建的VM添加新磁盘下面是一个较旧的
pyvmomi
{a6},其中有人想修改与正在克隆的模板相关的磁盘。建议OP在克隆后过程中执行此任务GitHub项目展示了如何使用基线模板并根据需要修改VMs配置。从代码来看,它似乎是在克隆过程中使用
CloneSpec()
修改VM,而不是在克隆后过程中相关问题 更多 >
编程相关推荐