# Copyright 2019 Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

---
imports: (( &temporary ))
landscape: (( &temporary ))
utilities: (( &temporary ))

settings:
  naming: garden-setup
  fullname: (( naming "-dns-controller-manager" ))
  dns-class: (( naming ))
  namespace: "kube-system"

plugins:
  - pinned:
    - helm:
       - helm
       - template
    - kubectl: kubectl_apply
  - kubectl
# TODO: create namespace if it doesn't exist

kubectl_apply:
  kubeconfig: (( .helm.kubeconfig ))
  files:
    - "helm/rendered_charts.yaml"

helm:
  kubeconfig: (( landscape.clusters.[0].kubeconfig ))
  source: "git/repo/charts/external-dns-management"
  name: (( settings.fullname ))
  namespace: (( .spec.common.namespace ))
  values: (( .spec.helm ))

kubectl:
  - (( utilities.kubectl.generate( __ctx.DIR "/manifests/" "provider_secret.yaml", landscape.clusters.[0].kubeconfig, .spec.dns ) ))
  - (( utilities.kubectl.generate( __ctx.DIR "/manifests/" "dns_provider.yaml", landscape.clusters.[0].kubeconfig, .spec.dns ) ))
  - <<: (( valid( .landscape.dashboard.cname ) ? *.kubectl_cname_template :~~ ))

kubectl_cname_template:
  - <<: (( &template &temporary ))
  - (( utilities.kubectl.generate( __ctx.DIR "/manifests/" "provider_secret.yaml", landscape.clusters.[0].kubeconfig, .spec.cname ) ))
  - (( utilities.kubectl.generate( __ctx.DIR "/manifests/" "dns_provider.yaml", landscape.clusters.[0].kubeconfig, .spec.cname ) ))

typeToProvider:
  <<: (( &temporary ))
  aws-route53: aws
  google-clouddns: gcp
  azure-dns: azure
  openstack-designate: openstack
  cloudflare-dns: cloudflare

spec:
  <<: (( &temporary ))
  common:
    namespace: "kube-system"
    dns_class: (( .settings.dns-class ))
  dns:
    type: (( .landscape.dns.type ))
    provider:
      name: (( .typeToProvider[type] ))
      credentials: (( .landscape.dns.credentials ))
    domain: (( .landscape.domain ))
    zones: (( .landscape.dns.hostedZoneIDs || ~~ ))
    secret_name: (( .settings.fullname "-" provider.name ))
    provider_name: (( provider.name ))
    <<: (( common ))
  cname:
    dns_fallback: (( .landscape.dashboard.cname.dns || .landscape.dns ))
    type: (( dns_fallback.type ))
    provider:
      name: (( .typeToProvider[type] ))
      credentials: (( dns_fallback.credentials ))
    domain: (( .landscape.dashboard.cname.domain || ~~ ))
    zones: (( dns_fallback.hostedZoneIDs || ~~ ))
    secret_name: (( .settings.fullname "-" provider.name "-cname" ))
    provider_name: (( provider.name "-cname" ))
    <<: (( common ))
  helm:
    nameOverride: (( settings.fullname ))
    fullnameOverride: (( settings.fullname ))
    image:
      tag: (( .landscape.versions.dns-controller.image_tag || ~~ ))
      repository: (( .landscape.versions.dns-controller.image_repo || ~~ ))
    createCRDs: false
    configuration:
      kubeconfigDisableDeployCrds: true
      dnsClass: (( common.dns_class ))
      identifier: (( "setup.gardener.cloud/" .landscape.name ))
      controllers: (( "dnssources," dns.type ( cname.type != dns.type ? "," cname.type :"" ) ))
      ttl: (( .landscape.dns.ttl || ~~ ))
    serviceAccountAnnotations:
      eks.amazonaws.com/role-arn: (( .landscape.dns.roleArn || ~~ ))
