tripleo-quickstart-extras/roles/overcloud-deploy/templates/overcloud-deploy.sh.j2

110 lines
3.6 KiB
Django/Jinja

#!/bin/bash
set -ux
### --start_docs
## Deploying the overcloud
## =======================
## Prepare Your Environment
## ------------------------
## * Source in the undercloud credentials.
## ::
source {{ working_dir }}/stackrc
{% if hypervisor_wait|bool %}
### --stop_docs
# Wait until there are hypervisors available.
while true; do
count=$(openstack hypervisor stats show -c count -f value)
if [ $count -gt 0 ]; then
break
fi
done
{% endif %}
### --start_docs
{% if release in ['mitaka', 'liberty'] and set_overcloud_workers|bool %}
## * Include configuration necessary for the ping test here if requested via the
## ansible `test_ping` variable.
## ::
DEPLOY_ENV_YAML=/tmp/deploy_env.yaml
## * Set most service workers to 1 to minimise memory usage on
## the deployed overcloud when using the pingtest. We use this
## test over tempest when we are memory constrained, ie the HA jobs.
## ::
cat > $DEPLOY_ENV_YAML << EOENV
parameter_defaults:
controllerExtraConfig:
# In releases before Mitaka, HeatWorkers doesn't modify
# num_engine_workers, so handle via heat::config
heat::config::heat_config:
DEFAULT/num_engine_workers:
value: 1
heat::api_cloudwatch::enabled: false
heat::api_cfn::enabled: false
HeatWorkers: 1
CeilometerWorkers: 1
CinderWorkers: 1
GlanceWorkers: 1
KeystoneWorkers: 1
NeutronWorkers: 1
NovaWorkers: 1
SwiftWorkers: 1
EOENV
{% endif %}
## * Deploy the overcloud!
## ::
openstack overcloud deploy \
--templates {{overcloud_templates_path}} \
{{ deploy_args | regex_replace("\n", " ") }} \
${DEPLOY_ENV_YAML:+-e $DEPLOY_ENV_YAML} "$@" && status_code=0 || status_code=$?
### --stop_docs
# Check if the deployment has started. If not, exit gracefully. If yes, check for errors.
if ! openstack stack list | grep -q overcloud; then
echo "overcloud deployment not started. Check the deploy configurations"
exit 1
# We don't always get a useful error code from the openstack deploy command,
# so check `openstack stack list` for a CREATE_COMPLETE or an UPDATE_COMPLETE
# status.
elif ! openstack stack list | grep -Eq '(CREATE|UPDATE)_COMPLETE'; then
{%if release not in ['mitaka', 'liberty'] %}
# get the failures list
openstack stack failures list overcloud --long > {{ failed_deployment_list }} || true
# NOTE(emilien) "openstack overcloud failures" was introduced in Rocky
openstack overcloud failures >> {{ failed_deployment_list }} || true
{% endif %}
# get any puppet related errors
for failed in $(openstack stack resource list \
--nested-depth 5 overcloud | grep FAILED |
grep 'StructuredDeployment ' | cut -d '|' -f3)
do
echo "openstack software deployment show output for deployment: $failed" >> {{ failed_deployments_log }}
echo "######################################################" >> {{ failed_deployments_log }}
openstack software deployment show $failed >> {{ failed_deployments_log }}
echo "######################################################" >> {{ failed_deployments_log }}
echo "puppet standard error for deployment: $failed" >> {{ failed_deployments_log }}
echo "######################################################" >> {{ failed_deployments_log }}
# the sed part removes color codes from the text
openstack software deployment show $failed -f json |
jq -r .output_values.deploy_stderr |
sed -r "s:\x1B\[[0-9;]*[mK]::g" >> {{ failed_deployments_log }}
echo "######################################################" >> {{ failed_deployments_log }}
# We need to exit with 1 because of the above || true
done
exit 1
fi
exit $status_code