背景:当客户克隆的虚拟机是Windows类型,并且还要指定IP、主机名等信息。
问题:根据之前的克隆方法、发现模板是Windows类型时,怎么指定主机名都失败,报错信息:指定的参数不正确: spec.identity
过程:经过研究官方的文档,发现一个比较有趣的事情,就是克隆指定一些配置信息,windows和Linux是区分开的,当模板是Windows时,identity采用Sysprep的配置;模板是Linux等系统时,identity采用LinuxPrep的配置。
Sysprep的配置信息如下:
这里对以前的克隆IP配置信息函数进行了修改:
根据模板的系统类型进行选择性克隆
def get_customspec(self, template, vm_ip=None, vm_subnetmask=None, vm_gateway=None, vm_dns=None,
vm_domain=None, vm_hostname=None):
"""
IP等信息的配置函数
:param template: 模板对象
:param vm_ip:
:param vm_subnetmask:
:param vm_gateway:
:param vm_dns:
:param vm_domain:
:param vm_hostname:
:return:
"""
adaptermaps = []
guest_map = vim.vm.customization.AdapterMapping()
guest_map.adapter = vim.vm.customization.IPSettings()
guest_map.adapter.ip = vim.vm.customization.FixedIp()
guest_map.adapter.ip.ipAddress = vm_ip
guest_map.adapter.subnetMask = vm_subnetmask
guest_map.adapter.gateway = vm_gateway
if vm_domain:
guest_map.adapter.dnsDomain = vm_domain
adaptermaps.append(guest_map)
# DNS settings
globalip = vim.vm.customization.GlobalIPSettings()
if vm_dns