From e4b3620de5ccae069f41a9d2a78654d9efca8846 Mon Sep 17 00:00:00 2001
From: Nemo <me@captnemo.in>
Date: Sat, 16 Feb 2019 13:52:48 +0530
Subject: [PATCH] Merge branch 'kubernetes'

---
 .gitignore                |  1 +
 .terraform-version        |  2 +-
 kayak.tf                  | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 kube-test.tf              | 22 ++++++++++++++++++++++
 main.tf                   | 11 +++++------
 providers.tf              | 10 +++++-----
 state.tf                  |  8 ++++++++
 variables.tf              |  1 +
 cloudflare/main.tf        | 32 ++++++++++++++++++++++++++++++++
 media/airsonic.tf         | 30 +++++++++++++++++++++++-------
 media/jackett.tf          |  2 --
 media/radarr.tf           |  2 --
 media/variables.tf        |  2 +-
 modules/container/main.tf |  3 ++-
 modules/container/vars.tf |  6 ++++++
 15 files changed, 148 insertions(+), 31 deletions(-)

diff --git a/.gitignore b/.gitignore
index d2ef326..e1e2930 100644
--- a/.gitignore
+++ a/.gitignore
@@ -7,3 +7,4 @@
 *.backup
 secrets
 k8s/
+k8s2/
diff --git a/.terraform-version b/.terraform-version
index 1ee43fc..e6adeaa 100644
--- a/.terraform-version
+++ a/.terraform-version
@@ -1,1 +1,1 @@
-0.11.8
+0.11.12-beta1
diff --git a/kayak.tf b/kayak.tf
new file mode 100644
index 0000000..a15ea2d 100644
--- /dev/null
+++ a/kayak.tf
@@ -1,0 +1,47 @@
+// Points to the local working directory instead of
+// the published version
+module "kayak" {
+  source    = "../terraform-digitalocean-kayak"
+  cert_path = "${path.root}/secrets/kayak"
+  domain    = "kayak.${var.root-domain}"
+  ssh_key   = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD0Getey8585AqdgIl9mqQ3SH9w6z7NZUW4HXdOqZwC7sYEaDrLOBV014gtFS8h8ymm4dcw6xEGUkaavcHC8W9ChTLKBMK4N1/sUS/umLy+Wi/K//g13y0VHSdvcc+gMQ27b9n/DwDY4ZKkaf6t+4HWyFWNh6gp0cT1WCyLNlsER55KUdy+C1lCOpv1SMepOaYc7uyBlC9FfgewJho/OfxnoTztQV6QeSGfr2Xr94Ip1FUPoLoBLLilh4ZbCe6F6bqn0kNgVBTkrVwWJv5Z0jCJpUjER69cqjASRao9KCHkyPtybzKKhCLZIlB3QMggEv0xnlHMpeeuDWcGrBVPKI8V"
+
+  asset_dir = "${path.root}/k8s"
+
+  providers {
+    docker = "docker.kayak"
+  }
+}
+
+provider "docker" {
+  host          = "tcp://${cloudflare_record.kayak-docker.hostname}:2376"
+  version       = "~> 2.0.0"
+  alias         = "kayak"
+  ca_material   = "${module.kayak.docker_ca_cert}"
+  cert_material = "${module.kayak.docker_client_cert}"
+  key_material  = "${module.kayak.docker_client_key}"
+}
+
+resource "cloudflare_record" "kayak-docker" {
+  name   = "docker.kayak"
+  value  = "${module.kayak.droplet_ipv4}"
+  domain = "${var.root-domain}"
+  type   = "A"
+  ttl    = 120
+}
+
+resource "cloudflare_record" "kayak" {
+  name   = "kayak"
+  value  = "${module.kayak.droplet_ipv4}"
+  domain = "${var.root-domain}"
+  type   = "A"
+  ttl    = 120
+}
+
+resource "cloudflare_record" "kayak-etcd" {
+  name   = "etcd.kayak"
+  value  = "${module.kayak.droplet_ipv4_private}"
+  domain = "${var.root-domain}"
+  type   = "A"
+  ttl    = 120
+}
diff --git a/kube-test.tf b/kube-test.tf
new file mode 100644
index 0000000..fae4802 100644
--- /dev/null
+++ a/kube-test.tf
@@ -1,0 +1,22 @@
+// Bring up a simple test container
+// In the controller node
+
+resource "kubernetes_pod" "nginx" {
+  metadata {
+    name      = "terraform-example"
+    namespace = "default"
+  }
+
+  spec {
+    toleration {
+      key      = "node-role.kubernetes.io/master"
+      operator = "Exists"
+      effect   = "NoSchedule"
+    }
+
+    container {
+      image = "nginx:latest"
+      name  = "nginx"
+    }
+  }
+}
diff --git a/main.tf b/main.tf
index 1b3d938..1329e2f 100644
--- a/main.tf
+++ a/main.tf
@@ -67,12 +67,11 @@
 }
 
 module "media" {
-  source                 = "media"
-  domain                 = "bb8.fun"
-  traefik-labels         = "${var.traefik-common-labels}"
-  airsonic-smtp-password = "${var.airsonic-smtp-password}"
-  ips                    = "${var.ips}"
-  traefik-network-id     = "${module.docker.traefik-network-id}"
+  source             = "media"
+  domain             = "bb8.fun"
+  traefik-labels     = "${var.traefik-common-labels}"
+  ips                = "${var.ips}"
+  traefik-network-id = "${module.docker.traefik-network-id}"
 }
 
 module "monitoring" {
diff --git a/providers.tf b/providers.tf
index 95afb20..c9eedb8 100644
--- a/providers.tf
+++ a/providers.tf
@@ -1,14 +1,14 @@
 provider "docker" {
   host      = "tcp://docker.vpn.bb8.fun:2376"
   cert_path = "./secrets/tatooine"
   version   = "~> 2.0.0"
 }
 
-provider "docker" {
-  host      = "tcp://dovpn.vpn.bb8.fun:2376"
-  cert_path = "./secrets/sydney"
-  alias     = "sydney"
-  version   = "~> 2.0.0"
+provider "kubernetes" {
+  version = "1.3.0-custom"
+  host    = "https://k8s.bb8.fun:6443"
+
+  config_path = "${path.root}/k8s/auth/kubeconfig"
 }
 
 provider "cloudflare" {
diff --git a/state.tf b/state.tf
new file mode 100644
index 0000000..91d84e1 100644
--- /dev/null
+++ a/state.tf
@@ -1,0 +1,8 @@
+terraform {
+  backend "s3" {
+    bucket  = "rmx-nemo"
+    key     = "terraform/nebula.tfstate"
+    region  = "ap-south-1"
+    profile = "nebula"
+  }
+}
diff --git a/variables.tf b/variables.tf
index 1f50bdc..7a4dce8 100644
--- a/variables.tf
+++ a/variables.tf
@@ -27,6 +27,7 @@
   default = {
     eth0   = "192.168.1.111"
     tun0   = "10.8.0.14"
+    dovpn  = "10.8.0.1"
     static = "139.59.48.222"
   }
 }
diff --git a/cloudflare/main.tf b/cloudflare/main.tf
index 40e71f6..9fb6ab6 100644
--- a/cloudflare/main.tf
+++ a/cloudflare/main.tf
@@ -64,6 +64,32 @@
   ttl    = 3600
 }
 
+/**
+ *   vpn.bb8.fun
+ * *.vpn.bb8.fun
+ */
+resource "cloudflare_record" "dovpn" {
+  domain = "${var.domain}"
+  name   = "dovpn"
+  value  = "${var.ips["dovpn"]}"
+  type   = "A"
+}
+
+resource "cloudflare_record" "dovpn_wildcard" {
+  domain = "${var.domain}"
+  name   = "*.dovpn.${var.domain}"
+  value  = "${cloudflare_record.dovpn.hostname}"
+  type   = "CNAME"
+  ttl    = 3600
+}
+
+resource "cloudflare_record" "etcd" {
+  domain = "${var.domain}"
+  name   = "etcd"
+  value  = "${var.ips["dovpn"]}"
+  type   = "A"
+}
+
 ########################
 ## Mailgun Mailing Lists
 ########################
@@ -98,10 +124,10 @@
   priority = 20
 }
 
