packer-cn/README.md

3.4 KiB

Packer Builder for VMware vSphere

This builder 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_host": "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

Required

  • vcenter_host - vCenter hostname.
  • username - vSphere username.
  • password - vSphere password.
  • template - name of source VM.
  • vm_name - name of target VM.
  • host - vSphere host where target VM is created.
  • ssh_username - username in guest OS.
  • ssh_password - password in guest OS.

Optional

Destination:

  • datacenter - required if there are several datacenters.
  • folder - VM folder 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.
  • ram - Amount of RAM in megabytes. Inherited from source VM by default.

Post-processing:

  • shutdown_command - VMware guest tools are used 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_host": "vcenter.domain.com",
      "datacenter": "dc1",
      "username": "root",
      "password": "{{user `vsphere_password`}}",

      "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,
      "ram": 8192,

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

      "shutdown_command": "echo '{{user `guest_password`}}' | sudo -S shutdown -P now",
      "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"
      ]
    }
  ]
}