From cfbaf325cd40fc5eec1b2267b40e0205af3fc6ce Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Tue, 7 Nov 2023 16:20:09 +0000 Subject: [PATCH] Commit new Chart releases for TrueCharts Signed-off-by: TrueCharts-Bot --- enterprise/external-dns/1.0.0/CHANGELOG.md | 13 + enterprise/external-dns/1.0.0/Chart.yaml | 28 + enterprise/external-dns/1.0.0/README.md | 27 + .../external-dns/1.0.0/app-changelog.md | 9 + enterprise/external-dns/1.0.0/app-readme.md | 8 + .../1.0.0/charts/common-14.2.3.tgz | Bin 0 -> 72396 bytes enterprise/external-dns/1.0.0/ix_values.yaml | 150 ++ enterprise/external-dns/1.0.0/questions.yaml | 2001 +++++++++++++++++ .../external-dns/1.0.0/templates/NOTES.txt | 1 + .../external-dns/1.0.0/templates/_args.tpl | 50 + .../external-dns/1.0.0/templates/common.yaml | 9 + enterprise/external-dns/1.0.0/values.yaml | 0 enterprise/external-dns/item.yaml | 4 + 13 files changed, 2300 insertions(+) create mode 100644 enterprise/external-dns/1.0.0/CHANGELOG.md create mode 100644 enterprise/external-dns/1.0.0/Chart.yaml create mode 100644 enterprise/external-dns/1.0.0/README.md create mode 100644 enterprise/external-dns/1.0.0/app-changelog.md create mode 100644 enterprise/external-dns/1.0.0/app-readme.md create mode 100644 enterprise/external-dns/1.0.0/charts/common-14.2.3.tgz create mode 100644 enterprise/external-dns/1.0.0/ix_values.yaml create mode 100644 enterprise/external-dns/1.0.0/questions.yaml create mode 100644 enterprise/external-dns/1.0.0/templates/NOTES.txt create mode 100644 enterprise/external-dns/1.0.0/templates/_args.tpl create mode 100644 enterprise/external-dns/1.0.0/templates/common.yaml create mode 100644 enterprise/external-dns/1.0.0/values.yaml create mode 100644 enterprise/external-dns/item.yaml diff --git a/enterprise/external-dns/1.0.0/CHANGELOG.md b/enterprise/external-dns/1.0.0/CHANGELOG.md new file mode 100644 index 0000000000..93de75f7c6 --- /dev/null +++ b/enterprise/external-dns/1.0.0/CHANGELOG.md @@ -0,0 +1,13 @@ +**Important:** +*for the complete changelog, please refer to the website* + + + + +## [external-dns-1.0.0](https://github.com/truecharts/charts/compare/external-dns-0.0.5...external-dns-1.0.0) (2023-11-07) + +### Feat + +- Move to Enterprise + add Docs ([#14426](https://github.com/truecharts/charts/issues/14426)) + + \ No newline at end of file diff --git a/enterprise/external-dns/1.0.0/Chart.yaml b/enterprise/external-dns/1.0.0/Chart.yaml new file mode 100644 index 0000000000..ac5632e490 --- /dev/null +++ b/enterprise/external-dns/1.0.0/Chart.yaml @@ -0,0 +1,28 @@ +apiVersion: v2 +appVersion: "0.13.6" +dependencies: + - name: common + repository: https://library-charts.truecharts.org + version: 14.2.3 +deprecated: false +description: ExternalDNS synchronizes exposed Kubernetes Services and Ingresses with DNS providers. +home: https://truecharts.org/charts/enterprise/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/enterprise/external-dns + - https://github.com/kubernetes-sigs/external-dns +type: application +version: 1.0.0 +annotations: + truecharts.org/category: networking + truecharts.org/SCALE-support: "true" diff --git a/enterprise/external-dns/1.0.0/README.md b/enterprise/external-dns/1.0.0/README.md new file mode 100644 index 0000000000..83229a6026 --- /dev/null +++ b/enterprise/external-dns/1.0.0/README.md @@ -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/incubator/) + +**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* diff --git a/enterprise/external-dns/1.0.0/app-changelog.md b/enterprise/external-dns/1.0.0/app-changelog.md new file mode 100644 index 0000000000..f5ce049c87 --- /dev/null +++ b/enterprise/external-dns/1.0.0/app-changelog.md @@ -0,0 +1,9 @@ + + +## [external-dns-1.0.0](https://github.com/truecharts/charts/compare/external-dns-0.0.5...external-dns-1.0.0) (2023-11-07) + +### Feat + +- Move to Enterprise + add Docs ([#14426](https://github.com/truecharts/charts/issues/14426)) + + \ No newline at end of file diff --git a/enterprise/external-dns/1.0.0/app-readme.md b/enterprise/external-dns/1.0.0/app-readme.md new file mode 100644 index 0000000000..6ba00d1a96 --- /dev/null +++ b/enterprise/external-dns/1.0.0/app-readme.md @@ -0,0 +1,8 @@ +ExternalDNS synchronizes exposed Kubernetes Services and Ingresses with DNS providers. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/enterprise/external-dns](https://truecharts.org/charts/enterprise/external-dns) + +--- + +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! diff --git a/enterprise/external-dns/1.0.0/charts/common-14.2.3.tgz b/enterprise/external-dns/1.0.0/charts/common-14.2.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..03b3f5a1a3cc6385d534aa15217d5bf54ab1b271 GIT binary patch literal 72396 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

Iv+~XZ-pzlL9l#?KO5FjPRi?wt>(jsI1o7ee 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 literal 0 HcmV?d00001 diff --git a/enterprise/external-dns/1.0.0/ix_values.yaml b/enterprise/external-dns/1.0.0/ix_values.yaml new file mode 100644 index 0000000000..304d404972 --- /dev/null +++ b/enterprise/external-dns/1.0.0/ix_values.yaml @@ -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_TOKEN: "" + 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 diff --git a/enterprise/external-dns/1.0.0/questions.yaml b/enterprise/external-dns/1.0.0/questions.yaml new file mode 100644 index 0000000000..f163290989 --- /dev/null +++ b/enterprise/external-dns/1.0.0/questions.yaml @@ -0,0 +1,2001 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + - variable: env + label: "Provider Specific Credentials - Main Config Below" + schema: + additional_attrs: true + type: dict + attrs: + - variable: CF_API_TOKEN + label: Cloudflare API Token (preferred) + description: Cloudflare API Token, optimal when using with Cloudflare + schema: + type: string + default: "" + - variable: CF_API_KEY + label: Cloudflare API Key + description: Cloudflare API Key if not using the preferred API Token + schema: + type: string + default: "" + - variable: CF_API_EMAIL + label: Cloudflare API Email + description: Cloudflare API email if not using the preferred API Token + schema: + type: string + 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 + default: "" + - variable: LINODE_TOKEN + label: Linode PI Key + description: Needed for read / write access on Linode + schema: + type: string + default: "" + - variable: OVH_APPLICATION_KEY + label: OVH Application Key + description: OVH Application Key + schema: + type: string + 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 + default: "" + - variable: SCW_ACCESS_KEY + label: Scaleway Access Key + description: Your Scaleway Access Key + schema: + type: string + default: "" + - variable: SCW_SECRET_KEY + label: Scaleway Secret Key + description: Your Scaleway Secret Key + schema: + type: string + default: "" + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + - variable: TZ + label: Timezone + group: "General Settings" + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + - 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 Format + 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: 5m + - 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: noop + 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. + 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: "" + - variable: podOptions + group: "General Settings" + label: "Global Pod Options (Advanced)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: expertPodOpts + label: "Expert - Pod Options" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostNetwork + label: "Host Networking" + schema: + type: boolean + default: false + - variable: dnsConfig + label: "DNS Configuration" + schema: + type: dict + additional_attrs: true + attrs: + - variable: options + label: "Options" + schema: + type: list + default: [{"name": "ndots", "value": "1"}] + items: + - variable: optionsEntry + label: "Option Entry" + schema: + type: dict + additional_attrs: true + attrs: + - variable: name + label: "Name" + schema: + type: string + required: true + - variable: value + label: "Value" + schema: + type: string + - variable: nameservers + label: "Nameservers" + schema: + type: list + default: [] + items: + - variable: nsEntry + label: "Nameserver Entry" + schema: + type: string + required: true + - variable: searches + label: "Searches" + schema: + type: list + default: [] + items: + - variable: searchEntry + label: "Search Entry" + schema: + type: string + required: true + - variable: serviceexpert + group: Networking and Services + label: Show Expert Config + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: scaleExternalInterface + description: Add External Interfaces + label: Add external Interfaces + group: Networking + schema: + type: list + items: + - variable: interfaceConfiguration + description: Interface Configuration + label: Interface Configuration + schema: + additional_attrs: true + type: dict + $ref: + - "normalize/interfaceConfiguration" + attrs: + - variable: hostInterface + description: Please Specify Host Interface + label: Host Interface + schema: + type: string + required: true + $ref: + - "definitions/interface" + - variable: ipam + description: Define how IP Address will be managed + label: IP Address Management + schema: + additional_attrs: true + type: dict + required: true + attrs: + - variable: type + description: Specify type for IPAM + label: IPAM Type + schema: + type: string + required: true + enum: + - value: dhcp + description: Use DHCP + - value: static + description: Use Static IP + - variable: staticIPConfigurations + label: Static IP Addresses + schema: + type: list + show_if: [["type", "=", "static"]] + items: + - variable: staticIP + label: Static IP + schema: + type: ipaddr + cidr: true + - variable: staticRoutes + label: Static Routes + schema: + type: list + show_if: [["type", "=", "static"]] + items: + - variable: staticRouteConfiguration + label: Static Route Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: destination + label: Destination + schema: + type: ipaddr + cidr: true + required: true + - variable: gateway + label: Gateway + schema: + type: ipaddr + cidr: false + required: true + - variable: serviceList + label: Add Manual Custom Services + group: Networking and Services + schema: + type: list + default: [] + items: + - variable: serviceListEntry + label: Custom Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the service + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + - value: Simple + description: Deprecated CHANGE THIS + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: advancedsvcset + label: Show Advanced Service Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: Specify the IP Policy + schema: + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: IP Families + description: (Advanced) The IP Families that should be used + schema: + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: portsList + label: Additional Service Ports + schema: + type: list + default: [] + items: + - variable: portsListEntry + label: Custom ports + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Port + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Port Name + schema: + type: string + default: "" + - variable: protocol + label: Port Type + schema: + type: string + default: tcp + enum: + - value: http + description: HTTP + - value: https + description: HTTPS + - value: tcp + description: TCP + - value: udp + description: UDP + - variable: targetPort + label: Target Port + description: This port exposes the container port on the service + schema: + type: int + required: true + - variable: port + label: Container Port + schema: + type: int + required: true + - variable: persistenceList + label: Additional App Storage + group: Storage and Persistence + schema: + type: list + default: [] + items: + - variable: persistenceListEntry + label: Custom Storage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the storage + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: hostPath + enum: + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: emptyDir + description: emptyDir + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: autoPermissions + label: Automatic Permissions Configuration + description: Automatically set permissions + schema: + show_if: [["type", "!=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: chown + label: Run CHOWN + description: | + It will run CHOWN on the path with the given fsGroup + schema: + type: boolean + default: false + - variable: chmod + label: Run CHMOD + description: | + It will run CHMOD on the path with the given value
+ Format should be 3 digits, e.g. 770 + schema: + type: string + valid_chars: '[0-9]{3}' + default: "" + - variable: recursive + label: Recursive + description: | + It will run CHOWN and CHMOD recursively + schema: + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: mountPath + label: Mount Path + description: Path inside the container the storage is mounted + schema: + type: string + default: "" + required: true + valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size Quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: ingressList + label: Add Manual Custom Ingresses + group: Ingress + schema: + type: list + default: [] + items: + - variable: ingressListEntry + label: Custom Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: allowCors + label: "Allow Cross Origin Requests" + schema: + type: boolean + show_if: [["advanced", "=", true]] + default: false + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: service + label: Linked Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Service Name + schema: + type: string + default: "" + - variable: port + label: Service Port + schema: + type: int + - variable: certificateIssuer + label: certificateIssuer + description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates. Cannot be used combined with tls option below' + schema: + type: string + default: "" + - variable: tls + label: TLS-Settings + schema: + type: list + default: [] + show_if: [["certificateIssuer", "=", ""]] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + - variable: certificateIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: scaleCert + label: Use TrueNAS SCALE Certificate (Deprecated) + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - variable: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: Use Custom Secret (Advanced) + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: entrypoint + label: Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: securityContext + group: Security and Permissions + label: Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: container + label: Container + schema: + additional_attrs: true + type: dict + attrs: + # Settings from questions.yaml get appended here on a per-app basis + - 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 + # Settings from questions.yaml get appended here on a per-app basis + - variable: PUID + label: Process User ID - PUID + description: When supported by the container, this sets the User ID running the Application Process. Not supported by all Apps + schema: + type: int + show_if: [["runAsUser", "=", 0]] + default: 568 + - variable: UMASK + label: UMASK + description: When supported by the container, this sets the UMASK for the App. Not supported by all Apps + schema: + type: string + default: "0022" + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: true + - variable: pod + label: Pod + schema: + additional_attrs: true + type: dict + attrs: + - variable: fsGroupChangePolicy + label: "When should we take ownership?" + schema: + type: string + default: OnRootMismatch + enum: + - value: OnRootMismatch + description: OnRootMismatch + - value: Always + description: Always + - variable: supplementalGroups + label: Supplemental Groups + schema: + type: list + default: [] + items: + - variable: supplementalGroupsEntry + label: Supplemental Group + schema: + type: int + # Settings from questions.yaml get appended here on a per-app basis + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 + - variable: resources + group: Resources and Devices + label: "Resource Limits" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 4000m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: RAM + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: requests + label: "Minimum Resources Required (request)" + schema: + additional_attrs: true + type: dict + hidden: true + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 10m + hidden: true + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "RAM" + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 50Mi + hidden: true + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: deviceList + label: Mount USB Devices + group: Resources and Devices + schema: + type: list + default: [] + items: + - variable: deviceListEntry + label: Device + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Storage + schema: + type: boolean + default: true + - variable: type + label: (Advanced) Type of Storage + description: Sets the persistence type + schema: + type: string + default: device + hidden: true + - variable: readOnly + label: readOnly + schema: + type: boolean + default: false + - variable: hostPath + label: Host Device Path + description: Path to the device on the host system + schema: + type: path + - variable: mountPath + label: Container Device Path + description: Path inside the container the device is mounted + schema: + type: string + default: "/dev/ttyACM0" + - variable: scaleGPU + label: GPU Configuration + group: Resources and Devices + schema: + type: list + default: [] + items: + - variable: scaleGPUEntry + label: GPU + schema: + additional_attrs: true + type: dict + attrs: + # Specify GPU configuration + - variable: gpu + label: Select GPU + schema: + additional_attrs: true + type: dict + $ref: + - "definitions/gpuConfiguration" + attrs: [] + - variable: workaround + label: "Workaround" + schema: + type: string + default: workaround + hidden: true +# - variable: horizontalPodAutoscaler +# group: Advanced +# label: (Advanced) Horizontal Pod Autoscaler +# schema: +# type: list +# default: [] +# items: +# - variable: hpaEntry +# label: HPA Entry +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: name +# label: Name +# schema: +# type: string +# required: true +# default: "" +# - variable: enabled +# label: Enabled +# schema: +# type: boolean +# default: false +# show_subquestions_if: true +# subquestions: +# - variable: target +# label: Target +# description: Deployment name, Defaults to Main Deployment +# schema: +# type: string +# default: "" +# - variable: minReplicas +# label: Minimum Replicas +# schema: +# type: int +# default: 1 +# - variable: maxReplicas +# label: Maximum Replicas +# schema: +# type: int +# default: 5 +# - variable: targetCPUUtilizationPercentage +# label: Target CPU Utilization Percentage +# schema: +# type: int +# default: 80 +# - variable: targetMemoryUtilizationPercentage +# label: Target Memory Utilization Percentage +# schema: +# type: int +# default: 80 + - variable: networkPolicy + group: Advanced + label: (Advanced) Network Policy + schema: + type: list + default: [] + items: + - variable: netPolicyEntry + label: Network Policy Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + default: "" + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: policyType + label: Policy Type + schema: + type: string + default: "" + enum: + - value: "" + description: Default + - value: ingress + description: Ingress + - value: egress + description: Egress + - value: ingress-egress + description: Ingress and Egress + - variable: egress + label: Egress + schema: + type: list + default: [] + items: + - variable: egressEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: to + label: To + schema: + type: list + default: [] + items: + - variable: toEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: ipBlock + label: IP Block + schema: + additional_attrs: true + type: dict + attrs: + - variable: cidr + label: CIDR + schema: + type: string + default: "" + - variable: except + label: Except + schema: + type: list + default: [] + items: + - variable: exceptint + label: "" + schema: + type: string + - variable: namespaceSelector + label: Namespace Selector + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: podSelector + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: ports + label: Ports + schema: + type: list + default: [] + items: + - variable: portsEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + - variable: endPort + label: End Port + schema: + type: int + - variable: protocol + label: Protocol + schema: + type: string + default: TCP + enum: + - value: TCP + description: TCP + - value: UDP + description: UDP + - value: SCTP + description: SCTP + - variable: ingress + label: Ingress + schema: + type: list + default: [] + items: + - variable: ingressEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: from + label: From + schema: + type: list + default: [] + items: + - variable: fromEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: ipBlock + label: IP Block + schema: + additional_attrs: true + type: dict + attrs: + - variable: cidr + label: CIDR + schema: + type: string + default: "" + - variable: except + label: Except + schema: + type: list + default: [] + items: + - variable: exceptint + label: "" + schema: + type: string + - variable: namespaceSelector + label: Namespace Selector + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: podSelector + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: ports + label: Ports + schema: + type: list + default: [] + items: + - variable: portsEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + - variable: endPort + label: End Port + schema: + type: int + - variable: protocol + label: Protocol + schema: + type: string + default: TCP + enum: + - value: TCP + description: TCP + - value: UDP + description: UDP + - value: SCTP + description: SCTP + - variable: addons + group: Addons + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: Codeserver + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: service + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: NodePort + description: Deprecated CHANGE THIS + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: ports + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + default: 36107 + - variable: envList + label: Codeserver Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: netshoot + label: Netshoot + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: envList + label: Netshoot Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: vpn + label: VPN + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type + schema: + type: string + default: disabled + enum: + - value: disabled + description: disabled + - value: gluetun + description: Gluetun + - value: tailscale + description: Tailscale + - value: openvpn + description: OpenVPN (Deprecated) + - value: wireguard + description: Wireguard (Deprecated) + - variable: openvpn + label: OpenVPN Settings + schema: + additional_attrs: true + type: dict + show_if: [["type", "=", "openvpn"]] + attrs: + - variable: username + label: Authentication Username (Optional) + description: Authentication Username, Optional + schema: + type: string + default: "" + - variable: password + label: Authentication Password + description: Authentication Credentials + schema: + type: string + show_if: [["username", "!=", ""]] + default: "" + required: true + - variable: tailscale + label: Tailscale Settings + schema: + additional_attrs: true + type: dict + show_if: [["type", "=", "tailscale"]] + attrs: + - variable: authkey + label: Authentication Key + description: Provide an auth key to automatically authenticate the node as your user account. + schema: + type: string + private: true + default: "" + - variable: auth_once + label: Auth Once + description: Only attempt to log in if not already logged in. + schema: + type: boolean + default: true + - variable: accept_dns + label: Accept DNS + description: Accept DNS configuration from the admin console. + schema: + type: boolean + default: false + - variable: userspace + label: Userspace + description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. + schema: + type: boolean + default: false + - variable: routes + label: Routes + description: Expose physical subnet routes to your entire Tailscale network. + schema: + type: string + default: "" + - variable: dest_ip + label: Destination IP + description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. + schema: + type: string + default: "" + - variable: sock5_server + label: Sock5 Server + description: The address on which to listen for SOCKS5 proxying into the tailscale net. + schema: + type: string + default: "" + - variable: outbound_http_proxy_listen + label: Outbound HTTP Proxy Listen + description: The address on which to listen for HTTP proxying into the tailscale net. + schema: + type: string + default: "" + - variable: extra_args + label: Extra Args + description: Extra Args + schema: + type: string + default: "" + - variable: daemon_extra_args + label: Tailscale Daemon Extra Args + description: Tailscale Daemon Extra Args + schema: + type: string + default: "" + - variable: killSwitch + label: Enable Killswitch + schema: + type: boolean + show_if: [["type", "!=", "disabled"]] + default: true + - variable: excludedNetworks_IPv4 + label: Killswitch Excluded IPv4 networks + description: List of Killswitch Excluded IPv4 Addresses + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv4 + label: IPv4 Network + schema: + type: string + required: true + - variable: excludedNetworks_IPv6 + label: Killswitch Excluded IPv6 networks + description: "List of Killswitch Excluded IPv6 Addresses" + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv6 + label: IPv6 Network + schema: + type: string + required: true + - variable: configFile + label: VPN Config File Location + schema: + type: string + show_if: [["type", "!=", "disabled"]] + default: "" + + - variable: envList + label: VPN Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + max_length: 10240 + - variable: docs + group: Documentation + label: Please read the documentation at https://truecharts.org + description: Please read the documentation at +
https://truecharts.org + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDocs + label: I have checked the documentation + schema: + type: boolean + default: true + - variable: donateNag + group: Documentation + label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor + description: Please consider supporting TrueCharts, see +
https://truecharts.org/sponsor + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDonate + label: I have considered donating + schema: + type: boolean + default: true + hidden: true diff --git a/enterprise/external-dns/1.0.0/templates/NOTES.txt b/enterprise/external-dns/1.0.0/templates/NOTES.txt new file mode 100644 index 0000000000..efcb74cb77 --- /dev/null +++ b/enterprise/external-dns/1.0.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/enterprise/external-dns/1.0.0/templates/_args.tpl b/enterprise/external-dns/1.0.0/templates/_args.tpl new file mode 100644 index 0000000000..84d9dbfa50 --- /dev/null +++ b/enterprise/external-dns/1.0.0/templates/_args.tpl @@ -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 -}} diff --git a/enterprise/external-dns/1.0.0/templates/common.yaml b/enterprise/external-dns/1.0.0/templates/common.yaml new file mode 100644 index 0000000000..8b344a44ac --- /dev/null +++ b/enterprise/external-dns/1.0.0/templates/common.yaml @@ -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" . }} diff --git a/enterprise/external-dns/1.0.0/values.yaml b/enterprise/external-dns/1.0.0/values.yaml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/enterprise/external-dns/item.yaml b/enterprise/external-dns/item.yaml new file mode 100644 index 0000000000..efffae226e --- /dev/null +++ b/enterprise/external-dns/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/external-dns.png +categories: +- networking +screenshots: []