deploy-templates/vsphere/main.tf (115 lines of code) (raw):
resource "vsphere_virtual_disk" "virtual_disk" {
size = var.vsphere_vault_volume_size
type = "thin"
vmdk_path = "${var.vsphere_folder}-platform-vault/${var.cluster_name}-platform-vault-volume.vmdk"
create_directories = true
datacenter = data.vsphere_datacenter.dc.name
datastore = data.vsphere_datastore.datastore.name
}
resource "vsphere_virtual_machine" "vm" {
name = "${var.cluster_name}-platform-vault"
resource_pool_id = data.vsphere_resource_pool.pool.id
datastore_id = data.vsphere_datastore.datastore.id
folder = "${var.vsphere_datacenter}/vm/${var.vsphere_folder}"
num_cpus = 4
memory = 8192
guest_id = data.vsphere_virtual_machine.template.guest_id
wait_for_guest_net_timeout = -1
scsi_type = data.vsphere_virtual_machine.template.scsi_type
network_interface {
network_id = data.vsphere_network.network.id
}
disk {
unit_number = 0
label = "disk0"
size = var.vsphere_vault_volume_os_size
thin_provisioned = true
}
disk {
attach = true
unit_number = 1
label = "disk1"
path = vsphere_virtual_disk.virtual_disk.vmdk_path
datastore_id = data.vsphere_datastore.datastore.id
}
clone {
template_uuid = data.vsphere_virtual_machine.template.id
customize {
linux_options {
host_name = "${var.cluster_name}-platform-vault"
domain = var.baseDomain
}
network_interface {
ipv4_address = var.vsphere_vault_instance_ip
ipv4_netmask = 24
}
ipv4_gateway = var.vsphere_network_gateway
}
}
}
resource "null_resource" "vault_userdata" {
triggers = {
always_run = "${timestamp()}"
}
connection {
type = "ssh"
user = "mdtuddm"
private_key = "${file("packer/private.key")}"
host = var.vsphere_vault_instance_ip
}
provisioner "file" {
source = "./scripts/userdata.sh"
destination = "/tmp/userdata.sh"
}
provisioner "remote-exec" {
inline = [
"export vault_url=${var.vault_url}",
"export vault_volume_path=${var.vault_volume_path}",
"export vault_local_mount_path=${var.vault_local_mount_path}",
"chmod +x /tmp/userdata.sh",
"sudo -E /tmp/userdata.sh"
]
}
depends_on = [vsphere_virtual_machine.vm]
}
resource "null_resource" "vault_unseal" {
triggers = {
always_run = "${timestamp()}"
}
connection {
type = "ssh"
user = "mdtuddm"
private_key = "${file("packer/private.key")}"
host = var.vsphere_vault_instance_ip
}
provisioner "file" {
source = "./scripts/autounseal.sh"
destination = "/tmp/autounseal.sh"
}
provisioner "remote-exec" {
inline = [
"export vault_local_mount_path=${var.vault_local_mount_path}",
"chmod +x /tmp/autounseal.sh",
"sudo -E /tmp/autounseal.sh"
]
}
depends_on = [null_resource.vault_userdata]
}
resource "null_resource" "vault_init" {
triggers = {
always_run = "${timestamp()}"
}
provisioner "local-exec" {
command = var.wait_for_cluster_cmd
interpreter = var.wait_for_cluster_interpreter
environment = {
ENDPOINT = "http://${var.vsphere_vault_instance_ip}:8200"
}
}
depends_on = [null_resource.vault_unseal]
}
module "files" {
source = "github.com/matti/terraform-shell-outputs.git"
command = "ssh -o \"StrictHostKeyChecking no\" mdtuddm@${var.vsphere_vault_instance_ip} -i packer/private.key cat ${var.vault_local_mount_path}/vault/keys | grep Root | awk -F : {'print $2'} | cut -c2-"
depends_on = [null_resource.vault_init]
}