#!/bin/bash

# Source shared helper scripts
{% include "helpers.sh" %}

# Defaults - these are in the config but left here for information
CLUSTER_NAME="{% if experiment.cluster_name %}{{ experiment.cluster_name }}{% else %}flux-cluster{% endif %}"
NAMESPACE="{% if experiment.minicluster_namespace %}{{ experiment.minicluster_namespace }}{% else %}flux-operator{% endif %}"
CLUSTER_VERSION="{% if experiment.kubernetes_version %}{{ experiment.kubernetes_version }}{% else %}1.23{% endif %}"
FORCE_CLUSTER="{% if setup.force_cluster %}true{% else %}false{% endif %}"
SIZE={% if experiment.size %}{{ experiment.size }}{% else %}4{% endif %}
REPOSITORY="{% if experiment.operator_repository %}{{ experiment.operator_repository }}{% else %}flux-framework/flux-operator{% endif %}"
BRANCH="{% if experiment.operator_branch %}{{ experiment.operator_branch }}{% else %}main{% endif %}"
SCRIPT_DIR="{{ experiment.script_dir }}"

print_magenta "   namespace: ${NAMESPACE}"
print_magenta "   cluster  : ${CLUSTER_NAME}"
print_magenta "    version : ${CLUSTER_VERSION}"
print_magenta "     size   : ${SIZE}"
print_magenta "repository  : ${REPOSITORY}"
print_magenta "     branch : ${BRANCH}"

is_installed minikube
is_installed wget

function save_versions () {

    SCRIPT_DIR=${1}
    SIZE=${2}

    run_echo_save "${SCRIPT_DIR}/minikube-version.yaml" minikube version --output=yaml --components=true
    save_common_metadata ${SCRIPT_DIR} ${SIZE}
}

# Check if it already exists
minikube status
retval=$?
if [[ ${retval} -eq 0 ]]; then
    print_blue "A MiniKube cluster already exists."
    install_operator ${SCRIPT_DIR} ${REPOSITORY} ${BRANCH}
    save_versions ${SCRIPT_DIR} ${SIZE}
    echo
    exit 0
fi

if [[ "${FORCE_CLUSTER}" != "true" ]]; then
    prompt "Do you want to create this cluster?"
fi

# Create the cluster
run_echo minikube start --nodes=${SIZE}
install_operator ${SCRIPT_DIR} ${REPOSITORY} ${BRANCH}

# Show nodes
run_echo kubectl get nodes
run_echo kubectl create namespace ${NAMESPACE} || true
run_echo kubectl get namespace
run_echo kubectl describe namespace operator-system
save_versions ${SCRIPT_DIR} ${SIZE}
