#!/bin/bash
#
# Copyright (c) 2018 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.

set -e

DEV_DIR=$(dirname "${0}")/../../dev
EXAMPLE_DIR=$(dirname "${0}")/../../example

source $(dirname "${0}")/common/helpers
kubernetes_env="$(k8s_env)"

# test if we are running against a Minikube, Docker or kind Kubernetes local setup
case "${kubernetes_env}" in
    $NODELESS)
        echo "Found Nodeless Kubernetes ..."
        ;;
    $KIND)
        echo "Found kind ..."
        LOCAL_K8S_HOST_IP=localhost
        ETCD_DATA_DIR="/var/lib/docker/gardener/gardener-etcd"
        ;;
    $DOCKER_FOR_DESKTOP)
        echo "Found Docker Kubernetes ..."
        LOCAL_K8S_HOST_IP=localhost
        ETCD_DATA_DIR="/Users/$(whoami)/.docker/gardener-etcd"
        ;;
    $MINIKUBE)
        echo "Found Minikube ..."
        LOCAL_K8S_HOST_IP="$(minikube ip)"
        ETCD_DATA_DIR="/data/gardener-etcd"
        if [[ "$(uname)" == "Darwin" ]]; then
          echo "After OSX sleep, minikube's time is off."
          echo "This results in x509 certificate auth to not work for shoot certificates"
          minikube ssh -- docker run -i --rm --privileged --pid=host alpine:3.10.3 nsenter -t 1 -m -u -n -i date -u $(date -u +%m%d%H%M%Y)
        fi
        ;;
 esac

mkdir -p ${DEV_DIR}

cp ${EXAMPLE_DIR}/20-componentconfig-gardener-controller-manager.yaml ${DEV_DIR}/
cp ${EXAMPLE_DIR}/20-componentconfig-gardener-scheduler.yaml ${DEV_DIR}/
cp ${EXAMPLE_DIR}/20-componentconfig-gardenlet.yaml ${DEV_DIR}/

kubectl apply -f ${EXAMPLE_DIR}/00-namespace-garden.yaml
kubectl apply -f ${EXAMPLE_DIR}/00-namespace-garden-dev.yaml

if [ "${kubernetes_env}" != $NODELESS ] ; then
  cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: etcd
  namespace: garden
spec:
  replicas: 1
  selector:
    matchLabels:
      run: etcd
  template:
    metadata:
      labels:
        run: etcd
    spec:
      containers:
      - image: quay.io/coreos/etcd:v3.3.17
        name: etcd
        command:
        - etcd
        - -advertise-client-urls=http://${LOCAL_K8S_HOST_IP}:2379
        - -listen-client-urls=http://0.0.0.0:2379
        - -data-dir=/etcd-data
        volumeMounts:
        - mountPath: /etcd-data
          name: data
      volumes:
      - name: data
        hostPath:
          path: ${ETCD_DATA_DIR}
---
apiVersion: v1
kind: Service
metadata:
  name: etcd
  namespace: garden
spec:
  ports:
  - port: 2379
    nodePort: 32379
  selector:
    run: etcd
  type: NodePort
EOF
fi

mkdir -p ${DEV_DIR}/tls

