#!/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 --keyfile, -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 deploy Deploy and start all kolla containers cleanup Cleanup containers, volumes and host 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:,keyfile:,extra:,verbose,configdir:,passwords:," 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" 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 ;; (--keyfile|-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" ;; (cleanup) ACTION="Cleanup containers, volumes and host" PLAYBOOK="${BASEDIR}/ansible/cleanup.yml" ;; (deploy) ACTION="Deploying Playbooks" EXTRA_OPTS="$EXTRA_OPTS -e action=deploy" ;; (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" ;; (reconfigure) ACTION="Reconfigure OpenStack service" EXTRA_OPTS="$EXTRA_OPTS -e action=reconfigure" ;; (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