stackube/install/deploy.sh
Pei Tong ba9fa99f6c blueprint cluster-installation
Add install tool

The tool aims to make the deploying of stackube as easy as possible.
User could set up a whole Stackube cluster automatically by using it.
It uses docker images provided by OpenStack Kolla Project to run a
containerized OpenStack, and uses kubeadm to deploy kubenetes, then
bootstrap the Stackube cluster.

Change-Id: I6f18cf4d1a792bc505f955937f000dc0967341ce
Implements: blueprint cluster-installation
2017-08-30 09:33:39 +00:00

124 lines
3.8 KiB
Bash

#!/bin/bash
# Copyright (c) 2017 OpenStack 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.
programDir=`dirname $0`
programDir=$(readlink -f $programDir)
parentDir="$(dirname $programDir)"
programDirBaseName=$(basename $programDir)
function usage {
echo "
Usage:
bash $(basename $0) CONFIG_FILE
"
}
[ "$1" ] || { usage; exit 1; }
[ -f "$1" ] || { echo "Error: $1 not exists or not a file!"; exit 1; }
source $(readlink -f $1) || { echo "'source $(readlink -f $1)' failed!"; exit 1; }
[ "${CONTROL_NODE_PUBLIC_IP}" ] || { echo "Error: CONTROL_NODE_PUBLIC_IP not defined!"; exit 1; }
[ "${CONTROL_NODE_PRIVATE_IP}" ] || { echo "Error: CONTROL_NODE_PRIVATE_IP not defined!"; exit 1; }
[ "${NETWORK_NODES_PRIVATE_IP}" ] || { echo "Error: NETWORK_NODES_PRIVATE_IP not defined!"; exit 1; }
[ "${NETWORK_NODES_NEUTRON_EXT_IF}" ] || { echo "Error: NETWORK_NODES_NEUTRON_EXT_IF not defined!"; exit 1; }
[ "${COMPUTE_NODES_PRIVATE_IP}" ] || { echo "Error: COMPUTE_NODES_PRIVATE_IP not defined!"; exit 1; }
[ "${STORAGE_NODES_PRIVATE_IP}" ] || { echo "Error: STORAGE_NODES_PRIVATE_IP not defined!"; exit 1; }
[ "${STORAGE_NODES_CEPH_OSD_DATA_DIR}" ] || { echo "Error: STORAGE_NODES_CEPH_OSD_DATA_DIR not defined!"; exit 1; }
[ "${NEUTRON_PUBLIC_SUBNET}" ] || { echo "Error: NEUTRON_PUBLIC_SUBNET not defined!"; exit 1; }
#####################
function all_nodes_check_distro {
for IP in $1; do
ssh root@${IP} 'mkdir -p /tmp/stackube_install'
scp ${programDir}/{ensure_distro_supported.sh,lib_common.sh} root@${IP}:/tmp/stackube_install/
ssh root@${IP} "/bin/bash /tmp/stackube_install/ensure_distro_supported.sh"
done
}
function all_nodes_install_docker {
for IP in $1; do
ssh root@${IP} 'mkdir -p /tmp/stackube_install'
scp ${programDir}/ensure_docker_installed.sh root@${IP}:/tmp/stackube_install/
ssh root@${IP} "/bin/bash /tmp/stackube_install/ensure_docker_installed.sh"
done
}
set -o errexit
set -o nounset
set -o pipefail
set -x
## log
logDir='/var/log/stackube'
logFile="${logDir}/install.log-$(date '+%Y-%m-%d_%H-%M-%S')"
mkdir -p ${logDir}
allIpList=`echo "
${CONTROL_NODE_PRIVATE_IP}
${NETWORK_NODES_PRIVATE_IP}
${COMPUTE_NODES_PRIVATE_IP}
${STORAGE_NODES_PRIVATE_IP}" | sed -e 's/,/\n/g' | sort | uniq `
{
echo -e "\n$(date '+%Y-%m-%d %H:%M:%S') all_nodes_check_distro"
all_nodes_check_distro "${allIpList}"
echo -e "\n$(date '+%Y-%m-%d %H:%M:%S') all_nodes_install_docker"
all_nodes_install_docker "${allIpList}"
echo -e "\n$(date '+%Y-%m-%d %H:%M:%S') deploy_ceph"
bash ${programDir}/deploy_ceph.sh $(readlink -f $1)
echo -e "\n$(date '+%Y-%m-%d %H:%M:%S') deploy_openstack"
bash ${programDir}/deploy_openstack.sh $(readlink -f $1)
echo -e "\n$(date '+%Y-%m-%d %H:%M:%S') deploy_kubernetes"
bash ${programDir}/deploy_kubernetes.sh $(readlink -f $1)
echo -e "\n$(date '+%Y-%m-%d %H:%M:%S') All done!"
echo "
Additional information:
* File /etc/stackube/openstack/admin-openrc.sh has been created. To use openstack command line tools you need to source the file.
* File /etc/kubernetes/admin.conf has been created. To use kubectl you need to do 'export KUBECONFIG=/etc/kubernetes/admin.conf'.
* The installation log file is available at: ${logFile}
"
} 2>&1 | tee -a ${logFile}
exit 0