Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

108 řádky
2.3KB

  1. # Provider Setup
  2. variable "hetzner_token" {
  3. type = string
  4. description = "Hetzner Cloud API-Token"
  5. }
  6. variable "hetzner_default_location" {
  7. type = string
  8. default = "nbg1"
  9. }
  10. variable "hetzner_server_image" {
  11. type = string
  12. default = "debian-10"
  13. }
  14. variable "hetzner_default_server_type" {
  15. type = string
  16. default = "cx11"
  17. }
  18. variable "hetzner_ssh_keys_filenames" {
  19. type = set(string)
  20. default = [
  21. "~/.ssh/id_ed25519.pub",
  22. ]
  23. }
  24. provider "hcloud" {
  25. token = var.hetzner_token
  26. }
  27. # Network
  28. #resource "hcloud_network" "internal_network" {
  29. # name = "internal_network"
  30. # ip_range = "10.0.0.0/8"
  31. #}
  32. #resource "hcloud_network_subnet" "internal_network" {
  33. # network_id = hcloud_network.internal_network.id
  34. # type = "server"
  35. # network_zone = "eu-central"
  36. # ip_range = "10.9.0.0/16"
  37. #}
  38. # VMs
  39. resource "hcloud_ssh_key" "ssh_keys" {
  40. name = each.value
  41. public_key = file(each.value)
  42. for_each = var.hetzner_ssh_keys_filenames
  43. }
  44. locals {
  45. hetzner_vm_hosts = {
  46. for hostname, host in var.vm_hosts: hostname => host
  47. if host.provider == "hetzner"
  48. }
  49. hetzner_vm_hosts_with_groups = {
  50. for hostname, host in local.hetzner_vm_hosts: hostname => host if contains(keys(host),"groups")
  51. }
  52. hetzner_vm_hosts_without_groups = {
  53. for hostname, host in local.hetzner_vm_hosts: hostname => host if !contains(keys(host),"groups")
  54. }
  55. }
  56. resource "hcloud_server" "vms" {
  57. name = each.key
  58. image = var.hetzner_server_image
  59. server_type = var.hetzner_default_server_type
  60. location = var.hetzner_default_location
  61. ssh_keys = [for value in hcloud_ssh_key.ssh_keys: value.id]
  62. lifecycle {
  63. ignore_changes = [
  64. ssh_keys,
  65. ]
  66. }
  67. for_each = local.hetzner_vm_hosts
  68. }
  69. #resource "hcloud_server_network" "vms" {
  70. # server_id = hcloud_server.vms[each.key].id
  71. # network_id = hcloud_network.internal_network.id
  72. #
  73. # for_each = local.hetzner_vm_hosts
  74. #}
  75. # Provider Variable
  76. locals {
  77. provider_hetzner = {
  78. hostvars = {
  79. for hostname, host in var.vm_hosts: hostname =>
  80. {
  81. external_ip = hcloud_server.vms[hostname].ipv4_address
  82. ansible_host = hcloud_server.vms[hostname].ipv4_address
  83. #internal_ip = hcloud_server_network.vms[hostname].ip
  84. }
  85. if host.provider == "hetzner"
  86. }
  87. }
  88. }