-resource "cloudflare_record" "k8s-talk" {
+resource "cloudflare_record" "k8s" {
   domain = "${var.domain}"
   name   = "k8s"
-  value  = "lightsaber.captnemo.in"
-  type   = "CNAME"
+  value  = "10.8.0.1"
+  type   = "A"
   ttl    = 3600
 }
diff --git a/media/airsonic.tf b/media/airsonic.tf
index 74986bf..8de3640 100644
--- a/media/airsonic.tf
+++ a/media/airsonic.tf
@@ -1,10 +1,10 @@
 module "airsonic" {
   source = "../modules/container"
   image  = "linuxserver/airsonic:latest"
   name   = "airsonic"
 
   resource {
-    memory = "256"
+    memory = "1024"
   }
 
   web {
@@ -13,14 +13,17 @@
     expose = true
   }
 
-  user = "lounge:audio"
-
   env = [
     "PUID=1004",
     "PGID=1003",
     "TZ=Asia/Kolkata",
     "JAVA_OPTS=-Xmx512m -Dserver.use-forward-headers=true -Dserver.context-path=/",
   ]
+
+  devices = [{
+    host_path      = "/dev/snd"
+    container_path = "/dev/snd"
+  }]
 
   # files = [
   #   "/usr/lib/jvm/java-1.8-openjdk/jre/lib/airsonic.properties",
@@ -49,16 +52,23 @@
     {
       host_path      = "/mnt/xwing/config/airsonic/podcasts"
       container_path = "/podcasts"
+    },
+    {
+      host_path      = "/mnt/xwing/config/airsonic/jre"
+      container_path = "/usr/lib/jvm/java-1.8-openjdk/jre/lib/"
     },
   ]
 }
 
