# Gather facts data "ovh_cloud_instance_flavors" "flavors" { service_name = var.ovh_service_name region = var.ovh_region } data "ovh_cloud_instance_images" "images" { service_name = var.ovh_service_name region = var.ovh_region } resource "ovh_cloud_ssh_key" "ansible" { service_name = var.ovh_service_name name = "ansible-key" public_key = var.ssh_public_key } # Provision a d2-2 Public Cloud instance resource "ovh_cloud_instance" "coolify" { service_name = var.ovh_service_name region = var.ovh_region name = var.project_name ssh_key_name = ovh_cloud_ssh_key.ansible.name flavor_id = one([ for flavor in data.ovh_cloud_instance_flavors.flavors.flavors : flavor.id if flavor.name == "d2-2" ]) image_id = one([ for image in data.ovh_cloud_instance_images.images.images : image.id if image.name == "Debian 13" ]) networks = [ { auto_assign_public_ip = true }, ] } # Fetch provisioned VM's public IPv4 locals { public_ip = one(flatten([ for net in ovh_cloud_instance.coolify.current_state.networks : [ for addr in net.addresses : addr.ip if addr.type == "FIXED" && addr.version == 4 ] ])) } # Write IP to Ansible inventory resource "local_file" "ansible_inventory" { content = templatefile("${path.module}/../ansible/inventory.tpl", { public_ip = local.public_ip }) filename = "${path.module}/../ansible/inventory.ini" } output "public_ip" { description = "The public IPv4 address of the provisioned OVHcloud VM" value = local.public_ip }