code-snippets/docs/terraform/ansible-inventory-generation.md
Liam Pietralla 8ad5845efc
Some checks failed
Build, Test & Publish / Build and Publish Container Image (push) Has been cancelled
Build, Test & Publish / Deploy to Infrastructure (push) Has been cancelled
Build, Test & Publish / Build (push) Has been cancelled
initial commit
2024-09-05 13:54:08 +10:00

1.5 KiB

Generating a Ansible Inventory File from Terraform

Overview

Often when working with automated deployments you will want to generate a dynamic inventory file for Ansible (usually after your infrastructure has been provisioned). This is a simple snippet to generate an inventory file from Terraform.

Terraform Snippet

First we need to create an ouput variable to hold the inventory file.

::: code-group

output "ansible_inventory_yml" {
  description = "An Ansible inventory (in YAML format) containing IP addresses as required by the Ansible playbook to configure the servers."
  value = local.ansible_inventory_yml
}

:::

Next we will create the local variable that will hold the inventory file.

::: info

In this example we are using a DigitalOcean droplet, but you can use any Terraform resource that has an IP address.

:::

::: code-group

locals {
  ansible_inventory_yml = <<-EOF
    all:
      hosts:
        app:
          ansible_host: ${digitalocean_droplet.server.ipv4_address}
  EOF
}

:::

::: tip

It's better to use a local and output variable rather then a local_file as this avoids spurious plan noise when running on CI runners.

:::

Once all configured you can run terraform apply and the inventory file will be ouput to the console. To create the file you can pipe the output to a file (either in the console or in your CI pipeline).

terraform output -raw ansible_inventory_yml > ansible-inventory.yml