Adding kubespray installation to automation-tools repository
Change-Id: I9539e842cea1b1030a35d804287fb33789d22de3
diff --git a/kubespray-installer/setup.sh b/kubespray-installer/setup.sh
new file mode 100755
index 0000000..61902cd
--- /dev/null
+++ b/kubespray-installer/setup.sh
@@ -0,0 +1,159 @@
+#!/usr/bin/env bash
+#
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+################################################
+# #
+# Installs Kubespray on remote target machines #
+# #
+################################################
+
+#
+# Installs Kubespray on remote target machines.
+#
+install_kubespray () {
+ # Cleanup Old Kubespray Installations
+ echo -e "\nCleaning Up Old Kubespray Installation" && \
+ rm -rf kubespray
+
+ # Download Kubespray
+ echo -e "\nDownloading Kubespray" && \
+ git clone https://github.com/kubernetes-incubator/kubespray.git -b v2.4.0 && \
+
+ # Generate inventory and var files
+ echo -e "\nGenerating The Inventory File" && \
+ rm -rf inventories/${DEPLOYMENT_NAME} && \
+ cp -r kubespray/inventory inventories/${DEPLOYMENT_NAME} && \
+ CONFIG_FILE=inventories/${DEPLOYMENT_NAME}/inventory.cfg python3 kubespray/contrib/inventory_builder/inventory.py ${NODES[@]} && \
+
+ # Edit inventory var files
+ NODE_LIST=`echo ${NODES[@]}`
+ ansible-playbook k8s-configs.yaml --extra-vars "deployment_name=${DEPLOYMENT_NAME} k8s_nodes='${NODE_LIST}'"
+
+ # Copy SSH keys
+ echo -e "\nCopying Public SSH Keys To Remote Machines" && \
+ source copy-ssh-keys.sh ${NODES[@]} && \
+
+ # Prepare Target Machines
+ echo -e "\nInstalling Prerequisites On Remote Machines" && \
+ ansible-playbook -i inventories/${DEPLOYMENT_NAME}/inventory.cfg k8s-requirements.yaml && \
+
+ # Install Kubespray
+ echo -e "\nInstalling Kubespray" && \
+ ansible-playbook -i inventories/${DEPLOYMENT_NAME}/inventory.cfg kubespray/cluster.yml -b -v && \
+
+ # Export the Kubespray Config Location
+ echo -e "\nLoading Kubespray Configuration" && \
+ cp kubespray/artifacts/admin.conf configs/${DEPLOYMENT_NAME}.conf
+}
+
+#
+# Exports the Kubespray Config Location
+#
+source_kubeconfig () {
+ export KUBECONFIG=${PWD}/configs/${DEPLOYMENT_NAME}.conf
+}
+
+#
+# Helm init
+#
+helm_init () {
+ echo -e "\nInitializing Helm" && \
+ source_kubeconfig $DEPLOYMENT_NAME && \
+ helm init --upgrade
+}
+
+#
+# Deploy an insecure registry
+#
+deploy_insecure_registry () {
+ echo -e "\nDeploying insecure registry" && \
+ source_kubeconfig $DEPLOYMENT_NAME && \
+ helm install stable/docker-registry --set service.nodePort=30500,service.type=NodePort -n docker-registry
+}
+
+#
+# Checks if an arbitrary pod name is given during specifc
+# operations.
+#
+check_pod_name () {
+ if [ -z $DEPLOYMENT_NAME ]
+ then
+ echo "Missing option: podname" >&2
+ echo " "
+ display_help
+ exit -1
+ fi
+}
+
+#
+# Displays the help menu.
+#
+display_help () {
+ echo "Usage: $0 {--install|--source|--help} [podname] [ip...] " >&2
+ echo " "
+ echo " -h, --help Display this help message."
+ echo " -i, --install Install Kubespray on <podname>"
+ echo " -s, --source Source the Kubectl config for <podname>"
+ echo " "
+ echo " podname An arbitrary name representing the pod"
+ echo " ip The IP address of a remote node"
+ echo " "
+ echo "Example usages:"
+ echo " ./setup.sh -i podname 192.168.10.100 192.168.10.101 192.168.10.102"
+ echo " ./setup.sh -i podname (detault is 10.90.0.101 10.90.0.102 10.90.0.103)"
+ echo " source setup.sh -s podname"
+}
+
+#
+# Init
+#
+CLI_OPT=$1
+DEPLOYMENT_NAME=$2
+shift 2
+DEFAULT_NODES="10.90.0.101 10.90.0.102 10.90.0.103"
+NODES=(${@:-$DEFAULT_NODES})
+
+while :
+do
+ case $CLI_OPT in
+ -i | --install)
+ check_pod_name
+ install_kubespray $DEPLOYMENT_NAME $NODES
+ helm_init $DEPLOYMENT_NAME
+ deploy_insecure_registry $DEPLOYMENT_NAME
+ exit 0
+ ;;
+ -h | --help)
+ display_help
+ exit 0
+ ;;
+ -s | --source)
+ check_pod_name
+ source_kubeconfig $DEPLOYMENT_NAME
+ return 0
+ ;;
+ --) # End of all options
+ shift
+ break
+ ;;
+ *)
+ echo Error: Unknown option: $CLI_OPT >&2
+ echo " "
+ display_help
+ exit -1
+ ;;
+ esac
+done