cat <<EOF > "${DEV_DIR}/tls/gardener-controller-manager-ca.crt"
-----BEGIN CERTIFICATE-----
MIIDYDCCAkigAwIBAgIUaa2cFO/CSVrvq8O/0geuMtXLOsIwDQYJKoZIhvcNAQEL
BQAwSDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJh
bmNpc2NvMRQwEgYDVQQDEwtleGFtcGxlLm5ldDAeFw0xODA4MTYyMDMyMDBaFw0y
MzA4MTUyMDMyMDBaMEgxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UE
BxMNU2FuIEZyYW5jaXNjbzEUMBIGA1UEAxMLZXhhbXBsZS5uZXQwggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC5C8/vhXuEyd0fT6blHpkklDbcnurD4K6S
bFhdLZeGCI+vKW34OtAs8SpAvkJk1/AOgFldPFi7Fa8YmgJCzbGnylFqqrawdBhH
tVYxCAe14u2Sdiq1sOgurDtQ3Gh+Eu5u+P0l16y0dyQxl4dDtwHfz4jrNVadnWDc
T/+PPsd46i0+cOYhkDk7R54EuG+1kXakG4sXVpKy1TMwoynrBVh42L3bskqrVnpT
+gcAzCtoia8XRJ/jhoscXtR0r1tKi3g1J4qA7uX4I9rTsgOBck0exJPRgEmwuO5F
sZ44E8MIox+FVH9NDTcBdIT95XUlcanHJ+PZkRUXZysiM9lnIjBjAgMBAAGjQjBA
MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQUJU2I
iCrYttHhNhj5hwsQI+MIljANBgkqhkiG9w0BAQsFAAOCAQEATe93evEAI8mdipdm
jpFB9+0W3C2kO1/CtBujN3Pveg98lU9pkKiU9WQ/z+bZDWzTzISvV32OVJCmQSzr
VDRT03cljPiBX9oF577M16O3ZrvPWt1Qz6XzmbOav5bvBWi9iUdLHJm8p6CDHKYX
IDewlUH8+AFiMtwLer4QdWQRy+0iNdnXB8BbvwBlaqMhRZajw2io7yGZgqWVb9ry
6Tl6queZZk2NyK3IDmm7a1exLXPR8vSd2QB6bSBMR75p/FmcVCuW642TYNq0QoUs
W9yT3v1pxQfXki6VLd7/v8BxpNQ3k1V3MKXiK8B08GsD6Ikk9GgMVcdX4ZBemZf3
0cUD2Q==
-----END CERTIFICATE-----
EOF

cat <<EOF > "${DEV_DIR}/tls/gardener-controller-manager-ca.key"
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAuQvP74V7hMndH0+m5R6ZJJQ23J7qw+CukmxYXS2XhgiPrylt
+DrQLPEqQL5CZNfwDoBZXTxYuxWvGJoCQs2xp8pRaqq2sHQYR7VWMQgHteLtknYq
tbDoLqw7UNxofhLubvj9JdestHckMZeHQ7cB38+I6zVWnZ1g3E//jz7HeOotPnDm
IZA5O0eeBLhvtZF2pBuLF1aSstUzMKMp6wVYeNi927JKq1Z6U/oHAMwraImvF0Sf
44aLHF7UdK9bSot4NSeKgO7l+CPa07IDgXJNHsST0YBJsLjuRbGeOBPDCKMfhVR/
TQ03AXSE/eV1JXGpxyfj2ZEVF2crIjPZZyIwYwIDAQABAoIBAFUOZOnIBVqoHwfB
aQlv4xy5M+587ZRTtmp/eq55wmhNjx4IgQ/UmNPPlohj68jGqQVBYdJFZtO3x+Ab
CmcCfWKO0JWjGo5JDtAHPjMTadflEyZ7Qm55fn/Vkv48EZvBv+8qa9H1LOFW0kAp
UneBq07g6iKTRdj0+gzKiMGjLbUZxtNtcDPiIc/Pzs/tSDyxVrtmcKoNd9yx30gJ
3EXFybgt8h1m+cJVEGdpSajWk/rZ0wIXp4FAa5V87EAWbBuBwsvV9xw1Wzao2o4a
p7QdogVPIhqEtbXXTiUN/BwlwUeE8wG5EagmMl3Mc+J3KCEQBTxOW+3Ga4Itr0q4
iyZZKsECgYEA2Yft11w+VNLGwzT+d7fIVpspu3xOZ7w+Vcq3oWmeUK/umHvKOFWK
UrkNGNp8R/94kOjcci6GfR3yx9wvfpJlOTuoQbYw3uH1zHzqE5jzrjC+JpiDfCP+
LyV7qzET5uy63KOnyXJUOSK73fOmOs0aWa8c7bx6uFXoK2U3qYWOQukCgYEA2cU6
hSgVTXaqIjuNB1+R0t1sfZOjKKrWq2mU4gL/5oXq6IhzYaEaAk+d9LE0akglf297
B+7stKT7jVoZk3t9hR9KbzgpR6xB9yosEI0/GqOAxZcFkjXnNZZ4f1TlKc5IXxtc
Hl86WNW5JekUAD/dbdW566SHYKjxcLoY3HAs0WsCgYANy2ztx0+8mVE5d9bbSLBP
ra9L0Go4cduSHTTf6466ly2ORetg/yuya0HFXbWb6zt+FQZFx2WH8ao/ulrYr/fz
VTEqWZ9nwvSPbyx46a4qUbT9RZaw/KdV3g6loIsejcybyVUOlU16AhXf0V+tQux0
24H+IYG2xtveRKDvAyUuYQKBgDGmdAcz8lds/LE9XpQVyAuJjFi9Nm/pM3R1aAp3
oJyQX9SQd64Eqwdn252UYVzyAgqiAiz23mT5UJkTt80WVLHrRm9BILhEn+2YYd+M
NJ0ANjXWjuCdBZAENIjjdDQp4fo9JK2QDJ+AauwnzfWYmgWWuwLsyijRm+qVo2Fu
+ejtAoGAHOHw1DoNmh4LoUDWDPKR0UoVZWgOo3wndmcYqV/Kk2560G2kVR0Btd5n
uoWNQSPM0GqVD1NCoRZJ5aR94JFCYuR5eM6TMojLIWrqXiPlxdVT5g4M52z2u+Dw
odantUaElD11+qUTVFasf6p26Z6YhVbTB8TUhlgRKc5xQFnE3BY=
-----END RSA PRIVATE KEY-----
EOF

