blob: be55105efdf13ca6251a2f191d494ec3abfc765a [file] [log] [blame]
Luca Pretec97ad882018-05-04 11:22:14 -07001#!/usr/bin/env bash
2#
3# Copyright 2017-present Open Networking Foundation
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
Luca Pretec97ad882018-05-04 11:22:14 -070017#
18# Installs Kubespray on remote target machines.
19#
Zack Williams11b2e5c2018-05-18 09:50:54 -070020
Zack Williams249ac7f2018-05-18 13:34:14 -070021set -e -u -o pipefail
Zack Williams11b2e5c2018-05-18 09:50:54 -070022
Zack Williamsbb846a22018-06-26 14:57:17 -070023KS_COMMIT="${KS_COMMIT:-73a2a180061113ac124683e5cc492ba07df33d4c}"
24
Luca Pretec97ad882018-05-04 11:22:14 -070025install_kubespray () {
26 # Cleanup Old Kubespray Installations
Zack Williams249ac7f2018-05-18 13:34:14 -070027 echo "Cleaning Up Old Kubespray Installation"
Luca Pretec97ad882018-05-04 11:22:14 -070028 rm -rf kubespray
29
30 # Download Kubespray
Zack Williams249ac7f2018-05-18 13:34:14 -070031 echo "Downloading Kubespray"
Zack Williamsbb846a22018-06-26 14:57:17 -070032 git clone https://github.com/kubernetes-incubator/kubespray.git
33 pushd kubespray
34 git checkout "$KS_COMMIT"
35 popd
Luca Pretec97ad882018-05-04 11:22:14 -070036
37 # Generate inventory and var files
Zack Williams249ac7f2018-05-18 13:34:14 -070038 echo "Generating The Inventory File"
Zack Williamsbb846a22018-06-26 14:57:17 -070039
Zack Williams249ac7f2018-05-18 13:34:14 -070040 rm -rf "inventories/${DEPLOYMENT_NAME}"
Zack Williamsbb846a22018-06-26 14:57:17 -070041 mkdir -p "inventories/${DEPLOYMENT_NAME}"
42
43 cp -r kubespray/inventory/sample/group_vars "inventories/${DEPLOYMENT_NAME}/group_vars"
Zack Williams249ac7f2018-05-18 13:34:14 -070044 CONFIG_FILE="inventories/${DEPLOYMENT_NAME}/inventory.cfg" python3 kubespray/contrib/inventory_builder/inventory.py "${NODES[@]}"
Luca Pretec97ad882018-05-04 11:22:14 -070045
Zack Williams249ac7f2018-05-18 13:34:14 -070046 # Add configuration to inventory
47 ansible-playbook k8s-configs.yaml --extra-vars "deployment_name=${DEPLOYMENT_NAME} k8s_nodes='${NODES[*]}' kubespray_remote_ssh_user='${REMOTE_SSH_USER}'"
Luca Pretec97ad882018-05-04 11:22:14 -070048
49 # Prepare Target Machines
Zack Williams249ac7f2018-05-18 13:34:14 -070050 echo "Installing Prerequisites On Remote Machines"
51 ansible-playbook -i "inventories/${DEPLOYMENT_NAME}/inventory.cfg" k8s-requirements.yaml
Luca Pretec97ad882018-05-04 11:22:14 -070052
53 # Install Kubespray
Zack Williams249ac7f2018-05-18 13:34:14 -070054 echo "Installing Kubespray"
55 ansible-playbook -i "inventories/${DEPLOYMENT_NAME}/inventory.cfg" kubespray/cluster.yml -b -v
Luca Pretec97ad882018-05-04 11:22:14 -070056
Luca Pretec97ad882018-05-04 11:22:14 -070057}
58
59#
60# Exports the Kubespray Config Location
61#
62source_kubeconfig () {
Zack Williamsbb846a22018-06-26 14:57:17 -070063
64 kubeconfig_path="${PWD}/inventories/${DEPLOYMENT_NAME}/artifacts/admin.conf"
65
66 if [ -f "$kubeconfig_path" ]
67 then
68 # these options are annoying outside of scripts
69 set +e +u +o pipefail
70
71 echo "setting KUBECONFIG=$kubeconfig_path"
72
73 export KUBECONFIG="$kubeconfig_path"
74 else
75 echo "kubernetes admin.conf not found at: '$kubeconfig_path'"
76 exit 1
77 fi
Luca Pretec97ad882018-05-04 11:22:14 -070078}
79
80#
Luca Pretec97ad882018-05-04 11:22:14 -070081# Checks if an arbitrary pod name is given during specifc
82# operations.
83#
84check_pod_name () {
Zack Williams11b2e5c2018-05-18 09:50:54 -070085 if [ -z "$DEPLOYMENT_NAME" ]
Luca Pretec97ad882018-05-04 11:22:14 -070086 then
87 echo "Missing option: podname" >&2
88 echo " "
89 display_help
90 exit -1
91 fi
92}
93
94#
95# Displays the help menu.
96#
97display_help () {
98 echo "Usage: $0 {--install|--source|--help} [podname] [ip...] " >&2
99 echo " "
100 echo " -h, --help Display this help message."
101 echo " -i, --install Install Kubespray on <podname>"
102 echo " -s, --source Source the Kubectl config for <podname>"
103 echo " "
104 echo " podname An arbitrary name representing the pod"
Kailash Khalasi236b0f62018-06-27 08:50:39 -0700105 echo " ip The IP address of the remote node(s)"
Luca Pretec97ad882018-05-04 11:22:14 -0700106 echo " "
107 echo "Example usages:"
108 echo " ./setup.sh -i podname 192.168.10.100 192.168.10.101 192.168.10.102"
Zack Williams249ac7f2018-05-18 13:34:14 -0700109 echo " ./setup.sh -i podname (default is 10.90.0.101 10.90.0.102 10.90.0.103)"
Luca Pretec97ad882018-05-04 11:22:14 -0700110 echo " source setup.sh -s podname"
111}
112
113#
114# Init
115#
Kailash Khalasic09de4b2018-06-13 13:56:18 -0700116if [ $# -lt 2 ]
117then
118 display_help
119 exit 0
120fi
121
Luca Pretec97ad882018-05-04 11:22:14 -0700122CLI_OPT=$1
123DEPLOYMENT_NAME=$2
124shift 2
Zack Williams249ac7f2018-05-18 13:34:14 -0700125DEFAULT_NODES=(10.90.0.101 10.90.0.102 10.90.0.103)
126NODES=("${@:-${DEFAULT_NODES[@]}}")
127
128REMOTE_SSH_USER="${REMOTE_SSH_USER:-cord}"
Luca Pretec97ad882018-05-04 11:22:14 -0700129
130while :
131do
132 case $CLI_OPT in
133 -i | --install)
134 check_pod_name
Zack Williams249ac7f2018-05-18 13:34:14 -0700135 install_kubespray
Luca Pretec97ad882018-05-04 11:22:14 -0700136 exit 0
137 ;;
138 -h | --help)
139 display_help
140 exit 0
141 ;;
142 -s | --source)
143 check_pod_name
Zack Williams249ac7f2018-05-18 13:34:14 -0700144 source_kubeconfig
Zack Williamsbb846a22018-06-26 14:57:17 -0700145 break
146 ;;
Luca Pretec97ad882018-05-04 11:22:14 -0700147 --) # End of all options
148 shift
149 break
150 ;;
151 *)
Zack Williams11b2e5c2018-05-18 09:50:54 -0700152 echo Error: Unknown option: "$CLI_OPT" >&2
Luca Pretec97ad882018-05-04 11:22:14 -0700153 echo " "
154 display_help
155 exit -1
156 ;;
157 esac
158done