From 00d88ef3bbabca8d5254fbcd53a531d0fd3a7a45 Mon Sep 17 00:00:00 2001 From: Markus Katharina Brechtel Date: Sun, 5 Jul 2020 07:38:59 +0200 Subject: [PATCH] vms module --- inventory.tf | 10 ---- locals.tf | 19 ++++++ outputs.tf | 16 +++-- provider_hetzner.tf | 138 -------------------------------------------- providers.tf | 5 -- variables.tf | 27 ++++++--- 6 files changed, 49 insertions(+), 166 deletions(-) delete mode 100644 inventory.tf create mode 100644 locals.tf delete mode 100644 provider_hetzner.tf delete mode 100644 providers.tf diff --git a/inventory.tf b/inventory.tf deleted file mode 100644 index 6187a86..0000000 --- a/inventory.tf +++ /dev/null @@ -1,10 +0,0 @@ - -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)) -} diff --git a/locals.tf b/locals.tf new file mode 100644 index 0000000..827bc1c --- /dev/null +++ b/locals.tf @@ -0,0 +1,19 @@ +locals { + + vms_with_groups = { + for hostname, host in var.vms: hostname => host if contains(keys(host),"groups") + } + vms_without_groups = { + for hostname, host in var.vms: hostname => host if !contains(keys(host),"groups") + } + vm_groups = distinct(flatten(values(local.vms_with_groups)[*].groups)) + + vms_with_provider = { + for hostname, host in var.vms: hostname => host if contains(keys(host),"provider") + } + vms_without_provider = { + for hostname, host in var.vms: hostname => host if !contains(keys(host),"provider") + } + vm_providers = distinct(values(local.vms_with_provider)[*].provider) + +} diff --git a/outputs.tf b/outputs.tf index 9927935..cc93c61 100644 --- a/outputs.tf +++ b/outputs.tf @@ -1,23 +1,29 @@ +output "vms_by_provider" { + value = { + + } +} + output "ansible_inventory" { value = { all = { hosts = { - for hostname,host in var.vm_hosts: hostname => {} + for hostname,host in var.vms: hostname => {} } children = merge( { for group in local.vm_groups: group => { hosts = { - for hostname, host in local.vm_hosts_with_groups: + for hostname, host in local.vms_with_groups: hostname => {} if contains(host.groups,group) } } },{ - for providername, provider in local.providers: "provider_${providername}" => { + for providername in local.vm_providers: "provider_${providername}" => { hosts = { - for hostname, host in var.vm_hosts: - hostname => local.providers[host.provider].hostvars[hostname] + for hostname, host in local.vms_with_provider: + hostname => var.providers_hostvars[host.provider].hostvars[hostname] if host.provider == providername } } diff --git a/provider_hetzner.tf b/provider_hetzner.tf deleted file mode 100644 index f0cac7a..0000000 --- a/provider_hetzner.tf +++ /dev/null @@ -1,138 +0,0 @@ -# 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 -} - - -# Volumes - -locals { - hetzner_volumes = { for item in flatten([ - for hostname, host in local.hetzner_vm_hosts: [ - for volumename, volume in lookup(host, "volumes", {}): { - hostname = hostname - volumename = volumename - volume = volume - host = host - } - ] - ]): "${item.hostname}--${item.volumename}" => merge(item.volume,{hostname=item.hostname}) } -} - -resource "hcloud_volume" "volumes" { - name = each.key - - location = var.hetzner_default_location - size = each.value.size - - for_each = local.hetzner_volumes -} - -resource "hcloud_volume_attachment" "volume_attachments" { - volume_id = hcloud_volume.volumes[each.key].id - server_id = hcloud_server.vms[each.value.hostname].id - #automount = true - for_each = local.hetzner_volumes -} - - -# 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 - volumes = { - for volumename, volume in lookup(host, "volumes", {}): volumename => merge(volume,{ - device = hcloud_volume.volumes["${hostname}--${volumename}"].linux_device - }) - } - } - if host.provider == "hetzner" - } - } -} diff --git a/providers.tf b/providers.tf deleted file mode 100644 index c475f6d..0000000 --- a/providers.tf +++ /dev/null @@ -1,5 +0,0 @@ -locals { - providers = { - hetzner = local.provider_hetzner - } -} diff --git a/variables.tf b/variables.tf index ee85c39..f59a77e 100644 --- a/variables.tf +++ b/variables.tf @@ -1,12 +1,19 @@ -variable "vm_hosts" { +variable "vms" { default = { - #"hostname.example.com" = { - # provider = "hetzner" - # groups = [ "testgroup" ] - # volumes = { - # data = { size = 32 } - # } - #} + "host1.example.com" = { + #provider = "hetzner" + groups = [ "testgroup" ] + volumes = { + data = { size = 32 } + } + } + "host2.example.com" = { + #provider = "hetzner" + groups = [ "testgroup" ] + volumes = { + data = { size = 32 } + } + } } } @@ -17,3 +24,7 @@ variable "groups" { #} } } + +variable "providers_hostvars" { + default = {} +}