Skip to content

Commit 9e19301

Browse files
committed
On branch all-in-one-deployment
Changes to be committed: deleted: infra/main.tf new file: infra/modules/application/main.tf new file: infra/modules/application/outputs.tf new file: infra/modules/application/variables.tf modified: infra/modules/argocd/main.tf modified: infra/modules/argocd/outputs.tf modified: infra/modules/argocd/variables.tf new file: infra/modules/cluster-minikube/main.tf new file: infra/modules/cluster-minikube/outputs.tf new file: infra/modules/cluster-minikube/variables.tf deleted: infra/modules/minikube/main.tf deleted: infra/modules/minikube/outputs.tf deleted: infra/modules/minikube/variables.tf deleted: infra/outputs.tf new file: infra/projects/application/main.tf new file: infra/projects/application/outputs.tf new file: infra/projects/application/providers.tf new file: infra/projects/application/variabels.tf new file: infra/projects/argocd/main.tf new file: infra/projects/argocd/outputs.tf renamed: infra/providers.tf -> infra/projects/argocd/providers.tf new file: infra/projects/argocd/terraform.tfvars.example new file: infra/projects/argocd/variables.tf new file: infra/projects/cluster/main.tf new file: infra/projects/cluster/outputs.tf new file: infra/projects/cluster/provider.tf new file: infra/projects/cluster/terraform.tfvars.example new file: infra/projects/cluster/variables.tf deleted: infra/terraform.tfvars.example deleted: infra/variables.tf
1 parent 66089ee commit 9e19301

30 files changed

+495
-286
lines changed

infra/main.tf

Lines changed: 0 additions & 24 deletions
This file was deleted.

