Skip to content

Commit 4c2b773

Browse files
committed
generalize external-dns
1 parent bde4b1e commit 4c2b773

File tree

7 files changed

+156
-82
lines changed

7 files changed

+156
-82
lines changed

.werft/installer-tests.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ const TEST_CONFIGURATIONS: { [name: string]: TestConfig } = {
9393
"STANDARD_AKS_CLUSTER",
9494
"CERT_MANAGER",
9595
"AZURE_ISSUER",
96-
"AZURE_EXTERNALDNS",
96+
"EXTERNALDNS",
9797
"ADD_NS_RECORD",
9898
"GENERATE_KOTS_CONFIG",
9999
"INSTALL_GITPOD",
@@ -107,9 +107,11 @@ const TEST_CONFIGURATIONS: { [name: string]: TestConfig } = {
107107
CLOUD: "aws",
108108
DESCRIPTION: "Create an EKS cluster",
109109
PHASES: [
110-
"STANDARD_EKS_CLUSTER",
110+
"STANDARD_GKE_CLUSTER",
111111
"CERT_MANAGER",
112+
"EXTERNALDNS",
112113
// TODO phases are:
114+
// external dns with aws
113115
// 1) register domains in AWS, associate with route53
114116
// 2) add the associated ns record to gcp(since we use gitpod-self-hsoted.com domain)
115117
// 3) create cluster issuer with route53 as solver
@@ -174,10 +176,10 @@ const INFRA_PHASES: { [name: string]: InfraConfig } = {
174176
makeTarget: "azure-issuer",
175177
description: "Deploys ClusterIssuer for azure",
176178
},
177-
AZURE_EXTERNALDNS: {
178-
phase: "azure-external-dns",
179-
makeTarget: "azure-external-dns",
180-
description: "Deploys external-dns with azure provider",
179+
EXTERNALDNS: {
180+
phase: "external-dns",
181+
makeTarget: `external-dns provider=${cloud}`,
182+
description: `Deploys external-dns with ${cloud} provider`,
181183
},
182184
ADD_NS_RECORD: {
183185
phase: "add-ns-record",
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
provider "kubernetes" {
2+
config_path = var.kubeconfig
3+
}
4+
5+
data local_file "gcp_credentials" {
6+
filename = var.credentials
7+
}
8+
9+
provider "google" {
10+
credentials = var.credentials
11+
project = var.gcp_project
12+
region = var.gcp_region
13+
zone = var.gcp_zone
14+
}
15+
16+
provider "helm" {
17+
kubernetes {
18+
config_path = var.kubeconfig
19+
}
20+
}
21+
22+
#create namespace for external-dns
23+
resource "kubernetes_namespace" "external_dns" {
24+
metadata {
25+
name = "external-dns"
26+
}
27+
}
28+
29+
resource "kubernetes_secret" "external_dns" {
30+
depends_on = [
31+
kubernetes_namespace.external_dns
32+
]
33+
metadata {
34+
name = "external-dns"
35+
namespace = "external-dns"
36+
}
37+
data = {
38+
"credentials.json" = data.local_file.gcp_credentials.content
39+
}
40+
}
41+
42+
resource "helm_release" "external-dns" {
43+
depends_on = [
44+
kubernetes_secret.external_dns,
45+
kubernetes_namespace.external_dns
46+
]
47+
name = "external-dns"
48+
namespace = "external-dns"
49+
create_namespace = true
50+
chart = "external-dns"
51+
repository = "https://charts.bitnami.com/bitnami"
52+
cleanup_on_fail = true
53+
replace = true
54+
set {
55+
name = "provider"
56+
value = "google"
57+
}
58+
set {
59+
name = "google.project"
60+
value = var.gcp_project
61+
}
62+
set {
63+
name = "logFormat"
64+
value = "json"
65+
}
66+
set {
67+
name = "google.serviceAccountSecret"
68+
value = "external-dns"
69+
}
70+
set {
71+
name = "txt-owner-id"
72+
value = var.txt_owner_id
73+
}
74+
}
Lines changed: 54 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,70 @@
1-
provider "kubernetes" {
2-
config_path = var.kubeconfig
3-
}
4-
5-
data local_file "gcp_credentials" {
6-
filename = var.credentials
7-
}
8-
9-
provider "google" {
10-
credentials = var.credentials
11-
project = var.gcp_project
12-
region = var.gcp_region
13-
zone = var.gcp_zone
14-
}
1+
variable settings {}
2+
variable domain_name { default = "test"}
3+
variable kubeconfig { default = "conf"}
4+
variable provider { default = "azure"}
155

166
provider "helm" {
177
kubernetes {
188
config_path = var.kubeconfig
199
}
2010
}
2111

22-
#create namespace for external-dns
23-
resource "kubernetes_namespace" "external_dns" {
24-
metadata {
25-
name = "external-dns"
26-
}
27-
}
28-
29-
resource "kubernetes_secret" "external_dns" {
30-
depends_on = [
31-
kubernetes_namespace.external_dns
32-
]
33-
metadata {
34-
name = "external-dns"
35-
namespace = "external-dns"
36-
}
37-
data = {
38-
"credentials.json" = data.local_file.gcp_credentials.content
39-
}
40-
}
41-
42-
resource "helm_release" "external-dns" {
43-
depends_on = [
44-
kubernetes_secret.external_dns,
45-
kubernetes_namespace.external_dns
46-
]
12+
# External DNS Deployment using Helm
13+
resource "helm_release" "external_dns" {
4714
name = "external-dns"
15+
repository = "https://charts.bitnami.com"
16+
chart = "external-dns"
4817
namespace = "external-dns"
4918
create_namespace = true
50-
chart = "external-dns"
51-
repository = "https://charts.bitnami.com/bitnami"
52-
cleanup_on_fail = true
53-
replace = true
54-
set {
55-
name = "provider"
56-
value = "google"
57-
}
58-
set {
59-
name = "google.project"
60-
value = var.gcp_project
61-
}
19+
6220
set {
63-
name = "logFormat"
64-
value = "json"
21+
name = "domainFilters[0]"
22+
value = var.domain_name
6523
}
24+
6625
set {
67-
name = "google.serviceAccountSecret"
68-
value = "external-dns"
26+
name = "provider"
27+
value = var.provider
6928
}
70-
set {
71-
name = "txt-owner-id"
72-
value = var.txt_owner_id
29+
30+
dynamic "set" {
31+
for_each = var.settings
32+
content {
33+
name = setting.value["name"]
34+
value = setting.value["value"]
35+
}
7336
}
37+
# set {
38+
# name = "azure.userAssignedIdentityID"
39+
# value = var.settings["azure.userAssignedIdentityID"]
40+
# }
41+
42+
# set {
43+
# name = "azure.useManagedIdentityExtension"
44+
# value = var.settings["azure.useManagedIdentityExtension"]
45+
# }
46+
47+
# set {
48+
# name = "azure.tenantId"
49+
# value = var.settings["azure.tenantId"]
50+
# }
51+
52+
# set {
53+
# name = "azure.subscriptionId"
54+
# value = var.settings["azure.subscriptionId"]
55+
# }
56+
57+
# set {
58+
# name = "azure.resourceGroup"
59+
# value = var.settings["azure.resourceGroup"]
60+
# }
61+
62+
# TODO Add tags using dynamic block
63+
# https://github.com/hashicorp/terraform/issues/22340
64+
# dynamic "set" {
65+
# for_each = var.tags
66+
# iterator = "tag"
67+
# name = "podLabels[${index(var.tags, tag.key)}]"
68+
# value = tag.value
69+
# }
7470
}

install/tests/Makefile

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,6 @@ aks-standard-cluster:
4242
terraform workspace new $(TF_VAR_TEST_ID) || terraform workspace select $(TF_VAR_TEST_ID) && \
4343
terraform apply -target=module.aks -var k8s_flavor="aks" -var kubeconfig=${KUBECONFIG} --auto-approve
4444

45-
.PHONY:
46-
## azure-external-dns: Sets up external-dns with azure provider
47-
azure-external-dns:
48-
azure-external-dns:
49-
terraform init --upgrade && \
50-
terraform workspace new $(TF_VAR_TEST_ID) || terraform workspace select $(TF_VAR_TEST_ID) && \
51-
terraform apply -target=module.azure-externaldns -var kubeconfig=${KUBECONFIG} --auto-approve
52-
5345
.PHONY:
5446
## add-ns-record: Adds NS record for subdomain under gitpod-selfhosted.com
5547
add-ns-record:
@@ -83,9 +75,16 @@ cert-manager:
8375
## managed-dns: Installs external-dns, and setup up CloudDNS access
8476
managed-dns: check-env-sub-domain
8577
terraform workspace select $(TF_VAR_TEST_ID) && \
86-
terraform apply -target=module.externaldns -var kubeconfig=${KUBECONFIG} --auto-approve && \
78+
terraform apply -target=module.clouddns-externaldns -var kubeconfig=${KUBECONFIG} --auto-approve && \
8779
kubectl --kubeconfig=${KUBECONFIG} apply -f ${CLUSTER_ISSUER_CLOUD_DNS}
8880

81+
provider ?= "azure"
82+
.PHONY:
83+
## external-dns: Installs external-dns
84+
external-dns: check-env-sub-domain
85+
terraform workspace select $(TF_VAR_TEST_ID) && \
86+
terraform apply -target=module.externaldns -var provider=${provider} -var kubeconfig=${KUBECONFIG} --auto-approve
87+
8988
.PHONY:
9089
## get-kubeconfig: Returns KUBECONFIG of a just created cluster
9190
get-kubeconfig:
@@ -210,16 +209,16 @@ select-workspace:
210209
terraform workspace select $(TF_VAR_TEST_ID)
211210

212211
destroy-gcp-externaldns: select-workspace
213-
ls ${KUBECONFIG} && terraform destroy -target=module.externaldns -var kubeconfig=${KUBECONFIG} --auto-approve || echo "No kubeconfig file"
212+
ls ${KUBECONFIG} && terraform destroy -target=module.clouddns-externaldns -var kubeconfig=${KUBECONFIG} --auto-approve || echo "No kubeconfig file"
214213

215214
destroy-certmanager: select-workspace
216215
ls ${KUBECONFIG} && terraform destroy -target=module.certmanager -var kubeconfig=${KUBECONFIG} --auto-approve || echo "No kubeconfig file"
217216

218217
destroy-gcpns: select-workspace
219218
terraform destroy -target=module.add_gcp_nameservers -var kubeconfig=${KUBECONFIG} --auto-approve
220219

221-
destroy-aks-edns: select-workspace
222-
ls ${KUBECONFIG} && terraform destroy -target=module.azure-externaldns -var kubeconfig=${KUBECONFIG} --auto-approve || echo "No kubeconfig file"
220+
destroy-edns: select-workspace
221+
ls ${KUBECONFIG} && terraform destroy -target=module.externaldns -var kubeconfig=${KUBECONFIG} --auto-approve || echo "No kubeconfig file"
223222

224223
destroy-aks-issuer: select-workspace
225224
ls ${KUBECONFIG} && terraform destroy -target=module.azure-issuer -var kubeconfig=${KUBECONFIG} --auto-approve || echo "No kubeconfig file"

install/tests/main.tf

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,19 +68,22 @@ module "certmanager" {
6868
credentials = var.dns_sa_creds
6969
}
7070

71-
module "externaldns" {
71+
module "clouddns-externaldns" {
7272
# source = "github.com/gitpod-io/gitpod//install/infra/terraform/tools/external-dns?ref=main"
73-
source = "../infra/terraform/tools/external-dns"
73+
source = "../infra/terraform/tools/cloud-dns-external-dns"
7474
kubeconfig = var.kubeconfig
7575
credentials = var.dns_sa_creds
7676
}
7777

78-
module "azure-externaldns" {
79-
source = "../infra/terraform/tools/azure-external-dns"
80-
kubeconfig = var.kubeconfig
81-
settings = module.aks.external_dns_settings
78+
variable "cloud" { default = "azure" }
79+
80+
module "externaldns" {
81+
source = "../infra/terraform/tools/external-dns"
82+
kubeconfig = var.kubeconfig
83+
settings = module.aks.external_dns_settings
8284
domain_name = "${var.TEST_ID}.gitpod-self-hosted.com"
8385
txt_owner_id = var.TEST_ID
86+
cloud = var.cloud
8487
}
8588

8689
module "azure-issuer" {

0 commit comments

Comments
 (0)