-data "template_file" "airsonic-properties-file" {
-  template = "${file("${path.module}/conf/airsonic.properties.tpl")}"
+# data "template_file" "airsonic-properties-file" {
+#   template = "${file("${path.module}/conf/airsonic.properties.tpl")}"
 
-  vars {
-    smtp-password = "${var.airsonic-smtp-password}"
 
-    # db-password   = "${var.airsonic-db-password}"
-  }
-}
+#   vars {
+#     smtp-password = "${var.airsonic-smtp-password}"
+
+
+#     # db-password   = "${var.airsonic-db-password}"
+#   }
+# }
+
diff --git a/media/jackett.tf b/media/jackett.tf
index 07b5b4d..5ed6256 100644
--- a/media/jackett.tf
+++ a/media/jackett.tf
@@ -11,8 +11,6 @@
     host   = "jackett.${var.domain}"
   }
 
-  networks = ["${docker_network.media.id}", "${var.traefik-network-id}"]
-
   volumes = [{
     host_path      = "/mnt/xwing/config/jackett"
     container_path = "/config"
diff --git a/media/radarr.tf b/media/radarr.tf
index 16c6d32..d7b7095 100644
--- a/media/radarr.tf
+++ a/media/radarr.tf
@@ -16,8 +16,6 @@
     memory_swap = 1024
   }
 
-  networks = ["${docker_network.media.id}", "${var.traefik-network-id}"]
-
   volumes = [
     {
       host_path      = "/mnt/xwing/config/radarr"
diff --git a/media/variables.tf b/media/variables.tf
index 0fdd605..1d66838 100644
--- a/media/variables.tf
+++ a/media/variables.tf
@@ -1,8 +1,8 @@
 variable "domain" {
   type = "string"
 }
 
-variable "airsonic-smtp-password" {}
+# variable "airsonic-smtp-password" {}
 
 variable "traefik-labels" {
   type = "map"
diff --git a/modules/container/main.tf b/modules/container/main.tf
index 2c9d59c..248bb55 100644
--- a/modules/container/main.tf
+++ a/modules/container/main.tf
@@ -1,9 +1,9 @@
 data "docker_registry_image" "image" {
   name = "${var.image}"
 }
 
 resource "docker_image" "image" {
-  name          = "${data.docker_registry_image.image.name}"
+  name          = "${var.image}"
   pull_triggers = ["${data.docker_registry_image.image.sha256_digest}"]
 }
 
@@ -31,6 +31,7 @@
   memory_swap = "${local.resource["memory_swap"]}"
 
   volumes = ["${var.volumes}"]
+  devices = ["${var.devices}"]
 
   # Look at this monstrosity
   # And then https://github.com/hashicorp/terraform/issues/12453#issuecomment-365569618
diff --git a/modules/container/vars.tf b/modules/container/vars.tf
index 0540ab0..b77fda6 100644
--- a/modules/container/vars.tf
+++ a/modules/container/vars.tf
@@ -88,3 +88,9 @@
   type        = "list"
   default     = []
 }
+
+variable "devices" {
+  description = "volumes"
+  type        = "list"
+  default     = []
+}
--
rgit 0.1.5