Files
homelab-infrastructure-as-code/05-monitoring/index.ts
T
kasunandClaude Sonnet 4.6 ce7e9d5633
Deploy Monitoring / Pulumi Preview (push) Has been skipped
Deploy Monitoring / Pulumi Deploy (push) Failing after 47s
fix: import pre-existing monitoring namespace into Pulumi state
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-06-09 04:29:05 +02:00

75 lines
2.0 KiB
TypeScript

import * as pulumi from "@pulumi/pulumi";
import * as k8s from "@pulumi/kubernetes";
const config = new pulumi.Config();
const bootstrapRef = new pulumi.StackReference(
`${pulumi.getOrganization()}/k8s-bootstrap/dev`,
);
const appsRef = new pulumi.StackReference(
`${pulumi.getOrganization()}/k8s-apps/dev`,
);
const kubeconfig = bootstrapRef.requireOutput("kubeconfig");
const domain = appsRef.requireOutput("domain");
const grafanaAdminPassword = config.requireSecret("grafanaAdminPassword");
const k8sProvider = new k8s.Provider("k3s", { kubeconfig });
const opts = (extras?: pulumi.ResourceOptions): pulumi.ResourceOptions => ({
provider: k8sProvider,
...extras,
});
const ns = new k8s.core.v1.Namespace(
"monitoring",
{ metadata: { name: "monitoring" } },
{ provider: k8sProvider, import: "monitoring" },
);
const grafanaHost = pulumi.interpolate`grafana.${domain}`;
new k8s.helm.v3.Release(
"kube-prometheus-stack",
{
name: "kube-prometheus-stack",
chart: "kube-prometheus-stack",
version: "86.2.0",
namespace: ns.metadata.name,
repositoryOpts: {
repo: "https://prometheus-community.github.io/helm-charts",
},
timeout: 600,
values: {
grafana: {
adminPassword: grafanaAdminPassword,
ingress: {
enabled: true,
ingressClassName: "traefik",
annotations: { "cert-manager.io/cluster-issuer": "letsencrypt-prod" },
hosts: [grafanaHost],
tls: [{ secretName: "grafana-tls", hosts: [grafanaHost] }],
},
persistence: {
enabled: true,
storageClassName: "longhorn",
size: "2Gi",
},
},
prometheus: {
prometheusSpec: {
storageSpec: {
volumeClaimTemplate: {
spec: {
storageClassName: "longhorn",
resources: { requests: { storage: "20Gi" } },
},
},
},
},
},
alertmanager: { enabled: false },
},
},
opts(),
);