#!/bin/bash
###############################################################################
#
# This script is for initializing the Kubernetes environement needed to run all
# the kubernetes integrated scripts in Kubernetes.
# - Provisions the PV's and PVC's for:
#   * The Kubernetes JNLP Jenkins slave's shared workspace
#   * Shared state cache
#   * Openbmc/openbmc git reference repository
#   * Openbmc/qemu git reference repository
# - Create docker-registry secret for pulling from the internal repo
# - Create the config.json used to mount docker configuration to Kubernetes
#   Jenkins slaves that build and push docker images via shell scripts.
# Optionally:
# - Launch a Jenkins Master deployment into Kubernetes.
# - Provision the PV and PVC for the Jenkin Master home directory
#
# Instructions:
#  Suggested way to run is to create a seperate script that will export all the
#  necessary variables and then source in this script. But editing this one
#  works as well.
#
###############################################################################
#
# Requirements:
#  - NFS server with directory to use as path for mount
#  - Access to an existing Kubernetes Cluster
#  - Kubectl installed and configured on machine running script
#
###############################################################################
#
# Variables used to initialize environment:
#  build_scripts_dir  The path for the openbmc-build-scripts directory.
#                     Default: The parent directory containing this script
#  email              The email that will be used to login to the regserver.
#                     Default: "email@place.holder", placeholder.
#  k8s_master         Set to True if you want to deploy a Jenkins Master into
#                     the Kubernetes deployment.
#                     Default: True
#  nfs_ip             IP address of the NFS server we will be using for mounting
#                     a Persistent Volume (PV) to. This should be replaced with
#                     an actual IP address of an NFS server.
#                     Default: "10.0.0.0", placeholder
#  ns                 Name of namespace the components will be deployed into.
#                     Default:"openbmc"
#  pass               The password that will be used to login to the regserver.
#                     Default: "password", placeholder
#  path_prefix        The prefix we will add to the nfspath of the directories
#                     we intend to mount. This is used to place all the
#                     different directories into the same parent folder on the
#                     NFS server.
#                     Default: "/san_mount/openbmc_k8s", placeholder
#  reclaim            The reclaim policy that will be used when creating the PV
#                     look at k8s docs for more info on this.
#                     Default: "Retain"
#  reg_server         The docker registry which will be used when pushing and
#                     pulling images. For internal use, it will be the internal
#                     registry created by ICP.
#                     Default: "master.icp:8500", placeholder
#  username           The username that will be used to login to the regserver.
#                     Default: "admin", placeholder
###############################################################################

# Variables used to initialize environment:
build_scripts_dir=${build_scripts_dir:-"$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/.."}
email=${email:-email\@place.holder}
k8s_master=${k8s_master:-True}
nfs_ip=${nfs_ip:-10.0.0.0}
ns=${ns:-openbmc}
pass=${pass:-password}
path_prefix=${path_prefix:-/san_mount/openbmc_k8s}
reclaim=${reclaim:-Retain}
reg_server=${reg_server:-master.icp:8500}
username=${username:-admin}

echo "Create the Jenkins Slave Workspace PVC"
name="jenkins-slave-space"
size="100Gi"
mode="ReadWriteMany"
nfs_path="${path_prefix}/jenkins-slave-space"
source ${build_scripts_dir}/kubernetes/storage-setup.sh

echo "Create the Shared State Cache PVC"
name="shared-state-cache"
size="100Gi"
mode="ReadWriteMany"
nfs_path="${path_prefix}/sstate-cache"
source ${build_scripts_dir}/kubernetes/storage-setup.sh

echo "Create the Openbmc Reference PVC"
name="openbmc-reference-repo"
size="1Gi"
mode="ReadWriteMany"
nfs_path="${path_prefix}/openbmc"
source ${build_scripts_dir}/kubernetes/storage-setup.sh

echo "Create the QEMU Reference PVC"
name="qemu-repo"
size="1Gi"
mode="ReadWriteMany"
nfs_path="${path_prefix}/qemu"
source ${build_scripts_dir}/kubernetes/storage-setup.sh

# Create the regkey secret for the internal docker registry
kubectl create secret docker-registry regkey -n $ns \
--docker-username=${username} \
--docker-password=${pass} \
--docker-email=${email} \
--docker-server=${reg_server}

# Create the docker config.json secret using the base64 encode of
# '${username}:${pass}'

base64up=$( echo -n "${username}:${pass}" | base64 )
cat >> config.json << EOF
{
  "auths": {
    "${regserver}": {
      "auth": "${base64up}"
    }
  }
}
EOF

chmod ugo+rw config.json
kubectl create secret generic docker-config -n $ns --from-file=./config.json
rm -f ./config.json

if [[ "${k8s_master}" ==  "True" ]]; then
  # Create the Jenkins Master Home PVC
  echo "Create the Jenkins Master Home PVC"
  name="jenkins-home"
  size="2Gi"
  mode="ReadWriteOnce"
  nfspath="${path_prefix}/jenkins-master-home"
  source ${build_scripts_dir}/kubernetes/storage-setup.sh

  # Launch the Jenkins Master
  launch="k8s"
  # Clean up variables before sourcing the build-jenkins.sh
  unset ns \
  nfsip \
  regserver \
  reclaim \
  path_prefix \
  username \
  pass email
  source ${build_scripts_dir}/build-jenkins.sh
fi
