Skip to content

Instantly share code, notes, and snippets.

@sky-joker
Last active December 23, 2016 15:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sky-joker/d2547745ef430942e99cef18f8e236a6 to your computer and use it in GitHub Desktop.
Save sky-joker/d2547745ef430942e99cef18f8e236a6 to your computer and use it in GitHub Desktop.
#!/usr/bin/python3
from pyVim.connect import SmartConnect, Disconnect
from pyVmomi import vim, vmodl
import ssl
import atexit
# 接続情報
host = 'vCenter IP or Host Name'
username = 'administrator@vsphere.local'
password = ''
# 作成するVM情報
vm_name = 'TEST_VM'
cpu_num = 1
mem_size_mb = 2048
guestId = 'centos64Guest' # http://urx.red/Az19
vm_version = 'vmx-13' # http://urx.red/Az1L, https://gist.github.com/sky-joker/d188385f33296f422b3b54532d98b84d
datastore_name = 'VM'
port_group_name = 'VM Network'
disk_size = 32 * 1024 * 1024
def main():
# SSL証明書対策
context = None
if hasattr(ssl, '_create_unverified_context'):
context = ssl._create_unverified_context()
# vCenterへ接続
si = SmartConnect(host = host,
user = username,
pwd = password,
sslContext = context)
# 処理完了時にvCenterから切断
atexit.register(Disconnect, si)
# VM情報の取得
content = si.content
datacenter = content.rootFolder.childEntity[0]
vmfolder = datacenter.vmFolder
hosts = datacenter.hostFolder.childEntity
resource_pool = hosts[0].resourcePool
datastore_path = '[' + datastore_name + ']' + vm_name
# VMファイル保存情報, http://urx.red/Az2j
vmx_file = vim.vm.FileInfo(logDirectory=None,
snapshotDirectory=None,
suspendDirectory=None,
vmPathName=datastore_path)
# 仮想デバイス設定の配列
virtual_device_config = []
# Network設定
# ポートグループのオブジェクトを取得
container = content.viewManager.CreateContainerView(content.rootFolder, [vim.Network], True)
for c in container.view:
if c.name == port_group_name:
pgr_obj = c
# nicを新規で付けてポートグループを設定
nic_spec = vim.vm.device.VirtualDeviceSpec()
nic_spec.operation = vim.vm.device.VirtualDeviceSpec.Operation.add
nic_spec.device = vim.vm.device.VirtualVmxnet3()
nic_spec.device.backing = vim.vm.device.VirtualEthernetCard.NetworkBackingInfo()
nic_spec.device.backing.network = pgr_obj
nic_spec.device.backing.deviceName = port_group_name
nic_spec.device.connectable = vim.vm.device.VirtualDevice.ConnectInfo()
nic_spec.device.connectable.startConnected = True
nic_spec.device.connectable.allowGuestControl = True
virtual_device_config.append(nic_spec)
# CDROMのSATAコントローラー設定
sata_spec = vim.vm.device.VirtualDeviceSpec()
sata_spec.operation = vim.vm.device.VirtualDeviceSpec.Operation.add
sata_spec.device = vim.vm.device.VirtualAHCIController()
sata_spec.device.key = 15000
sata_spec.device.unitNumber = 24
sata_spec.device.device = [16000]
sata_spec.device.busNumber = 0
virtual_device_config.append(sata_spec)
# CDROM設定
cd_spec = vim.vm.device.VirtualDeviceSpec()
cd_spec.operation = vim.vm.device.VirtualDeviceSpec.Operation.add
cd_spec.device = vim.vm.device.VirtualCdrom()
cd_spec.device.backing = vim.vm.device.VirtualCdrom.RemotePassthroughBackingInfo()
cd_spec.device.key = 16000
cd_spec.device.controllerKey = 15000
cd_spec.device.unitNumber = 0
cd_spec.device.connectable = vim.vm.device.VirtualDevice.ConnectInfo()
cd_spec.device.connectable.startConnected = False
cd_spec.device.connectable.allowGuestControl = True
cd_spec.device.connectable.connected = False
cd_spec.device.connectable.status = 'untried'
virtual_device_config.append(cd_spec)
# HDDのLSIコントローラー設定
lsi_spec = vim.vm.device.VirtualDeviceSpec()
lsi_spec.operation = vim.vm.device.VirtualDeviceSpec.Operation.add
lsi_spec.device = vim.vm.device.ParaVirtualSCSIController() # http://urx.red/Az2P
lsi_spec.device.sharedBus = vim.vm.device.VirtualSCSIController.Sharing.noSharing
virtual_device_config.append(lsi_spec)
# HDD設定
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.FlatVer2BackingInfo()
disk_spec.device.backing.thinProvisioned = True
disk_spec.device.backing.diskMode = 'persistent'
disk_spec.device.unitNumber = 0
disk_spec.device.capacityInKB = disk_size
disk_spec.device.controllerKey = 0
virtual_device_config.append(disk_spec)
# VM作成
config = vim.vm.ConfigSpec(name = vm_name,
memoryMB = mem_size_mb,
files = vmx_file,
guestId = guestId,
version = vm_version,
deviceChange = virtual_device_config)
vmfolder.CreateVM_Task(config=config, pool=resource_pool)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment