terraform { required_version = "> 0.8.0" } provider "kubernetes" { config_path = "~/.kube/config" } resource "kubernetes_namespace" "screeps" { metadata { annotations = { name = "screeps" } name = "screeps" } } resource "kubernetes_persistent_volume_claim" "screeps-pvc" { metadata { namespace = "screeps" name = "screeps-pvc" } spec { access_modes = ["ReadWriteMany"] storage_class_name = "nfs-storage-intelligent" resources { requests = { storage = "1Gi" } } } } resource "kubernetes_deployment_v1" "screeps" { metadata { namespace = "screeps" name = "screeps" labels = { app = "screepsserver" } } spec { replicas = 1 selector { match_labels = { app = "screepsserver" } } template { metadata { labels = { app = "screepsserver" } } spec { container { image = "screepers/screeps-launcher" name = "screeps-launcher" port { container_port = 21025 name = "screeps-port" } volume_mount { mount_path = "/screeps" name = "screeps-volume" } resources { limits = { cpu = "2" memory = "2Gi" } requests = { cpu = "250m" memory = "500Mi" } } } volume { name = "screeps-volume" persistent_volume_claim { claim_name = "screeps-pvc" } } } } } } resource "kubernetes_service" "screeps_service" { metadata { name = "screeps" namespace = "screeps" } spec { selector = { app = "screepsserver" } port { port = 21025 } } } variable "kubernetes" { type = map(object({ service = string #testingbool= bool pvc_name = optional(string) namespace = optional(string) service_port = optional(number) LoadBalancerbool = optional(string) enabled = optional(bool, true) proxy_cache = optional(bool, false) extra-value = optional(string, "") http2_bool = optional(bool, false) proxy_pass_https = optional(bool, false) authentication_required = optional(bool, false) })) } resource "kubernetes_namespace" "automatic" { for_each = { for key, value in var.kubernetes : key => value if value.enabled == true } metadata { annotations = { name = coalesce(each.value.namespace, each.key) } name = coalesce(each.value.namespace, each.key) } } resource "kubernetes_persistent_volume_claim" "automatic-pvc" { for_each = { for key, value in var.kubernetes : key => value if value.pvc_name != null } metadata { namespace = coalesce(each.value.namespace, each.key) name = coalesce(each.value.namespace, each.key) } spec { access_modes = ["ReadWriteMany"] storage_class_name = "nfs-storage-intelligent" resources { requests = { storage = "1Gi" } } } } resource "kubernetes_service" "automatic_service" { for_each = { for key, value in var.kubernetes : key => value if value.service_port != null } metadata { name = coalesce(each.value.namespace, each.key) namespace = coalesce(each.value.namespace, each.key) } spec { selector = { app = "screepsserver" } port { port = each.value.service_port } if(each.value.LoadBalancerbool == "enabled" ? [type = "LoadBalancer"] :[] } } }