From 1a714d87b2a291d95ba689c80bab6acd40cf571d Mon Sep 17 00:00:00 2001 From: Nemo Date: Tue, 29 May 2018 18:56:00 +0530 Subject: [PATCH] re-arch into media directory --- docker/db.tf => db/mariadb.tf | 32 +++++++----------------- db/mongorocks.tf | 32 ++++++++++++++++++++++++ db/outputs.tf | 7 ++++++ db/variables.tf | 10 ++++++++ db/volumes.tf | 7 ++++++ docker/data.tf | 19 -------------- docker/images.tf | 20 --------------- docker/lychee.tf | 2 +- docker/network.tf | 7 +++++- docker/outputs.tf | 12 --------- docker/variables.tf | 11 +++----- docker/volumes.tf | 6 ----- docker/wiki.tf | 2 +- main.tf | 27 ++++++++++++++------ {docker => media}/conf/transmission.json | 0 {docker => media}/emby.tf | 11 +++++++- media/lidarr.tf | 2 +- media/network.tf | 9 +++++++ media/outputs.tf | 7 ++++++ media/radarr.tf | 2 +- media/sonarr.tf | 2 +- {docker => media}/transmission.tf | 13 +++++++++- media/variables.tf | 10 ++++++++ 23 files changed, 146 insertions(+), 104 deletions(-) rename docker/db.tf => db/mariadb.tf (62%) create mode 100644 db/mongorocks.tf create mode 100644 db/outputs.tf create mode 100644 db/variables.tf create mode 100644 db/volumes.tf rename {docker => media}/conf/transmission.json (100%) rename {docker => media}/emby.tf (74%) create mode 100644 media/network.tf create mode 100644 media/outputs.tf rename {docker => media}/transmission.tf (73%) diff --git a/docker/db.tf b/db/mariadb.tf similarity index 62% rename from docker/db.tf rename to db/mariadb.tf index 47141ed..de2a474 100644 --- a/docker/db.tf +++ b/db/mariadb.tf @@ -1,26 +1,3 @@ -resource "docker_container" "mongorocks" { - name = "mongorocks" - image = "${docker_image.percona-mongodb-server.latest}" - - restart = "unless-stopped" - destroy_grace_seconds = 30 - must_run = true - memory = 256 - - volumes { - volume_name = "${docker_volume.mongorocks_data_volume.name}" - container_path = "/data/db" - host_path = "${docker_volume.mongorocks_data_volume.mountpoint}" - } - - command = [ - "--storageEngine=rocksdb", - "--httpinterface", - "--rest", - "--master", - ] -} - resource "docker_container" "mariadb" { name = "mariadb" image = "${docker_image.mariadb.latest}" @@ -59,3 +36,12 @@ resource "docker_container" "mariadb" { "--version=${var.mariadb-version}-MariaDB", ] } + +resource "docker_image" "mariadb" { + name = "${data.docker_registry_image.mariadb.name}" + pull_triggers = ["${data.docker_registry_image.mariadb.sha256_digest}"] +} + +data "docker_registry_image" "mariadb" { + name = "mariadb:${var.mariadb-version}" +} diff --git a/db/mongorocks.tf b/db/mongorocks.tf new file mode 100644 index 0000000..9de189b --- /dev/null +++ b/db/mongorocks.tf @@ -0,0 +1,32 @@ +resource "docker_container" "mongorocks" { + name = "mongorocks" + image = "${docker_image.percona-mongodb-server.latest}" + + restart = "unless-stopped" + destroy_grace_seconds = 30 + must_run = true + memory = 256 + + volumes { + volume_name = "${docker_volume.mongorocks_data_volume.name}" + container_path = "/data/db" + host_path = "${docker_volume.mongorocks_data_volume.mountpoint}" + } + + command = [ + "--storageEngine=rocksdb", + "--httpinterface", + "--rest", + "--master", + ] +} + +resource "docker_image" "percona-mongodb-server" { + name = "${data.docker_registry_image.percona-mongodb-server.name}" + pull_triggers = ["${data.docker_registry_image.percona-mongodb-server.sha256_digest}"] +} + +# Database versions shouldn't be upgraded +data "docker_registry_image" "percona-mongodb-server" { + name = "percona/percona-server-mongodb:3.4" +} diff --git a/db/outputs.tf b/db/outputs.tf new file mode 100644 index 0000000..ffeff05 --- /dev/null +++ b/db/outputs.tf @@ -0,0 +1,7 @@ +output "names-mariadb" { + value = "${docker_container.mariadb.name}" +} + +output "names-mongorocks" { + value = "${docker_container.mongorocks.name}" +} diff --git a/db/variables.tf b/db/variables.tf new file mode 100644 index 0000000..708e0b3 --- /dev/null +++ b/db/variables.tf @@ -0,0 +1,10 @@ +variable "mariadb-version" { + description = "mariadb version to use for fetching the docker image" + default = "10.2.14" +} + +variable "ips" { + type = "map" +} + +variable "mysql_root_password" {} diff --git a/db/volumes.tf b/db/volumes.tf new file mode 100644 index 0000000..4a066c3 --- /dev/null +++ b/db/volumes.tf @@ -0,0 +1,7 @@ +resource "docker_volume" "mariadb_volume" { + name = "mariadb_volume" +} + +resource "docker_volume" "mongorocks_data_volume" { + name = "mongorocks_data_volume" +} diff --git a/docker/data.tf b/docker/data.tf index 28eaecf..7569914 100644 --- a/docker/data.tf +++ b/docker/data.tf @@ -1,28 +1,9 @@ -# Database versions shouldn't be upgraded - -data "docker_registry_image" "mariadb" { - name = "mariadb:${var.mariadb-version}" -} - -data "docker_registry_image" "percona-mongodb-server" { - name = "percona/percona-server-mongodb:3.4" -} - data "docker_registry_image" "traefik" { # Critical and I like upgrading it # for updating config for new features name = "traefik:1.6-alpine" } -# YOLO everything else -data "docker_registry_image" "emby" { - name = "emby/embyserver:latest" -} - -data "docker_registry_image" "transmission" { - name = "linuxserver/transmission:latest" -} - data "docker_registry_image" "wikijs" { name = "requarks/wiki:latest" } diff --git a/docker/images.tf b/docker/images.tf index 3739293..7713d28 100644 --- a/docker/images.tf +++ b/docker/images.tf @@ -1,18 +1,3 @@ -resource "docker_image" "emby" { - name = "${data.docker_registry_image.emby.name}" - pull_triggers = ["${data.docker_registry_image.emby.sha256_digest}"] -} - -resource "docker_image" "mariadb" { - name = "${data.docker_registry_image.mariadb.name}" - pull_triggers = ["${data.docker_registry_image.mariadb.sha256_digest}"] -} - -resource "docker_image" "transmission" { - name = "${data.docker_registry_image.transmission.name}" - pull_triggers = ["${data.docker_registry_image.transmission.sha256_digest}"] -} - resource "docker_image" "traefik16" { name = "${data.docker_registry_image.traefik.name}" pull_triggers = ["${data.docker_registry_image.traefik.sha256_digest}"] @@ -23,11 +8,6 @@ resource "docker_image" "wikijs" { pull_triggers = ["${data.docker_registry_image.wikijs.sha256_digest}"] } -resource "docker_image" "percona-mongodb-server" { - name = "${data.docker_registry_image.percona-mongodb-server.name}" - pull_triggers = ["${data.docker_registry_image.percona-mongodb-server.sha256_digest}"] -} - resource "docker_image" "ubooquity" { name = "${data.docker_registry_image.ubooquity.name}" pull_triggers = ["${data.docker_registry_image.ubooquity.sha256_digest}"] diff --git a/docker/lychee.tf b/docker/lychee.tf index 2a6fe07..1d60020 100644 --- a/docker/lychee.tf +++ b/docker/lychee.tf @@ -33,5 +33,5 @@ resource "docker_container" "lychee" { "PGID=984", ] - links = ["${docker_container.mariadb.name}"] + links = ["${var.links-mariadb}"] } diff --git a/docker/network.tf b/docker/network.tf index 8b13789..8ea0161 100644 --- a/docker/network.tf +++ b/docker/network.tf @@ -1 +1,6 @@ - +// This is the default network we use +// for any new container +resource "docker_network" "bb8-default" { + name = "bb8" + driver = "bridge" +} diff --git a/docker/outputs.tf b/docker/outputs.tf index cd1347b..a143190 100644 --- a/docker/outputs.tf +++ b/docker/outputs.tf @@ -2,18 +2,6 @@ output "lychee-ip" { value = "${docker_container.lychee.ip_address}" } -output "names-transmission" { - value = "${docker_container.transmission.name}" -} - -output "names-emby" { - value = "${docker_container.emby.name}" -} - -output "names-mariadb" { - value = "${docker_container.mariadb.name}" -} - output "names-traefik" { value = "${docker_container.traefik.name}" } diff --git a/docker/variables.tf b/docker/variables.tf index e64d81c..76c5b22 100644 --- a/docker/variables.tf +++ b/docker/variables.tf @@ -6,10 +6,6 @@ variable "web_password" { type = "string" } -variable "mysql_root_password" { - type = "string" -} - variable "cloudflare_key" { type = "string" description = "cloudflare API Key" @@ -54,7 +50,6 @@ variable "ips" { type = "map" } -variable "mariadb-version" { - description = "mariadb version to use for fetching the docker image" - default = "10.2.14" -} +variable "links-mariadb" {} + +variable "links-mongorocks" {} diff --git a/docker/volumes.tf b/docker/volumes.tf index 4a066c3..8b13789 100644 --- a/docker/volumes.tf +++ b/docker/volumes.tf @@ -1,7 +1 @@ -resource "docker_volume" "mariadb_volume" { - name = "mariadb_volume" -} -resource "docker_volume" "mongorocks_data_volume" { - name = "mongorocks_data_volume" -} diff --git a/docker/wiki.tf b/docker/wiki.tf index d1c0049..09e9224 100644 --- a/docker/wiki.tf +++ b/docker/wiki.tf @@ -43,7 +43,7 @@ resource "docker_container" "wiki" { "traefik.port", 9999, "traefik.frontend.headers.customResponseHeaders", "${var.xpoweredby}||Referrer-Policy:${var.refpolicy}||X-Frame-Options:${var.xfo_allow}", ))}" - links = ["${docker_container.mongorocks.name}"] + links = ["${var.links-mongorocks}"] env = [ "WIKI_ADMIN_EMAIL=me@captnemo.in", "SESSION_SECRET=${var.wiki_session_secret}", diff --git a/main.tf b/main.tf index 8e1e742..7fb5415 100644 --- a/main.tf +++ b/main.tf @@ -17,14 +17,21 @@ module "docker" { source = "docker" web_username = "${var.web_username}" web_password = "${var.web_password}" - mysql_root_password = "${var.mysql_root_password}" cloudflare_key = "${var.cloudflare_key}" cloudflare_email = "bb8@captnemo.in" wiki_session_secret = "${var.wiki_session_secret}" + links-mariadb = "${module.db.names-mariadb}" + links-mongorocks = "${module.db.names-mongorocks}" ips = "${var.ips}" domain = "bb8.fun" } +module "db" { + source = "db" + mysql_root_password = "${var.mysql_root_password}" + ips = "${var.ips}" +} + module "timemachine" { source = "timemachine" ips = "${var.ips}" @@ -56,7 +63,7 @@ module "tt-rss" { source = "tt-rss" domain = "rss.captnemo.in" mysql_password = "${var.mysql-ttrss-password}" - links-db = "${module.docker.names-mariadb}" + links-db = "${module.db.names-mariadb}" traefik-labels = "${var.traefik-common-labels}" } @@ -81,21 +88,25 @@ module "heimdall" { } module "media" { - source = "media" - domain = "bb8.fun" - links-emby = "${module.docker.names-emby}" - links-transmission = "${module.docker.names-transmission}" - links-mariadb = "${module.docker.names-mariadb}" + source = "media" + domain = "bb8.fun" + + // TODO: remove self links + links-emby = "${module.media.names-emby}" + links-transmission = "${module.media.names-transmission}" + links-mariadb = "${module.db.names-mariadb}" + links-mongorocks = "${module.db.names-mongorocks}" traefik-labels = "${var.traefik-common-labels}" airsonic-smtp-password = "${var.airsonic-smtp-password}" airsonic-db-password = "${var.mysql_airsonic_password}" + ips = "${var.ips}" } module "monitoring" { source = "monitoring" gf-security-admin-password = "${var.gf-security-admin-password}" domain = "bb8.fun" - transmission = "${module.docker.names-transmission}" + transmission = "${module.media.names-transmission}" traefik-labels = "${var.traefik-common-labels}" ips = "${var.ips}" links-traefik = "${module.docker.names-traefik}" diff --git a/docker/conf/transmission.json b/media/conf/transmission.json similarity index 100% rename from docker/conf/transmission.json rename to media/conf/transmission.json diff --git a/docker/emby.tf b/media/emby.tf similarity index 74% rename from docker/emby.tf rename to media/emby.tf index 0f474f8..0581bcf 100644 --- a/docker/emby.tf +++ b/media/emby.tf @@ -13,7 +13,7 @@ resource "docker_container" "emby" { } labels = "${merge( - local.traefik_common_labels, + var.traefik-labels, map( "traefik.frontend.rule", "Host:emby.in.${var.domain},emby.${var.domain}", "traefik.frontend.passHostHeader", "true", @@ -34,3 +34,12 @@ resource "docker_container" "emby" { "TZ=Asia/Kolkata", ] } + +resource "docker_image" "emby" { + name = "${data.docker_registry_image.emby.name}" + pull_triggers = ["${data.docker_registry_image.emby.sha256_digest}"] +} + +data "docker_registry_image" "emby" { + name = "emby/embyserver:latest" +} diff --git a/media/lidarr.tf b/media/lidarr.tf index d3a8e9d..ba1b500 100644 --- a/media/lidarr.tf +++ b/media/lidarr.tf @@ -43,5 +43,5 @@ resource "docker_container" "lidarr" { "TZ=Asia/Kolkata", ] - links = ["${var.links-emby}", "${var.links-transmission}"] + networks = ["${docker_network.media.id}"] } diff --git a/media/network.tf b/media/network.tf new file mode 100644 index 0000000..4b3e8ff --- /dev/null +++ b/media/network.tf @@ -0,0 +1,9 @@ +resource "docker_network" "media" { + name = "media" + driver = "bridge" + + ipam_config { + subnet = "172.18.0.0/16" + gateway = "172.18.0.1" + } +} diff --git a/media/outputs.tf b/media/outputs.tf new file mode 100644 index 0000000..c9ec38f --- /dev/null +++ b/media/outputs.tf @@ -0,0 +1,7 @@ +output "names-transmission" { + value = "${docker_container.transmission.name}" +} + +output "names-emby" { + value = "${docker_container.emby.name}" +} diff --git a/media/radarr.tf b/media/radarr.tf index 1783cf6..f0a3b4f 100644 --- a/media/radarr.tf +++ b/media/radarr.tf @@ -44,5 +44,5 @@ resource "docker_container" "radarr" { "TZ=Asia/Kolkata", ] - links = ["${var.links-emby}", "${var.links-transmission}"] + networks = ["${docker_network.media.id}"] } diff --git a/media/sonarr.tf b/media/sonarr.tf index b928399..7cc80b0 100644 --- a/media/sonarr.tf +++ b/media/sonarr.tf @@ -43,5 +43,5 @@ resource "docker_container" "sonarr" { "TZ=Asia/Kolkata", ] - links = ["${var.links-emby}", "${var.links-transmission}"] + networks = ["${docker_network.media.id}"] } diff --git a/docker/transmission.tf b/media/transmission.tf similarity index 73% rename from docker/transmission.tf rename to media/transmission.tf index 301a106..c6a4d92 100644 --- a/docker/transmission.tf +++ b/media/transmission.tf @@ -3,7 +3,7 @@ resource "docker_container" "transmission" { image = "${docker_image.transmission.latest}" labels = "${merge( - local.traefik_common_labels, + var.traefik-labels, map( "traefik.frontend.auth.basic", "${var.basic_auth}", "traefik.port", 9091, @@ -42,8 +42,19 @@ resource "docker_container" "transmission" { "TZ=Asia/Kolkata", ] + networks = ["${docker_network.media.id}"] + memory = 1024 restart = "unless-stopped" destroy_grace_seconds = 10 must_run = true } + +resource "docker_image" "transmission" { + name = "${data.docker_registry_image.transmission.name}" + pull_triggers = ["${data.docker_registry_image.transmission.sha256_digest}"] +} + +data "docker_registry_image" "transmission" { + name = "linuxserver/transmission:latest" +} diff --git a/media/variables.tf b/media/variables.tf index eb8eac9..7465c81 100644 --- a/media/variables.tf +++ b/media/variables.tf @@ -5,9 +5,19 @@ variable "domain" { variable "links-emby" {} variable "links-transmission" {} variable "links-mariadb" {} +variable "links-mongorocks" {} variable "airsonic-smtp-password" {} variable "airsonic-db-password" {} variable "traefik-labels" { type = "map" } + +// TODO: Remove duplication +variable "basic_auth" { + default = "tatooine:$2y$05$iPbatint3Gulbs6kUtyALO9Yq5sBJ..aiF82bcIziH4ytz9nFoPr6,reddit:$2y$05$ghKxSydYCpAT8r2VVMDmWO/BBecghGfLsRJUkr3ii7XxPyxBqp8Oy" +} + +variable "ips" { + type = "map" +}