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) }