You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
4.5 KiB
200 lines
4.5 KiB
#!/bin/bash
|
|
|
|
set -Eeuo pipefail
|
|
trap "exit" INT
|
|
|
|
function assert_cluster_name () {
|
|
local cluster_name="${1:-}"
|
|
|
|
if [ ! -d ".clusters/$cluster_name" ]; then
|
|
echo "Cluster '$cluster_name' does not exist!"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -f ".clusters/$cluster_name/local.env" ]; then
|
|
source ".clusters/$cluster_name/local.env"
|
|
fi
|
|
}
|
|
|
|
function init () {
|
|
local cluster_name="${1:-}"
|
|
|
|
if [ -d ".clusters/$cluster_name" ]; then
|
|
echo "Cluster '$cluster_name' already initialized !"
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p ".clusters/$cluster_name"
|
|
sed "s/__CLUSTER_NAME__/$cluster_name/" terraform.tfvars > ".clusters/$cluster_name/terraform.tfvars"
|
|
|
|
echo "Cluster $cluster_name initialized successfully!"
|
|
echo
|
|
echo "Review and adjust the following files to your needs:"
|
|
echo "- .clusters/$cluster_name/terraform.tfvars"
|
|
echo
|
|
exit 0
|
|
}
|
|
|
|
function destroy () {
|
|
assert_cluster_name "$@"
|
|
local cluster_name="${1:-}"
|
|
|
|
terraform destroy -var-file=".clusters/$cluster_name/terraform.tfvars" -state=".clusters/$cluster_name/terraform.tfstate"
|
|
}
|
|
|
|
function apply () {
|
|
assert_cluster_name "$@"
|
|
local cluster_name="${1:-}"
|
|
|
|
# Provision the infrastructure and wait for bootstrap to complete
|
|
terraform apply -var-file=".clusters/$cluster_name/terraform.tfvars" -state=".clusters/$cluster_name/terraform.tfstate" -auto-approve
|
|
}
|
|
|
|
function start () {
|
|
assert_cluster_name "$@"
|
|
local cluster_name="${1:-}"
|
|
|
|
ansible-playbook -i ".clusters/$cluster_name/inventory" ansible/start.yaml
|
|
}
|
|
|
|
function stop () {
|
|
assert_cluster_name "$@"
|
|
local cluster_name="${1:-}"
|
|
|
|
ansible-playbook -i ".clusters/$cluster_name/inventory" ansible/stop.yaml
|
|
}
|
|
|
|
function post_install_nfs () {
|
|
local cluster_name="${1:-}"
|
|
|
|
kubectl apply --insecure-skip-tls-verify --kubeconfig=".clusters/$cluster_name/auth/kubeconfig" -f ".clusters/$cluster_name/registry-pv.yaml"
|
|
kubectl apply --insecure-skip-tls-verify --kubeconfig=".clusters/$cluster_name/auth/kubeconfig" -f ".clusters/$cluster_name/nfs-provisioner.yaml"
|
|
}
|
|
|
|
function post_install () {
|
|
assert_cluster_name "$@"
|
|
local cluster_name="${1:-}"
|
|
shift
|
|
|
|
if [ $# -eq 0 ]; then
|
|
set nfs
|
|
fi
|
|
|
|
for i; do
|
|
post_install_$i "$cluster_name"
|
|
done
|
|
}
|
|
|
|
function install_addon () {
|
|
assert_cluster_name "$@"
|
|
local cluster_name="${1:-}"
|
|
local addon="${2:-}"
|
|
|
|
install_addon_$addon "$cluster_name"
|
|
}
|
|
|
|
function shell () {
|
|
assert_cluster_name "$@"
|
|
local cluster_name="${1:-}"
|
|
|
|
# Ansible
|
|
export DEFAULT_HOST_LIST="$PWD/.clusters/$cluster_name"
|
|
|
|
# Terraform
|
|
export TF_CLI_ARGS_plan="-var-file=.clusters/$cluster_name/terraform.tfvars -state=.clusters/$cluster_name/terraform.tfstate"
|
|
export TF_CLI_ARGS_apply="-var-file=.clusters/$cluster_name/terraform.tfvars -state=.clusters/$cluster_name/terraform.tfstate"
|
|
export TF_CLI_ARGS_destroy="-var-file=.clusters/$cluster_name/terraform.tfvars -state=.clusters/$cluster_name/terraform.tfstate"
|
|
export TF_CLI_ARGS_state_list="-state=.clusters/$cluster_name/terraform.tfstate"
|
|
export TF_CLI_ARGS_state_rm="-state=.clusters/$cluster_name/terraform.tfstate"
|
|
|
|
# Kubernetes
|
|
export KUBECONFIG="$PWD/.clusters/$cluster_name/auth/kubeconfig"
|
|
export KUBECTL_BINARY="$(which kubectl)"
|
|
export CLUSTER_NAME="$cluster_name"
|
|
export PS1="[$CLUSTER_NAME:\w] "
|
|
function kubectl () {
|
|
"$KUBECTL_BINARY" --insecure-skip-tls-verify "$@"
|
|
}
|
|
export -f kubectl
|
|
exec /bin/bash
|
|
}
|
|
|
|
if [ ! -e "local.env" ]; then
|
|
echo "Please create local.env first!"
|
|
exit 1
|
|
fi
|
|
|
|
source local.env
|
|
export LC_ALL=C
|
|
export LANG=C
|
|
|
|
case "${1:-}" in
|
|
init)
|
|
if [ -z "${2:-}" ]; then
|
|
echo "Usage: $0 init cluster-name"
|
|
exit 1
|
|
fi
|
|
shift
|
|
init "$@"
|
|
;;
|
|
start)
|
|
if [ -z "${2:-}" ]; then
|
|
echo "Usage: $0 start cluster-name"
|
|
exit 1
|
|
fi
|
|
shift
|
|
start "$@"
|
|
;;
|
|
stop)
|
|
if [ -z "${2:-}" ]; then
|
|
echo "Usage: $0 stop cluster-name"
|
|
exit 1
|
|
fi
|
|
shift
|
|
stop "$@"
|
|
;;
|
|
apply)
|
|
if [ -z "${2:-}" ]; then
|
|
echo "Usage: $0 apply cluster-name"
|
|
exit 1
|
|
fi
|
|
shift
|
|
apply "$@"
|
|
;;
|
|
destroy)
|
|
if [ -z "${2:-}" ]; then
|
|
echo "Usage: $0 destroy cluster-name"
|
|
exit 1
|
|
fi
|
|
shift
|
|
destroy "$@"
|
|
;;
|
|
shell)
|
|
if [ -z "${2:-}" ]; then
|
|
echo "Usage: $0 shell cluster-name"
|
|
exit 1
|
|
fi
|
|
shift
|
|
shell "$@"
|
|
;;
|
|
post-install)
|
|
if [ -z "${2:-}" ]; then
|
|
echo "Usage: $0 post-install cluster-name"
|
|
exit 1
|
|
fi
|
|
shift
|
|
post_install "$@"
|
|
;;
|
|
install-addon)
|
|
if [ -z "${2:-}" -o -z "${3:-}" ]; then
|
|
echo "Usage: $0 install-addon cluster-name addon-name"
|
|
exit 1
|
|
fi
|
|
shift
|
|
install_addon "$@"
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {init|apply|approve-csr|post-install|destroy|shell|ping|start|stop} cluster-name"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|