# 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 ))

spec:
  <<: (( &temporary ))
  kubeconfig: (( imports.kube_apiserver.export.kubeconfig ))
  apiserver_secret: (( utilities.kubectl.getField(kubeconfig,"sa","gardener-apiserver","{.secrets[0].name}") ))

  apiserver_token: (( base64_decode( utilities.kubectl.getField( kubeconfig, "secret", apiserver_secret, "{.data.token}")) ))
  controller_secret: (( utilities.kubectl.getField(kubeconfig,"sa","gardener-controller-manager", "{.secrets[0].name}") ))
  controller_token: (( base64_decode( utilities.kubectl.getField( kubeconfig, "secret", controller_secret, "{.data.token}")) ))
  cluster_endpoint: (( imports.kube_apiserver.export.apiserver_url_internal ))
  apiserver_ca: (( base64( imports.kube_apiserver.export.kube_apiserver_ca.cert ) ))

kubeconfig_scheme:
  <<: (( &temporary &template ))
  apiVersion: v1
  kind: Config
  current-context: cluster
  contexts:
  - context:
      cluster: cluster
      user: (( username ))
    name: cluster
  clusters:
  - cluster:
      certificate-authority-data: (( .spec.apiserver_ca ))
      server: (( .spec.cluster_endpoint ))
    name: cluster
  users:
  - name: (( username ))
    user:
      token: (( usertoken ))

kubeconfigs:
  apiserver:
    username: (( &temporary ( "gardener-apiserver" ) ))
    usertoken: (( &temporary ( .spec.apiserver_token ) ))
    config: (( *kubeconfig_scheme ))
  controller:
    username: (( &temporary ( "gardener-controller-manager" ) ))
    usertoken: (( &temporary ( .spec.controller_token ) ))
    config: (( *kubeconfig_scheme ))

plugins:
  - pinned:
    - helm:
      - gardener
      - template
    - kubectl: gardener
  - gardenready
  - shoot-check

shoot-check:
  kubeconfig: (( imports.kube_apiserver.export.kubeconfig ))

gardenready:
  kubeconfig: (( imports.kube_apiserver.export.kubeconfig ))

gardener:
  <<: (( imports.gardener_virtual.export.gardener ))
  kubeconfig: (( landscape.clusters.[0].kubeconfig ))
  files:
    - "gardener/rendered_charts.yaml"
  source: "git/repo/charts/gardener/controlplane/charts/runtime"
  values: (( merge(.imports.gardener_virtual.export.gardener.values, spec) ))
  name: gardener
  namespace: (( landscape.namespace ))
  spec:
    global:
      apiserver:
        kubeconfig: (( asjson(.kubeconfigs.apiserver.config) ))
      controller:
        kubeconfig: (( asjson(.kubeconfigs.controller.config) ))