Go to file
Michael Kuzmin 228ac12366 Separate config for shutdown step 2017-07-02 18:22:59 +03:00
docker Rename artifacts 2017-06-27 10:55:49 +03:00
.gitignore Support nested VM folders 2017-07-01 16:18:54 +03:00
README.md Add 'RAM_reserve_all' parameter 2017-07-02 01:36:00 +03:00
artifact.go destroy artifact 2017-07-01 15:52:57 +03:00
build.sh Installation scripts 2017-05-15 00:25:50 +03:00
builder.go Separate config for shutdown step 2017-07-02 18:22:59 +03:00
builder_acc_test.go Add `insecure_connection` parameter 2017-07-01 18:59:36 +03:00
builder_test.go Unit tests 2017-07-01 15:52:58 +03:00
config.go Separate config for shutdown step 2017-07-02 18:22:59 +03:00
config_test.go Separate config for shutdown step 2017-07-02 18:22:59 +03:00
docker-compose.yml Rename artifacts 2017-06-27 10:55:49 +03:00
glide.lock Lock dependencies 2017-06-27 10:44:38 +03:00
glide.yaml Lock dependencies 2017-06-27 10:44:38 +03:00
main.go Builder (#2) 2017-05-09 17:23:57 +03:00
step_clone_vm.go rename 'dc_name' to 'datacenter' 2017-07-01 17:45:13 +03:00
step_create_snapshot.go Add a snapshot (#22) 2017-06-27 10:32:59 +03:00
step_hardware.go Add 'RAM_reserve_all' parameter 2017-07-02 01:36:00 +03:00
step_run.go Builder (#2) 2017-05-09 17:23:57 +03:00
step_shutdown.go Separate config for shutdown step 2017-07-02 18:22:59 +03:00
step_template.go Add a snapshot (#22) 2017-06-27 10:32:59 +03:00

README.md

Packer Builder for VMware vSphere

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

  • VMware Player is not required
  • Builds are incremental, VMs are not created from scratch but cloned from base templates - similar to amazon-ebs builder
  • Official vCenter API is used, no ESXi host modification is required

Usage

  • Download the plugin from Releases page
  • Install the plugin, or simply put it into the same directory with configuration files

Minimal Example

{
  "builders": [
    {
      "type": "vsphere",

      "vcenter_server": "vcenter.domain.com",
      "username": "root",
      "password": "secret",

      "template": "ubuntu",
      "vm_name":  "vm-1",
      "host":     "esxi-1.domain.com",

      "ssh_username": "root",
      "ssh_password": "secret"
    }
  ],
  "provisioners": [
    {
      "type": "shell",
      "inline": [ "echo hello" ]
    }
  ]
}

Parameters

Connection:

  • vcenter_server - [mandatory] vCenter server hostname.
  • username - [mandatory] vSphere username.
  • password - [mandatory] vSphere password.
  • insecure_connection - do not validate server's TLS certificate. false by default.
  • datacenter - required if there are several datacenters.

Destination:

  • template - [mandatory] name of source VM.
  • vm_name - [mandatory] name of target VM.
  • folder - VM folder where target VM is created.
  • host - [mandatory] vSphere host where target VM is created.
  • resource_pool - by default a root of vSphere host.
  • datastore - required if vSphere host has multiple datastores attached.
  • linked_clone - create VM as a linked clone from latest snapshot. false by default.

Hardware customization:

  • CPUs - number of CPU sockets. Inherited from source VM by default.
  • CPU_reservation - Amount of reserved CPU resources in MHz. Inherited from source VM by default.
  • CPU_limit - Upper limit of available CPU resources in MHz. Inherited from source VM by default, set to -1 for reset.
  • RAM - Amount of RAM in megabytes. Inherited from source VM by default.
  • RAM_reservation - Amount of reserved RAM in MB. Inherited from source VM by default.
  • RAM_reserve_all - Reserve all available RAM (bool). false by default. Cannot be used together with RAM_reservation.

Provisioning:

  • ssh_username - [mandatory] username in guest OS.
  • ssh_password - [mandatory] password in guest OS.

Post-processing:

  • shutdown_command - VMware guest tools are used by default.
  • shutdown_timeout - Duration how long to wait for a graceful shutdown. 5 minutes by default.
  • create_snapshot - add a snapshot, so VM can be used as a base for linked clones. false by default.
  • convert_to_template - convert VM to a template. false by default.

Complete Example

{
  "variables": {
    "vsphere_password": "secret",
    "guest_password": "secret"
  },

  "builders": [
    {
      "type": "vsphere",

      "vcenter_server": "vcenter.domain.com",
      "username": "root",
      "password": "{{user `vsphere_password`}}",
      "insecure_connection": true,
      "datacenter": "dc1",

      "template": "ubuntu",
      "folder": "folder1/folder2",
      "vm_name": "vm-1",
      "host": "esxi-1.domain.com",
      "resource_pool": "pool1/pool2",
      "datastore": "datastore1",
      "linked_clone": true,

      "CPUs": 2,
      "CPU_reservation": 1000,
      "CPU_limit": 2000,
      "RAM": 8192,
      "RAM_reservation": 2048,

      "ssh_username": "root",
      "ssh_password": "{{user `guest_password`}}",

      "shutdown_command": "echo '{{user `guest_password`}}' | sudo -S shutdown -P now",
      "shutdown_timeout": "5m",
      "create_snapshot": true,
      "convert_to_template": true
    }
  ],

  "provisioners": [
    {
      "type": "shell",
      "environment_vars": [
        "DEBIAN_FRONTEND=noninteractive"
      ],
      "execute_command": "echo '{{user `guest_password`}}' | {{.Vars}} sudo -ES bash -eux '{{.Path}}'",
      "inline": [
        "apt-get install -y zip"
      ]
    }
  ]
}