#!/usr/bin/env bash

log()   { echo ">>> $1" ; }

[[ -d manifest-templates ]] || { echo >&2 "Please run this script from within the kubernetes folder"; exit 1; }

# interactive by default
interactive_mode=1

while [ $# -gt 0 ] ; do
  case $1 in
    --non-interactive)
      interactive_mode=0
      ;;
    *)
      log "Unknown argument $1"
      exit 1
      ;;
  esac
  shift
done

while (( $interactive_mode == 1)) ; do
  read -e -i "y" -p "Do you want to cleanup old containers? [Y/n] " yn
  case $yn in
      [Yy]* ) break;;
      [Nn]* ) exit 0;;
      * ) echo "Please answer yes (y) or no (n).";;
  esac
done

./cleanup

default_interface=$(awk '$2 == 00000000 { print $1 }' /proc/net/route)
ip_address=$(ip addr show $default_interface | awk '$1 == "inet" {print $2}' | cut -f1 -d/)

for template in $(ls manifest-templates)
do
    log "Processing template $template..."
    sed -e "s#\${project_dir}#$(dirname $PWD)#" \
        -e "s#\${ip_address}#$ip_address#" manifest-templates/$template > manifests/$template

    # Use SALT_DIR is set and not empty else use our default directory
    # This can be used to point to different state files for orchestration.
    if [ -z ${SALT_DIR+x} ]
    then
      log "You did not provide a SALT_DIR. $(dirname $PWD)/kubernetes/salt will be used..."
      salt_dir="$(dirname $PWD)/kubernetes/salt"
      sleep 5
    else
      salt_dir=$SALT_DIR
    fi

    sed -i -e "s#\${salt_dir}#$salt_dir#" manifests/$template
done

if $(which kubelet >&/dev/null); then
  log "Running setup-environment script"
  bash setup-environment &
else
  log "To launch kubelet make sure to install kubernetes-node package first and run this script again..."
  exit 1
fi

log "Launching kubelet"
sudo kubelet --config=$PWD/manifests --root-dir=$PWD/tmp --v=0 --address=127.0.0.1 --hostname-override=127.0.0.1 --allow-privileged=false
