first commit

This commit is contained in:
2024-11-14 11:25:06 +00:00
commit 1594d8f76a
6 changed files with 649 additions and 0 deletions
+264
View File
@@ -0,0 +1,264 @@
terraform {
required_version = "> 0.8.0"
}
provider "kubernetes" {
config_path = "~/.kube/config"
}
variable "networks" {
type = map(object({
cidr_block = string
subnets = map(object({ cidr_block = string }))
}))
default = {
"private" = {
cidr_block = "10.1.0.0/16"
subnets = {
"db1" = {
cidr_block = "10.1.0.1/16"
}
"db2" = {
cidr_block = "10.1.0.2/16"
}
}
},
"public" = {
cidr_block = "10.1.1.0/16"
subnets = {
"webserver" = {
cidr_block = "10.1.1.1/16"
}
"email_server" = {
cidr_block = "10.1.1.2/16"
}
}
}
"dmz" = {
cidr_block = "10.1.2.0/16"
subnets = {
"firewall" = {
cidr_block = "10.1.2.1/16"
}
}
}
}
}
variable "kubernetes" {
type = map(object({
#service = string
# pvc_name = optional(string)
name = optional(string)
image = string
mount_path = optional(string, "/mount")
pvc_size = optional(string)
replicas = optional(number, 1)
namespace = optional(string)
service_port = optional(number)
service_name = optional(string)
liveness_tcp_socket = optional(number)
liveness_http_get = optional(string)
liveness_http_get_path = optional(string)
enabled = optional(bool, true)
requirements = optional(map(string), {
limits-cpu = "800m"
limits-memory = "500Mi"
requests-cpu = "200m"
requests-memory = "200Mi"
})
environment_variables = optional(map(string), { name = "value" })
# environment_variables = optional(list(object({
# name = string
# value = string
# })))
}))
}
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_size != null && value.enabled == true }
metadata {
namespace = coalesce(each.value.namespace, each.key)
name = "${each.key}-pvc"
}
spec {
access_modes = ["ReadWriteMany"]
storage_class_name = "nfs-storage-intelligent"
resources {
requests = {
storage = each.value.pvc_size
}
}
}
}
resource "kubernetes_service" "automatic_service" {
for_each = { for key, value in var.kubernetes : key => value if value.service_port != null && value.enabled == true }
metadata {
# name = coalesce(each.value.namespace, each.key)
# name = "${each.value.namespace}-svc"
name = "${coalesce(each.value.namespace, each.key)}-svc"
namespace = coalesce(each.value.namespace, each.key)
}
spec {
selector = {
app = each.key
}
port {
port = each.value.service_port
target_port = each.value.service_port
}
}
}
resource "kubernetes_deployment_v1" "automatic" {
for_each = { for key, value in var.kubernetes : key => value if value.enabled == true }
metadata {
namespace = coalesce(each.value.namespace, each.key)
name = coalesce(each.value.namespace, each.key)
labels = {
app = each.key
}
}
spec {
replicas = each.value.replicas
selector {
match_labels = {
app = each.key
}
}
template {
metadata {
labels = {
app = each.key
}
}
spec {
container {
image = each.value.image
name = coalesce(each.value.name, each.key)
dynamic "port" {
for_each = each.value.service_port != null ? [""] : []
content {
container_port = each.value.service_port
name = each.key
}
}
dynamic "volume_mount" {
for_each = each.value.pvc_size != null ? [""] : []
content {
mount_path = each.value.mount_path
name = "${each.key}-volume"
}
}
#########################################
############# working but not goign through every arguments
# dynamic "env" {
# for_each = each.value.environment_variables != null ? [""] : []
# content {
# name = keys(each.value.environment_variables)[0]
# value = values(each.value.environment_variables)[0]
# }
# }
#######################################
dynamic "env" {
for_each = each.value.environment_variables != null ? each.value.environment_variables : {}
content {
name = env.key
value = env.value
}
}
resources {
limits = {
cpu = each.value.requirements.limits-cpu
memory = each.value.requirements.limits-memory
}
requests = {
cpu = each.value.requirements.requests-cpu
memory = each.value.requirements.requests-memory
}
}
dynamic "liveness_probe" {
for_each = each.value.liveness_tcp_socket != null || each.value.liveness_http_get != null ? [""] : []
content {
dynamic "tcp_socket" {
for_each = each.value.liveness_tcp_socket != null ? [""] : []
content {
port = each.value.liveness_tcp_socket
}
}
dynamic "http_get" {
for_each = each.value.liveness_http_get != null ? [""] : []
content {
port = each.value.liveness_http_get
path = coalesce(each.value.liveness_http_get_path, "/")
}
}
initial_delay_seconds = 3
period_seconds = 3
}
}
}
dynamic "volume" {
for_each = each.value.pvc_size != null ? [""] : []
content {
name = "${each.key}-volume"
persistent_volume_claim {
claim_name = "${each.key}-pvc"
}
}
}
}
}
}
}
+185
View File
@@ -0,0 +1,185 @@
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"] :[]
}
}
}
+18
View File
@@ -0,0 +1,18 @@
apiVersion: v1
kind: Namespace
metadata:
name: screeps
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: screeps-storage
namespace: screeps
spec:
storageClassName: nfs-storage-intelligent
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
+9
View File
@@ -0,0 +1,9 @@
{
"version": 4,
"terraform_version": "1.9.2",
"serial": 386,
"lineage": "000b6e63-c8e6-a547-e28c-f294b07c2a36",
"outputs": {},
"resources": [],
"check_results": null
}
+17
View File
@@ -0,0 +1,17 @@
{
"version": 4,
"terraform_version": "1.9.2",
"serial": 385,
"lineage": "000b6e63-c8e6-a547-e28c-f294b07c2a36",
"outputs": {
"test_environment_variables": {
"value": {},
"type": [
"object",
{}
]
}
},
"resources": [],
"check_results": null
}
+156
View File
@@ -0,0 +1,156 @@
kubernetes = {
screeps = {
enabled = false
name = "screeps-server"
pvc_size = "1Gi"
mount_path = "/screeps"
image = "screepers/screeps-launcher"
service_port = 21025
environment_variables = { t1est = "tset" }
requirements = {
limits-cpu = "900m"
limits-memory = "600Mi"
requests-cpu = "300m"
requests-memory = "400Mi"
}
}
djangoterra = {
enabled = false
# image = "localhost:31795/django-python"
image = "gitea.tryton.geeraert.eu/pi-ux-ce/django-python:1.0.0"
# image = "nginx:latest"
pvc_size = "10Mi"
mount_path = "/code"
service_port = 8000
requirements = {
limits-cpu = "200m"
limits-memory = "200Mi"
requests-cpu = "50m"
requests-memory = "50Mi"
}
}
nginx = {
enabled = true
namespace = "testnginx"
#image = "localhost:31795/django-python"
image = "nginx:latest"
#pvc_size = "10Mi"
# mount_path = "/code"
# service_port = 80
# liveness_http_get = 80
# requirements = {
# limits-cpu = "200m"
# limits-memory = "200Mi"
# requests-cpu = "50m"
# requests-memory = "50Mi"
# }
# environment_variables = [{
# "name" : "NGINX_PORT",
# "value" : "80"
# name = "NGINX-second_PORT" , value = "81"
# }]
environment_variables = { t1est = "tset", a2nother = "rehtona" }
# environment_variables = { t1est = "tset" }
# environment_variables = {
# name = "NGINX_PORT" , value = "80"
# name = "NGINX-second_PORT" , value = "81"
# }
}
redis = {
enabled = false
image = "redis"
service_port = 6379
liveness_tcp_socket = 6379
# environment_variables = [{
# "name" : "redis_PORT",
# "value" : "6379"
# }]
}
vulcan = {
enabled = false
image = "localhost:31795/vulcan-frontend:latest"
service_port = 80
requirements = {
limits-cpu = "50m"
limits-memory = "50Mi"
requests-cpu = "50m"
requests-memory = "50Mi"
}
}
bwdownload = {
enabled = false
namespace = "backup-bitwarden"
image = "alpine"
requirements = {
limits-cpu = "50m"
limits-memory = "50Mi"
requests-cpu = "50m"
requests-memory = "50Mi"
}
}
gogs = {
enabled = false
image = "gogs/gogs"
requirements = {
limits-cpu = "50m"
limits-memory = "50Mi"
requests-cpu = "50m"
requests-memory = "50Mi"
}
service_port = 3000
pvc_size = "1Gi"
mount_path = "/data"
}
gitea = {
enabled = false
image = "gitea/gitea:1.22.3"
requirements = {
limits-cpu = "50m"
limits-memory = "50Mi"
requests-cpu = "50m"
requests-memory = "50Mi"
}
service_port = 3000
pvc_size = "1Gi"
mount_path = "/data"
}
notmuch = {
enabled = false
image = "kalbasit/notmuch"
service_port = 80
}
spider = {
enabled = false
image = "iredmail/spider:latest"
requirements = {
limits-cpu = "200m"
limits-memory = "500Mi"
requests-cpu = "50m"
requests-memory = "50Mi"
}
service_port = 8080
pvc_size = "100Mi"
mount_path = "/opt/spider"
}
piler = {
enabled = false
image = "sutoj/piler:1.4.5"
requirements = {
limits-cpu = "200m"
limits-memory = "500Mi"
requests-cpu = "50m"
requests-memory = "50Mi"
}
service_port = 80
}
}