From 4f15e8d65abd17daa0a2c22bc2d2a79d647c7bf8 Mon Sep 17 00:00:00 2001 From: Shahab Dogar Date: Tue, 15 Jul 2025 12:18:47 +0500 Subject: [PATCH] feat: CDKTF | migrate nginx ingress to cdktf --- helm/helmfile.yaml | 10 ---------- main.ts | 7 +++++++ nginx/index.ts | 28 ++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 nginx/index.ts diff --git a/helm/helmfile.yaml b/helm/helmfile.yaml index 933460e..a7fa786 100644 --- a/helm/helmfile.yaml +++ b/helm/helmfile.yaml @@ -1,8 +1,6 @@ repositories: - name: metallb url: https://metallb.github.io/metallb - - name: ingress-nginx - url: https://kubernetes.github.io/ingress-nginx - name: prometheus-community url: https://prometheus-community.github.io/helm-charts --- @@ -13,14 +11,6 @@ releases: chart: metallb/metallb version: 0.14.8 - # Ingress for local network - - name: ingress-nginx-internal - namespace: nginx-system - chart: ingress-nginx/ingress-nginx - version: 4.10.1 - values: - - ./values/nginx-internal.values.yaml - # Prometheus Operator - name: prometheus-operator namespace: prometheus-system diff --git a/main.ts b/main.ts index ff91d59..55448fb 100644 --- a/main.ts +++ b/main.ts @@ -15,6 +15,7 @@ import { CertManager } from "./cert-manager"; import { Manifest } from "@cdktf/provider-kubernetes/lib/manifest"; import { PiHole } from "./pihole"; import { MemcachedCluster } from "./memcached"; +import { Nginx } from "./nginx"; dotenv.config(); @@ -74,6 +75,12 @@ class Homelab extends TerraformStack { version: "2.26.1", }); + new Nginx(this, "nginx", { + provider: helm, + namespace: "nginx-system", + name: "ingress-nginx-internal", + }); + const certManagerApiVersion = "cert-manager.io/v1"; new CertManager(this, "cert-manager", { diff --git a/nginx/index.ts b/nginx/index.ts new file mode 100644 index 0000000..d9e6a2a --- /dev/null +++ b/nginx/index.ts @@ -0,0 +1,28 @@ +import * as fs from "fs"; +import { HelmProvider } from "@cdktf/provider-helm/lib/provider"; +import { Release } from "@cdktf/provider-helm/lib/release"; +import { Construct } from "constructs"; + +type NginxOptions = { + provider: HelmProvider; + name: string; + namespace: string; +}; + +export class Nginx extends Construct { + constructor(scope: Construct, id: string, options: NginxOptions) { + super(scope, id); + + new Release(this, id, { + ...options, + repository: "https://kubernetes.github.io/ingress-nginx", + chart: "ingress-nginx", + createNamespace: true, + values: [ + fs.readFileSync("helm/values/nginx-internal.values.yaml", { + encoding: "utf8", + }), + ], + }); + } +}