🌳
pt0/deployF/k8sF/initialSetupF/externaldns/doSyncExtDnsF.mts
1import * as _ from 'lodash-es'
12const thisDir = getMyDir(tsImportMetaUrl(import.meta.url))
13const kustPath = thisDir + '/kust'
15const deploymentTmpl = ({domainNames, secretName, cluster_name, extDnsPolicy = 'upsert-only'}: {domainNames?: string[], secretName?: string, cluster_name: string, extDnsPolicy?: string}) => {
16 const name = 'external-dns'
18 return {
19 apiVersion: "apps/v1",
20 kind: "Deployment",
21 metadata: {
22 name,
23 labels: {
24 cluster_name
25 }
26 },
27 spec: {
28 replicas: 1,
29 selector: {
30 matchLabels: {
31 name
32 }
33 },
34 strategy: {
35 type: "Recreate"
36 },
37 template: {
38 metadata: {
39 labels: {
40 name
41 }
42 },
43 spec: {
44 serviceAccountName: 'external-dns',
45 containers: [
46 {
47 name: "external-dns",
48 image: "registry.k8s.io/external-dns/external-dns:v0.15.1",
49 args: [
50 "--source=service",
51 "--source=ingress",
52 `--policy=${extDnsPolicy}`,
53 `--txt-owner-id=${cluster_name}`,
54 ..._.map(domainNames, (domain) => `--domain-filter=${domain}`),
55 "--provider=cloudflare"
56 ],
57 envFrom: [
58 {
59 secretRef: {
60 name: secretName
61 }
62 }
63 ],
64 }
65 ]
66 }
67 }
68 }
69 }
72export const k8sExtDns = async () => {
73 const {cluster_name, cfApiKeySecretName: secretName, domainNames, extDnsPolicy} = getKlusterCtx()
74 const action = getAction()
77 const resources = [
78 deploymentTmpl({domainNames, secretName, cluster_name, extDnsPolicy}),
79 secretEnvTemplate({name: secretName, kubeName: secretName}),
80 ]
81 await resourcesAction({resources, action})
83 await kubeApplyK({path: kustPath, cluster_name, replacementH: {}, action})