|
|
|
@ -724,105 +724,99 @@ class PyVmomiHelper(object):
|
|
|
|
|
int(self.params['hardware']['memory_mb'])
|
|
|
|
|
|
|
|
|
|
# lets try and assign a static ip addresss
|
|
|
|
|
if 'customize' in self.params:
|
|
|
|
|
ip_settings = list()
|
|
|
|
|
if self.params['customize'] is True:
|
|
|
|
|
ip_settings = list()
|
|
|
|
|
if self.params['ips'] and self.params['network']:
|
|
|
|
|
for ip_string in self.params['ips']:
|
|
|
|
|
ip = IPAddress(self.params['ips'])
|
|
|
|
|
|
|
|
|
|
for network in self.params['networks']:
|
|
|
|
|
|
|
|
|
|
if ip in IPNetwork(network):
|
|
|
|
|
self.params['networks'][network]['ip'] = str(ip)
|
|
|
|
|
ipnet = IPNetwork(network)
|
|
|
|
|
self.params['networks'][network]['subnet_mask'] = str(
|
|
|
|
|
ipnet.netmask
|
|
|
|
|
)
|
|
|
|
|
ip_settings.append(self.params['networks'][network])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
network = get_obj(self.content, [vim.Network], ip_settings[0]['network'])
|
|
|
|
|
datacenter = get_obj(self.content, [vim.Datacenter], self.params['datacenter'])
|
|
|
|
|
# get the folder where VMs are kept for this datacenter
|
|
|
|
|
destfolder = datacenter.vmFolder
|
|
|
|
|
|
|
|
|
|
cluster = get_obj(self.content, [vim.ClusterComputeResource],self.params['cluster'])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
devices = []
|
|
|
|
|
adaptermaps = []
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
for device in template.config.hardware.device:
|
|
|
|
|
|
|
|
|
|
if hasattr(device, 'addressType'):
|
|
|
|
|
nic = vim.vm.device.VirtualDeviceSpec()
|
|
|
|
|
nic.operation = \
|
|
|
|
|
vim.vm.device.VirtualDeviceSpec.Operation.remove
|
|
|
|
|
nic.device = device
|
|
|
|
|
devices.append(nic)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
# for key, ip in enumerate(ip_settings):
|
|
|
|
|
# VM device
|
|
|
|
|
# single device support
|
|
|
|
|
key = 0
|
|
|
|
|
nic = vim.vm.device.VirtualDeviceSpec()
|
|
|
|
|
nic.operation = vim.vm.device.VirtualDeviceSpec.Operation.add
|
|
|
|
|
nic.device = vim.vm.device.VirtualVmxnet3()
|
|
|
|
|
nic.device.wakeOnLanEnabled = True
|
|
|
|
|
nic.device.addressType = 'assigned'
|
|
|
|
|
nic.device.deviceInfo = vim.Description()
|
|
|
|
|
nic.device.deviceInfo.label = 'Network Adapter %s' % (key + 1)
|
|
|
|
|
|
|
|
|
|
nic.device.deviceInfo.summary = ip_settings[key]['network']
|
|
|
|
|
nic.device.backing = vim.vm.device.VirtualEthernetCard.NetworkBackingInfo()
|
|
|
|
|
nic.device.backing.network = get_obj(self.content, [vim.Network], ip_settings[key]['network'])
|
|
|
|
|
|
|
|
|
|
nic.device.backing.deviceName = ip_settings[key]['network']
|
|
|
|
|
nic.device.connectable = vim.vm.device.VirtualDevice.ConnectInfo()
|
|
|
|
|
nic.device.connectable.startConnected = True
|
|
|
|
|
nic.device.connectable.allowGuestControl = True
|
|
|
|
|
devices.append(nic)
|
|
|
|
|
|
|
|
|
|
clonespec_kwargs['config'].deviceChange = devices
|
|
|
|
|
|
|
|
|
|
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 = str(ip_settings[key]['ip'])
|
|
|
|
|
guest_map.adapter.subnetMask = str(ip_settings[key]['subnet_mask'])
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
guest_map.adapter.gateway = ip_settings[key]['gateway']
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
guest_map.adapter.dnsDomain = self.params['domain']
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
adaptermaps.append(guest_map)
|
|
|
|
|
|
|
|
|
|
# DNS settings
|
|
|
|
|
globalip = vim.vm.customization.GlobalIPSettings()
|
|
|
|
|
globalip.dnsServerList = self.params['dns_servers']
|
|
|
|
|
globalip.dnsSuffixList = str(self.params['domain'])
|
|
|
|
|
|
|
|
|
|
# Hostname settings
|
|
|
|
|
ident = vim.vm.customization.LinuxPrep()
|
|
|
|
|
ident.domain = str(self.params['domain'])
|
|
|
|
|
ident.hostName = vim.vm.customization.FixedName()
|
|
|
|
|
ident.hostName.name = self.params['name']
|
|
|
|
|
|
|
|
|
|
customspec = vim.vm.customization.Specification()
|
|
|
|
|
customspec.nicSettingMap = adaptermaps
|
|
|
|
|
customspec.globalIPSettings = globalip
|
|
|
|
|
customspec.identity = ident
|
|
|
|
|
|
|
|
|
|
clonespec = vim.vm.CloneSpec(**clonespec_kwargs)
|
|
|
|
|
clonespec.customization = customspec
|
|
|
|
|
ip = IPAddress(self.params['ips'])
|
|
|
|
|
for network in self.params['networks']:
|
|
|
|
|
if ip in IPNetwork(network):
|
|
|
|
|
self.params['networks'][network]['ip'] = str(ip)
|
|
|
|
|
ipnet = IPNetwork(network)
|
|
|
|
|
self.params['networks'][network]['subnet_mask'] = str(
|
|
|
|
|
ipnet.netmask
|
|
|
|
|
)
|
|
|
|
|
ip_settings.append(self.params['networks'][network])
|
|
|
|
|
|
|
|
|
|
key = 0
|
|
|
|
|
network = get_obj(self.content, [vim.Network], ip_settings[key]['network'])
|
|
|
|
|
datacenter = get_obj(self.content, [vim.Datacenter], self.params['datacenter'])
|
|
|
|
|
# get the folder where VMs are kept for this datacenter
|
|
|
|
|
destfolder = datacenter.vmFolder
|
|
|
|
|
|
|
|
|
|
cluster = get_obj(self.content, [vim.ClusterComputeResource],self.params['cluster'])
|
|
|
|
|
|
|
|
|
|
devices = []
|
|
|
|
|
adaptermaps = []
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
for device in template.config.hardware.device:
|
|
|
|
|
if hasattr(device, 'addressType'):
|
|
|
|
|
nic = vim.vm.device.VirtualDeviceSpec()
|
|
|
|
|
nic.operation = vim.vm.device.VirtualDeviceSpec.Operation.remove
|
|
|
|
|
nic.device = device
|
|
|
|
|
devices.append(nic)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
# single device support
|
|
|
|
|
nic = vim.vm.device.VirtualDeviceSpec()
|
|
|
|
|
nic.operation = vim.vm.device.VirtualDeviceSpec.Operation.add
|
|
|
|
|
nic.device = vim.vm.device.VirtualVmxnet3()
|
|
|
|
|
nic.device.wakeOnLanEnabled = True
|
|
|
|
|
nic.device.addressType = 'assigned'
|
|
|
|
|
nic.device.deviceInfo = vim.Description()
|
|
|
|
|
nic.device.deviceInfo.label = 'Network Adapter %s' % (key + 1)
|
|
|
|
|
|
|
|
|
|
nic.device.deviceInfo.summary = ip_settings[key]['network']
|
|
|
|
|
nic.device.backing = vim.vm.device.VirtualEthernetCard.NetworkBackingInfo()
|
|
|
|
|
nic.device.backing.network = get_obj(self.content, [vim.Network], ip_settings[key]['network'])
|
|
|
|
|
|
|
|
|
|
nic.device.backing.deviceName = ip_settings[key]['network']
|
|
|
|
|
nic.device.connectable = vim.vm.device.VirtualDevice.ConnectInfo()
|
|
|
|
|
nic.device.connectable.startConnected = True
|
|
|
|
|
nic.device.connectable.allowGuestControl = True
|
|
|
|
|
devices.append(nic)
|
|
|
|
|
|
|
|
|
|
# Update the spec with the added NIC
|
|
|
|
|
clonespec_kwargs['config'].deviceChange = devices
|
|
|
|
|
|
|
|
|
|
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 = str(ip_settings[key]['ip'])
|
|
|
|
|
guest_map.adapter.subnetMask = str(ip_settings[key]['subnet_mask'])
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
guest_map.adapter.gateway = ip_settings[key]['gateway']
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
guest_map.adapter.dnsDomain = self.params['domain']
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
adaptermaps.append(guest_map)
|
|
|
|
|
|
|
|
|
|
# DNS settings
|
|
|
|
|
globalip = vim.vm.customization.GlobalIPSettings()
|
|
|
|
|
globalip.dnsServerList = self.params['dns_servers']
|
|
|
|
|
globalip.dnsSuffixList = str(self.params['domain'])
|
|
|
|
|
|
|
|
|
|
# Hostname settings
|
|
|
|
|
ident = vim.vm.customization.LinuxPrep()
|
|
|
|
|
ident.domain = str(self.params['domain'])
|
|
|
|
|
ident.hostName = vim.vm.customization.FixedName()
|
|
|
|
|
ident.hostName.name = self.params['name']
|
|
|
|
|
|
|
|
|
|
customspec = vim.vm.customization.Specification()
|
|
|
|
|
customspec.nicSettingMap = adaptermaps
|
|
|
|
|
customspec.globalIPSettings = globalip
|
|
|
|
|
customspec.identity = ident
|
|
|
|
|
|
|
|
|
|
clonespec = vim.vm.CloneSpec(**clonespec_kwargs)
|
|
|
|
|
clonespec.customization = customspec
|
|
|
|
|
|
|
|
|
|
clonespec = vim.vm.CloneSpec(**clonespec_kwargs)
|
|
|
|
|
task = template.Clone(folder=destfolder, name=self.params['name'], spec=clonespec)
|
|
|
|
|