From 2a2d9519718c5fb6b5b55a863f6eb0dbddaefa57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Sun, 12 May 2019 20:57:52 +0200 Subject: [PATCH] ansible setup --- main.tf | 42 ++++-- modules/docker_node/main.tf | 20 --- modules/docker_node/outputs.tf | 7 - .../scripts/install-docker-compose.sh | 3 - modules/docker_node/scripts/install-docker.sh | 28 ---- .../docker_node/scripts/wait-cloud-init.sh | 13 -- modules/docker_node/vars.tf | 22 --- modules/floating_ip/files/99-floating.cfg | 4 - modules/floating_ip/main.tf | 48 ------- modules/floating_ip/outputs.tf | 3 - modules/floating_ip/vars.tf | 21 --- output.tf | 3 - services/bitwarden/files/docker-compose.yaml | 46 ------ services/bitwarden/files/traefik.toml | 28 ---- services/bitwarden/main.tf | 134 ------------------ services/bitwarden/output.tf | 3 - services/bitwarden/vars.tf | 39 ----- templates/ansible_inventory.cfg | 8 ++ terraform_provider_test/Makefile | 14 ++ terraform_provider_test/cluster.tf | 60 ++++++++ terraform_provider_test/nodes.tf | 19 +++ terraform_provider_test/provider_hcloud.tf | 12 ++ terraform_provider_test/provider_rancher2.tf | 17 +++ terraform_provider_test/terraform.tfvars | 3 + 24 files changed, 167 insertions(+), 430 deletions(-) delete mode 100755 modules/docker_node/main.tf delete mode 100755 modules/docker_node/outputs.tf delete mode 100755 modules/docker_node/scripts/install-docker-compose.sh delete mode 100755 modules/docker_node/scripts/install-docker.sh delete mode 100755 modules/docker_node/scripts/wait-cloud-init.sh delete mode 100755 modules/docker_node/vars.tf delete mode 100755 modules/floating_ip/files/99-floating.cfg delete mode 100755 modules/floating_ip/main.tf delete mode 100755 modules/floating_ip/outputs.tf delete mode 100755 modules/floating_ip/vars.tf delete mode 100755 output.tf delete mode 100644 services/bitwarden/files/docker-compose.yaml delete mode 100644 services/bitwarden/files/traefik.toml delete mode 100755 services/bitwarden/main.tf delete mode 100755 services/bitwarden/output.tf delete mode 100755 services/bitwarden/vars.tf create mode 100644 templates/ansible_inventory.cfg create mode 100644 terraform_provider_test/Makefile create mode 100644 terraform_provider_test/cluster.tf create mode 100644 terraform_provider_test/nodes.tf create mode 100644 terraform_provider_test/provider_hcloud.tf create mode 100644 terraform_provider_test/provider_rancher2.tf create mode 100644 terraform_provider_test/terraform.tfvars diff --git a/main.tf b/main.tf index 69a5a75..07577d9 100755 --- a/main.tf +++ b/main.tf @@ -1,11 +1,37 @@ -module bitwarden { - source = "services/bitwarden" - - location = "${var.hcloud_location}" - ssh_key_id = "${hcloud_ssh_key.terraform.id}" - bitwarden_admin_email = "${var.admin_email}" +resource hcloud_server control { + count = 3 + name = "control${count.index}" + image = "ubuntu-18.04" + server_type = "cx21" } -variable admin_email { - type = "string" +resource hcloud_server compute { + count = 3 + name = "compute${count.index}" + image = "ubuntu-18.04" + server_type = "cx21" +} + +data "template_file" "ansible_inventory" { + template = "${file("${path.module}/templates/ansible_inventory.cfg")}" + + depends_on = [ + "hcloud_server.control", + "hcloud_server.compute", + ] + + vars { + control = "${join("\n", hcloud_server.control.*.ipv4_address)}" + compute = "${join("\n", hcloud_server.compute.*.ipv4_address)}" + } +} + +resource "null_resource" "ansible_inventory" { + triggers { + template_rendered = "${data.template_file.ansible_inventory.rendered}" + } + + provisioner "local-exec" { + command = "echo '${data.template_file.ansible_inventory.rendered}' > ansible_inventory" + } } diff --git a/modules/docker_node/main.tf b/modules/docker_node/main.tf deleted file mode 100755 index 4baef14..0000000 --- a/modules/docker_node/main.tf +++ /dev/null @@ -1,20 +0,0 @@ -resource "hcloud_server" "node" { - name = "${var.name}" - image = "${var.image}" - server_type = "${var.server_type}" - location = "${var.location}" - - ssh_keys = ["${var.ssh_key_id}"] - - connection { - private_key = "${file("./keys/id_terraform")}" - } - - provisioner "remote-exec" { - scripts = [ - "modules/docker_node/scripts/wait-cloud-init.sh", - "modules/docker_node/scripts/install-docker.sh", - "modules/docker_node/scripts/install-docker-compose.sh", - ] - } -} diff --git a/modules/docker_node/outputs.tf b/modules/docker_node/outputs.tf deleted file mode 100755 index 714a180..0000000 --- a/modules/docker_node/outputs.tf +++ /dev/null @@ -1,7 +0,0 @@ -output ip { - value = "${hcloud_server.node.ipv4_address}" -} - -output id { - value = "${hcloud_server.node.id}" -} diff --git a/modules/docker_node/scripts/install-docker-compose.sh b/modules/docker_node/scripts/install-docker-compose.sh deleted file mode 100755 index 14d7bfc..0000000 --- a/modules/docker_node/scripts/install-docker-compose.sh +++ /dev/null @@ -1,3 +0,0 @@ -curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose -sudo chmod +x /usr/local/bin/docker-compose -docker-compose --version \ No newline at end of file diff --git a/modules/docker_node/scripts/install-docker.sh b/modules/docker_node/scripts/install-docker.sh deleted file mode 100755 index 3d04c76..0000000 --- a/modules/docker_node/scripts/install-docker.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -set -e -# Source: https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-repository - -echo "# apt-get update" -apt-get update -echo "# apt-get upgrade -y" -DEBIAN_FRONTEND='noninteractive' apt-get -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' upgrade - -# Add Repository -echo "# apt-get install" -apt-get install -y \ - apt-transport-https \ - ca-certificates \ - curl \ - software-properties-common -curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - -add-apt-repository \ - "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ - $(lsb_release -cs) \ - stable" - -echo "# apt-get update" -apt-get update - -# Install Docker -echo "# apt-get install docker-ce" -apt-get install -y docker-ce diff --git a/modules/docker_node/scripts/wait-cloud-init.sh b/modules/docker_node/scripts/wait-cloud-init.sh deleted file mode 100755 index 29fc9ad..0000000 --- a/modules/docker_node/scripts/wait-cloud-init.sh +++ /dev/null @@ -1,13 +0,0 @@ -# cloud-init is running at boot time and blocking access to apt. -# Before doing anything we should wait for it to finish. -# cloud-init creates a file after finishing boot. - -echo "Waiting for cloud-init to finish provisioning the instance." -while [ ! -f /var/lib/cloud/instance/boot-finished ] -do - echo "#" - sleep 2 -done - -# Wait some more to be sure -sleep 10 \ No newline at end of file diff --git a/modules/docker_node/vars.tf b/modules/docker_node/vars.tf deleted file mode 100755 index d65b798..0000000 --- a/modules/docker_node/vars.tf +++ /dev/null @@ -1,22 +0,0 @@ -variable name { - type = "string" -} - -variable image { - type = "string" - default = "ubuntu-18.04" -} - -variable server_type { - type = "string" - default = "cx11" -} - -variable location { - type = "string" - default = "nbg1" -} - -variable ssh_key_id { - type = "string" -} diff --git a/modules/floating_ip/files/99-floating.cfg b/modules/floating_ip/files/99-floating.cfg deleted file mode 100755 index 92843b9..0000000 --- a/modules/floating_ip/files/99-floating.cfg +++ /dev/null @@ -1,4 +0,0 @@ -auto eth0:1 -iface eth0:1 inet static - address ${FLOATING_IP} - netmask 255.255.255.255 \ No newline at end of file diff --git a/modules/floating_ip/main.tf b/modules/floating_ip/main.tf deleted file mode 100755 index b4d995d..0000000 --- a/modules/floating_ip/main.tf +++ /dev/null @@ -1,48 +0,0 @@ -################# -### IP ADDRESS ## -################# - -resource hcloud_floating_ip main { - type = "${var.type}" - description = "${var.host}" - home_location = "${var.location}" -} - -resource "hcloud_rdns" "main" { - floating_ip_id = "${hcloud_floating_ip.main.id}" - ip_address = "${hcloud_floating_ip.main.ip_address}" - dns_ptr = "${var.host}" -} - -################################### -### ASSIGNMENT AND PROVISIONING ### -################################### - -data "template_file" "network_config" { - template = "${file("modules/floating_ip/files/99-floating.cfg")}" - - vars { - FLOATING_IP = "${hcloud_floating_ip.main.ip_address}" - } -} - -resource hcloud_floating_ip_assignment main { - floating_ip_id = "${hcloud_floating_ip.main.id}" - server_id = "${var.server_id}" - - connection = { - host = "${var.server_ip}" - private_key = "${file("keys/id_terraform")}" - } - - provisioner file { - content = "${data.template_file.network_config.rendered}" - destination = "/etc/network/interfaces.d/99-floating.cfg" - } - - provisioner remote-exec { - inline = [ - "ifdown eth0:1 ; ifup eth0:1", - ] - } -} diff --git a/modules/floating_ip/outputs.tf b/modules/floating_ip/outputs.tf deleted file mode 100755 index 3b48314..0000000 --- a/modules/floating_ip/outputs.tf +++ /dev/null @@ -1,3 +0,0 @@ -output ip { - value = "${hcloud_floating_ip.main.ip_address}" -} diff --git a/modules/floating_ip/vars.tf b/modules/floating_ip/vars.tf deleted file mode 100755 index dcf6cc8..0000000 --- a/modules/floating_ip/vars.tf +++ /dev/null @@ -1,21 +0,0 @@ -variable host { - type = "string" -} - -variable type { - type = "string" - default = "ipv4" -} - -variable server_id { - type = "string" -} - -variable server_ip { - type = "string" -} - -variable location { - type = "string" - default = "nbg1" -} diff --git a/output.tf b/output.tf deleted file mode 100755 index 2e93e81..0000000 --- a/output.tf +++ /dev/null @@ -1,3 +0,0 @@ -output bitwarden_ip { - value = "${module.bitwarden.ip}" -} diff --git a/services/bitwarden/files/docker-compose.yaml b/services/bitwarden/files/docker-compose.yaml deleted file mode 100644 index 9008dc7..0000000 --- a/services/bitwarden/files/docker-compose.yaml +++ /dev/null @@ -1,46 +0,0 @@ -version: "2.1" - -services: - traefik: - image: traefik:1.7 - restart: always - ports: - - 80:80 - - 443:443 - networks: - - web - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - ${INSTALL_DIR}/traefik.toml:/traefik.toml - - ${INSTALL_DIR}/acme.json:/acme.json - container_name: traefik - - bitwarden: - image: mprasil/bitwarden:latest - restart: always - expose: - - "80" - - "3012" - networks: - - web - volumes: - - ${BITWARDEN_DATA_DIR}/:/data/ - environment: - SIGNUPS_ALLOWED: "false" - SERVER_ADMIN_EMAIL: "${BITWARDEN_ADMIN_EMAIL}" - labels: - - "traefik.frontend.rule=Host:${HOST}" - - "traefik.docker.network=web" - - "traefik.port=80" - - "traefik.enable=true" - - "traefik.web.frontend.rule=Host:${HOST}" - - "traefik.web.port=80" - - "traefik.hub.frontend.rule=Path:/notifications/hub" - - "traefik.hub.port=3012" - - "traefik.negotiate.frontend.rule=Path:/notifications/hub/negotiate" - - "traefik.negotiate.port=80" - container_name: bitwarden - -networks: - web: - name: web diff --git a/services/bitwarden/files/traefik.toml b/services/bitwarden/files/traefik.toml deleted file mode 100644 index d35bd36..0000000 --- a/services/bitwarden/files/traefik.toml +++ /dev/null @@ -1,28 +0,0 @@ -debug = true - -logLevel = "INFO" -defaultEntryPoints = ["https","http"] - -[entryPoints] - [entryPoints.http] - address = ":80" - [entryPoints.http.redirect] - entryPoint = "https" - [entryPoints.https] - address = ":443" - [entryPoints.https.tls] - -[retry] - -[docker] -endpoint = "unix:///var/run/docker.sock" -watch = true -exposedByDefault = false - -[acme] -email = "julian.toelle97@gmail.com" -storage = "acme.json" -entryPoint = "https" -onHostRule = true - [acme.httpChallenge] - entryPoint = "http" \ No newline at end of file diff --git a/services/bitwarden/main.tf b/services/bitwarden/main.tf deleted file mode 100755 index 298a46e..0000000 --- a/services/bitwarden/main.tf +++ /dev/null @@ -1,134 +0,0 @@ -########## -## NODE ## -########## -module "node" { - source = "../../modules/docker_node" - - name = "${var.name}" - - ssh_key_id = "${var.ssh_key_id}" -} - -############ -## VOLUME ## -############ - -resource "hcloud_volume" "data" { - name = "${var.volume_name}" - size = "${var.volume_size}" - location = "${var.location}" - - format = "ext4" -} - -resource hcloud_volume_attachment "data" { - volume_id = "${hcloud_volume.data.id}" - server_id = "${module.node.id}" - - automount = true -} - -resource null_resource "start-stop-bitwarden" { - # This resource is responsible for starting and stopping Bitwarden before - # changing volume assignments. This should avoid data corruption. - depends_on = ["hcloud_volume_attachment.data", "null_resource.install-bitwarden"] - - triggers = { - id = "${hcloud_volume_attachment.data.id}" - } - - connection = { - host = "${module.node.ip}" - private_key = "${file("keys/id_terraform")}" - } - - provisioner remote-exec { - # Stop bitwarden container before unmounting data volume - when = "destroy" - - inline = [ - "echo Stopping Bitwarden", - "docker stop bitwarden", - ] - } - - provisioner remote-exec { - # Start bitwarden after mounting new volume - inline = [ - "echo Starting Bitwarden", - "cd ${local.install_dir}", - "docker-compose up -d", - ] - } -} - -################ -## IP ADDRESS ## -################ - -module floating_ip { - source = "../../modules/floating_ip" - - location = "${var.location}" - host = "${var.host}" - server_id = "${module.node.id}" - server_ip = "${module.node.ip}" -} - -################# -## APPLICATION ## -################# - -data "template_file" "compose" { - template = "${file("services/bitwarden/files/docker-compose.yaml")}" - - vars = { - INSTALL_DIR = "${local.install_dir}" - BITWARDEN_DATA_DIR = "${local.bitwarden_data_dir}" - BITWARDEN_ADMIN_EMAIL = "${var.bitwarden_admin_email}" - HOST = "${var.host}" - } -} - -resource "null_resource" "install-bitwarden" { - depends_on = ["module.node", "hcloud_volume_attachment.data"] - - triggers { - node_id = "${module.node.id}" - volume_id = "${hcloud_volume.data.id}" - - docker_compose = "${sha1(data.template_file.compose.rendered)}" - traefik_config = "${sha1(file("services/bitwarden/files/traefik.toml"))}" - } - - connection = { - host = "${module.node.ip}" - private_key = "${file("keys/id_terraform")}" - } - - provisioner remote-exec { - inline = [ - "mkdir -p ${local.install_dir}", - "touch ${local.install_dir}/acme.json", - "chmod 600 ${local.install_dir}/acme.json", - ] - } - - provisioner file { - content = "${data.template_file.compose.rendered}" - destination = "${local.install_dir}/docker-compose.yaml" - } - - provisioner file { - source = "services/bitwarden/files/traefik.toml" - destination = "${local.install_dir}/traefik.toml" - } - - provisioner remote-exec { - inline = [ - "cd ${local.install_dir}", - "docker-compose pull", - "docker-compose up -d", - ] - } -} diff --git a/services/bitwarden/output.tf b/services/bitwarden/output.tf deleted file mode 100755 index cf946df..0000000 --- a/services/bitwarden/output.tf +++ /dev/null @@ -1,3 +0,0 @@ -output ip { - value = "${module.floating_ip.ip}" -} diff --git a/services/bitwarden/vars.tf b/services/bitwarden/vars.tf deleted file mode 100755 index 1734ec5..0000000 --- a/services/bitwarden/vars.tf +++ /dev/null @@ -1,39 +0,0 @@ -variable location { - type = "string" - default = "nbg1" -} - -variable ssh_key_id { - type = "string" -} - -variable volume_size { - type = "string" - default = 10 -} - -variable name { - type = "string" - default = "bitwarden" -} - -variable volume_name { - type = "string" - default = "bitwarden-data" -} - -variable host { - type = "string" - default = "bitwarden.apricote.de" -} - -variable bitwarden_admin_email { - type = "string" -} - -locals = { - volume_path = "/mnt/${var.volume_name}" - - install_dir = "/opt/${var.name}" - bitwarden_data_dir = "${local.volume_path}" -} diff --git a/templates/ansible_inventory.cfg b/templates/ansible_inventory.cfg new file mode 100644 index 0000000..d53f869 --- /dev/null +++ b/templates/ansible_inventory.cfg @@ -0,0 +1,8 @@ +[kube-master] +${control} + +[etcd] +${control} + +[kube-node] +${compute} \ No newline at end of file diff --git a/terraform_provider_test/Makefile b/terraform_provider_test/Makefile new file mode 100644 index 0000000..2516f40 --- /dev/null +++ b/terraform_provider_test/Makefile @@ -0,0 +1,14 @@ +TF=terraform +TFFLAGS=-var-file=credentials.tfvars + +apply: init + $(TF) apply $(TFFLAGS) + +plan: init + $(TF) plan $(TFFLAGS) + +destroy: init + $(TF) destroy $(TFFLAGS) + +init: + $(TF) init diff --git a/terraform_provider_test/cluster.tf b/terraform_provider_test/cluster.tf new file mode 100644 index 0000000..8de3c51 --- /dev/null +++ b/terraform_provider_test/cluster.tf @@ -0,0 +1,60 @@ +resource "rancher2_cluster" "sandbox" { + name = "sandbox" + description = "home-cloud sandbox cluster" + kind = "rke" + + rke_config { + network { + plugin = "canal" + } + + kubernetes_version = "v1.13.4-rancher1-1" + + addons = <