cat <<EOF > "${DEV_DIR}/tls/gardener-controller-manager.crt"
-----BEGIN CERTIFICATE-----
MIIECDCCAvCgAwIBAgIUeq43Ym1pKXsGoZ54VfBLXtxXDHwwDQYJKoZIhvcNAQEL
BQAwSDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJh
bmNpc2NvMRQwEgYDVQQDEwtleGFtcGxlLm5ldDAgFw0xODA4MTYyMDMzMDBaGA8y
MTE4MDcyMzIwMzMwMFowRTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYD
VQQHEw1TYW4gRnJhbmNpc2NvMREwDwYDVQQDEwhnYXJkZW5lcjCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBANuKSXfNgr142e5usVcMymNpQer/ZcmdUrLU
IxKYgcY6qauP46J/clGwsTeRPSeudrs3l9lmefTlA/61vkaA/BR+AkR06dn/yFHa
JIhYAlQpnAq3qGiLVtgof+Iun+RfSAmyo9aa7pgi1H/RPNLQ4EZRzcuJm3Sir3Yt
tu0ATiZ24MVHPflzs4eEd6dj/Bb+BlU+nIDgf9XHxIp87LSgLE8VHq7fwHWAQqC/
NrMUE5t5VNvMoC3cgk3j5SOUL9cjgj0LvJ3kCwv0u1e4q97Li13D0N2Wbfnde1jP
o6utbmEWSOS8yzyyOO+Lws0647pQbc6Vr05bI+lXk/oYOCJOpnECAwEAAaOB6jCB
5zAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/
BAIwADAdBgNVHQ4EFgQUTJss9hbdIoJcSwLf47LmDFLNWTMwHwYDVR0jBBgwFoAU
FCVNiIgq2LbR4TYY+YcLECPjCJYwcgYDVR0RBGswaYIbZ2FyZGVuZXItY29udHJv
bGxlci1tYW5hZ2VygiJnYXJkZW5lci1jb250cm9sbGVyLW1hbmFnZXIuZ2FyZGVu
giZnYXJkZW5lci1jb250cm9sbGVyLW1hbmFnZXIuZ2FyZGVuLnN2YzANBgkqhkiG
9w0BAQsFAAOCAQEAr1sS8pqLL5Bgla/mAjhr0gjLBvWoFMzjMHf88nc8PwAJoyVD
xUaTsXQBL8k1kpw98I5aWrBcHUemBX6MW2BLODx36wSck4BX0DIVMJ9wdE1TJRlN
CsP51GihpsCgGmvs+VF1zNSbnw+HB2My70Jk6jZ+SZa/NgODLHeqjaVoLXVwJhpm
VSQqCxbblEF1AUs06SBwUGkn3FJcLeWNxXwW30slijXMe9Gizu9QWFKM8h3llBKM
hVDvzQrKaekQ7Afnyb6DS85H6a7Rb15vT0Gry6B3BQFRGNcBJJYr2SK4Dg5w+N3E
x2pSCt3DSJti183gGoQ2cPXfaLCQAfegq0VknQ==
-----END CERTIFICATE-----
EOF

