terraform { required_version = ">= 1.7.0" required_providers { hcloud = { source = "hetznercloud/hcloud" version = "~> 1.49" } template = { source = "hashicorp/template" version = "~> 2.2" } } } provider "hcloud" { token = var.hcloud_token } locals { inventory = yamldecode(var.inventory_yaml != null ? var.inventory_yaml : file("${path.module}/../../inventory/servers.yaml")) servers = { for server in local.inventory.servers : server.name => server if server.provider == "hetzner" && server.lifecycle_mode == "provider-managed" } cloud_init = file("${path.module}/cloud_init.yaml") } resource "hcloud_ssh_key" "admin" { count = length(local.servers) > 0 ? 1 : 0 name = "railliance-admin" public_key = file("${path.module}/../../keys/admin_ssh.pub") } resource "hcloud_server" "srv" { for_each = local.servers name = each.value.name image = each.value.provisioning.image server_type = each.value.provisioning.server_type location = each.value.provisioning.region ssh_keys = [hcloud_ssh_key.admin[0].id] user_data = local.cloud_init labels = { role = each.value.provisioning.role labels = join(",", try(each.value.provisioning.labels, [])) env = "default" } } output "servers" { value = { for k, v in hcloud_server.srv : k => v.ipv4_address } } output "managed_server_names" { value = sort(keys(local.servers)) }