Assistant: codex Assistant-Model: gpt-5.6-sol Assistant-Session: 01a02994-7685-7940-bf34-3555b8256018
56 lines
1.4 KiB
HCL
56 lines
1.4 KiB
HCL
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))
|
|
}
|