@@ -12,6 +12,10 @@ terraform {
1212 source = " hashicorp/helm"
1313 version = " ~> 2.12"
1414 }
15+ null = {
16+ source = " hashicorp/null"
17+ version = " ~> 3.2"
18+ }
1519 }
1620}
1721
@@ -39,142 +43,112 @@ resource "kubernetes_namespace" "monitoring" {
3943 depends_on = []
4044}
4145
42- # Add Prometheus Helm repository
43- resource "helm_repository" "prometheus" {
44- name = " prometheus-community"
45- url = " https://prometheus-community.github.io/helm-charts"
46- repository_ca_certificate = var. helm_ca_cert
47- }
48-
49- # Add Grafana Helm repository
50- resource "helm_repository" "grafana" {
51- name = " grafana"
52- url = " https://grafana.github.io/helm-charts"
53- repository_ca_certificate = var. helm_ca_cert
54- }
55-
5646# Deploy Prometheus using Helm
5747resource "helm_release" "prometheus" {
58- name = " prometheus"
59- repository = helm_repository . prometheus . name
60- chart = " prometheus"
61- namespace = kubernetes_namespace. monitoring . metadata [0 ]. name
48+ name = " prometheus"
49+ repository = " https:// prometheus-community.github.io/helm-charts "
50+ chart = " prometheus"
51+ namespace = kubernetes_namespace. monitoring . metadata [0 ]. name
6252 create_namespace = false
63- wait = true
64- timeout = 600
53+ wait = true
54+ timeout = 600
6555
6656 values = [
6757 file (" ${ path . module } /../observability/prometheus/values.yaml" )
6858 ]
6959
70- depends_on = [kubernetes_namespace . monitoring , helm_repository . prometheus ]
60+ depends_on = [kubernetes_namespace . monitoring ]
7161}
7262
73- # Deploy Jaeger
74- resource "kubernetes_manifest" "jaeger" {
75- manifest = yamldecode (file (" ${ path . module } /../observability/jaeger/jaeger-deployment.yaml" ))
63+ # Deploy Jaeger using kubectl
64+ resource "null_resource" "jaeger" {
65+ provisioner "local-exec" {
66+ command = " kubectl apply -f ${ path . module } /../observability/jaeger/jaeger-deployment.yaml"
67+ }
7668
7769 depends_on = [kubernetes_namespace . monitoring ]
7870}
7971
8072# Deploy Loki using Helm
8173resource "helm_release" "loki" {
82- name = " loki"
83- repository = helm_repository . grafana . name
84- chart = " loki"
85- namespace = kubernetes_namespace. monitoring . metadata [0 ]. name
74+ name = " loki"
75+ repository = " https:// grafana.github.io/helm-charts "
76+ chart = " loki"
77+ namespace = kubernetes_namespace. monitoring . metadata [0 ]. name
8678 create_namespace = false
87- wait = true
88- timeout = 600
79+ wait = true
80+ timeout = 600
8981
9082 values = [
9183 file (" ${ path . module } /../observability/loki/values.yaml" )
9284 ]
9385
94- depends_on = [kubernetes_namespace . monitoring , helm_repository . grafana ]
86+ depends_on = [kubernetes_namespace . monitoring ]
9587}
9688
9789# Deploy Grafana using Helm
9890resource "helm_release" "grafana" {
99- name = " grafana"
100- repository = helm_repository . grafana . name
101- chart = " grafana"
102- namespace = kubernetes_namespace. monitoring . metadata [0 ]. name
91+ name = " grafana"
92+ repository = " https:// grafana.github.io/helm-charts "
93+ chart = " grafana"
94+ namespace = kubernetes_namespace. monitoring . metadata [0 ]. name
10395 create_namespace = false
104- wait = true
105- timeout = 600
96+ wait = true
97+ timeout = 600
10698
10799 values = [
108100 file (" ${ path . module } /../observability/grafana/values.yaml" )
109101 ]
110102
111- depends_on = [kubernetes_namespace . monitoring , helm_repository . grafana ]
103+ depends_on = [kubernetes_namespace . monitoring ]
112104}
113105
114106# Deploy Prometheus Operator for ServiceMonitor support
115107resource "helm_release" "kube_prometheus_stack" {
116- name = " prometheus-operator"
117- repository = helm_repository . prometheus . name
118- chart = " kube-prometheus-stack"
119- namespace = kubernetes_namespace. monitoring . metadata [0 ]. name
108+ name = " prometheus-operator"
109+ repository = " https:// prometheus-community.github.io/helm-charts "
110+ chart = " kube-prometheus-stack"
111+ namespace = kubernetes_namespace. monitoring . metadata [0 ]. name
120112 create_namespace = false
121- wait = true
122- timeout = 900
113+ wait = true
114+ timeout = 900
123115
124116 set {
125117 name = " prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues"
126118 value = " false"
127119 }
128120
129- depends_on = [kubernetes_namespace . monitoring , helm_repository . prometheus ]
121+ depends_on = [kubernetes_namespace . monitoring ]
130122}
131123
132- # Apply ServiceMonitor for OTel metrics
133- resource "kubernetes_manifest" "service_monitor" {
134- manifest = yamldecode (file (" ${ path . module } /../observability/prometheus/service-monitor.yaml" ))
124+ # Apply ServiceMonitor for OTel metrics using kubectl
125+ resource "null_resource" "service_monitor" {
126+ provisioner "local-exec" {
127+ command = " kubectl apply -f ${ path . module } /../observability/prometheus/service-monitor.yaml"
128+ }
135129
136130 depends_on = [helm_release . kube_prometheus_stack ]
137131}
138132
139- # Create default namespace resources (applications)
140- resource "kubernetes_namespace" "default" {
141- metadata {
142- name = " default"
143- labels = {
144- " name" = " default"
145- }
146- }
147- }
148-
149- # Deploy backend service
133+ # Deploy backend service (default namespace already exists)
150134resource "kubernetes_manifest" "backend_deployment" {
151135 manifest = yamldecode (file (" ${ path . module } /../app/backend/backend-deployment.yaml" ))
152-
153- depends_on = [kubernetes_namespace . default ]
154136}
155137
156138resource "kubernetes_manifest" "backend_service" {
157139 manifest = yamldecode (file (" ${ path . module } /../app/backend/backend-service.yaml" ))
158-
159- depends_on = [kubernetes_namespace . default ]
160140}
161141
162142# Deploy frontend service
163143resource "kubernetes_manifest" "frontend_deployment" {
164144 manifest = yamldecode (file (" ${ path . module } /../app/frontend/frontend-deployment.yaml" ))
165-
166- depends_on = [kubernetes_namespace . default ]
167145}
168146
169147resource "kubernetes_manifest" "frontend_service" {
170148 manifest = yamldecode (file (" ${ path . module } /../app/frontend/frontend-service.yaml" ))
171-
172- depends_on = [kubernetes_namespace . default ]
173149}
174150
175151# Deploy ConfigMap
176152resource "kubernetes_manifest" "configmap" {
177153 manifest = yamldecode (file (" ${ path . module } /../app/configmap.yaml" ))
178-
179- depends_on = [kubernetes_namespace . default ]
180154}
0 commit comments