8 Commits
Author SHA1 Message Date
pi-ux-ce 85026544e8 can create new entries with random password not erased after new excution 2025-05-26 23:35:23 +01:00
pi-ux-ce 810fa2951a Update module.tf 2025-05-26 22:07:55 +00:00
pi-ux-ce 9f83ec215b try some bitwarden function 2025-05-20 23:56:32 +01:00
pi-ux-ce cbf2a33440 adding 2025-05-20 23:22:26 +01:00
pi-ux-ce 3ff155e3e6 multiport + naming 2025-05-18 00:29:58 +01:00
pi-ux-ce a53852b0c6 conflict solved 2025-05-18 00:12:37 +01:00
pi-ux-ce aa5826f6a4 multi port working 2025-05-18 00:01:43 +01:00
pi-ux-ce 48cc59e735 try the port 2025-05-12 12:02:02 +01:00
2 changed files with 108 additions and 51 deletions
+67 -8
View File
@@ -1,11 +1,59 @@
terraform { terraform {
required_version = "> 0.8.0" required_version = "> 0.8.0"
required_providers {
bitwarden = {
source = "maxlaverse/bitwarden"
version = ">= 0.13.6"
}
}
} }
provider "kubernetes" { provider "kubernetes" {
config_path = "~/.kube/config" config_path = "~/.kube/config"
} }
provider "bitwarden" {
email = "pierre@geeraert.eu"
master_password = ""
server = "https://bitwarden.tryton.geeraert.eu"
experimental {
embedded_client = true
}
}
#https://stackoverflow.com/questions/66670949/how-to-tell-terraform-to-skip-the-secret-manager-resource-if-it-exists
#for the secret not overwritten (not tested)
data "bitwarden_item_login" "example" {
search = "bookstack.zeus.geeraert.eu"
}
data "bitwarden_item_secure_note" "vpn_preshared_key" {
search = "terraform testing"
}
output "pgpin" {
value = nonsensitive(coalesce(data.bitwarden_item_secure_note.vpn_preshared_key.field.1.hidden,1234))
sensitive = true
}
resource "random_password" "password" {
length = 16
special = true
override_special = "!#$%&*()-_=+[]{}<>:?"
}
resource "bitwarden_item_secure_note" "terraform_upload_testing" {
name = "terraform upload testing"
# notes = <<EOT
#[global]
#secret = "<something sensitive>"
#EOT
organization_id = "a6361589-badd-4bde-9cb4-af8901161c0d"
collection_ids = ["3fa902cd-8244-46bc-a4ea-af8901262d94"]
field {
name = "category"
hidden = random_password.password.result
}
}
variable "kubernetes" { variable "kubernetes" {
type = map(object({ type = map(object({
@@ -35,7 +83,7 @@ variable "kubernetes" {
connected_namespace = optional(string, "") connected_namespace = optional(string, "")
# namespace = optional(string,coalesce(connected_namespace,"")) # namespace = optional(string,coalesce(connected_namespace,""))
#block_namespace_creation = optional(bool, false) #block_namespace_creation = optional(bool, false)
service_port = optional(number) service_port = optional(list(number))
service_type = optional(string, "ClusterIP") service_type = optional(string, "ClusterIP")
service_name = optional(string) service_name = optional(string)
liveness_tcp_socket = optional(number) liveness_tcp_socket = optional(number)
@@ -118,7 +166,7 @@ locals {
]) ])
} }
resource "kubernetes_manifest" "service" { resource "kubernetes_manifest" "manifest" {
for_each = { for item in local.kubernetes_manifests : item.key => item } for_each = { for item in local.kubernetes_manifests : item.key => item }
manifest = yamldecode(file(each.value.manifest)) manifest = yamldecode(file(each.value.manifest))
@@ -205,10 +253,20 @@ resource "kubernetes_service" "automatic_service" {
selector = { selector = {
app = each.key app = each.key
} }
port { dynamic "port" {
port = each.value.service_port for_each = each.value.service_port != null ? each.value.service_port : []
target_port = each.value.service_port content {
port = port.value
target_port = port.value
name = replace("${each.key}${port.value}", "/(.{0,15})(.*)/", "$1")
} }
}
# port {
# port = each.value.service_port
# target_port = each.value.service_port
# }
type = each.value.service_type type = each.value.service_type
@@ -298,10 +356,11 @@ resource "kubernetes_deployment_v1" "automatic" {
image = each.value.image image = each.value.image
name = coalesce(each.value.name, each.key) name = coalesce(each.value.name, each.key)
dynamic "port" { dynamic "port" {
for_each = each.value.service_port != null ? [""] : [] for_each = each.value.service_port != null ? each.value.service_port : []
content { content {
container_port = each.value.service_port container_port = port.value
name = each.key # name = "${each.key}-${port.value}"
name = replace("${each.key}${port.value}", "/(.{0,15})(.*)/", "$1")
} }
} }
+41 -43
View File
@@ -6,18 +6,18 @@ kubernetes = {
extra_manifest = ["/opt/kubernetes/Bookstack_kube/Bookstack.configmap.yaml", "/opt/kubernetes/Bookstack_kube/Bookstack.secret.yaml"] extra_manifest = ["/opt/kubernetes/Bookstack_kube/Bookstack.configmap.yaml", "/opt/kubernetes/Bookstack_kube/Bookstack.secret.yaml"]
#image = "linuxserver/bookstack:24.10.3" #image = "linuxserver/bookstack:24.10.3"
image = "linuxserver/bookstack:latest" image = "linuxserver/bookstack:latest"
service_port = 80 service_port = [80, 443]
database = { database = {
"image" = "lscr.io/linuxserver/mariadb" "image" = "lscr.io/linuxserver/mariadb"
"port" = 3306 "port" = 3306
"mountPath" = "/config" "mountPath" = "/config"
} }
# requirements = { # requirements = {
# limits-cpu = "18m" # limits-cpu = "18m"
# limits-memory = "100Mi" # limits-memory = "100Mi"
# requests-cpu = "10m" # requests-cpu = "10m"
# requests-memory = "70Mi" # requests-memory = "70Mi"
# } # }
secret_ref = ["bookstack-credentials"] secret_ref = ["bookstack-credentials"]
config_map_ref = ["config"] config_map_ref = ["config"]
@@ -77,7 +77,7 @@ kubernetes = {
enabled = false enabled = false
name = "screeps-server" name = "screeps-server"
image = "screepers/screeps-launcher" image = "screepers/screeps-launcher"
service_port = 21025 service_port = [21025]
service_type = "LoadBalancer" service_type = "LoadBalancer"
environment = { environment = {
@@ -107,7 +107,7 @@ kubernetes = {
enabled = false enabled = false
name = "stirling-pdf" name = "stirling-pdf"
image = "docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest" image = "docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest"
service_port = 8080 service_port = [8080]
environment = { environment = {
LANGS = { LANGS = {
@@ -138,7 +138,7 @@ kubernetes = {
replicas = 0 replicas = 0
name = "stash" name = "stash"
image = "stashapp/stash:latest" image = "stashapp/stash:latest"
service_port = 9999 service_port = [9999]
#extra_manifest = ["/opt/kubernetes/Terraform_kube/external_manifests/stash/stash-reddit-dowloader.configmap.yml"] #extra_manifest = ["/opt/kubernetes/Terraform_kube/external_manifests/stash/stash-reddit-dowloader.configmap.yml"]
environment = { environment = {
STASH_STASH = { STASH_STASH = {
@@ -198,7 +198,7 @@ kubernetes = {
dns_nameservers = "10.2.0.1" dns_nameservers = "10.2.0.1"
replicas = 01 replicas = 01
image = "qmcgaw/gluetun:latest" image = "qmcgaw/gluetun:latest"
service_port = 8888 service_port = [8888]
extra_manifest = ["/opt/kubernetes/Terraform_kube/external_manifests/gluetun/gluetun-secret-netherland.yaml"] extra_manifest = ["/opt/kubernetes/Terraform_kube/external_manifests/gluetun/gluetun-secret-netherland.yaml"]
security_context = true security_context = true
# requirements = { # requirements = {
@@ -301,7 +301,7 @@ kubernetes = {
enabled = false enabled = false
namespace = "onitama" namespace = "onitama"
image = "ghcr.io/jackadamson/onitama:latest" image = "ghcr.io/jackadamson/onitama:latest"
service_port = 8080 service_port = [8080]
requirements = { requirements = {
limits-cpu = "50m" limits-cpu = "50m"
limits-memory = "50Mi" limits-memory = "50Mi"
@@ -355,7 +355,7 @@ kubernetes = {
redis = { redis = {
enabled = false enabled = false
image = "redis" image = "redis"
service_port = 6379 service_port = [6379]
liveness_tcp_socket = 6379 liveness_tcp_socket = 6379
# environment_variables = [{ # environment_variables = [{
# "name" : "redis_PORT", # "name" : "redis_PORT",
@@ -366,7 +366,7 @@ kubernetes = {
vulcan = { vulcan = {
enabled = false enabled = false
image = "localhost:31795/vulcan-frontend:latest" image = "localhost:31795/vulcan-frontend:latest"
service_port = 80 service_port = [80]
requirements = { requirements = {
limits-cpu = "50m" limits-cpu = "50m"
limits-memory = "50Mi" limits-memory = "50Mi"
@@ -394,7 +394,7 @@ kubernetes = {
requests-cpu = "50m" requests-cpu = "50m"
requests-memory = "50Mi" requests-memory = "50Mi"
} }
service_port = 3000 service_port = [3000]
pvc_size = "1Gi" pvc_size = "1Gi"
mount_path = "/data" mount_path = "/data"
} }
@@ -407,7 +407,7 @@ kubernetes = {
requests-cpu = "50m" requests-cpu = "50m"
requests-memory = "50Mi" requests-memory = "50Mi"
} }
service_port = 3000 service_port = [3000]
pvc_size = "1Gi" pvc_size = "1Gi"
mount_path = "/data" mount_path = "/data"
} }
@@ -415,7 +415,7 @@ kubernetes = {
notmuch = { notmuch = {
enabled = false enabled = false
image = "kalbasit/notmuch" image = "kalbasit/notmuch"
service_port = 80 service_port = [80]
} }
spider = { spider = {
@@ -428,7 +428,7 @@ kubernetes = {
requests-cpu = "50m" requests-cpu = "50m"
requests-memory = "50Mi" requests-memory = "50Mi"
} }
service_port = 8080 service_port = [8080]
pvc = { pvc = {
spider-data = { spider-data = {
pvc = true pvc = true
@@ -448,7 +448,7 @@ kubernetes = {
requests-cpu = "50m" requests-cpu = "50m"
requests-memory = "50Mi" requests-memory = "50Mi"
} }
service_port = 80 service_port = [80]
} }
@@ -456,7 +456,7 @@ kubernetes = {
enabled = false enabled = false
namespace = "paper" namespace = "paper"
image = "ghcr.io/paperless-ngx/paperless-ngx:latest" image = "ghcr.io/paperless-ngx/paperless-ngx:latest"
service_port = 8000 service_port = [8000]
database = { database = {
image = "docker.io/library/postgres:15" } image = "docker.io/library/postgres:15" }
redis = { redis = {
@@ -576,7 +576,7 @@ kubernetes = {
name = "gotenberg" name = "gotenberg"
connected_namespace = "paper" connected_namespace = "paper"
image = "gotenberg/gotenberg:7.9.2" image = "gotenberg/gotenberg:7.9.2"
service_port = 3000 service_port = [3000]
requirements = { requirements = {
limits-cpu = "100m" limits-cpu = "100m"
@@ -592,7 +592,7 @@ kubernetes = {
name = "tika" name = "tika"
connected_namespace = "paper" connected_namespace = "paper"
image = "ghcr.io/paperless-ngx/tika" image = "ghcr.io/paperless-ngx/tika"
service_port = 9998 service_port = [9998]
requirements = { requirements = {
limits-cpu = "100m" limits-cpu = "100m"
@@ -613,7 +613,7 @@ kubernetes = {
namespace = "next" namespace = "next"
replicas = 01 replicas = 01
image = "nextcloud:29.0.3-apache" image = "nextcloud:29.0.3-apache"
service_port = 80 service_port = [80]
extra_manifest = ["/opt/kubernetes/Nextcloud_kube/next.secret.yaml"] extra_manifest = ["/opt/kubernetes/Nextcloud_kube/next.secret.yaml"]
database = { database = {
image = "docker.io/library/postgres:14" } image = "docker.io/library/postgres:14" }
@@ -705,7 +705,7 @@ kubernetes = {
enabled = false enabled = false
name = "neko" name = "neko"
image = "ghcr.io/m1k1o/neko/firefox:latest" image = "ghcr.io/m1k1o/neko/firefox:latest"
service_port = 8080 service_port = [8080]
environment = { environment = {
@@ -735,7 +735,7 @@ kubernetes = {
homeassistant = { homeassistant = {
enabled = false enabled = false
image = "ghcr.io/home-assistant/home-assistant:stable" image = "ghcr.io/home-assistant/home-assistant:stable"
service_port = 8123 service_port = [8123]
environment = { environment = {
@@ -770,7 +770,7 @@ kubernetes = {
# enabled = false # enabled = false
replicas = 0 replicas = 0
image = "jellyfin/jellyfin:latest" image = "jellyfin/jellyfin:latest"
service_port = 8096 service_port = [8096]
environment = { environment = {
@@ -809,7 +809,7 @@ kubernetes = {
dupeguru = { dupeguru = {
enabled = false enabled = false
image = "jlesage/dupeguru" image = "jlesage/dupeguru"
service_port = 5800 service_port = [5800]
pvc = { pvc = {
dupeguru-config = { dupeguru-config = {
@@ -843,7 +843,7 @@ kubernetes = {
enabled = false enabled = false
connected_namespace = "screeps" connected_namespace = "screeps"
image = "ghcr.io/kieraneglin/pinchflat:latest" image = "ghcr.io/kieraneglin/pinchflat:latest"
service_port = 8945 service_port = [8945]
pvc = { pvc = {
pinchflat-config = { pinchflat-config = {
@@ -871,7 +871,7 @@ kubernetes = {
enabled = false enabled = false
connected_namespace = "stash" connected_namespace = "stash"
image = "rainmanjam/jobspy-api:latest" image = "rainmanjam/jobspy-api:latest"
service_port = 8000 service_port = [8000]
environment = { environment = {
ENABLE_API_KEY_AUTH = { ENABLE_API_KEY_AUTH = {
value = "true" value = "true"
@@ -896,7 +896,7 @@ kubernetes = {
namespace = "servarr" namespace = "servarr"
#replicas = 0 #replicas = 0
# dns_nameservers = "10.2.0.1" # dns_nameservers = "10.2.0.1"
service_port = 9696 service_port = [9696]
extra_manifest = ["/opt/kubernetes/Terraform_kube/external_manifests/servarr/servarr-db.secret.yaml"] extra_manifest = ["/opt/kubernetes/Terraform_kube/external_manifests/servarr/servarr-db.secret.yaml"]
database = {} database = {}
@@ -940,12 +940,6 @@ kubernetes = {
} }
# requirements = {
# limits-cpu = "1000m"
# limits-memory = "1Gi"
# requests-cpu = "500m"
# requests-memory = "400Mi"
# }
pvc = { pvc = {
prowlarr-config = { prowlarr-config = {
name = "prowlarr-config" name = "prowlarr-config"
@@ -963,12 +957,13 @@ kubernetes = {
} }
} }
radarr = { radarr = {
#enabled = false #enabled = false
image = "lscr.io/linuxserver/radarr:latest" image = "lscr.io/linuxserver/radarr:latest"
connected_namespace = "servarr" connected_namespace = "servarr"
service_port = 7878
#replicas = 0 #replicas = 0
service_port = [7878]
environment = { environment = {
PUID = { PUID = {
@@ -1010,8 +1005,9 @@ kubernetes = {
#enabled = false #enabled = false
image = "lscr.io/linuxserver/sonarr:latest" image = "lscr.io/linuxserver/sonarr:latest"
connected_namespace = "servarr" connected_namespace = "servarr"
service_port = 8989
#replicas = 0 #replicas = 0
service_port = [8989]
environment = { environment = {
PUID = { PUID = {
value = "1000" value = "1000"
@@ -1051,7 +1047,7 @@ kubernetes = {
#enabled = false #enabled = false
image = "lscr.io/linuxserver/qbittorrent:latest" image = "lscr.io/linuxserver/qbittorrent:latest"
connected_namespace = "servarr" connected_namespace = "servarr"
service_port = 8080 service_port = [8080]
environment = { environment = {
PUID = { PUID = {
@@ -1094,12 +1090,14 @@ kubernetes = {
flaresolverr = { flaresolverr = {
# enabled = false
#image = "ghcr.io/flaresolverr/flaresolverr:latest" #image = "ghcr.io/flaresolverr/flaresolverr:latest"
image = "alexfozor/flaresolverr:pr-1300-experimental" image = "alexfozor/flaresolverr:pr-1300-experimental"
connected_namespace = "servarr" connected_namespace = "servarr"
service_port = 8191 enabled = false
image = "ghcr.io/flaresolverr/flaresolverr:latest"
connected_namespace = "tservarr"
service_port = [8191]
environment = { environment = {
PUID = { PUID = {
@@ -1127,7 +1125,7 @@ kubernetes = {
poste = { poste = {
enabled = false enabled = false
image = "analogic/poste.io:latest" image = "analogic/poste.io:latest"
service_port = 443 service_port = [25,80,110,143,443,465,587,993,995,4190]
environment = { environment = {
PUID = { PUID = {
@@ -1161,7 +1159,7 @@ kubernetes = {
wikijs = { wikijs = {
#enabled = false #enabled = false
image = "ghcr.io/requarks/wiki:2.5" image = "ghcr.io/requarks/wiki:2.5"
service_port = 3000 service_port = [3000]
extra_manifest = ["/opt/kubernetes/Terraform_kube/external_manifests/wikijs/wikijs-db.secret.yaml"] extra_manifest = ["/opt/kubernetes/Terraform_kube/external_manifests/wikijs/wikijs-db.secret.yaml"]
database = {} database = {}
environment = { environment = {