--- modeline: | vim: set ft=pandoc: description: > This VMware Packer builder uses the vSphere API to clone an existing vSphere template and create a new virtual machine remotely. layout: docs page_title: VSphere Clone - Builders sidebar_title: VSphere Clone --- # VMWare Vsphere Clone Builder Type: `vsphere-clone` This builder clones VMs from existing templates. - VMware Player is not required. - It uses the official vCenter API, and does not require ESXi host [modification](https://www.packer.io/docs/builders/vmware-iso.html#building-on-a-remote-vsphere-hypervisor) ## Examples See complete Ubuntu, Windows, and macOS templates in the [examples folder](https://github.com/hashicorp/packer/tree/master/builder/vsphere/examples/). ## VSphere-Clone Configuration Reference There are many configuration options available for this builder. In addition to the items listed here, you will want to look at the general configuration references for [Hardware](#hardware-configuration), [Output](#output-configuration), [Boot](#boot-configuration), [Run](#run-configuration), [Shutdown](#shutdown-configuration), [Communicator](#communicator-configuration), [Export](#export-configuration), configuration references, which are necessary for this build to succeed and can be found further down the page. @include 'builder/vsphere/clone/Config-not-required.mdx' ### Clone Configuration @include 'builder/vsphere/clone/CloneConfig-not-required.mdx' ### vApp Options Configuration @include 'builder/vsphere/clone/vAppConfig-not-required.mdx' Example of usage: ```json "vapp": { "properties": { "hostname": "{{ user `hostname`}}", "user-data": "{{ env `USERDATA`}}" } } ``` A `user-data` field requires the content of a yaml file to be encoded with base64. This can be done via environment variable: `export USERDATA=$(gzip -c9 /dev/null || base64; })` ```hcl vapp { properties = { hostname = var.hostname user-data = base64encode(var.user_data) } } ``` ### Extra Configuration Parameters @include 'builder/vsphere/common/ConfigParamsConfig-not-required.mdx' ### Boot configuration @include 'common/bootcommand/BootConfig.mdx' #### Optional: @include 'common/bootcommand/BootConfig-not-required.mdx' @include 'builder/vsphere/common/BootConfig-not-required.mdx' ### Http directory configuration @include 'common/HTTPConfig.mdx' #### Optional: @include 'common/HTTPConfig-not-required.mdx' ### Connection Configuration @include 'builder/vsphere/common/ConnectConfig-not-required.mdx' ### Hardware Configuration @include 'builder/vsphere/common/HardwareConfig-not-required.mdx' ### Location Configuration @include 'builder/vsphere/common/LocationConfig-not-required.mdx' ### Run Configuration @include 'builder/vsphere/common/RunConfig-not-required.mdx' ### Shutdown Configuration @include 'builder/vsphere/common/ShutdownConfig-not-required.mdx' ### Wait Configuration @include 'builder/vsphere/common/WaitIpConfig-not-required.mdx' ### Communicator configuration #### Optional common fields: @include 'helper/communicator/Config-not-required.mdx' #### Optional SSH fields: @include 'helper/communicator/SSH-not-required.mdx' @include 'helper/communicator/SSH-Temporary-Key-Pair-not-required.mdx' @include 'helper/communicator/SSH-Key-Pair-Name-not-required.mdx' @include 'helper/communicator/SSH-Private-Key-File-not-required.mdx' @include 'helper/communicator/SSH-Agent-Auth-not-required.mdx' -> **NOTE:** Packer uses vApp Options to inject ssh public keys to the Virtual Machine. The [temporary_key_pair_name](/docs/builders/vmware/vsphere-clone#temporary_key_pair_name) will only work if the template being cloned contains the vApp property `public-keys`. If using [ssh_private_key_file](/docs/builders/vmware/vsphere-clone#ssh_private_key_file), provide the public key via [configuration_parameters](/docs/builders/vmware/vsphere-clone#configuration_parameters) or [vApp Options Configuration](/docs/builders/vmware/vsphere-clone#vapp-options-configuration) whenever the `guestinto.userdata` is available. See [VMware Guestinfo datasource](https://github.com/vmware/cloud-init-vmware-guestinfo) for more information about the key. #### Optional WinRM fields: @include 'helper/communicator/WinRM-not-required.mdx' ### Export Configuration @include 'builder/vsphere/common/ExportConfig.mdx' ### Optional: @include 'builder/vsphere/common/ExportConfig-not-required.mdx' #### Output Configuration: @include 'builder/vsphere/common/OutputConfig-not-required.mdx' ## Working with Clusters #### Standalone Hosts Only use the `host` option. Optionally specify a `resource_pool`: ```text "host": "esxi-1.vsphere65.test", "resource_pool": "pool1", ``` #### Clusters Without DRS Use the `cluster` and `host`parameters: ```text "cluster": "cluster1", "host": "esxi-2.vsphere65.test", ``` #### Clusters With DRS Only use the `cluster` option. Optionally specify a `resource_pool`: ```text "cluster": "cluster2", "resource_pool": "pool1", ``` ## Required vSphere Permissions - VM folder (this object and children): ```text Virtual machine -> Inventory Virtual machine -> Configuration Virtual machine -> Interaction Virtual machine -> Snapshot management Virtual machine -> Provisioning ``` Individual privileges are listed in https://github.com/jetbrains-infra/packer-builder-vsphere/issues/97#issuecomment-436063235. - Resource pool, host, or cluster (this object): ```text Resource -> Assign virtual machine to resource pool ``` - Host in clusters without DRS (this object): ```text Read-only ``` - Datastore (this object): ```text Datastore -> Allocate space Datastore -> Browse datastore Datastore -> Low level file operations ``` - Network (this object): ```text Network -> Assign network ``` - Distributed switch (this object): ```text Read-only ``` For floppy image upload: - Datacenter (this object): ```text Datastore -> Low level file operations ``` - Host (this object): ```text Host -> Configuration -> System Management ```