Add flux
This commit is contained in:
parent
faf34f658f
commit
062d39324e
8
main.tf
8
main.tf
@ -120,3 +120,11 @@ module "dns" {
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
module "flux" {
|
||||
source = "./modules/flux"
|
||||
path = "clank"
|
||||
namespace = "clank"
|
||||
url = "ssh://git@git.front.kjuulh.io/clank/kubernetes-state.git"
|
||||
branch = "main"
|
||||
}
|
||||
|
84
modules/flux/main.tf
Normal file
84
modules/flux/main.tf
Normal file
@ -0,0 +1,84 @@
|
||||
# Install
|
||||
|
||||
data "flux_install" "main" {
|
||||
target_path = var.path
|
||||
network_policy = false
|
||||
version = "latest"
|
||||
}
|
||||
|
||||
resource "kubernetes_namespace" "flux_system" {
|
||||
metadata {
|
||||
name = var.namespace
|
||||
}
|
||||
|
||||
lifecycle {
|
||||
ignore_changes = [
|
||||
metadata[0].labels,
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
data "kubectl_file_documents" "apply" {
|
||||
content = data.flux_install.main.content
|
||||
}
|
||||
|
||||
# Convert documents list to include parsed yaml data
|
||||
locals {
|
||||
apply = [for v in data.kubectl_file_documents.apply.documents : {
|
||||
data : yamldecode(v)
|
||||
content : v
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
# Apply manifests on the cluster
|
||||
resource "kubectl_manifest" "apply" {
|
||||
for_each = { for v in local.apply : lower(join("/", compact([v.data.apiVersion, v.data.kind, lookup(v.data.metadata, "namespace", ""), v.data.metadata.name]))) => v.content }
|
||||
depends_on = [kubernetes_namespace.flux_system]
|
||||
yaml_body = each.value
|
||||
}
|
||||
|
||||
# Sync
|
||||
|
||||
data "flux_sync" "main" {
|
||||
target_path = var.path
|
||||
url = var.url
|
||||
branch = var.branch
|
||||
}
|
||||
|
||||
# Split multi-doc YAML with
|
||||
# https://registry.terraform.io/providers/gavinbunney/kubectl/latest
|
||||
data "kubectl_file_documents" "sync" {
|
||||
content = data.flux_sync.main.content
|
||||
}
|
||||
|
||||
# Convert documents list to include parsed yaml data
|
||||
locals {
|
||||
sync = [for v in data.kubectl_file_documents.sync.documents : {
|
||||
data : yamldecode(v)
|
||||
content : v
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
# Apply manifests on the cluster
|
||||
resource "kubectl_manifest" "sync" {
|
||||
for_each = { for v in local.sync : lower(join("/", compact([v.data.apiVersion, v.data.kind, lookup(v.data.metadata, "namespace", ""), v.data.metadata.name]))) => v.content }
|
||||
depends_on = [kubernetes_namespace.flux_system]
|
||||
yaml_body = each.value
|
||||
}
|
||||
|
||||
# Generate a Kubernetes secret with the Git credentials
|
||||
resource "kubernetes_secret" "main" {
|
||||
depends_on = [kubectl_manifest.apply]
|
||||
|
||||
metadata {
|
||||
name = data.flux_sync.main.secret
|
||||
namespace = data.flux_sync.main.namespace
|
||||
}
|
||||
|
||||
data = {
|
||||
username = "git"
|
||||
password = var.flux_token
|
||||
}
|
||||
}
|
30
modules/flux/providers.tf
Normal file
30
modules/flux/providers.tf
Normal file
@ -0,0 +1,30 @@
|
||||
|
||||
terraform {
|
||||
required_providers {
|
||||
flux = {
|
||||
source = "fluxcd/flux"
|
||||
version = "0.14.1"
|
||||
}
|
||||
kubectl = {
|
||||
source = "gavinbunney/kubectl"
|
||||
version = ">= 1.7.0"
|
||||
}
|
||||
kubernetes = {
|
||||
source = "hashicorp/kubernetes"
|
||||
version = ">= 2.0.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
provider "flux" {
|
||||
# Configuration options
|
||||
}
|
||||
|
||||
provider "kubectl" {
|
||||
}
|
||||
|
||||
provider "kubernetes" {
|
||||
config_path = "~/.kube/config"
|
||||
}
|
||||
|
||||
|
19
modules/flux/variables.tf
Normal file
19
modules/flux/variables.tf
Normal file
@ -0,0 +1,19 @@
|
||||
variable "path" {
|
||||
type = string
|
||||
nullable = false
|
||||
}
|
||||
|
||||
variable "namespace" {
|
||||
type = string
|
||||
nullable = false
|
||||
}
|
||||
|
||||
variable "url" {
|
||||
type = string
|
||||
nullable = false
|
||||
}
|
||||
|
||||
variable "branch" {
|
||||
type = string
|
||||
nullable = false
|
||||
}
|
1091
terraform.tfstate
1091
terraform.tfstate
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user