cat <<EOF > "${DEV_DIR}/tls/gardener-controller-manager.key"
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA24pJd82CvXjZ7m6xVwzKY2lB6v9lyZ1SstQjEpiBxjqpq4/j
on9yUbCxN5E9J652uzeX2WZ59OUD/rW+RoD8FH4CRHTp2f/IUdokiFgCVCmcCreo
aItW2Ch/4i6f5F9ICbKj1prumCLUf9E80tDgRlHNy4mbdKKvdi227QBOJnbgxUc9
+XOzh4R3p2P8Fv4GVT6cgOB/1cfEinzstKAsTxUert/AdYBCoL82sxQTm3lU28yg
LdyCTePlI5Qv1yOCPQu8neQLC/S7V7ir3suLXcPQ3ZZt+d17WM+jq61uYRZI5LzL
PLI474vCzTrjulBtzpWvTlsj6VeT+hg4Ik6mcQIDAQABAoIBAQDPLroWrYNse9hv
A1eo5xE4r+TdeRj+I9IfocNXkUUnZcUpeyk/+TZRkYYtAovMHwE9vUE4kVUWn+od
PjbLIn7CeAh7wjnO2WyakltXsHbCJmJ0Ws47mwPiCpZlRcrvIlxBiqzDooL4YCZa
WYQlD6oXsqucIcjrUXx08r9m+prGADq13eas7a6GmiCDEk6TYwdMMJAEucQbaQAv
r7oiREwp5Y2ZJGELJZVgwXVtyh812gSh+LPQ3jIIevUIV2eOhX1TT5uxdEi1JXgr
qRLpL6tkfdpe+iaPuj66OEXfGfEtXA5voGykZKpJMf52D9HmVPjlVFjLCPmW1rSo
hCieCb4BAoGBAO78x8oYIRtDsZSTSnSmB68/EaNeaehulSF9O7fvJplGg2frU0YN
IfNGipI6pXFxr1nNDEqhe+1ZFDIS7CA+8lxx32iCA/U4qtsfzE2ACl5zzto0aoWC
+i5bb89NRV/Okuh92OrStdqgdd7yUP69klmftR+zsqtpWaXvDIk+2fQpAoGBAOsr
G25nnNqbRg8qAlfEd7yELdmOPXegOypRPKl87gpysM89dtiVkuzQSwBlfj4HPyAx
w2PH1zceSCSyXTmXRuucKi4oD6kKseVyGTXL/DKgE13KCNFo4Kh2tMPhgNuUnFyL
ppldoQwH6DHnPSzI7LSsp0hQPq/uwVFag7b1hqkJAoGBAJUQ2tV1g4DsEmHoFXL4
9KYcorXR+CFgiGihIpSx+NN2JhS1tfVlz51cjKZ1Kii+jm9m9JnAa/o5q90n7FyY
prd+16jqH+ne9MNE7DwS92S+u3FjbGXmsoIjynP1cKY3xW56wMiHsaKyn5L2dgrO
1/BLK8CgZ3t/dMmJd7pLl8sxAoGBAK4rnQNl5bvaaEbu3BFYxz1tv+9y839XwroS
tJTqm/pM+zph0VWTYd/WXNYMVTVndI9Ji+aoqXJ/EPtsxrLSoYn6fRr2PLL74smG
ebloPH7aI73A1ksSG+FpGXRB3YfDRxMbsuW/fHlGmefr1VkH7pfZj4N1OxheAftY
yFiG+5bRAoGAY5xbyvdZ5I1BU1NZKxK4AdYOQTRfYVZPExar1BLETXR9YAYprI+e
iEi+XuooRJELFE/B3EM0kM6J/X2P4wmCyayyQpUAzOtpeLrt/PDpXQTwhM0dLNL+
OaMnRwirobPupceHD5zvuGPjjDaPhc1yeRMYo+xXgLL+mYyXR1ZYGuI=
-----END RSA PRIVATE KEY-----
EOF

$(dirname "${0}")/dev-setup-register-gardener "$@"
