#!/bin/bash # # This script can be used to interact with kolla via ansible. function find_base_dir { local real_path=$(python -c "import os;print(os.path.realpath('$0'))") local dir_name="$(dirname "$real_path")" if [[ ${dir_name} == "/usr/bin" ]]; then BASEDIR=/usr/share/kolla elif [[ ${dir_name} == "/usr/local/bin" ]]; then BASEDIR=/usr/local/share/kolla else BASEDIR="$(dirname ${dir_name})" fi } function process_cmd { echo "$ACTION : $CMD" $CMD if [[ $? -ne 0 ]]; then echo "Command failed $CMD" exit 1 fi } function usage { cat < Specify path to ansible inventory file --playbook, -p Specify path to ansible playbook file --configdir Specify path to directory with globals.yml --key -k Specify path to ansible vault keyfile --help, -h Show this usage information --tags, -t Only run plays and tasks tagged with these values --extra, -e Set additional variables as key=value or YAML/JSON passed to ansible-playbook --passwords Specify path to the passwords file --verbose, -v Increase verbosity of ansible-playbook Commands: prechecks Do pre-deployment checks for hosts mariadb_recovery Recover a completely stopped mariadb cluster bootstrap-servers bootstrap servers with kolla deploy dependencies destroy Destroy Kolla containers, volumes and host configuration (--include-images to also destroy Kolla images) deploy Deploy and start all kolla containers deploy-bifrost Deploy and start bifrost container deploy-servers Enroll and deploy servers with bifrost post-deploy Do post deploy on deploy node pull Pull all images for containers (only pulls, no running container changes) reconfigure Reconfigure OpenStack service certificates Generate self-signed certificate for TLS *For Development Only* upgrade Upgrades existing OpenStack Environment genconfig Generate configuration files for enabled OpenStack services EOF } SHORT_OPTS="hi:p:t:k:e:v" LONG_OPTS="help,inventory:,playbook:,tags:,key:,extra:,verbose,configdir:,passwords:,yes-i-really-really-mean-it,include-images" ARGS=$(getopt -o "${SHORT_OPTS}" -l "${LONG_OPTS}" --name "$0" -- "$@") || { usage >&2; exit 2; } eval set -- "$ARGS" find_base_dir INVENTORY="${BASEDIR}/ansible/inventory/all-in-one" PLAYBOOK="${BASEDIR}/ansible/site.yml" VERBOSITY= EXTRA_OPTS= CONFIG_DIR="/etc/kolla" PASSWORDS_FILE="${CONFIG_DIR}/passwords.yml" DANGER_CONFIRM= INCLUDE_IMAGES= while [ "$#" -gt 0 ]; do case "$1" in (--inventory|-i) INVENTORY="$2" shift 2 ;; (--playbook|-p) PLAYBOOK="$2" shift 2 ;; (--tags|-t) EXTRA_OPTS="$EXTRA_OPTS --tags $2" shift 2 ;; (--verbose|-v) VERBOSITY="$VERBOSITY --verbose" shift 1 ;; (--configdir) CONFIG_DIR="$2" shift 2 ;; (--yes-i-really-really-mean-it) DANGER_CONFIRM="$1" shift 1 ;; (--include-images) INCLUDE_IMAGES="$1" shift 1 ;; (--key|-k) VAULT_PASS_FILE="$2" EXTRA_OPTS="$EXTRA_OPTS --vault-password-file=$VAULT_PASS_FILE" shift 2 ;; (--extra|-e) EXTRA_OPTS="$EXTRA_OPTS -e $2" shift 2 ;; (--passwords) PASSWORDS_FILE="$2" shift 2 ;; (--help|-h) usage shift exit 0 ;; (--) shift break ;; (*) echo "error" exit 3 ;; esac done case "$1" in (prechecks) ACTION="Pre-deployment checking" PLAYBOOK="${BASEDIR}/ansible/prechecks.yml" ;; (mariadb_recovery) ACTION="Attempting to restart mariadb cluster" EXTRA_OPTS="$EXTRA_OPTS -e action=deploy" PLAYBOOK="${BASEDIR}/ansible/mariadb_recovery.yml" ;; (destroy) ACTION="Destroy Kolla containers, volumes and host configuration" PLAYBOOK="${BASEDIR}/ansible/destroy.yml" if [[ "${INCLUDE_IMAGES}" == "--include-images" ]]; then EXTRA_OPTS="$EXTRA_OPTS -e destroy_include_images=yes" fi if [[ "${DANGER_CONFIRM}" != "--yes-i-really-really-mean-it" ]]; then cat << EOF WARNING: This will PERMANENTLY DESTROY all deployed kolla containers, volumes and host configuration. There is no way to recover from this action. To confirm, please add the following option: --yes-i-really-really-mean-it EOF exit 1 fi ;; (bootstrap-servers) ACTION="Bootstraping servers" PLAYBOOK="${BASEDIR}/ansible/kolla-host.yml" EXTRA_OPTS="$EXTRA_OPTS -e action=bootstrap-servers" ;; (deploy) ACTION="Deploying Playbooks" EXTRA_OPTS="$EXTRA_OPTS -e action=deploy" ;; (deploy-bifrost) ACTION="Deploying Bifrost" PLAYBOOK="${BASEDIR}/ansible/bifrost.yml" EXTRA_OPTS="$EXTRA_OPTS -e action=deploy" ;; (deploy-servers) ACTION="Deploying servers with bifrost" PLAYBOOK="${BASEDIR}/ansible/bifrost.yml" EXTRA_OPTS="$EXTRA_OPTS -e action=deploy-servers" ;; (post-deploy) ACTION="Post-Deploying Playbooks" PLAYBOOK="${BASEDIR}/ansible/post-deploy.yml" ;; (pull) ACTION="Pulling Docker images" EXTRA_OPTS="$EXTRA_OPTS -e action=pull" ;; (upgrade) ACTION="Upgrading OpenStack Environment" EXTRA_OPTS="$EXTRA_OPTS -e action=upgrade -e serial=30%" ;; (reconfigure) ACTION="Reconfigure OpenStack service" EXTRA_OPTS="$EXTRA_OPTS -e action=reconfigure -e serial=30%" ;; (certificates) ACTION="Generate TLS Certificates" PLAYBOOK="${BASEDIR}/ansible/certificates.yml" ;; (genconfig) ACTION="Generate configuration files for enabled OpenStack services" EXTRA_OPTS="$EXTRA_OPTS -e action=config" ;; (*) usage exit 0 ;; esac CONFIG_OPTS="-e @${CONFIG_DIR}/globals.yml -e @${PASSWORDS_FILE} -e CONFIG_DIR=${CONFIG_DIR}" CMD="ansible-playbook -i $INVENTORY $CONFIG_OPTS $EXTRA_OPTS $PLAYBOOK $VERBOSITY" process_cmd