X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=src%2Ffoundation%2Fhot%2Fcontrol.sh;fp=src%2Ffoundation%2Fhot%2Fcontrol.sh;h=390eab60c9c334a280d13222b808e5592f7e28f7;hb=e598bff59a4a0873488fd180a5a915e49b9f1788;hp=0000000000000000000000000000000000000000;hpb=2fe3d7c689341cc5e25678416c4f035ef3e5c96a;p=iec.git diff --git a/src/foundation/hot/control.sh b/src/foundation/hot/control.sh new file mode 100755 index 0000000..390eab6 --- /dev/null +++ b/src/foundation/hot/control.sh @@ -0,0 +1,171 @@ +#!/bin/sh + +# shellcheck disable=SC2086 + +# set DPDK if available +has_dpdk=${has_dpdk:-"false"} + +################################################################ +# Stack parameters +base_img=${base_img:-"xenial"} +key_name=${key_name:-"ak-key"} +k8s_master_vol=${k8s_master_vol:-"k8s_master_vol"} +external_net=${external_net:-"external"} +k8s_user=${k8s_user:-"ubuntu"} +k8s_password=${k8s_password:-"ubuntu"} +has_dpdk_param= + +floating_ip_param="--parameter public_ip_pool=$external_net" + +if [ "$has_dpdk" = true ]; then + has_dpdk_param="--parameter has_dpdk=true" +fi + +################################################################ + +set -ex + +retries=5 + +if [ -z "$OS_AUTH_URL" ]; then + echo "OS_AUTH_URL not set; aborting" + exit 1 +fi + +if ! [ -f ak-key.pem ] +then + nova keypair-add "$key_name" > "$key_name".pem + chmod 600 ak-key.pem +fi + +skip_k8s_net=${skip_k8s_net:-} +skip_k8s_master=${skip_k8s_master:-} +skip_k8s_slaves=${skip_k8s_slaves:-} + +stack_k8s_net= +stack_k8s_master= +stack_k8s_slaves= + +case $1 in +start|stop) + cmd=$1 + shift + ;; +restart) + shift + tries=0 + while ! $0 stop "$@"; do + tries=$((tries+1)) + if [ $tries -gt $retries ]; then + echo "Unable to stop demo, exiting" + exit 1 + fi + done + $0 start "$@" + exit $? + ;; +*) + echo "Control script for managing a simple K8s cluster of VMs using Heat" + echo "Available stacks:" + echo " - net - all the required networks and subnets" + echo " - k8s_master - K8s master VM" + echo " - k8s_slaves - configurable number of K8s slave VMs" + echo "Use skip_ to skip starting/stopping stacks, e.g." + echo "#:~ > skip_k8s_net=1 ./$0 stop" + echo "usage: $0 [start|stop] [k8s_net] [k8s_master] [k8s_slaves]" + exit 1 + ;; +esac + +if [ $# -gt 0 ]; then + skip_k8s_net=1 + while [ $# -gt 0 ]; do + eval unset skip_"$1" + shift + done +fi + +# check OS status +tries=0 +while ! openstack compute service list > /dev/null 2>&1; do + tries=$((tries+1)) + if [ $tries -gt $retries ]; then + echo "Unable to check Openstack health, exiting" + exit 2 + fi + sleep 5 +done + +for stack in $(openstack stack list -f value -c "Stack Name"); do + echo "$stack" | grep -sq -e '^[a-zA-Z0-9_]*$' && eval stack_"$stack"=1 +done + +case $cmd in +start) + if [ -z "$stack_k8s_net" ] && [ -z "$skip_k8s_net" ]; then + echo "Starting k8s_net" + openstack stack create --wait \ + --parameter external_net="$external_net" \ + -t k8s_net.yaml k8s_net + # Might need to wait for the networks to become available + # sleep 5 + fi + +# master_vol=$(openstack volume show $k8s_master_vol -f value -c id) +# --parameter volume_id=$master_vol \ + + k8s_master_ip=$(openstack stack output show k8s_net k8s_master_ip -f value -c output_value) + k8s_pod_net_cidr=$(openstack stack output show k8s_net k8s_pod_net_cidr -f value -c output_value) + k8s_svc_net_cidr=$(openstack stack output show k8s_net k8s_svc_net_cidr -f value -c output_value) + k8s_cluster_ip=$(openstack stack output show k8s_net k8s_cluster_ip -f value -c output_value) + if [ -z "$stack_k8s_master" ] && [ -z "$skip_k8s_master" ]; then + echo "Starting Kubernetes master" + openstack stack create --wait \ + --parameter key_name="$key_name" \ + --parameter k8s_master_ip="$k8s_master_ip" \ + --parameter k8s_pod_net_cidr="$k8s_pod_net_cidr" \ + --parameter k8s_svc_net_cidr="$k8s_svc_net_cidr" \ + --parameter k8s_cluster_ip="$k8s_cluster_ip" \ + --parameter k8s_user="$k8s_user" \ + --parameter k8s_password="$k8s_password" \ + $floating_ip_param \ + $has_dpdk_param \ + -t k8s_master.yaml k8s_master + fi + + if [ -z "$stack_k8s_slaves" ] && [ -z "$skip_k8s_slaves" ]; then + echo "Starting Kubernetes slaves" + openstack stack create --wait \ + --parameter key_name="$key_name" \ + --parameter k8s_master_ip="$k8s_master_ip" \ + --parameter k8s_pod_net_cidr="$k8s_pod_net_cidr" \ + --parameter k8s_svc_net_cidr="$k8s_svc_net_cidr" \ + --parameter k8s_cluster_ip="$k8s_cluster_ip" \ + --parameter k8s_user="$k8s_user" \ + --parameter k8s_password="$k8s_password" \ + $floating_ip_param \ + $has_dpdk_param \ + -t k8s_slaves.yaml k8s_slaves + fi + + openstack stack list + ;; +stop) + if [ -n "$stack_k8s_slaves" ] && [ -z "$skip_k8s_slaves" ]; then + echo "Stopping Kubernetes slaves" + openstack stack delete --yes --wait k8s_slaves + fi + + if [ -n "$stack_k8s_master" ] && [ -z "$skip_k8s_master" ]; then + echo "Stopping Kubernetes master" + openstack stack delete --yes --wait k8s_master + fi + + if [ -n "$stack_k8s_net" ] && [ -z "$skip_k8s_net" ]; then + echo "Stopping k8s_net" + openstack stack delete --yes --wait k8s_net + fi + + openstack stack list + ;; +esac