Files
domain/meta/domain-devspaces/stations.tf
2024-01-25 18:35:22 +01:00

77 lines
2.8 KiB
HCL

locals {
sorted-station-names = reverse(distinct(sort([
for station in var.stations: station.name
])))
sorted-stations = flatten([
for name in local.sorted-station-names: [
for station in var.stations:
station if station.name == name
]
])
// le tableau de toutes les BDs requises dans toutes les devstations (aka de toutes les orga dont la devstation depend) triées par station/orga/ds
sorted-datasets = flatten([
for station in local.sorted-stations: flatten([
for name in distinct(sort(station.organisations)):[
for org in local.sorted-organisations: flatten([
for dsname in reverse(distinct(sort([for d in org.datasets: d.name]))): [
for ds in org.datasets:
merge(ds, {
"name" = "${org.name}-${ds.name}"
"namespace" = "${var.domain}-devspaces-${station.name}"
"organisation" = org
"usage" = "station"
"station" = station
"sub_domain" = "${station.name}.stations"
}) if ds.name == dsname
]
]) if org.name == name
]
])
])
}
resource "kubernetes_namespace_v1" "dev-ns" {
count = length(local.sorted-stations)
metadata {
annotations = local.annotations
labels = merge(local.common-labels, local.annotations)
name = "${var.domain}-devspaces-${local.sorted-stations[count.index].name}"
}
}
resource "kubectl_manifest" "devstations" {
count = length(local.sorted-stations)
depends_on = [kubernetes_namespace_v1.dev-ns]
yaml_body = <<-EOF
apiVersion: "vynil.solidite.fr/v1"
kind: "Install"
metadata:
name: "${local.sorted-stations[count.index].name}"
namespace: "${var.domain}-devspaces-${local.sorted-stations[count.index].name}"
labels: ${jsonencode(local.common-labels)}
spec:
distrib: "${var.distributions.domain}"
category: "apps"
component: "code-server"
options: ${jsonencode(merge(local.global, { for k, v in local.sorted-stations[count.index] : k => v if !contains(["name"], k) }))}
EOF
}
resource "kubectl_manifest" "datasets" {
count = length(local.sorted-datasets)
depends_on = [kubernetes_namespace_v1.dev-ns]
yaml_body = <<-EOF
apiVersion: "vynil.solidite.fr/v1"
kind: "Install"
metadata:
name: "${local.sorted-datasets[count.index].name}"
namespace: "${local.sorted-datasets[count.index].namespace}"
labels: ${jsonencode(local.common-labels)}
spec:
distrib: "${var.distributions.domain}"
category: "share"
component: "dataset-${local.sorted-datasets[count.index].engine}"
options: ${jsonencode(merge(local.global, { for k, v in local.sorted-datasets[count.index] : k => v if !contains(["name", "namespace", "engine", "organisation", "station", "usage"], k) }))}
EOF
}