Files
domain-incoming/share/dataset-pg/postgrest.tf
2024-05-12 12:03:32 +02:00

180 lines
5.5 KiB
HCL

locals {
prest-labels = merge(local.common_labels, {
"app.kubernetes.io/component" = "postgrest"
})
prest-dns_name = "api.${local.dns_name}"
prest-service = {
"name" = "postgrest-${var.instance}"
"port" = {
"number" = 80
}
}
swagger-service = {
"name" = "swagger-${var.instance}"
"port" = {
"number" = 80
}
}
}
resource "kubectl_manifest" "postgrest_config" {
count = var.extentions.postgrest.enable ? 1:0
yaml_body = <<-EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: "${var.instance}-${var.component}-postgrest"
namespace: "${var.namespace}"
labels: ${jsonencode(local.prest-labels)}
data:
PGDATABASE: "${var.instance}"
PGHOST: "${var.instance}-${var.component}-rw.${var.namespace}.svc"
PGPORT: "5432"
PGRST_DB_SCHEMA: public
PGRST_DB_ANON_ROLE: anonymous
PGRST_OPENAPI_SERVER_PROXY_URI: "https://${local.prest-dns_name}"
PGRST_ADMIN_SERVER_PORT: "9000"
API_URL: "https://${local.prest-dns_name}"
BASE_URL: "/ui"
EOF
}
resource "kubectl_manifest" "postgrest_deploy" {
count = var.extentions.postgrest.enable ? 1:0
yaml_body = join("", concat([<<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: "${var.instance}-${var.component}-postgrest"
namespace: "${var.namespace}"
labels: ${jsonencode(local.prest-labels)}
spec:
replicas: 1
selector:
matchLabels: ${jsonencode(local.prest-labels)}
template:
metadata:
labels: ${jsonencode(local.prest-labels)}
spec:
securityContext:
fsGroup: 1000
runAsGroup: 1000
runAsUser: 1000
restartPolicy: Always
containers:
- name: postgrest
securityContext:
fsGroup: 1000
runAsGroup: 1000
runAsNonRoot: true
runAsUser: 1000
env:
- name: PGUSER
valueFrom:
secretKeyRef:
key: username
name: "${var.instance}-${var.component}-app"
- name: PGPASSWORD
valueFrom:
secretKeyRef:
key: password
name: "${var.instance}-${var.component}-app"
envFrom:
- configMapRef:
name: "${var.instance}-${var.component}-postgrest"
image: "${var.extentions.postgrest.image.registry}/${var.extentions.postgrest.image.repository}:${var.extentions.postgrest.image.tag}"
imagePullPolicy: "${var.extentions.postgrest.image.pull_policy}"
ports:
- containerPort: 3000
name: http
protocol: TCP
- containerPort: 9000
name: admin
protocol: TCP
livenessProbe:
failureThreshold: 3
httpGet:
path: /live
port: admin
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
readinessProbe:
failureThreshold: 3
httpGet:
path: /ready
port: admin
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
EOF
], var.extentions.postgrest.swagger.enable?[<<EOF
- name: swagger
securityContext:
fsGroup: 1000
runAsGroup: 1000
runAsNonRoot: true
runAsUser: 1000
image: "${var.extentions.postgrest.swagger.registry}/${var.extentions.postgrest.swagger.repository}:${var.extentions.postgrest.swagger.tag}"
imagePullPolicy: "${var.extentions.postgrest.swagger.pull_policy}"
ports:
- containerPort: 8080
name: swagger
protocol: TCP
envFrom:
- configMapRef:
name: "${var.instance}-${var.component}-postgrest"
EOF
]:[""]))
}
module "postgrest-service" {
count = var.extentions.postgrest.enable ? 1 : 0
source = "git::https://git.solidite.fr/vynil/kydah-modules.git//service"
component = "postgrest"
instance = var.instance
namespace = var.namespace
labels = local.prest-labels
targets = ["http"]
ports = [local.prest-service.port.number]
providers = {
kubectl = kubectl
}
}
module "postgrest-ingress" {
count = var.extentions.postgrest.enable ? 1 : 0
source = "git::https://git.solidite.fr/vynil/kydah-modules.git//ingress"
component = "postgrest"
instance = var.instance
namespace = var.namespace
issuer = var.issuer
ingress_class = var.ingress_class
labels = local.prest-labels
dns_names = [local.prest-dns_name]
create_redirect = true
middlewares = []
sub_paths = ["ui",""]
services = [local.swagger-service, local.prest-service]
providers = {
kubectl = kubectl
}
}
module "swagger-service" {
count = var.extentions.postgrest.enable && var.extentions.postgrest.swagger.enable ? 1 : 0
source = "git::https://git.solidite.fr/vynil/kydah-modules.git//service"
component = "swagger"
instance = var.instance
namespace = var.namespace
labels = local.prest-labels
targets = ["swagger"]
ports = [local.swagger-service.port.number]
providers = {
kubectl = kubectl
}
}