infra/modules/application/main.tf

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# App runtime namespace
2+
resource "kubernetes_namespace" "app" {
3+
metadata {
4+
name = var.application_namespace
5+
labels = {
6+
"app.kubernetes.io/name" = var.application_name
7+
"app.kubernetes.io/part-of" = var.cluster_name # <- use cluster_name instead of a static project label
8+
"app.kubernetes.io/managed-by" = "terraform"
9+
}
10+
}
11+
}
12+
13+
14+
# Register the repo in Argo CD (Secret in argocd namespace)
15+
resource "kubernetes_secret" "argocd_repo_github_https" {
16+
metadata {
17+
name = var.repo_secret_name
18+
namespace = var.argocd_namespace
19+
labels = {
20+
"argocd.argoproj.io/secret-type" = "repository"
21+
"app.kubernetes.io/part-of" = var.cluster_name
22+
"app.kubernetes.io/managed-by" = "terraform"
23+
}
24+
}
25+
type = "Opaque"
26+
27+
# stringData lets us provide plaintext; provider encodes to data
28+
data = {
29+
type = "git"
30+
url = var.github_repo_url
31+
username = var.repo_username
32+
password = var.github_pat
33+
}
34+
}
35+
36+
# AppProject (scopes repos/destinations)
37+
resource "kubernetes_manifest" "argocd_project" {
38+
manifest = {
39+
apiVersion = "argoproj.io/v1alpha1"
40+
kind = "AppProject"
41+
metadata = {
42+
name = var.project_name
43+
namespace = var.argocd_namespace
44+
labels = {
45+
"app.kubernetes.io/part-of" = var.cluster_name
46+
"app.kubernetes.io/managed-by" = "terraform"
47+
}
48+
}
49+
spec = {
50+
description = "Project for ${var.cluster_name}"
51+
sourceRepos = [var.github_repo_url]
52+
destinations = [{
53+
namespace = var.application_namespace
54+
server = "https://kubernetes.default.svc"
55+
}]
56+
clusterResourceWhitelist = [{ group = "*", kind = "*" }]
57+
namespaceResourceWhitelist = [{ group = "*", kind = "*" }]
58+
}
59+
}
60+
}
61+
62+
# Argo CD Application
63+
resource "kubernetes_manifest" "argocd_application" {
64+
manifest = {
65+
apiVersion = "argoproj.io/v1alpha1"
66+
kind = "Application"
67+
metadata = {
68+
name = var.application_name
69+
namespace = var.argocd_namespace
70+
labels = {
71+
"app.kubernetes.io/part-of" = var.cluster_name
72+
"app.kubernetes.io/managed-by" = "terraform"
73+
}
74+
}
75+
spec = {
76+
project = var.project_name
77+
source = {
78+
repoURL = var.github_repo_url
79+
targetRevision = var.target_revision
80+
path = var.kustomize_path
81+
}
82+
destination = {
83+
server = "https://kubernetes.default.svc"
84+
namespace = var.application_namespace
85+
}
86+
syncPolicy = {
87+
automated = { prune = true, selfHeal = true }
88+
syncOptions = ["CreateNamespace=true"]
89+
}
90+
}
91+
}
92+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
output "application_namespace" { value = var.application_namespace }
2+
output "application_name" { value = var.application_name }
3+
output "project_name" { value = var.project_name }
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
variable "cluster_name" {
2+
description = "Used in labels and for context-aware manifests (passed from project)"
3+
type = string
4+
}
5+
6+
variable "argocd_namespace" {
7+
description = "Namespace where Argo CD is installed"
8+
type = string
9+
default = "argocd"
10+
}
11+
12+
variable "application_namespace" {
13+
description = "Namespace where the app will run"
14+
type = string
15+
default = "emumba-assessment"
16+
}
17+
18+
variable "project_name" {
19+
description = "Argo CD AppProject name"
20+
type = string
21+
default = "emumba-deployment"
22+
}
23+
24+
variable "application_name" {
25+
description = "Argo CD Application name"
26+
type = string
27+
default = "emumba-assessment-app"
28+
}
29+
30+
variable "github_repo_url" {
31+
description = "Git repository URL for the app (https)"
32+
type = string
33+
}
34+
35+
variable "github_pat" {
36+
description = "GitHub personal access token (read access)"
37+
type = string
38+
sensitive = true
39+
}
40+
41+
variable "repo_username" {
42+
description = "Repository username for basic auth"
43+
type = string
44+
default = "git"
45+
}
46+
47+
variable "repo_secret_name" {
48+
description = "K8s Secret name registered in Argo CD"
49+
type = string
50+
default = "repo-github-emumba-https"
51+
}
52+
53+
variable "kustomize_path" {
54+
description = "Path inside the repo to Kustomize overlay"
55+
type = string
56+
default = "k8s/overlays/dev"
57+
}
58+
59+
variable "target_revision" {
60+
description = "Git revision (branch, tag, or commit SHA)"
61+
type = string
62+
default = "HEAD"
63+
}
64+
65+
terraform {
66+
required_version = ">= 1.10.0"
67+
required_providers {
68+
kubernetes = {
69+
source = "hashicorp/kubernetes"
70+
version = ">= 2.38.0"
71+
}
72+
}
73+
}

infra/modules/argocd/main.tf

Lines changed: 16 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,17 @@
1-
terraform {
2-
required_version = ">= 1.10.0"
3-
required_providers {
4-
kubernetes = {
5-
source = "hashicorp/kubernetes"
6-
version = ">= 2.38.0"
7-
}
8-
helm = {
9-
source = "hashicorp/helm"
10-
version = "3.0.2"
11-
}
12-
}
13-
}
14-
15-
provider "kubernetes" {
16-
config_path = pathexpand("~/.kube/config")
17-
}
18-
19-
provider "helm" {
20-
kubernetes = {
21-
config_path = pathexpand("~/.kube/config")
22-
}
23-
}
24-
25-
261
resource "kubernetes_namespace" "argocd" {
272
metadata {
283
name = var.namespace
294
labels = {
305
"app.kubernetes.io/name" = "argocd"
31-
"app.kubernetes.io/part-of" = "emumba-assessment-k8s-iac"
6+
"app.kubernetes.io/part-of" = "emumba-minikube-cluster"
327
"app.kubernetes.io/managed-by" = "terraform"
338
}
349
}
3510
}
3611

37-
resource "helm_release" "argocd" {
38-
name = var.release_name
39-
repository = "https://argoproj.github.io/argo-helm"
40-
chart = "argo-cd"
41-
namespace = kubernetes_namespace.argocd.metadata[0].name
42-
version = "8.5.7"
43-
44-
values = [yamlencode({
12+
locals {
13+
base_values = yamlencode({
14+
installCRDs = true
4515
configs = {
4616
params = {
4717
"server.insecure" = "true"
@@ -52,78 +22,20 @@ resource "helm_release" "argocd" {
5222
type = var.server_service_type
5323
}
5424
}
55-
})]
56-
57-
depends_on = [kubernetes_namespace.argocd]
25+
})
26+
merged_values = concat([local.base_values], var.extra_values_yaml)
5827
}
5928

60-
resource "kubernetes_secret" "argocd_repo_github_https" {
61-
metadata {
62-
name = "repo-github-emumba-https"
63-
namespace = kubernetes_namespace.argocd.metadata[0].name
64-
labels = { "argocd.argoproj.io/secret-type" = "repository" }
65-
}
66-
type = "Opaque"
67-
data = {
68-
type = "git"
69-
url = var.github_repo_url
70-
username = "git"
71-
password = var.github_pat
72-
}
73-
}
29+
resource "helm_release" "argocd" {
30+
name = var.release_name
31+
repository = "https://argoproj.github.io/argo-helm"
32+
chart = "argo-cd"
33+
namespace = kubernetes_namespace.argocd.metadata[0].name
34+
version = var.chart_version
7435

75-
resource "kubernetes_manifest" "emumba_project" {
76-
manifest = {
77-
apiVersion = "argoproj.io/v1alpha1"
78-
kind = "AppProject"
79-
metadata = {
80-
name = "emumba-deployment"
81-
namespace = kubernetes_namespace.argocd.metadata[0].name
82-
labels = { "app.kubernetes.io/part-of" = "emumba-assessment-k8s-iac" }
83-
}
84-
spec = {
85-
description = "Project for Emumba assessment"
86-
sourceRepos = [var.github_repo_url]
87-
destinations = [{
88-
namespace = "emumba-assessment"
89-
server = "https://kubernetes.default.svc"
90-
}]
91-
clusterResourceWhitelist = [{ group = "*", kind = "*" }]
92-
namespaceResourceWhitelist = [{ group = "*", kind = "*" }]
93-
}
94-
}
95-
depends_on = [helm_release.argocd]
96-
}
36+
wait = true
37+
timeout = 600
9738

98-
resource "kubernetes_manifest" "app" {
99-
manifest = {
100-
apiVersion = "argoproj.io/v1alpha1"
101-
kind = "Application"
102-
metadata = {
103-
name = "emumba-assessment-app"
104-
namespace = kubernetes_namespace.argocd.metadata[0].name
105-
labels = { "app.kubernetes.io/part-of" = "emumba-assessment-k8s-iac" }
106-
}
107-
spec = {
108-
project = "emumba-deployment"
109-
source = {
110-
repoURL = var.github_repo_url
111-
targetRevision = "local-exec-minikube"
112-
path = "k8s/overlays/dev"
113-
}
114-
destination = {
115-
server = "https://kubernetes.default.svc"
116-
namespace = "emumba-assessment"
117-
}
118-
syncPolicy = {
119-
automated = { prune = true, selfHeal = true }
120-
syncOptions = ["CreateNamespace=true"]
121-
}
122-
}
123-
}
124-
depends_on = [
125-
helm_release.argocd,
126-
kubernetes_manifest.emumba_project,
127-
kubernetes_secret.argocd_repo_github_https
128-
]
39+
values = local.merged_values
12940
}
41+

infra/modules/argocd/outputs.tf

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,2 @@
1-
output "namespace" {
2-
value = kubernetes_namespace.argocd.metadata[0].name
3-
}
4-
5-
output "server_service" {
6-
value = "${var.release_name}-argocd-server"
7-
}
8-
9-
output "admin_password_cmd" {
10-
value = "kubectl -n ${kubernetes_namespace.argocd.metadata[0].name} get secret argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 -d && echo"
11-
}
12-
13-
output "port_forward_cmd" {
14-
value = "kubectl -n ${kubernetes_namespace.argocd.metadata[0].name} port-forward svc/${var.release_name}-argocd-server 8080:80"
15-
}
1+
output "namespace" { value = var.namespace }
2+
output "release_name" { value = helm_release.argocd.name }

0 commit comments

Comments
 (0)