77 lines
2.8 KiB
HCL
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
|
|
}
|