#!/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 [ -z "$SNAP" ]; then if [[ ${dir_name} == "/usr/bin" ]]; then BASEDIR=/usr/share/kolla-ansible elif [[ ${dir_name} == "/usr/local/bin" ]]; then BASEDIR=/usr/local/share/kolla-ansible elif [[ -n ${VIRTUAL_ENV} ]] && [[ ${dir_name} == "${VIRTUAL_ENV}/bin" ]]; then BASEDIR="${VIRTUAL_ENV}/share/kolla-ansible" else BASEDIR="$(dirname ${dir_name})" fi else BASEDIR="$SNAP/share/kolla-ansible" 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 --skip-tags Only run plays and tasks whose tags do not match these values --extra, -e Set additional variables as key=value or YAML/JSON passed to ansible-playbook --passwords Specify path to the passwords file --limit Specify host to run plays --forks Number of forks to run Ansible with --vault-id <@prompt or path> Specify @prompt or password file (Ansible >= 2.4) --ask-vault-pass Ask for vault password --vault-password-file Specify password file for vault decrypt --verbose, -v Increase verbosity of ansible-playbook Commands: prechecks Do pre-deployment checks for hosts check Do post-deployment smoke tests mariadb_recovery Recover a completely stopped mariadb cluster mariadb_backup Take a backup of MariaDB databases --full (default) --incremental bootstrap-servers Bootstrap servers with kolla deploy dependencies destroy Destroy Kolla containers, volumes and host configuration --include-images to also destroy Kolla images --include-dev to also destroy dev mode repos 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 stop Stop Kolla containers certificates Generate self-signed certificate for TLS *For Development Only* upgrade Upgrades existing OpenStack Environment genconfig Generate configuration files for enabled OpenStack services EOF } function bash_completion { cat <&2; exit 2; } eval set -- "$ARGS" find_base_dir INVENTORY="${BASEDIR}/ansible/inventory/all-in-one" PLAYBOOK="${BASEDIR}/ansible/site.yml" VERBOSITY= EXTRA_OPTS=${EXTRA_OPTS} CONFIG_DIR="/etc/kolla" PASSWORDS_FILE="${CONFIG_DIR}/passwords.yml" DANGER_CONFIRM= INCLUDE_IMAGES= INCLUDE_DEV= BACKUP_TYPE="full" # Serial is not recommended and disabled by default. Users can enable it by # configuring ANSIBLE_SERIAL variable. ANSIBLE_SERIAL=${ANSIBLE_SERIAL:-0} while [ "$#" -gt 0 ]; do case "$1" in (--inventory|-i) INVENTORY="$2" shift 2 ;; (--playbook|-p) PLAYBOOK="$2" shift 2 ;; (--skip-tags) EXTRA_OPTS="$EXTRA_OPTS --skip-tags $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) if [[ ${RAW_ARGS} =~ "$1" ]] then DANGER_CONFIRM="$1" fi shift 1 ;; (--include-images) INCLUDE_IMAGES="$1" shift 1 ;; (--include-dev) INCLUDE_DEV="$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 ;; (--limit) EXTRA_OPTS="$EXTRA_OPTS --limit $2" shift 2 ;; (--forks) EXTRA_OPTS="$EXTRA_OPTS --forks $2" shift 2 ;; (--vault-id) EXTRA_OPTS="$EXTRA_OPTS --vault-id $2" shift 2 ;; (--ask-vault-pass) VERBOSITY="$EXTRA_OPTS --ask-vault-pass" shift 1 ;; (--vault-password-file) EXTRA_OPTS="$EXTRA_OPTS --vault-password-file $2" shift 2 ;; (--full) BACKUP_TYPE="full" shift 1 ;; (--incremental) BACKUP_TYPE="incremental" shift 1 ;; (--help|-h) usage shift exit 0 ;; (--) shift break ;; (*) echo "error" exit 3 ;; esac done case "$1" in (prechecks) ACTION="Pre-deployment checking" EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=precheck" ;; (check) ACTION="Post-deployment checking" EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=check" ;; (mariadb_recovery) ACTION="Attempting to restart mariadb cluster" EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=deploy -e common_run=true" PLAYBOOK="${BASEDIR}/ansible/mariadb_recovery.yml" ;; (mariadb_backup) ACTION="Backup MariaDB databases" EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=backup -e mariadb_backup_type=${BACKUP_TYPE} -e common_run=true" PLAYBOOK="${BASEDIR}/ansible/mariadb_backup.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 [[ "${INCLUDE_DEV}" == "--include-dev" ]]; then EXTRA_OPTS="$EXTRA_OPTS -e destroy_include_dev=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 kolla_action=bootstrap-servers" ;; (deploy) ACTION="Deploying Playbooks" EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=deploy" ;; (deploy-bifrost) ACTION="Deploying Bifrost" PLAYBOOK="${BASEDIR}/ansible/bifrost.yml" EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=deploy" ;; (deploy-servers) ACTION="Deploying servers with bifrost" PLAYBOOK="${BASEDIR}/ansible/bifrost.yml" EXTRA_OPTS="$EXTRA_OPTS -e kolla_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 kolla_action=pull" ;; (upgrade) ACTION="Upgrading OpenStack Environment" EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=upgrade -e kolla_serial=${ANSIBLE_SERIAL}" ;; (reconfigure) ACTION="Reconfigure OpenStack service" EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=reconfigure -e kolla_serial=${ANSIBLE_SERIAL}" ;; (stop) ACTION="Stop Kolla containers" PLAYBOOK="${BASEDIR}/ansible/stop.yml" ;; (certificates) ACTION="Generate TLS Certificates" PLAYBOOK="${BASEDIR}/ansible/certificates.yml" ;; (genconfig) ACTION="Generate configuration files for enabled OpenStack services" EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=config" ;; (bash-completion) bash_completion exit 0 ;; (*) 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