mirror of
https://github.com/dredx/prole.git
synced 2026-09-23 10:13:58 +00:00
58 lines
1.6 KiB
HCL
58 lines
1.6 KiB
HCL
terraform {
|
|
required_version = ">= 1.6.0"
|
|
required_providers {
|
|
kubernetes = {
|
|
source = "hashicorp/kubernetes"
|
|
version = "~> 2.30"
|
|
}
|
|
}
|
|
}
|
|
|
|
# Configure for AWS EKS or GCloud GKE via variables
|
|
provider "kubernetes" {
|
|
host = var.cluster_endpoint
|
|
token = var.cluster_token
|
|
cluster_ca_certificate = var.cluster_ca_cert != "" ? base64decode(var.cluster_ca_cert) : null
|
|
insecure = var.cluster_ca_cert == ""
|
|
}
|
|
|
|
locals {
|
|
manifest_dir = "${path.module}/manifests"
|
|
manifest_files = fileset(local.manifest_dir, "**/*.yaml")
|
|
raw_documents = flatten([
|
|
for f in local.manifest_files : [
|
|
for doc in split("\n---", trimspace(file("${local.manifest_dir}/${f}"))) :
|
|
trimspace(doc)
|
|
if trimspace(doc) != ""
|
|
]
|
|
])
|
|
decoded_documents = [
|
|
for doc in local.raw_documents : yamldecode(doc)
|
|
if try(yamldecode(doc).kind, "") != ""
|
|
]
|
|
cluster_scoped_kinds = toset([
|
|
"Namespace", "CustomResourceDefinition", "ClusterRole",
|
|
"ClusterRoleBinding", "PersistentVolume", "StorageClass",
|
|
])
|
|
namespaced_documents = [
|
|
for m in local.decoded_documents :
|
|
contains(local.cluster_scoped_kinds, m.kind) ? m : merge(
|
|
m, { metadata = merge(lookup(m, "metadata", {}), { namespace = var.namespace }) }
|
|
)
|
|
]
|
|
}
|
|
|
|
resource "kubernetes_manifest" "namespace" {
|
|
manifest = {
|
|
apiVersion = "v1"
|
|
kind = "Namespace"
|
|
metadata = { name = var.namespace }
|
|
}
|
|
}
|
|
|
|
resource "kubernetes_manifest" "resources" {
|
|
for_each = { for idx, m in local.namespaced_documents : tostring(idx) => m }
|
|
manifest = each.value
|
|
depends_on = [kubernetes_manifest.namespace]
|
|
}
|