Skip to content

Commit 4d75b29

Browse files
vulkoingimroboquat
authored andcommitted
Create preview env dns records using tf
1 parent feedcda commit 4d75b29

File tree

11 files changed

+72
-258
lines changed

11 files changed

+72
-258
lines changed

.werft/jobs/build/deploy-to-preview-environment.ts

Lines changed: 2 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,13 @@ import {
1414
installCertificate,
1515
InstallCertificateParams,
1616
} from "../../util/certs";
17-
import { sleep, env } from "../../util/util";
17+
import { env } from "../../util/util";
1818
import { CORE_DEV_KUBECONFIG_PATH, PREVIEW_K3S_KUBECONFIG_PATH } from "./const";
1919
import { Werft } from "../../util/werft";
2020
import { JobConfig } from "./job-config";
2121
import * as VM from "../../vm/vm";
2222
import { Analytics, Installer } from "./installer/installer";
2323
import { previewNameFromBranchName } from "../../util/preview";
24-
import { createDNSRecord } from "../../util/gcloud";
2524
import { SpanStatusCode } from "@opentelemetry/api";
2625

2726
// used by Installer
@@ -240,7 +239,7 @@ async function deployToDevWithInstaller(
240239
) {
241240
// to test this function, change files in your workspace, sideload (-s) changed files into werft or set annotations (-a) like so:
242241
// werft run github -f -j ./.werft/build.yaml -s ./.werft/build.ts -s ./.werft/jobs/build/installer/post-process.sh -a with-clean-slate-deployment=true
243-
const { version, destname, namespace, domain } = deploymentConfig;
242+
const { version, namespace } = deploymentConfig;
244243
const deploymentKubeconfig = PREVIEW_K3S_KUBECONFIG_PATH;
245244

246245
// find free ports
@@ -357,7 +356,6 @@ async function deployToDevWithInstaller(
357356
});
358357
werft.done(installerSlices.DEPLOYMENT_WAITING);
359358

360-
await addVMDNSRecord(werft, destname, domain);
361359
addAgentSmithToken(werft, deploymentConfig.namespace, installer.options.kubeconfigPath, tokenHash);
362360

363361
werft.done(phases.DEPLOY);
@@ -402,63 +400,6 @@ interface DeploymentConfig {
402400
withObservability: boolean;
403401
}
404402

