deploy/test-environments/modules/gcp/vm/main.tf (52 lines of code) (raw):
resource "random_id" "id" {
byte_length = 4
}
locals {
vm_private_key_file = "${path.module}/gcp-vm-${random_id.id.hex}.pem"
vm_username = "ubuntu"
deploy_name = "${var.deployment_name}-${random_id.id.hex}"
}
resource "tls_private_key" "gcp_vm_key" {
algorithm = "RSA"
rsa_bits = 4096
}
resource "local_file" "ssh_private_key" {
filename = local.vm_private_key_file
content = tls_private_key.gcp_vm_key.private_key_pem
file_permission = 0400
}
resource "google_compute_instance" "vm_instance" {
name = local.deploy_name
machine_type = var.machine_type
zone = var.zone
labels = var.specific_tags
boot_disk {
initialize_params {
image = var.disk_image
}
}
network_interface {
network = var.network
access_config {
// Ephemeral public IP
}
}
metadata = {
ssh-keys = "${local.vm_username}:${tls_private_key.gcp_vm_key.public_key_openssh}"
}
service_account {
scopes = var.scopes
}
provisioner "remote-exec" {
connection {
type = "ssh"
user = local.vm_username
private_key = tls_private_key.gcp_vm_key.private_key_pem
host = self.network_interface[0].access_config[0].nat_ip
}
inline = [
"echo '${var.gcp_service_account_json}' | base64 --decode > /home/ubuntu/credentials.json",
"chmod 600 /home/ubuntu/credentials.json"
]
}
}