2020-03-18 18:46:47 -04:00
---
modeline: |
vim: set ft=pandoc:
2020-04-02 19:39:47 -04:00
description: >
This VMware Packer builder uses the vSphere API to clone an existing vSphere
template and create a new virtual machine remotely.
2020-03-18 18:46:47 -04:00
layout: docs
2020-03-24 19:48:37 -04:00
page_title: VSphere Clone - Builders
2020-04-02 19:39:47 -04:00
sidebar_title: VSphere Clone
2020-03-18 18:46:47 -04:00
---
# VMWare Vsphere Clone Builder
Type: `vsphere-clone`
This builder clones VMs from existing templates.
- VMware Player is not required.
2020-04-02 14:15:08 -04:00
- 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)
2020-07-09 17:46:35 -04:00
- This builder is supported for vSphere version 6.5 and greater. Builds on lower
versions may work, but some configuration options may throw errors because they
do not exist in the older versions of the vSphere API.
2020-03-18 18:46:47 -04:00
## 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
2020-06-02 11:48:11 -04:00
references for [Hardware](#hardware-configuration),
2020-03-18 18:46:47 -04:00
[Output](#output-configuration),
2020-06-24 05:14:30 -04:00
[Boot](#boot-configuration),
2020-03-18 18:46:47 -04:00
[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.
2020-03-23 20:02:12 -04:00
@include 'builder/vsphere/clone/Config-not-required.mdx'
2020-03-18 18:46:47 -04:00
### Clone Configuration
2020-03-23 20:02:12 -04:00
@include 'builder/vsphere/clone/CloneConfig-not-required.mdx'
2020-03-18 18:46:47 -04:00
2020-07-08 04:33:45 -04:00
### vApp Options Configuration
@include 'builder/vsphere/clone/vAppConfig-not-required.mdx'
Example of usage:
<Tabs>
<Tab heading="JSON">
```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 <userdata.yaml | { base64 -w0 2>/dev/null || base64; })`
</Tab>
<Tab heading="HCL2">
```hcl
vapp {
properties = {
hostname = var.hostname
user-data = base64encode(var.user_data)
}
}
```
</Tab>
</Tabs>
2020-03-18 18:46:47 -04:00
### Extra Configuration Parameters
2020-03-23 20:02:12 -04:00
@include 'builder/vsphere/common/ConfigParamsConfig-not-required.mdx'
2020-03-18 18:46:47 -04:00
2020-06-24 05:14:30 -04:00
### Boot configuration
@include 'common/bootcommand/BootConfig.mdx'
#### Optional:
@include 'common/bootcommand/BootConfig-not-required.mdx'
2020-07-07 13:57:51 -04:00
@include 'builder/vsphere/common/BootConfig-not-required.mdx'
2020-06-24 05:14:30 -04:00
### Http directory configuration
@include 'common/HTTPConfig.mdx'
#### Optional:
@include 'common/HTTPConfig-not-required.mdx'
2020-03-18 18:46:47 -04:00
### Connection Configuration
2020-03-23 20:02:12 -04:00
@include 'builder/vsphere/common/ConnectConfig-not-required.mdx'
2020-03-18 18:46:47 -04:00
### Hardware Configuration
2020-03-23 20:02:12 -04:00
@include 'builder/vsphere/common/HardwareConfig-not-required.mdx'
2020-03-18 18:46:47 -04:00
### Location Configuration
2020-03-23 20:02:12 -04:00
@include 'builder/vsphere/common/LocationConfig-not-required.mdx'
2020-03-18 18:46:47 -04:00
### Run Configuration
2020-03-23 20:02:12 -04:00
@include 'builder/vsphere/common/RunConfig-not-required.mdx'
2020-03-18 18:46:47 -04:00
### Shutdown Configuration
2020-03-23 20:02:12 -04:00
@include 'builder/vsphere/common/ShutdownConfig-not-required.mdx'
2020-03-18 18:46:47 -04:00
### Wait Configuration
2020-03-23 20:02:12 -04:00
@include 'builder/vsphere/common/WaitIpConfig-not-required.mdx'
2020-03-18 18:46:47 -04:00
### Communicator configuration
#### Optional common fields:
2020-03-23 20:02:12 -04:00
@include 'helper/communicator/Config-not-required.mdx'
2020-03-18 18:46:47 -04:00
#### Optional SSH fields:
2020-03-23 20:02:12 -04:00
@include 'helper/communicator/SSH-not-required.mdx'
2020-03-18 18:46:47 -04:00
2020-07-08 04:33:45 -04:00
@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.
2020-03-18 18:46:47 -04:00
#### Optional WinRM fields:
2020-03-23 20:02:12 -04:00
@include 'helper/communicator/WinRM-not-required.mdx'
2020-03-18 18:46:47 -04:00
### Export Configuration
2020-04-02 14:15:08 -04:00
@include 'builder/vsphere/common/ExportConfig.mdx'
2020-03-18 18:46:47 -04:00
### Optional:
2020-04-02 14:15:08 -04:00
@include 'builder/vsphere/common/ExportConfig-not-required.mdx'
2020-03-18 18:46:47 -04:00
#### Output Configuration:
2020-04-02 14:15:08 -04:00
@include 'builder/vsphere/common/OutputConfig-not-required.mdx'
2020-03-18 18:46:47 -04:00
2020-07-10 05:01:10 -04:00
### Content Library Import Configuration
@include 'builder/vsphere/common/ContentLibraryDestinationConfig.mdx'
@include 'builder/vsphere/common/ContentLibraryDestinationConfig-not-required.mdx'
Minimal example of usage:
<Tabs>
<Tab heading="JSON">
```json
"content_library_destination" : {
"library": "Packer Library Test"
}
```
</Tab>
<Tab heading="HCL2">
```hcl
content_library_destination {
library = "Packer Library Test"
}
```
</Tab>
</Tabs>
2020-03-18 18:46:47 -04:00
## Working with Clusters
#### Standalone Hosts
Only use the `host` option. Optionally specify a `resource_pool`:
2020-03-31 18:47:06 -04:00
```text
2020-03-18 18:46:47 -04:00
"host": "esxi-1.vsphere65.test",
"resource_pool": "pool1",
```
#### Clusters Without DRS
Use the `cluster` and `host`parameters:
2020-03-31 18:47:06 -04:00
```text
2020-03-18 18:46:47 -04:00
"cluster": "cluster1",
"host": "esxi-2.vsphere65.test",
```
#### Clusters With DRS
Only use the `cluster` option. Optionally specify a `resource_pool`:
2020-03-31 18:47:06 -04:00
```text
2020-03-18 18:46:47 -04:00
"cluster": "cluster2",
"resource_pool": "pool1",
```
## Required vSphere Permissions
- VM folder (this object and children):
2020-03-27 14:22:33 -04:00
```text
2020-03-18 18:46:47 -04:00
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):
2020-03-27 14:22:33 -04:00
```text
2020-03-18 18:46:47 -04:00
Resource -> Assign virtual machine to resource pool
```
- Host in clusters without DRS (this object):
2020-03-27 14:22:33 -04:00
```text
2020-03-18 18:46:47 -04:00
Read-only
```
- Datastore (this object):
2020-03-27 14:22:33 -04:00
```text
2020-03-18 18:46:47 -04:00
Datastore -> Allocate space
Datastore -> Browse datastore
Datastore -> Low level file operations
```
- Network (this object):
2020-03-27 14:22:33 -04:00
```text
2020-03-18 18:46:47 -04:00
Network -> Assign network
```
- Distributed switch (this object):
2020-03-27 14:22:33 -04:00
```text
2020-03-18 18:46:47 -04:00
Read-only
```
For floppy image upload:
- Datacenter (this object):
2020-03-27 14:22:33 -04:00
```text
2020-03-18 18:46:47 -04:00
Datastore -> Low level file operations
```
- Host (this object):
2020-03-27 14:22:33 -04:00
```text
2020-03-18 18:46:47 -04:00
Host -> Configuration -> System Management
```