hkbakke / terraform-vsphere-customizer

Customize vSphere VM templates when deployed from terraform

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

DEPRECATED

This project was created when the cloud-init integration with vSphere was somewhat lacking, or at least little known. This is not the case anymore, so you should use the cloud-init approach with terraform in the future. There will be no future development in this project.

terraform-vsphere-customizer

Customize vSphere VM templates when deployed from terraform. Created to compensate for lack of Debian support in the template customizer that VMware provides.

Requirements

  • systemd
  • open-vm-tools
  • python 3.5 or newer (automatically pulled in by open-vm-tools on Debian)

Tested OS

  • Debian Stretch

Prepare template

Before shutting down your template VM for terraform do this

wget -O bootstrap.sh https://raw.githubusercontent.com/hkbakke/terraform-vsphere-customizer/master/bootstrap.sh
sudo sh bootstrap.sh

bootstrap.sh pulls down https://github.com/hkbakke/terraform-vsphere-customizer/archive/master.tar.gz. However, if you are offline you can manually download the latest master.tar.gz and provide the internal location as an argument:

sudo sh bootstrap.sh <url_to_master.tar.gz>

Supported settings

Set hostname

Set the hostname. A FQDN is expected.

"guestinfo.hostname" = "hostname.example.com"

Set IPv4 and/or IPv6 address

If no ipv4_address is configured for an interface, DHCP is used. If no ipv6_address is set auto-configuration mode is used.

"guestinfo.network.<ifname>.ipv4_address" = "10.0.0.10/24"
"guestinfo.network.<ifname>.ipv4_gateway" = "10.0.0.1"
"guestinfo.network.<ifname>.ipv6_address" = "fd77:ba12:fcs1:88::23/64"

Configure DNS

Note that the dns_domain is only used for resolv.conf. It is not used for hostname purposes.

"guestinfo.dns_domain" = "example.com"
"guestinfo.dns_servers" = "1.1.1.1, 8.8.8.8, 8.8.4.4"

Disable customizations

When the customizer is included in the boot image you might see that it touches the network configuration file using default settings, even with no settings configured. To disable customizations entirely:

"guestinfo.customize" = "false"

Usage in terraform

Example from within a terraform VM resource block, also including some counter fun. Just leave out any parameters that you do not need.

extra_config {
  "guestinfo.hostname" = "web-${count.index + 1}.example.com"
  "guestinfo.network.ens192.ipv4_address" = "10.0.0.${count.index + 10}/24"
  "guestinfo.network.ens192.ipv4_gateway" = "10.0.0.1"
  "guestinfo.network.ens192.ipv6_address" = "fd77:ba12:fcs1:88::${count.index + 10}/64"
}

About

Customize vSphere VM templates when deployed from terraform


Languages

Language:Python 85.2%Language:Shell 14.8%