feat(external-dns): Add external-dns (#14351)

**Description**

Here goes nothing, working with the helm chart  and giving it a go lol
⚒️ Fixes  # <!--(issue)-->

**⚙️ Type of change**

- [x] ⚙️ Feature/App addition
- [ ] 🪛 Bugfix
- [ ] ⚠️ Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] 🔃 Refactor of current code

**🧪 How Has This Been Tested?**
<!--
Please describe the tests that you ran to verify your changes. Provide
instructions so we can reproduce. Please also list any relevant details
for your test configuration
-->

**📃 Notes:**
<!-- Please enter any other relevant information here -->

**✔️ Checklist:**

- [x] ⚖️ My code follows the style guidelines of this project
- [x] 👀 I have performed a self-review of my own code
- [x] #️⃣ I have commented my code, particularly in hard-to-understand
areas
- [x] 📄 I have made corresponding changes to the documentation
- [x] ⚠️ My changes generate no new warnings
- [x] 🧪 I have added tests to this description that prove my fix is
effective or that my feature works
- [x] ⬆️ I increased versions for any altered app according to semantic
versioning

** App addition**

If this PR is an app addition please make sure you have done the
following.

- [ ] 🪞 I have opened a PR on
[truecharts/containers](https://github.com/truecharts/containers) adding
the container to TrueCharts mirror repo.
- [x] 🖼️ I have added an icon in the Chart's root directory called
`icon.png`

---

_Please don't blindly check all the boxes. Read them and only check
those that apply.
Those checkboxes are there for the reviewer to see what is this all
about and
the status of this PR with a quick glance._

---------

Signed-off-by: Kjeld Schouten <kjeld@schouten-lebbing.nl>
Signed-off-by: Xstar97TheNoob <9399967+xstar97@users.noreply.github.com>
Signed-off-by: Stavros Kois <47820033+stavros-k@users.noreply.github.com>
Co-authored-by: Kjeld Schouten <kjeld@schouten-lebbing.nl>
Co-authored-by: Xstar97TheNoob <9399967+xstar97@users.noreply.github.com>
Co-authored-by: Stavros Kois <47820033+stavros-k@users.noreply.github.com>
Co-authored-by: Stavros kois <s.kois@outlook.com>
This commit is contained in:
StevenMcElligott
2023-11-06 04:00:04 -05:00
committed by GitHub
parent 80863e48d4
commit 72d9882cb8
10 changed files with 648 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
# OWNERS file for Kubernetes
OWNERS
# helm-docs templates
*.gotmpl
# docs folder
/docs
# icon
icon.png
@@ -0,0 +1 @@
# Changelog
+28
View File
@@ -0,0 +1,28 @@
apiVersion: v2
appVersion: "0.13.6"
dependencies:
- name: common
repository: https://library-charts.truecharts.org
version: 14.2.2
deprecated: false
description: API Support for your favorite torrent trackers.
home: https://truecharts.org/charts/incubator/external-dns
icon: https://truecharts.org/img/hotlink-ok/chart-icons/external-dns.png
keywords:
- external-dns
- k8s
- kubernetes
kubeVersion: ">=1.16.0-0"
maintainers:
- email: info@truecharts.org
name: TrueCharts
url: https://truecharts.org
name: external-dns
sources:
- https://github.com/truecharts/charts/tree/master/charts/incubator/external-dns/
- https://github.com/kubernetes-sigs/external-dns
type: application
version: 0.0.1
annotations:
truecharts.org/category: networking
truecharts.org/SCALE-support: "true"
+27
View File
@@ -0,0 +1,27 @@
# README
## General Info
TrueCharts can be installed as both *normal* Helm Charts or as Apps on TrueNAS SCALE.
However only installations using the TrueNAS SCALE Apps system are supported.
For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/)
**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)**
## Support
- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro).
- See the [Website](https://truecharts.org)
- Check our [Discord](https://discord.gg/tVsPTHWTtr)
- Open a [issue](https://github.com/truecharts/charts/issues/new/choose)
---
## Sponsor TrueCharts
TrueCharts can only exist due to the incredible effort of our staff.
Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can!
*All Rights Reserved - The TrueCharts Project*
Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

@@ -0,0 +1,352 @@
# Include{groups}
portals:
open:
# Include{portalLink}
questions:
# Include{global}
# Include{workload}
# Include{workloadDeployment}
# Include{replicas1}
# Include{podSpec}
# Include{containerMain}
- variable: env
label: "Provider Credentials"
schema:
additional_attrs: true
type: dict
attrs:
- variable: CF_API_KEY
label: Cloudflare API Key
description: Cloudflare API Key if not using the preferred API Token
schema:
type: string
show_if: [["provider", "=", "cloudflare"]]
default: ""
- variable: CF_API_EMAIL
label: Cloudflare API Email
description: Cloudflare API email if not using the preferred API Token
schema:
type: string
show_if: [["provider", "=", "cloudflare"]]
default: ""
- variable: DO_TOKEN
label: Digitalocean API Key
description: Needed for read / write access on Digitalocean
schema:
type: string
default: ""
- variable: DNSSIMPLE_OAUTH
label: DNS Simple OAUTH Key
description:
schema:
type: string
show_if: [["provider", "=", "dnsimple"]]
default: ""
- variable: LINODE_TOKEN
label: Linode PI Key
description: Needed for read / write access on Linode
schema:
type: string
show_if: [["provider", "=", "linode"]]
default: ""
- variable: OVH_APPLICATION_KEY
label: OVH Application Key
description: OVH Application Key
schema:
type: string
show_if: [["provider", "=", "ovh"]]
default: ""
- variable: OVH_APPLICATION_SECRET
label: OVH Application Secret
description: OVH Application Secret
schema:
type: string
default: ""
- variable: OVH_CONSUMER_KEY
label: OVH Consumer Key
description: Your OVH Consumer key after validated link
schema:
type: string
show_if: [["provider", "=", "ovh"]]
default: ""
- variable: SCW_ACCESS_KEY
label: Scaleway Access Key
description: Your Scaleway Access Key
schema:
type: string
show_if: [["provider", "=", "scaleway"]]
default: ""
- variable: SCW_SECRET_KEY
label: Scaleway Secret Key
description: Your Scaleway Secret Key
schema:
type: string
show_if: [["provider", "=", "scaleway"]]
default: ""
# Include{containerBasic}
# Include{containerAdvanced}
# Include{containerConfig}
- variable: externaldns
group: App Configuration
label: External-DNS Configuration
schema:
additional_attrs: true
type: dict
attrs:
- variable: logLevel
label: Log Verbosity Level
description: How description the logs are, from info to debug.
schema:
type: string
required: true
default: info
enum:
- value: info
description: info
- value: warning
description: warning
- value: error
description: error
- value: panic
description: panic
- value: debug
description: debug
- value: fatal
description: fatal
- variable: logFormat
label: Log Foramt
description: Output logs in either text or Json
schema:
type: string
default: text
enum:
- value: text
description: text
- value: json
description: json
- variable: interval
label: The interval for DNS updates.
description: How often the DNS will you update your DNS records
schema:
type: string
default: 1m
- variable: provider
label: Provider
description: Provider where the upstream DNS records will be created, eg Cloudflare, Digitalocean or things such as pihole. Some providers need additional args set when using them, please refer to upstream documentation for their usage.
schema:
type: string
required: true
default: cloudflare
enum:
- value: akamai
description: akamai
- value: alibabacloud
description: alibabacloud
- value: aws
description: aws
- value: aws-sd
description: aws-sd
- value: azure
description: azure
- value: azure-dns
description: azure-dns
- value: azure-private-dns
description: azure-private-dns
- value: bluecat
description: bluecat
- value: civo
description: civo
- value: cloudflare
description: cloudflare
- value: coredns
description: coredns
- value: designate
description: designate
- value: digitalocean
description: digitalocean
- value: dnsimple
description: dnsimple
- value: dyn
description: dyn
- value: exoscale
description: exoscale
- value: gandi
description: gandi
- value: godaddy
description: godaddy
- value: google
description: google
- value: ibmcloud
description: ibmcloud
- value: infoblox
description: infoblox
- value: inmemory
description: inmemory
- value: linode
description: linode
- value: ns1
description: ns1
- value: oci
description: oci
- value: pdns
description: pdns
- value: pihole
description: pihole
- value: plural
description: plural
- value: rcodezero
description: rcodezero
- value: rdns
description: rdns
- value: rfc2136
description: rfc2136
- value: safedns
description: safedns
- value: scaleway
description: scaleway
- value: skydns
description: skydns
- value: tencentcloud
description: tencentcloud
- value: transip
description: transip
- value: ultradns
description: ultradns
- value: vinyldns
description: vinyldns
- value: vultr
description: vultr
- variable: sources
label: "Sources"
schema:
type: list
default: ["ingress"]
items:
- variable: source
label: source
schema:
type: string
required: true
default: ingress
enum:
- value: ingress
description: ingress
- value: service
description: service
- variable: domainFilters
label: Domain Filters
description: Limit possible target zones by domain suffixes.
schema:
type: list
default: []
items:
- variable: domainFilterEntry
label: Domain Filter Entry
schema:
type: string
default: ""
required: true
- variable: zoneidFilters
label: Cloudflare DNS Zone Filter (optional)
description: Limit possible target zones by zone IDs. (Optional)
schema:
type: list
show_if: [["provider", "=", "cloudflare"]]
default: []
items:
- variable: zoneidFilterEntry
label: Zone ID Filter Entry
schema:
type: string
default: ""
required: true
- variable: registry
label: Registry Type
description: Available registry types are txt, noop
schema:
type: string
default: txt
enum:
- value: txt
description: text
- value: noop
description: noop
- variable: policy
label: DNS Synchronization Policy
description: How DNS records are synchronized between sources and providers
schema:
type: string
default: upsert-only
enum:
- value: upsert-only
description: upsert-only
- value: sync
description: sync
- variable: txtOwnerId
label: txt Owner Id
description: TXT registry identifier.
schema:
type: string
default: ""
- variable: txtPrefix
label: txtPrefix
description: Prefix to create a TXT record with a name following the pattern prefix.<CNAME record>
schema:
type: string
default: ""
- variable: txtSuffix
label: txtSuffix
description: TXT Suffix to attach
schema:
type: string
default: ""
- variable: piholeServer
label: Pi-Hole Server Address
description: Actual adresss/FQDN of your Pi-Hole install, such as pihole-web.pihole.svc.cluster.local,
schema:
type: string
show_if: [["provider", "=", "pihole"]]
default: ""
- variable: piholePassword
label: Pi-Hole Server Passowrd
description: Password for Pi-Hole
schema:
type: string
show_if: [["provider", "=", "pihole"]]
private: true
default: ""
# Include{podOptions}
# Include{serviceExpertRoot}
# Include{serviceExpert}
# Include{serviceList}
# Include{persistenceList}
# Include{ingressList}
# Include{securityContextRoot}
- variable: runAsUser
label: "runAsUser"
description: "The UserID of the user running the application"
schema:
type: int
default: 568
- variable: runAsGroup
label: "runAsGroup"
description: "The groupID of the user running the application"
schema:
type: int
default: 568
# Include{securityContextContainer}
# Include{securityContextAdvanced}
# Include{securityContextPod}
- variable: fsGroup
label: "fsGroup"
description: "The group that should own ALL storage."
schema:
type: int
default: 568
# Include{resources}
# Include{advanced}
# Include{addons}
# Include{codeserver}
# Include{netshoot}
# Include{vpn}
# Include{documentation}
@@ -0,0 +1 @@
{{- include "tc.v1.common.lib.chart.notes" $ -}}
@@ -0,0 +1,50 @@
{{- define "externaldns.args" -}}
args:
{{- with .Values.externaldns.provider }}
- --provider={{ . }}
{{- end -}}
{{- with .Values.externaldns.zoneidFilters }}
- --zone-id-filter={{ . }}
{{- end -}}
{{- with .Values.externaldns.cloudflareProxied }}
- --cloudflare-proxied={{ . }}
{{- end }}
- --log-level={{ .Values.externaldns.logLevel }}
- --log-format={{ .Values.externaldns.logFormat }}
- --interval={{ .Values.externaldns.interval }}
{{- if .Values.externaldns.triggerLoopOnEvent }}
- --events
{{- end -}}
{{- range .Values.externaldns.sources }}
- --source={{ . }}
{{- end -}}
{{- with .Values.externaldns.policy }}
- --policy={{ . }}
{{- end -}}
{{- with .Values.externaldns.registry }}
- --registry={{ . }}
{{- end -}}
{{- with .Values.externaldns.txtOwnerId }}
- --txt-owner-id={{ . }}
{{- end -}}
{{- with .Values.externaldns.txtPrefix }}
- --txt-prefix={{ . }}
{{- end -}}
{{- if and (eq .Values.externaldns.txtPrefix "") (ne .Values.externaldns.txtSuffix "") }}
- --txt-suffix={{ .Values.externaldns.txtSuffix }}
{{- end -}}
{{- if .Values.externaldns.namespaced }}
- --namespace={{ include "tc.v1.common.lib.metadata.namespace" (dict "caller" "External-DNS" "rootCtx" $ "objectData" .Values) }}
{{- end -}}
{{- with .Values.externaldns.domainFilter }}
{{- range . -}}
- --domain-filter={{ . }}
{{- end -}}
{{- end -}}
{{- with .Values.externaldns.piholeServer }}
- --pihole-server={{ . }}
{{- end -}}
{{- with .Values.externaldns.piholePassword }}
- --pihole-password={{ . }}
{{- end -}}
{{- end -}}
@@ -0,0 +1,9 @@
{{/* Make sure all variables are set properly */}}
{{- include "tc.v1.common.loader.init" . }}
{{- $newArgs := (include "externaldns.args" . | fromYaml) }}
{{- $args := concat ((get .Values.workload.main.podSpec.containers.main "args") | default list) $newArgs.args }}
{{- $_ := set .Values.workload.main.podSpec.containers.main "args" $args -}}
{{/* Render the templates */}}
{{ include "tc.v1.common.loader.apply" . }}
+150
View File
@@ -0,0 +1,150 @@
image:
repository: tccr.io/truecharts/external-dns
pullPolicy: IfNotPresent
tag: v0.13.6@sha256:78c942addf7fbc79c384e55bed9a886706c748d744cedf6214d4a50dd7b76d54
externaldns:
logLevel: "info"
logFormat: "text"
interval: "1m"
provider: "inmemory"
sources:
- "service"
- "ingress"
domainFilters: []
zoneidFilters: []
cloudflareProxied: ""
registry: "txt"
policy: ""
piholeServer: ""
piholePassword: ""
triggerLoopOnEvent: "false"
txtOwnerId: ""
txtPrefix: ""
txtSuffix: ""
service:
main:
ports:
main:
protocol: http
targetPort: 7979
port: 7979
workload:
main:
podSpec:
containers:
main:
probes:
liveness:
path: "/healthz"
readiness:
path: "/healthz"
startup:
path: "/healthz"
env:
CF_API_KEY: ""
CF_API_EMAIL: ""
DO_TOKEN: ""
DNSIMPLE_OAUTH: ""
LINODE_TOKEN: ""
OVH_APPLICATION_KEY: ""
OVH_APPLICATION_SECRET: ""
OVH_CONSUMER_KEY: ""
SCW_ACCESS_KEY: ""
SCW_SECRET_KEY: ""
# -- Whether Role Based Access Control objects like roles and rolebindings should be created
rbac:
main:
enabled: true
primary: true
clusterWide: true
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["list","watch"]
- apiGroups: [""]
resources: ["pods"]
verbs: ["get","watch","list"]
- apiGroups: [""]
resources: ["services","endpoints"]
verbs: ["get","watch","list"]
- apiGroups: ["extensions","networking.k8s.io"]
resources: ["ingresses"]
verbs: ["get","watch","list"]
- apiGroups: ["networking.istio.io"]
resources: ["gateways"]
verbs: ["get","watch","list"]
- apiGroups: ["networking.istio.io"]
resources: ["virtualservices"]
verbs: ["get","watch","list"]
- apiGroups: ["getambassador.io"]
resources: ["hosts","ingresses"]
verbs: ["get","watch","list"]
- apiGroups: ["projectcontour.io"]
resources: ["httpproxies"]
verbs: ["get","watch","list"]
- apiGroups: ["externaldns.k8s.io"]
resources: ["dnsendpoints"]
verbs: ["get","watch","list"]
- apiGroups: ["externaldns.k8s.io"]
resources: ["dnsendpoints/status"]
verbs: ["*"]
- apiGroups: ["gateway.networking.k8s.io"]
resources: ["gateways"]
verbs: ["get","watch","list"]
- apiGroups: ["gateway.networking.k8s.io"]
resources: ["httproutes"]
verbs: ["get","watch","list"]
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get","watch","list"]
- apiGroups: ["gateway.networking.k8s.io"]
resources: ["grpcroutes"]
verbs: ["get","watch","list"]
- apiGroups: ["gateway.networking.k8s.io"]
resources: ["tlsroutes"]
verbs: ["get","watch","list"]
- apiGroups: ["gateway.networking.k8s.io"]
resources: ["tcproutes"]
verbs: ["get","watch","list"]
- apiGroups: ["gateway.networking.k8s.io"]
resources: ["udproutes"]
verbs: ["get","watch","list"]
- apiGroups: ["gloo.solo.io","gateway.solo.io"]
resources: ["proxies","virtualservices"]
verbs: ["get","watch","list"]
- apiGroups: ["configuration.konghq.com"]
resources: ["tcpingresses"]
verbs: ["get","watch","list"]
- apiGroups: ["traefik.containo.us", "traefik.io"]
resources: ["ingressroutes", "ingressroutetcps", "ingressrouteudps"]
verbs: ["get","watch","list"]
- apiGroups: ["route.openshift.io"]
resources: ["routes"]
verbs: ["get","watch","list"]
- apiGroups: ["zalando.org"]
resources: ["routegroups"]
verbs: ["get","watch","list"]
- apiGroups: ["zalando.org"]
resources: ["routegroups/status"]
verbs: ["patch","update"]
- apiGroups: ["cis.f5.com"]
resources: ["virtualservers"]
verbs: ["get","watch","list"]
# -- The service account the pods will use to interact with the Kubernetes API
serviceAccount:
main:
enabled: true
primary: true
podOptions:
automountServiceAccountToken: true
portal:
open:
enabled: false