Terraform snippets

local-exec:

data "template_file" "user_data" {
  template = <<EOF
#cloud-config
package_update: true
packages:
 - python3
EOF
}
 
resource "openstack_compute_instance_v2" "instance_1" {
  name            = "test-vm1"
  image_name      = "Ubuntu 24.04"
  flavor_name     = "m1.micro"
  key_pair        = data.openstack_compute_keypair_v2.keypair_1.name
  security_groups = [data.openstack_networking_secgroup_v2.secgroup_1.id]
  user_data       = data.template_file.user_data.rendered
 
  network {
    uuid = data.openstack_networking_network_v2.network_1.id
  }
 
  provisioner "remote-exec" {
    # source = "test.txt"
    # destination = "/tmp/test.txt"
 
    inline = [
      "sudo apt update",
      "sudo apt install python3 -y", 
      "date > /tmp/debug"
      ]
 
    connection {
      type        = "ssh"
      host        = openstack_networking_floatingip_v2.floatingip_1.address
      user        = "ubuntu"
      private_key = file(pathexpand("~/.ssh/id_rsa"))
    }
  }
 
  provisioner "local-exec" {
    command = "TF_STATE=terraform.tfstate ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i inventory install-nginx.yml"
  }
 
  depends_on = [openstack_networking_floatingip_v2.floatingip_1]        
}
 
 
resource "local_file" "hosts_cfg" {
  content = templatefile("inventory.tmpl",
    {
      ubuntu_hosts = openstack_networking_floatingip_v2.floatingip_1.*.address
    }
  )
  filename = "inventory"
  depends_on = [openstack_networking_floatingip_associate_v2.instance_fip_association]
}

Links
https://github.com/knetsolutions/learn-terraform-with-openstack/blob/master/provisioner/README.md
https://www.digitalocean.com/community/tutorials/how-to-use-ansible-with-terraform-for-configuration-management

subnetpool

# DEV only
# resource "openstack_networking_subnetpool_v2" "subnetpool_1" {
#   # count = var.env == "dev" ? 1 : 0
 
#   name = "subnetpool_1"
#   # prefixes = ["10.0.0.0/16"]
#   prefixes = [var.test_subnet_cidr]
#   # address_scope_id = "1a68b969-b6d1-43ba-8bd0-4c6b770e3012" # DEV only
# }
 
resource "openstack_networking_subnet_v2" "subnet_1" {
  network_id = openstack_networking_network_v2.network_1.id
  name       = var.test_subnet
  cidr       = var.test_subnet_cidr
 
  # DEV only
  # subnetpool_id = openstack_networking_subnetpool_v2.subnetpool_1.id
 
  # depends_on = [openstack_networking_subnetpool_v2.subnetpool_1]  
}

DNS loockup

data "dns_a_record_set" "google" {
  host = "google.com"
}
 
output "google_addrs" {
  value = join(",", data.dns_a_record_set.google.addrs)
}