7cafcf5879 | ||
---|---|---|
.teamcity | ||
clone | ||
cmd | ||
common | ||
driver | ||
examples | ||
iso | ||
test | ||
.gitignore | ||
LICENSE.txt | ||
README.md | ||
build.sh | ||
docker-compose.yml | ||
go.mod | ||
go.sum | ||
gofmt.sh | ||
teamcity-services.yml | ||
test.sh |
README.md
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.
Installation
- 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.
Build
Install Go and dep, run build.sh
.
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.
Examples
See complete Ubuntu, Windows, and macOS templates in the examples folder.
Parameter Reference
Connection
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 tofalse
.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 examplefolder/host
. See theSpecifying 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 thehost
orcluster
.datastore
(string) - VMWare datastore. Required ifhost
is a cluster, or ifhost
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 tofalse
.
Hardware
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 tofalse
.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 tofalse
. Cannot be used together withRAM_reservation
.RAM_hot_plug
(boolean) - Enable RAM hot plug setting for virtual machine. Defaults tofalse
.disk_size
(number) - The size of the disk in MB.NestedHV
(boolean) - Enable nested hardware virtualization for VM. Defaults tofalse
.configuration_parameters
(map) - Custom parameters.boot_order
(string) - Priority of boot devices. Defaults todisk,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 tootherGuest
. See here for a full list of possible values.disk_controller_type
(string) - Set VM disk controller type. Examplepvscsi
.disk_thin_provisioned
(boolean) - Enable VMDK thin provisioning for VM. Defaults tofalse
.network
(string) - Set network VM will be connected to.network_card
(string) - Set VM network card type. Examplevmxnet3
.usb_controller
(boolean) - Create USB controller for virtual machine. Defaults tofalse
.cdrom_type
(string) - Which controller to use. Examplesata
. Defaults toide
.firmware
(string) - Set the Firmware at machine creation. Exampleefi
. Defaults tobios
.
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 withfloppy_files
orfloppy_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"
.
Provision
-
communicator
-ssh
(default),winrm
, ornone
(create/clone, customize hardware, but do not boot). -
ssh_username
(string) - Username in guest OS. -
ssh_password
(string) - Password to access guest OS. Only specifyssh_password
orssh_private_key_file
, but not both. -
ssh_private_key_file
(string) - Path to the SSH private key file to access guest OS. Only specifyssh_password
orssh_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.
Postprocessing
create_snapshot
(boolean) - Create a snapshot when set totrue
, so the VM can be used as a base for linked clones. Defaults tofalse
.convert_to_template
(boolean) - Convert VM to a template. Defaults tofalse
.
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):
Individual privileges are listed in https://github.com/jetbrains-infra/packer-builder-vsphere/issues/97#issuecomment-436063235.Virtual machine -> Inventory Virtual machine -> Configuration Virtual machine -> Interaction Virtual machine -> Snapshot management Virtual machine -> Provisioning
- Resource pool, host, or cluster (this object):
Resource -> Assign virtual machine to resource pool
- Host in clusters without DRS (this object):
Read-only
- Datastore (this object):
Datastore -> Allocate space Datastore -> Browse datastore Datastore -> Low level file operations
- Network (this object):
Network -> Assign network
- Distributed switch (this object):
Read-only
For floppy image upload:
- Datacenter (this object):
Datastore -> Low level file operations
- Host (this object):
Host -> Configuration -> System Management