# Provider Setup variable "hetzner_token" { type = string description = "Hetzner Cloud API-Token" } variable "hetzner_default_location" { type = string default = "nbg1" } variable "hetzner_server_image" { type = string default = "debian-10" } variable "hetzner_default_server_type" { type = string default = "cx11" } variable "hetzner_ssh_keys_filenames" { type = set(string) default = [ "~/.ssh/id_ed25519.pub", ] } provider "hcloud" { token = var.hetzner_token } # Network #resource "hcloud_network" "internal_network" { # name = "internal_network" # ip_range = "10.0.0.0/8" #} #resource "hcloud_network_subnet" "internal_network" { # network_id = hcloud_network.internal_network.id # type = "server" # network_zone = "eu-central" # ip_range = "10.9.0.0/16" #} # VMs resource "hcloud_ssh_key" "ssh_keys" { name = each.value public_key = file(each.value) for_each = var.hetzner_ssh_keys_filenames } locals { hetzner_vm_hosts = { for hostname, host in var.vm_hosts: hostname => host if host.provider == "hetzner" } hetzner_vm_hosts_with_groups = { for hostname, host in local.hetzner_vm_hosts: hostname => host if contains(keys(host),"groups") } hetzner_vm_hosts_without_groups = { for hostname, host in local.hetzner_vm_hosts: hostname => host if !contains(keys(host),"groups") } } resource "hcloud_server" "vms" { name = each.key image = var.hetzner_server_image server_type = var.hetzner_default_server_type location = var.hetzner_default_location ssh_keys = [for value in hcloud_ssh_key.ssh_keys: value.id] lifecycle { ignore_changes = [ ssh_keys, ] } for_each = local.hetzner_vm_hosts } #resource "hcloud_server_network" "vms" { # server_id = hcloud_server.vms[each.key].id # network_id = hcloud_network.internal_network.id # # for_each = local.hetzner_vm_hosts #} # Provider Variable locals { provider_hetzner = { hostvars = { for hostname, host in var.vm_hosts: hostname => { external_ip = hcloud_server.vms[hostname].ipv4_address ansible_host = hcloud_server.vms[hostname].ipv4_address #internal_ip = hcloud_server_network.vms[hostname].ip } if host.provider == "hetzner" } } }