Skip to content

Commit bca6bbe

Browse files
committed
bp
1 parent 6f5079b commit bca6bbe

File tree

8 files changed

+97
-18
lines changed

8 files changed

+97
-18
lines changed

.github/workflows/k8s.yml

Lines changed: 64 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
name: Terraform Apply
1+
name: Terraform
2+
23
on:
34
pull_request:
45
workflow_dispatch:
@@ -7,32 +8,81 @@ on:
78
- main
89

910
jobs:
10-
run-mock-k8s-and-apply:
11+
terraform-plan:
12+
name: Terraform Plan
1113
runs-on: ubuntu-latest
1214
steps:
1315
- uses: actions/checkout@v4
1416
with:
15-
fetch-depth: 0
16-
- name: Install terraform
17-
run: |
18-
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
19-
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
20-
sudo apt update && sudo apt install terraform -y
17+
fetch-depth: 0
18+
19+
- name: Setup Terraform
20+
uses: hashicorp/setup-terraform@v3
21+
with:
22+
terraform_version: "1.5.0"
23+
2124
- name: Configure mkcert
22-
run: |
25+
run: |
2326
sudo apt install ca-certificates libnss3-tools -y
24-
wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64
27+
wget -q https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64
2528
chmod +x ./mkcert-v1.4.4-linux-amd64
2629
sudo mv ./mkcert-v1.4.4-linux-amd64 /usr/local/bin/mkcert
2730
mkcert --install
28-
ls -la "$(mkcert -CAROOT)"
29-
- name: Testing on a k8s Kind Cluster
31+
32+
- name: Create Kind cluster
3033
uses: helm/kind-action@v1.12.0
31-
- run: |
34+
35+
- name: Configure kubectl context
36+
run: |
3237
kubectl cluster-info
3338
kubectl get nodes
3439
kubectl config rename-context kind-chart-testing docker-desktop
35-
- name : Preparing cluster for kube-ez
40+
41+
- name: Terraform Init
42+
run: |
43+
export TF_VAR_cluster_issuer_selfsigned_ca_cert="$(base64 < "$(mkcert -CAROOT)/rootCA.pem")"
44+
export TF_VAR_cluster_issuer_selfsigned_ca_key="$(base64 < "$(mkcert -CAROOT)/rootCA-key.pem")"
45+
make tf-init
46+
47+
- name: Terraform Plan
48+
run: |
49+
export TF_VAR_cluster_issuer_selfsigned_ca_cert="$(base64 < "$(mkcert -CAROOT)/rootCA.pem")"
50+
export TF_VAR_cluster_issuer_selfsigned_ca_key="$(base64 < "$(mkcert -CAROOT)/rootCA-key.pem")"
51+
make tf-plan
52+
53+
terraform-apply:
54+
name: Terraform Apply
55+
needs: terraform-plan
56+
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
57+
runs-on: ubuntu-latest
58+
steps:
59+
- uses: actions/checkout@v4
60+
with:
61+
fetch-depth: 0
62+
63+
- name: Setup Terraform
64+
uses: hashicorp/setup-terraform@v3
65+
with:
66+
terraform_version: "1.5.0"
67+
68+
- name: Configure mkcert
69+
run: |
70+
sudo apt install ca-certificates libnss3-tools -y
71+
wget -q https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64
72+
chmod +x ./mkcert-v1.4.4-linux-amd64
73+
sudo mv ./mkcert-v1.4.4-linux-amd64 /usr/local/bin/mkcert
74+
mkcert --install
75+
76+
- name: Create Kind cluster
77+
uses: helm/kind-action@v1.12.0
78+
79+
- name: Configure kubectl context
80+
run: |
81+
kubectl cluster-info
82+
kubectl get nodes
83+
kubectl config rename-context kind-chart-testing docker-desktop
84+
85+
- name: Terraform Apply
3686
run: |
3787
export TF_VAR_cluster_issuer_selfsigned_ca_cert="$(base64 < "$(mkcert -CAROOT)/rootCA.pem")"
3888
export TF_VAR_cluster_issuer_selfsigned_ca_key="$(base64 < "$(mkcert -CAROOT)/rootCA-key.pem")"

envs/local/main.tf

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
module "metallb" {
2-
source = "../../modules/metallb"
2+
source = "../../modules/metallb"
3+
ip_range = local.metallb_ip_range
34
}
45

56
module "cert_manager" {
@@ -41,6 +42,7 @@ module "echo_server" {
4142
ingress_class_name = local.ingress_class_name
4243
issuer_name = local.cluster_issuer_selfsigned
4344
depends_on = [
44-
module.ingress_nginx
45+
module.ingress_nginx,
46+
module.cluster_issuer_selfsigned
4547
]
4648
}

modules/cert-manager/versions.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
terraform {
22
required_providers {
3+
helm = {
4+
source = "hashicorp/helm"
5+
version = "~> 2.10"
6+
}
37
kubectl = {
48
source = "gavinbunney/kubectl"
59
version = "~> 1.19.0"

modules/cluster-issuer-production/variables.tf

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ variable "namespace" {
1212
variable "acme_email" {
1313
type = string
1414
description = "Email used for ACME registration"
15-
default = "admin@example.com"
15+
16+
validation {
17+
condition = can(regex("^[^@]+@[^@]+\\.[^@]+$", var.acme_email))
18+
error_message = "Must be a valid email address."
19+
}
1620
}
1721

1822
variable "acme_server" {

modules/echo-server/main.tf

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ resource "kubernetes_namespace" "echo" {
55
}
66

77
resource "kubernetes_deployment" "echo" {
8+
depends_on = [kubernetes_namespace.echo]
89
metadata {
910
name = var.name
1011
namespace = var.namespace
@@ -36,6 +37,7 @@ resource "kubernetes_deployment" "echo" {
3637
}
3738

3839
resource "kubernetes_service" "echo" {
40+
depends_on = [kubernetes_namespace.echo]
3941
metadata {
4042
name = var.name
4143
namespace = var.namespace
@@ -53,6 +55,7 @@ resource "kubernetes_service" "echo" {
5355
}
5456

5557
resource "kubernetes_ingress_v1" "echo" {
58+
depends_on = [kubernetes_namespace.echo]
5659
metadata {
5760
name = var.name
5861
namespace = var.namespace

modules/echo-server/versions.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
terraform {
2+
required_providers {
3+
kubernetes = {
4+
source = "hashicorp/kubernetes"
5+
version = "~> 2.20"
6+
}
7+
}
8+
}

modules/ingress-nginx/versions.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
terraform {
2+
required_providers {
3+
helm = {
4+
source = "hashicorp/helm"
5+
version = "~> 2.10"
6+
}
7+
}
8+
}

modules/metallb/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ resource "kubectl_manifest" "metallb_ip_pool" {
1313
apiVersion: metallb.io/v1beta1
1414
kind: IPAddressPool
1515
metadata:
16-
name: ingress-ip-pool
16+
name: ip-pool-${replace(replace(each.value, ".", "-"), "/", "-")}
1717
namespace: ${var.namespace}
1818
spec:
1919
addresses:

0 commit comments

Comments
 (0)