Packer plugin for remote builds on VMware vSphere
Clone or download
mkuzmin file upload trough specific host
By default a host is selected randomly. Used account may have read-only but no upload permissions there.
Latest commit e1cdd04 Nov 13, 2018

Team project GitHub latest release GitHub downloads TeamCity build status

Packer Builder for VMware vSphere

This a plugin for HashiCorp Packer. It uses native vSphere API, and creates virtual machines remotely.

vsphere-iso builder creates new VMs from scratch. vsphere-clone builder clones VMs from existing templates.

  • VMware Player is not required.
  • Official vCenter API is used, no ESXi host modification is required.


  • Download binaries from the releases page.
  • Install the plugins, or simply put them into the same directory with JSON templates. On Linux and macOS run chmod +x on the files.


Install Go and dep, run

Or build inside a container by Docker Compose:

docker-compose run build

The binaries will be in bin/ directory.

Artifacts can be also downloaded from TeamCity builds.


See complete Ubuntu, Windows, and macOS templates in the examples folder.

Parameter Reference


  • vcenter_server(string) - vCenter server hostname.
  • username(string) - vSphere username.
  • password(string) - vSphere password.
  • insecure_connection(boolean) - Do not validate vCenter server's TLS certificate. Defaults to false.
  • datacenter(string) - VMware datacenter name. Required if there is more than one datacenter in vCenter.

VM Location

  • vm_name(string) - Name of the new VM to create.
  • notes(string) - Add some notes.
  • folder(string) - VM folder to create the VM in.
  • host(string) - ESXi host where target VM is created. A full path must be specified if the host is in a folder. For example folder/host. See the Specifying Clusters and Hosts section above for more details.
  • cluster(string) - ESXi cluster where target VM is created. See Working with Clusters section.
  • resource_pool(string) - VMWare resource pool. Defaults to the root resource pool of the host or cluster.
  • datastore(string) - VMWare datastore. Required if host is a cluster, or if host has multiple datastores.

VM Location (vsphere-clone only)

  • template(string) - Name of source VM. Path is optional.
  • linked_clone(boolean) - Create VM as a linked clone from latest snapshot. Defaults to false.


  • CPUs(number) - Number of CPU sockets.
  • CPU_limit(number) - Upper limit of available CPU resources in MHz.
  • CPU_reservation(number) - Amount of reserved CPU resources in MHz.
  • CPU_hot_plug(boolean) - Enable CPU hot plug setting for virtual machine. Defaults to false.
  • RAM(number) - Amount of RAM in MB.
  • RAM_reservation(number) - Amount of reserved RAM in MB.
  • RAM_reserve_all(boolean) - Reserve all available RAM. Defaults to false. Cannot be used together with RAM_reservation.
  • RAM_hot_plug(boolean) - Enable RAM hot plug setting for virtual machine. Defaults to false.
  • disk_size(number) - The size of the disk in MB.
  • NestedHV(boolean) - Enable nested hardware virtualization for VM. Defaults to false.
  • configuration_parameters(map) - Custom parameters.
  • boot_order(string) - Priority of boot devices. Defaults to disk,cdrom

Hardware (vsphere-iso only)

  • vm_version(number) - Set VM hardware version. Defaults to the most current VM hardware version supported by vCenter. See VMWare article 1003746 for the full list of supported VM hardware versions.
  • guest_os_type(string) - Set VM OS type. Defaults to otherGuest. See here for a full list of possible values.
  • disk_controller_type(string) - Set VM disk controller type. Example pvscsi.
  • disk_thin_provisioned(boolean) - Enable VMDK thin provisioning for VM. Defaults to false.
  • network(string) - Set network VM will be connected to.
  • network_card(string) - Set VM network card type. Example vmxnet3.
  • usb_controller(boolean) - Create USB controller for virtual machine. Defaults to false.
  • cdrom_type(string) - Which controller to use. Example sata. Defaults to ide.
  • firmware(string) - Set the Firmware at machine creation. Example efi. Defaults to bios.

Boot (vsphere-iso only)

  • boot_wait(string) Amount of time to wait for the VM to boot. Examples 45s and 10m. Defaults to 10 seconds. See the Go Lang ParseDuration documentation for full details.
  • boot_command(array of strings) - List of commands to type when the VM is first booted. Used to initalize the operating system installer.
  • floppy_dirs(array of strings) - Seems to not do anything useful yet. Not implemented.
  • floppy_files(array of strings) - List of local files to be mounted to the VM floppy drive. Can be used to make Debian preseed or RHEL kickstart files available to the VM.
  • floppy_img_path(string) - Data store path to a floppy image that will be mounted to the VM. Cannot be used with floppy_files or floppy_dir options. Example [datastore1] ISO/VMware Tools/10.2.0/pvscsi-Windows8.flp.
  • iso_paths(array of strings) - List of data store paths to ISO files that will be mounted to the VM. Example "[datastore1] ISO/ubuntu-16.04.3-server-amd64.iso".


  • communicator - ssh (default), winrm, or none (create/clone, customize hardware, but do not boot).

  • ssh_username(string) - Username in guest OS.

  • ssh_password(string) - Password to access guest OS. Only specify ssh_password or ssh_private_key_file, but not both.

  • ssh_private_key_file(string) - Path to the SSH private key file to access guest OS. Only specify ssh_password or ssh_private_key_file, but not both.

  • winrm_username(string) - Username in guest OS.

  • winrm_password(string) - Password to access guest OS.

  • shutdown_command(string) - Specify a VM guest shutdown command. VMware guest tools are used by default.

  • shutdown_timeout(string) - Amount of time to wait for graceful VM shutdown. Examples 45s and 10m. Defaults to 5m(5 minutes). See the Go Lang ParseDuration documentation for full details.


  • create_snapshot(boolean) - Create a snapshot when set to true, so the VM can be used as a base for linked clones. Defaults to false.
  • convert_to_template(boolean) - Convert VM to a template. Defaults to false.

Working with Clusters

Standalone Hosts

Only use the host option. Optionally specify a resource_pool:

"host": "esxi-1.vsphere65.test",
"resource_pool": "pool1",

Clusters Without DRS

Use the cluster and host parameters:

"cluster": "cluster1",
"host": "esxi-2.vsphere65.test",

Clusters With DRS

Only use the cluster option. Optionally specify a resource_pool:

"cluster": "cluster2",
"resource_pool": "pool1",

Required vSphere Permissions

  • VM folder (this object and children):
    Virtual machine -> Inventory
    Virtual machine -> Configuration
    Virtual machine -> Interaction
    Virtual machine -> Snapshot management
    Virtual machine -> Provisioning
    Individual privileges are listed in
  • Resource pool, host, or cluster (this object):
    Resource -> Assign virtual machine to resource pool
  • Host in clusters without DRS (this object):
  • Datastore (this object):
    Datastore -> Allocate space
    Datastore -> Browse datastore
    Datastore -> Low level file operations
  • Network (this object):
    Network -> Assign network
  • Distributed switch (this object):

For floppy image upload:

  • Datacenter (this object):
    Datastore -> Low level file operations
  • Host (this object):
    Host -> Configuration -> System Management