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

55 lines
1.5 KiB
Markdown

# 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
```hcl [ouputs.tf]
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
```hcl [locals.tf]
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).
```bash
terraform output -raw ansible_inventory_yml > ansible-inventory.yml
```