#!/bin/bash

# Quick & dirty for now

if [[ $# -ne 1 ]] ; then
    echo "ERREUR - Le script accepte un parametre et un seul (namespace)"
    exit 1
fi

NS=$1

type kubectl &> /dev/null || { echo >&2 "ERREUR - Ce script a besoin de kubectl pour fonctionner"; exit 1; }

if ( ! kubectl auth can-i create namespace &> /dev/null ) ; then
    echo "ERREUR - Vous ne semblez pas disposer des authorisaation nécessaires pour créer un nouveau namespace"
    exit 1
fi

if ( kubectl get ns $NS &> /dev/null ) ; then
    echo "ERREUR - Le namespace $NS existe déjà sur ce cluster"
    exit 1
fi

echo ""
echo -n "On créé le namespace $NS avec le sa/role de déploiement ? [o/N] : " ; read reponse

if [[ $reponse == "o" ]] || [[ $reponse == "O" ]] ; then
    echo ""
    echo -n "Création du namespace ... "
    kubectl create ns $NS
    echo ""
    echo -n "Création du service account ... "
    kubectl -n $NS create sa helm
    echo ""
    echo -n "Création du role ... "
    kubectl create -f - << EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: $NS
  name: helm
rules:
- apiGroups: ["", "extensions", "apps", "networking.k8s.io", "batch"]
  resources: ["*"]
  verbs: ["*"]
EOF
    echo ""
    echo -n "Création du role binding ... "
    kubectl -n $NS create rolebinding helm --role helm --serviceaccount $NS:helm
    echo ""
    echo -n "Création du secret ... "
    kubectl create -f - << EOF
apiVersion: v1
kind: Secret
metadata:
  name: helm-token
  namespace: $NS
  annotations:
    kubernetes.io/service-account.name: helm
type: kubernetes.io/service-account-token
EOF
    echo -n "On dépose le secret dans vault ? [o/N] : " ; read reponse
    if [[ $reponse == "o" ]] || [[ $reponse == "O" ]] ; then
        echo -n "Dans quel chemin ? : " ; read chemin
        echo ""
        if ( vault kv get $chemin &> /dev/null ) ; then
            echo -n "Le chemin $chemin existe déjà, on écrase ? [o/N] : " ; read reponse
            if [[ $reponse == "" ]] || [[ $reponse == "n" ]] || [[ $reponse == "N" ]] ; then
                echo "D'accord, on ne met rien dans vault"
                exit 3
            fi
        fi
        echo -n "On valide le chemin $chemin ? [o/N] : " ; read reponse
        echo ""
        if [[ $reponse == "o" ]] || [[ $reponse == "O" ]] ; then
            TOKEN=$(kubectl get secret helm-token -n $NS -o jsonpath='{$.data.token}' | base64 -d | sed $'s/$/\\\n/g')
            if ( vault kv put $chemin TOKEN=$TOKEN ) ; then
                echo ""
                echo "Le token a été mis dans vault"
            else
                echo ""
                echo "ERREUR - Le token n'a pas pu être mis dans vault (best effort désolé)"
            fi
        else
            echo "D'accord, on ne met rien dans vault"
        fi
    fi
    echo ""
else
    echo "Abandon..."
fi