405-
async function addVMDNSRecord(werft: Werft, name: string, domain: string) {
406-
const ingressIP = getHarvesterIngressIP();
407-
let proxyLBIP = null;
408-
werft.log(installerSlices.DNS_ADD_RECORD, "Getting loadbalancer IP");
409-
for (let i = 0; i < 60; i++) {
410-
try {
411-
let lb = exec(
412-
`kubectl --kubeconfig ${CORE_DEV_KUBECONFIG_PATH} -n loadbalancers get service lb-${name} -o=jsonpath='{.status.loadBalancer.ingress[0].ip}'`,
413-
{ silent: true },
414-
);
415-
if (lb.length > 4) {
416-
proxyLBIP = lb.toString();
417-
break;
418-
}
419-
await sleep(1000);
420-
} catch (err) {
421-
await sleep(1000);
422-
}
423-
}
424-
if (proxyLBIP == null) {
425-
werft.fail(installerSlices.DNS_ADD_RECORD, new Error("Can't get loadbalancer IP"));
426-
}
427-
werft.log(installerSlices.DNS_ADD_RECORD, "Get loadbalancer IP: " + proxyLBIP);
428-
429-
await Promise.all([
430-
createDNSRecord({
431-
domain: domain,
432-
projectId: "gitpod-core-dev",
433-
dnsZone: "preview-gitpod-dev-com",
434-
IP: ingressIP,
435-
slice: installerSlices.DNS_ADD_RECORD,
436-
}),
437-
createDNSRecord({
438-
domain: `*.${domain}`,
439-
projectId: "gitpod-core-dev",
440-
dnsZone: "preview-gitpod-dev-com",
441-
IP: ingressIP,
442-
slice: installerSlices.DNS_ADD_RECORD,
443-
}),
444-
createDNSRecord({
445-
domain: `*.ws.${domain}`,
446-
projectId: "gitpod-core-dev",
447-
dnsZone: "preview-gitpod-dev-com",
448-
IP: ingressIP,
449-
slice: installerSlices.DNS_ADD_RECORD,
450-
}),
451-
createDNSRecord({
452-
domain: `*.ssh.ws.${domain}`,
453-
projectId: "gitpod-core-dev",
454-
dnsZone: "preview-gitpod-dev-com",
455-
IP: proxyLBIP,
456-
slice: installerSlices.DNS_ADD_RECORD,
457-
}),
458-
]);
459-
werft.done(installerSlices.DNS_ADD_RECORD);
460-
}
461-
462403
async function installMetaCertificates(
463404
werft: Werft,
464405
branch: string,
@@ -475,11 +416,6 @@ async function installMetaCertificates(
475416
await installCertificate(werft, metaInstallCertParams, { ...metaEnv(), slice: slice });
476417
}
477418

478-
// returns the static IP address
479-
function getHarvesterIngressIP(): string {
480-
return "159.69.172.117";
481-
}
482-
483419
function metaEnv(_parent?: ExecOptions): ExecOptions {
484420
return env("", _parent);
485421
}

.werft/jobs/build/prepare.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ function createVM(werft: Werft, config: JobConfig) {
8989
// set some common vars for TF
9090
// We pass the GCP credentials explicitly, otherwise for some reason TF doesn't pick them up
9191
const commonVars = `GOOGLE_BACKEND_CREDENTIALS=${GCLOUD_SERVICE_ACCOUNT_PATH} \
92+
GOOGLE_APPLICATION_CREDENTIALS=${GCLOUD_SERVICE_ACCOUNT_PATH} \
9293
TF_VAR_dev_kube_path=${CORE_DEV_KUBECONFIG_PATH} \
9394
TF_VAR_harvester_kube_path=${HARVESTER_KUBECONFIG_PATH} \
9495
TF_VAR_preview_name=${config.previewEnvironment.destname} \

.werft/platform-delete-preview-environment.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ async function removePreviewEnvironment(previewEnvironment: PreviewEnvironment)
9090
werft.log(SLICES.DELETING_PREVIEW, `Starting deletion of all resources related to ${previewEnvironment.name}`);
9191
try {
9292
// We're running these promises sequentially to make it easier to read the log output.
93-
await previewEnvironment.removeDNSRecords(SLICES.DELETING_PREVIEW);
9493
await previewEnvironment.delete();
9594
werft.done(SLICES.DELETING_PREVIEW);
9695
} catch (e) {

.werft/util/certs.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export async function certReady(werft: Werft, config: JobConfig, slice: string):
2525
for (var i = 1;i<=maxAttempts;i++) {
2626
werft.log(slice, `Creating cert: Attempt ${i}`);
2727
exec(`GOOGLE_BACKEND_CREDENTIALS=${GCLOUD_SERVICE_ACCOUNT_PATH} \
28+
GOOGLE_APPLICATION_CREDENTIALS=${GCLOUD_SERVICE_ACCOUNT_PATH} \
2829
TF_VAR_dev_kube_path=${CORE_DEV_KUBECONFIG_PATH} \
2930
TF_VAR_harvester_kube_path=${HARVESTER_KUBECONFIG_PATH} \
3031
TF_VAR_preview_name=${config.previewEnvironment.destname} \

.werft/util/gcloud.ts

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

.werft/util/preview.ts

Lines changed: 0 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { createHash } from "crypto";
22
import { PREVIEW_K3S_KUBECONFIG_PATH } from "../jobs/build/const";
3-
import { deleteDNSRecord } from "./gcloud";
43
import * as VM from "../vm/vm";
54
import { exec } from "./shell";
65
import { Werft } from "./werft";
@@ -64,68 +63,6 @@ export class HarvesterPreviewEnvironment {
6463
VM.deleteVM({ name: this.name });
6564
}
6665

67-
async removeDNSRecords(sliceID: string) {
68-
this.werft.log(sliceID, "Deleting harvester related DNS records for the preview environment");
69-
await Promise.all([
70-
deleteDNSRecord(
71-
"A",
72-
`*.ssh.ws.${this.name}.preview.gitpod-dev.com`,
73-
"gitpod-core-dev",
74-
"preview-gitpod-dev-com",
75-
sliceID,
76-
),
77-
deleteDNSRecord(
78-
"A",
79-
`*.ws.${this.name}.preview.gitpod-dev.com`,
80-
"gitpod-core-dev",
81-
"preview-gitpod-dev-com",
82-
sliceID,
83-
),
84-
deleteDNSRecord(
85-
"A",
86-
`*.${this.name}.preview.gitpod-dev.com`,
87-
"gitpod-core-dev",
88-
"preview-gitpod-dev-com",
89-
sliceID,
90-
),
91-
deleteDNSRecord(
92-
"A",
93-
`${this.name}.preview.gitpod-dev.com`,
94-
"gitpod-core-dev",
95-
"preview-gitpod-dev-com",
96-
sliceID,
97-
),
98-
deleteDNSRecord(
99-
"A",
100-
`prometheus-${this.name}.preview.gitpod-dev.com`,
101-
"gitpod-core-dev",
102-
"preview-gitpod-dev-com",
103-
sliceID,
104-
),
105-
deleteDNSRecord(
106-
"TXT",
107-
`prometheus-${this.name}.preview.gitpod-dev.com`,
108-
"gitpod-core-dev",
109-
"preview-gitpod-dev-com",
110-
sliceID,
111-
),
112-
deleteDNSRecord(
113-
"A",
114-
`grafana-${this.name}.preview.gitpod-dev.com`,
115-
"gitpod-core-dev",
116-
"preview-gitpod-dev-com",
117-
sliceID,
118-
),
119-
deleteDNSRecord(
120-
"TXT",
121-
`grafana-${this.name}.preview.gitpod-dev.com`,
122-
"gitpod-core-dev",
123-
"preview-gitpod-dev-com",
124-
sliceID,
125-
),
126-
]);
127-
}
128-
12966
/**
13067
* Checks whether a preview environment is active based on the db activity.
13168
*

.werft/vm/vm.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export function deleteVM(options: { name: string }) {
1717

1818
try {
1919
exec(`DESTROY=true \
20+
GOOGLE_APPLICATION_CREDENTIALS=${GCLOUD_SERVICE_ACCOUNT_PATH} \
2021
GOOGLE_BACKEND_CREDENTIALS=${GCLOUD_SERVICE_ACCOUNT_PATH} \
2122
TF_VAR_dev_kube_path=${CORE_DEV_KUBECONFIG_PATH} \
2223
TF_VAR_harvester_kube_path=${HARVESTER_KUBECONFIG_PATH} \
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
data "google_dns_managed_zone" "preview-gitpod-dev" {
2+
provider = google
3+
name = "preview-gitpod-dev-com"
4+
}
5+
6+
resource "google_dns_record_set" "root" {
7+
provider = google
8+
9+
name = "${var.preview_name}.${data.google_dns_managed_zone.preview-gitpod-dev.dns_name}"
10+
type = "A"
11+
ttl = 300
12+
13+
managed_zone = data.google_dns_managed_zone.preview-gitpod-dev.name
14+
rrdatas = [var.harvester_ingress_ip]
15+
}
16+
17+
resource "google_dns_record_set" "root-wc" {
18+
provider = google
19+
20+
name = "*.${var.preview_name}.${data.google_dns_managed_zone.preview-gitpod-dev.dns_name}"
21+
type = "A"
22+
ttl = 300
23+
24+
managed_zone = data.google_dns_managed_zone.preview-gitpod-dev.name
25+
rrdatas = [var.harvester_ingress_ip]
26+
}
27+
28+
29+
resource "google_dns_record_set" "root-wc-ws" {
30+
provider = google
31+
32+
name = "*.ws.${var.preview_name}.${data.google_dns_managed_zone.preview-gitpod-dev.dns_name}"
33+
type = "A"
34+
ttl = 300
35+
36+
managed_zone = data.google_dns_managed_zone.preview-gitpod-dev.name
37+
rrdatas = [var.harvester_ingress_ip]
38+
}
39+
40+
41+
resource "google_dns_record_set" "root-wc-ws-ssh" {
42+
provider = google
43+
44+
name = "*.ssh.ws.${var.preview_name}.${data.google_dns_managed_zone.preview-gitpod-dev.dns_name}"
45+
type = "A"
46+
ttl = 300
47+
48+
managed_zone = data.google_dns_managed_zone.preview-gitpod-dev.name
49+
rrdatas = [kubernetes_service.dev-svc.status[0].load_balancer[0].ingress[0].ip]
50+
}

0 commit comments

Comments
 (0)