|
- variable "ansible_inventory_filename" {
- type = string
- default = "inventory.json"
- }
-
- locals {
- vm_hosts_with_groups = {
- for hostname, host in var.vm_hosts: hostname => host if contains(keys(host),"groups")
- }
- vm_hosts_without_groups = {
- for hostname, host in var.vm_hosts: hostname => host if !contains(keys(host),"groups")
- }
- vm_groups = distinct(flatten(values(local.hetzner_vm_hosts_with_groups)[*].groups))
- ansible_inventory = {
- all = {
- hosts = {
- for hostname,host in var.vm_hosts: hostname => {}
- }
- children = merge(
- {
- for group in local.vm_groups: group => {
- hosts = {
- for hostname, host in local.vm_hosts_with_groups:
- hostname => {}
- if contains(host.groups,group)
- }
- }
- },{
- for providername, provider in local.providers: "provider_${providername}" => {
- hosts = {
- for hostname, host in local.vm_hosts_with_groups:
- hostname => local.providers[host.provider].hostvars[hostname]
- if host.provider == providername
- }
- }
- }
- )
- }
- }
- }
-
- output "ansible_inventory" {
- value = local.ansible_inventory
- }
-
- resource "local_file" "foo" {
- content = jsonencode(local.ansible_inventory)
- filename = var.ansible_inventory_filename
- file_permission = "0644"
- directory_permission = "0755"
- }
|