salt.states.esxvm module

Salt state to create, update VMware ESXi Virtual Machines.

Dependencies

  • pyVmomi

  • jsonschema

States

vm_configured

Enforces correct virtual machine configuration. Creates, updates and registers a virtual machine.

This state identifies the action which should be taken for the virtual machine and applies that action via the create, update, register state functions.

Supported proxies: esxvm

Example:

  1. Get the virtual machine my_vm status with an esxvm proxy:

Proxy minion configuration for esxvm proxy:

proxy:
  proxytype: esxvm
  datacenter: my_dc
  vcenter: vcenter.fake.com
  mechanism: sspi
  domain: fake.com
  principal: host

State configuration:

myvm_state:
  esxvm.vm_configured:
  - vm_name: my_vm
  - cpu: {{ {'count': 4, 'cores_per_socket': 2} }}
  - memory: {{ {'size': 16384, 'unit': 'MB'} }}
  - image: rhel7_64Guest
  - version: vmx-12
  - interfaces: {{ [{
                     'adapter': 'Network adapter 1',
                     'name': 'my_pg1',
                     'switch_type': 'distributed',
                     'adapter_type': 'vmxnet3',
                     'mac': '00:50:56:00:01:02,
                     'connectable': { 'start_connected': true,
                                      'allow_guest_control': true,
                                      'connected': true}},
                     {
                     'adapter': 'Network adapter 2',
                     'name': 'my_pg2',
                     'switch_type': 'distributed',
                     'adapter_type': 'vmxnet3',
                     'mac': '00:50:56:00:01:03',
                     'connectable': { 'start_connected': true,
                                      'allow_guest_control': true,
                                      'connected': true}}
                ] }}
  - disks: {{ [{
                'adapter': 'Hard disk 1',
                'unit': 'MB',
                'size': 51200,
                'filename': 'my_vm/sda.vmdk',
                'datastore': 'my_datastore',
                'address': '0:0',
                'thin_provision': true,
                'eagerly_scrub': false,
                'controller': 'SCSI controller 0'},
                {
                'adapter': 'Hard disk 2',
                'unit': 'MB',
                'size': 10240,
                'filename': 'my_vm/sdb.vmdk',
                'datastore': 'my_datastore',
                'address': '0:1',
                'thin_provision': true,
                'eagerly_scrub': false,
                'controller': 'SCSI controller 0'}
          ] }}
  - scsi_devices: {{ [{
                       'adapter': 'SCSI controller 0',
                       'type': 'paravirtual',
                       'bus_sharing': 'no_sharing',
                       'bus_number': 0}
                      ] }}
  - serial_ports: {{ [{
                       'adapter': 'Serial port 1',
                       'type': 'network',
                       'yield': false,
                       'backing': {
                                   'uri': 'my_uri',
                                   'direction': 'server',
                                   'filename': 'my_file'},
                        'connectable': {
                                        'start_connected': true,
                                        'allow_guest_control': true,
                                        'connected': true}}
                       ] }}
  - datacenter: {{ 'my_dc' }}
  - datastore: 'my_datastore'
  - placement: {{ {'cluster': 'my_cluster'} }}
  - cd_dvd_drives: {{ [] }}
  - advanced_configs: {{ {'my_param': '1'} }}
  - template: false
  - tools: false
  - power_on: false
  - deploy: false

vm_updated

Updates a virtual machine to a given configuration.

vm_created

Creates a virtual machine with a given configuration.

vm_registered

Registers a virtual machine with it's configuration file path.

Dependencies

pyVmomi

PyVmomi can be installed via pip:

pip install pyVmomi

Note

Version 6.0 of pyVmomi has some problems with SSL error handling on certain versions of Python. If using version 6.0 of pyVmomi, Python 2.6, Python 2.7.9, or newer must be present. This is due to an upstream dependency in pyVmomi 6.0 that is not supported in Python versions 2.7 to 2.7.8. If the version of Python is not in the supported range, you will need to install an earlier version of pyVmomi. See Issue #29537 for more information.

Based on the note above, to install an earlier version of pyVmomi than the version currently listed in PyPi, run the following:

pip install pyVmomi==6.0.0.2016.4

The 5.5.0.2014.1.1 is a known stable version that this original ESXi State Module was developed against. To be able to connect through SSPI you must use pyvmomi 6.0.0.2016.4 or above. The ESXVM State Module was tested with this version.

About

This state module was written to be used in conjunction with Salt's ESXi Proxy Minion For a tutorial on how to use Salt's ESXi Proxy Minion, please refer to the ESXi Proxy Minion Tutorial for configuration examples, dependency installation instructions, how to run remote execution functions against ESXi hosts via a Salt Proxy Minion, and a larger state example.

salt.states.esxvm.vm_cloned(name)

Clones a virtual machine from a template virtual machine if it doesn't exist and a template is defined.

salt.states.esxvm.vm_configured(name, vm_name, cpu, memory, image, version, interfaces, disks, scsi_devices, serial_ports, datacenter, datastore, placement, cd_dvd_drives=None, sata_controllers=None, advanced_configs=None, template=None, tools=True, power_on=False, deploy=False)

Selects the correct operation to be executed on a virtual machine, non existing machines will be created, existing ones will be updated if the config differs.

salt.states.esxvm.vm_created(name, vm_name, cpu, memory, image, version, interfaces, disks, scsi_devices, serial_ports, datacenter, datastore, placement, ide_controllers=None, sata_controllers=None, cd_dvd_drives=None, advanced_configs=None, power_on=False)

Creates a virtual machine with the given properties if it doesn't exist.

salt.states.esxvm.vm_registered(vm_name, datacenter, placement, vm_file, power_on=False)

Registers a virtual machine if the machine files are available on the main datastore.

salt.states.esxvm.vm_updated(name, vm_name, cpu, memory, image, version, interfaces, disks, scsi_devices, serial_ports, datacenter, datastore, cd_dvd_drives=None, sata_controllers=None, advanced_configs=None, power_on=False)

Updates a virtual machine configuration if there is a difference between the given and deployed configuration.