Skip to content
Snippets Groups Projects
Select Git revision
  • cdc8d17d0bbfd62cef9d0f53ccc8fb9ce6c99c5b
  • master default protected
  • v2.28.0
  • v2.27.0
  • v2.25.1
  • v2.24.3
  • v2.26.0
  • v2.24.2
  • v2.25.0
  • v2.24.1
  • v2.22.2
  • v2.23.3
  • v2.24.0
  • v2.23.2
  • v2.23.1
  • v2.23.0
  • v2.22.1
  • v2.22.0
  • v2.21.0
  • v2.20.0
  • v2.19.1
  • v2.18.2
22 results

equinix-metal.md

Blame
  • main.tf 4.73 KiB
    resource "hcloud_network" "kubernetes" {
      name     = "${var.prefix}-network"
      ip_range = var.private_network_cidr
    }
    
    resource "hcloud_network_subnet" "kubernetes" {
      type         = "cloud"
      network_id   = hcloud_network.kubernetes.id
      network_zone = var.network_zone
      ip_range     = var.private_subnet_cidr
    }
    
    resource "hcloud_ssh_key" "first" {
      name       = var.prefix
      public_key = var.ssh_public_keys.0
    }
    
    resource "hcloud_server" "master" {
      for_each = {
        for name, machine in var.machines :
        name => machine
        if machine.node_type == "master"
      }
      name     = "${var.prefix}-${each.key}"
      ssh_keys = [hcloud_ssh_key.first.id]
      # boot into rescue OS
      rescue = "linux64"
      # dummy value for the OS because Flatcar is not available
      image       = each.value.image
      server_type = each.value.size
      location    = var.zone
      connection {
        host    = self.ipv4_address
        timeout = "5m"
        private_key = file(var.ssh_private_key_path)
      }
      firewall_ids = [hcloud_firewall.machine.id]
      provisioner "file" {
        content     = data.ct_config.machine-ignitions[each.key].rendered
        destination = "/root/ignition.json"
      }
    
      provisioner "remote-exec" {
        inline = [
          "set -ex",
          "apt update",
          "apt install -y gawk",
          "curl -fsSLO --retry-delay 1 --retry 60 --retry-connrefused --retry-max-time 60 --connect-timeout 20 https://raw.githubusercontent.com/kinvolk/init/flatcar-master/bin/flatcar-install",
          "chmod +x flatcar-install",
          "./flatcar-install -s -i /root/ignition.json",
          "shutdown -r +1",
        ]
      }
    
      # optional:
      provisioner "remote-exec" {
        connection {
          host    = self.ipv4_address
          timeout = "3m"
          user    = var.user_flatcar
        }
    
        inline = [
          "sudo hostnamectl set-hostname ${self.name}",
        ]
      }
    }
    
    resource "hcloud_server_network" "master" {
      for_each = hcloud_server.master
      server_id = each.value.id
      subnet_id = hcloud_network_subnet.kubernetes.id
    }
    
    resource "hcloud_server" "worker" {
      for_each = {
        for name, machine in var.machines :
        name => machine
        if machine.node_type == "worker"
      }
      name     = "${var.prefix}-${each.key}"
      ssh_keys = [hcloud_ssh_key.first.id]
      # boot into rescue OS
      rescue = "linux64"
      # dummy value for the OS because Flatcar is not available
      image       = each.value.image
      server_type = each.value.size
      location    = var.zone
      connection {
        host    = self.ipv4_address
        timeout = "5m"
        private_key = file(var.ssh_private_key_path)
      }
      firewall_ids = [hcloud_firewall.machine.id]
      provisioner "file" {
        content     = data.ct_config.machine-ignitions[each.key].rendered
        destination = "/root/ignition.json"
      }
    
      provisioner "remote-exec" {
        inline = [
          "set -ex",
          "apt update",
          "apt install -y gawk",
          "curl -fsSLO --retry-delay 1 --retry 60 --retry-connrefused --retry-max-time 60 --connect-timeout 20 https://raw.githubusercontent.com/kinvolk/init/flatcar-master/bin/flatcar-install",
          "chmod +x flatcar-install",
          "./flatcar-install -s -i /root/ignition.json",
          "shutdown -r +1",
        ]
      }
    
      # optional:
      provisioner "remote-exec" {
        connection {
          host    = self.ipv4_address
          timeout = "3m"
          user    = var.user_flatcar
        }
    
        inline = [
          "sudo hostnamectl set-hostname ${self.name}",
        ]
      }
    }
    
    resource "hcloud_server_network" "worker" {
      for_each = hcloud_server.worker
      server_id = each.value.id
      subnet_id = hcloud_network_subnet.kubernetes.id
    }
    
    data "ct_config" "machine-ignitions" {
      for_each = {
        for name, machine in var.machines :
        name => machine
      }
      content  = data.template_file.machine-configs[each.key].rendered
    }
    
    data "template_file" "machine-configs" {
      for_each = {
        for name, machine in var.machines :
        name => machine
      }
      template = file("${path.module}/templates/machine.yaml.tmpl")
    
      vars = {
        ssh_keys = jsonencode(var.ssh_public_keys)
        user_flatcar = jsonencode(var.user_flatcar)
        name     = each.key
      }
    }
    
    resource "hcloud_firewall" "machine" {
      name = "${var.prefix}-machine-firewall"
    
      rule {
       direction = "in"
       protocol = "tcp"
       port = "22"
       source_ips = var.ssh_whitelist
      }
    
      rule {
       direction = "in"
       protocol = "tcp"
       port = "6443"
       source_ips = var.api_server_whitelist
      }
    }
    
    resource "hcloud_firewall" "worker" {
      name = "${var.prefix}-worker-firewall"
    
      rule {
       direction = "in"
       protocol = "tcp"
       port = "22"
       source_ips = var.ssh_whitelist
      }
    
      rule {
       direction = "in"
       protocol = "tcp"
       port = "80"
       source_ips = var.ingress_whitelist
      }
    
      rule {
       direction = "in"
       protocol = "tcp"
       port = "443"
       source_ips = var.ingress_whitelist
      }
    
      rule {
       direction = "in"
       protocol = "tcp"
       port = "30000-32767"
       source_ips = var.nodeport_whitelist
      }
    }