#!/bin/bash

set -e
# set -x

BASE=$(cd `dirname $0`; cd ../; pwd)

source $BASE/utils/logger
source $BASE/utils/env

function prepare_images() {
  logger info "Prepare images and packages"
  curr_arch=`check_arch`
  if [[ -d $BASE/rdma/resources/$curr_arch ]]; then
      if [[ -d $BASE/rdma/images ]]; then
          rm -rf $BASE/rdma/images
      fi
      ln -s $BASE/rdma/resources/$curr_arch $BASE/rdma/images
  else
      logger error "Not supported arch: `arch`"
      exit 1
  fi
}

Action=${1:-}

if [[ "$Action" = "" ]]; then
  Action=help
else
  shift 1
fi


function print_usage() {
  echo "Example:"
  echo ""
  echo "Install rdma network:"
  echo "  For roce mode:"
  echo "  ./rdmacli install roce"
  echo ""
  echo "  For ib mode:"
  echo "  ./rdmacli install ib"
  echo ""
  echo "Destroy rdma network:"
  echo "  ./rdmacli destroy [roce|ib]"
  echo ""
  echo "Print rdmacli usage:"
  echo "  ./rdmacli help"
  echo ""
}

case "${Action}" in
install)
  mode=${1:-}
  if [[ "$mode" = "" ]]; then
    echo "Empty mode, only roce|ib supported"
    exit 1
  fi
  shift 1
  prepare_images
  for img in $(cat $BASE/rdma/img.txt); do
    name=`echo $img| awk -F '=' '{print $1}'`
    tag=`echo $img| awk -F '=' '{print $2}'`
    docker load -i $BASE/rdma/images/${name}.tar
    docker push $tag
  done
  kubectl apply -f $BASE/rdma/sriov/sriov-device-plugin.yaml
  kubectl apply -f $BASE/rdma/sriov/sriov-cnis.yaml
  kubectl apply -f $BASE/rdma/sriov/sriovdp-config.yaml
  kubectl apply -f $BASE/rdma/sriov/nad-${mode}.yaml
  $BASE/bin/helm install whereabouts $BASE/rdma/sriov/whereabouts/ -n kube-system
  ;;
destroy)
  echo "Clean k8s resources"
  mode=${1:-}
  kubectl delete -f $BASE/rdma/sriov/nad-${mode}.yaml
  kubectl delete -f $BASE/rdma/sriov/sriov-device-plugin.yaml
  kubectl delete -f $BASE/rdma/sriov/sriovdp-config.yaml
  kubectl delete -f $BASE/rdma/sriov/sriov-cnis.yaml
  echo "Clean multus cni resources"
  for i in $(kubectl get nodes --no-headers | awk '{print $1}'); do
    ssh ${i} 'rm -rf /etc/cni/net.d/multus.d'
    ssh ${i} 'rm -rf /etc/cni/net.d/00-multus.conf'
  done
  ;;
label-node)
  mode=${1:-}
  if [[ "$mode" = "all" ]]; then
    for i in $(kubectl get nodes --no-headers | awk '{print $1}'); do
      kubectl label node $i node-role.kubernetes.io/worker=""
    done
  else
    for i in $(kubectl get nodes --no-headers | grep "$mode" | awk '{print $1}'); do
      kubectl label node $i node-role.kubernetes.io/worker=""
    done
  fi
  ;;
--help|help|-h)
  print_usage
  ;;
*)
  print_usage
  exit 0
  ;;
esac
