From c9e292956b2cec38b1c5e532360a9a3d1c9e3b6c Mon Sep 17 00:00:00 2001
From: Andri Joos <andri@joos.io>
Date: Sun, 9 Mar 2025 11:14:36 +0100
Subject: [PATCH] migrate to terraform

---
 .gitignore                    | 38 +++++++++++++++++++++++++
 .gitlab-ci.yml                | 22 ++-------------
 terraform/.terraform.lock.hcl | 22 +++++++++++++++
 terraform/main.tf             | 52 +++++++++++++++++++++++++++++++++++
 4 files changed, 115 insertions(+), 19 deletions(-)
 create mode 100644 terraform/.terraform.lock.hcl
 create mode 100644 terraform/main.tf

diff --git a/.gitignore b/.gitignore
index 50a7a54..bb4fc9e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,39 @@
 local.cmd.sh
+
+# Local .terraform directories
+**/.terraform/*
+
+# .tfstate files
+*.tfstate
+*.tfstate.*
+
+# Crash log files
+crash.log
+crash.*.log
+
+# Exclude all .tfvars files, which are likely to contain sensitive data, such as
+# password, private keys, and other secrets. These should not be part of version 
+# control as they are data points which are potentially sensitive and subject 
+# to change depending on the environment.
+*.tfvars
+*.tfvars.json
+
+# Ignore override files as they are usually used to override resources locally and so
+# are not checked in
+override.tf
+override.tf.json
+*_override.tf
+*_override.tf.json
+
+# Ignore transient lock info files created by terraform apply
+.terraform.tfstate.lock.info
+
+# Include override files you do wish to add to version control using negated pattern
+# !example_override.tf
+
+# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
+# example: *tfplan*
+
+# Ignore CLI configuration files
+.terraformrc
+terraform.rc
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 77aefe0..cdbce3c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,23 +1,7 @@
 include:
 - project: kubernetes-cluster/deploy/ci
-  ref: master
-  file: helm_deployment.gitlab-ci.yml
+  ref: terraform_migration
+  file: distribution.terraform.gitlab-ci.yml
 
 variables:
-  HELM_REPO_NAME: projectcalico
-  HELM_CHART_NAME: tigera-operator
-  HELM_REPO: https://docs.tigera.io/calico/charts
-  HELM_VALUES_FILES: values.yaml
-  NAMESPACE: tigera-operator
-  DEPLOYMENT_NAME: calico
-  HELM_CHART_VERSION: v3.29.2
-  HELM_UPGRADE_ARGS: >
-    --set installation.calicoNetwork.ipPools[0].cidr=${DISTRIBUTION_CIDR}
-
-deploy_calico:
-  extends: .deploy_helm_from_repo
-  only:
-    refs:
-      - master
-  variables:
-    KUBE_CONTEXT: ${DISTRIBUTION_KUBE_CONTEXT}
+  TF_VAR_cidr: ${DISTRIBUTION_CIDR}
diff --git a/terraform/.terraform.lock.hcl b/terraform/.terraform.lock.hcl
new file mode 100644
index 0000000..10db209
--- /dev/null
+++ b/terraform/.terraform.lock.hcl
@@ -0,0 +1,22 @@
+# This file is maintained automatically by "terraform init".
+# Manual edits may be lost in future updates.
+
+provider "registry.terraform.io/hashicorp/helm" {
+  version     = "2.17.0"
+  constraints = "~> 2.17"
+  hashes = [
+    "h1:K5FEjxvDnxb1JF1kG1xr8J3pNGxoaR3Z0IBG9Csm/Is=",
+    "zh:06fb4e9932f0afc1904d2279e6e99353c2ddac0d765305ce90519af410706bd4",
+    "zh:104eccfc781fc868da3c7fec4385ad14ed183eb985c96331a1a937ac79c2d1a7",
+    "zh:129345c82359837bb3f0070ce4891ec232697052f7d5ccf61d43d818912cf5f3",
+    "zh:3956187ec239f4045975b35e8c30741f701aa494c386aaa04ebabffe7749f81c",
+    "zh:66a9686d92a6b3ec43de3ca3fde60ef3d89fb76259ed3313ca4eb9bb8c13b7dd",
+    "zh:88644260090aa621e7e8083585c468c8dd5e09a3c01a432fb05da5c4623af940",
+    "zh:a248f650d174a883b32c5b94f9e725f4057e623b00f171936dcdcc840fad0b3e",
+    "zh:aa498c1f1ab93be5c8fbf6d48af51dc6ef0f10b2ea88d67bcb9f02d1d80d3930",
+    "zh:bf01e0f2ec2468c53596e027d376532a2d30feb72b0b5b810334d043109ae32f",
+    "zh:c46fa84cc8388e5ca87eb575a534ebcf68819c5a5724142998b487cb11246654",
+    "zh:d0c0f15ffc115c0965cbfe5c81f18c2e114113e7a1e6829f6bfd879ce5744fbb",
+    "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
+  ]
+}
diff --git a/terraform/main.tf b/terraform/main.tf
new file mode 100644
index 0000000..6073c2a
--- /dev/null
+++ b/terraform/main.tf
@@ -0,0 +1,52 @@
+variable "kubernetes_config" {
+  type = string
+}
+
+variable "kubernetes_context" {
+  type = string
+}
+
+provider "helm" {
+  kubernetes {
+    config_path = var.kubernetes_config
+    config_context = var.kubernetes_context
+  }
+}
+
+variable "cidr" {
+  type = string
+}
+
+variable "extra_values_files" {
+  type = list(string)
+  default = []
+}
+
+variable "extra_set_values" {
+  type = map(any)
+  default = {}
+}
+
+variable "extra_set_sensitive_values" {
+  type = map(any)
+  default = {}
+}
+
+module "helm_release" {
+  source = "git::https://git.420joos.dev/kubernetes-cluster/terraform-generalization.git"
+  release_name = "calico"
+  chart_repo = "https://docs.tigera.io/calico/charts"
+  chart_name = "tigera-operator"
+  chart_version = "v3.29.2"
+  namespace = "tigera-operator"
+  default_values_files = [
+    "../values.yaml"
+  ]
+  extra_values_files = var.extra_values_files
+  default_set_values = {
+    "installation.calicoNetwork.ipPools[0].cidr" = var.cidr
+  }
+  extra_set_values = var.extra_set_values
+  default_set_sensitive_values = {}
+  extra_set_sensitive_values = var.extra_set_sensitive_values
+}
-- 
GitLab