instack-undercloud/scripts/instack-deploy-overcloud
Ben Nemec de2fd78826 Register ceilometer endpoint
It looks like this got disabled temporarily at some point, and then
never turned back on.  It makes ceilometer in the overcloud fail
to work, so let's register the endpoint again.

Change-Id: Ibac1bd836f795862d1023d6e8c3e743d155cf448
2015-05-15 13:01:05 -05:00

520 lines
20 KiB
Bash
Executable File

#!/bin/bash
set -eux
set -o pipefail
SCRIPT_NAME=$(basename $0)
OS_AUTH_URL=${OS_AUTH_URL:-""}
if [ -z "$OS_AUTH_URL" ]; then
echo "You must source a stackrc file for the Undercloud."
exit 1
fi
TUSKAR=
# Default stack create timeout, in minutes
# Note heat defaults to 60mins, which may not be enough when
# creating large overclouds, 240 aligns with the undercloud keystone
# token expiry, which is increased from the default 1 hour to 4.
TIMEOUT=240
function show_options () {
echo "Usage: $SCRIPT_NAME [options]"
echo
echo "Deploys an Overcloud."
echo
echo "Options:"
echo " --tuskar -- will use tuskar for building the heat Template"
echo " --timeout -- create timeout in minutes, default $TIMEOUT"
echo
exit $1
}
TEMP=$(getopt -o ,h -l,tuskar,timeout:,help -n $SCRIPT_NAME -- "$@")
if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
# Note the quotes around `$TEMP': they are essential!
eval set -- "$TEMP"
while true ; do
case "$1" in
--tuskar) TUSKAR="1"; shift 1;;
--timeout) TIMEOUT="$2"; shift 2;;
-h | --help) show_options 0;;
--) shift ; break ;;
*) echo "Error: unsupported option $1." ; exit 1 ;;
esac
done
# setup-baremetal requires this to be set
export TRIPLEO_ROOT=.
export INSTACK_ROOT=${INSTACK_ROOT:-"/usr/share"}
export NODES_JSON=${NODES_JSON:-"instackenv.json"}
export USE_IRONIC=1
export ROOT_DISK=${ROOT_DISK:-10}
# Must wait for baremetal nodes to register as nova hypervisors
expected_nodes=$(jq ".nodes | length" $NODES_JSON)
expected_memory=$(jq ".nodes | map(.memory | tonumber) | add" $NODES_JSON)
expected_vcpus=$(jq ".nodes | map(.cpu | tonumber) | add" $NODES_JSON)
tripleo wait_for 180 1 wait_for_hypervisor_stats $expected_nodes $expected_memory $expected_vcpus
if heat stack-show overcloud > /dev/null; then
HEAT_OP=${HEAT_OP:-stack-update}
else
HEAT_OP=${HEAT_OP:-stack-create}
fi
if [ "$HEAT_OP" = "stack-create" ]; then
tripleo setup-overcloud-passwords -o tripleo-overcloud-passwords
else
tripleo setup-overcloud-passwords tripleo-overcloud-passwords
fi
source tripleo-overcloud-passwords
# Undercloud passwords must all be sourced into this script since we make use
# of $UNDERCLOUD_CEILOMETER_SNMPD_PASSWORD below
source tripleo-undercloud-passwords
NeutronFlatNetworks=${NeutronFlatNetworks:-'datacentre'}
NeutronPhysicalBridge=${NeutronPhysicalBridge:-'br-ex'}
NeutronBridgeMappings=${NeutronBridgeMappings:-'datacentre:br-ex'}
# Define the interface that will be bridged onto the Neutron defined
# network.
NeutronPublicInterface=${NeutronPublicInterface:-nic1}
HypervisorNeutronPublicInterface=${HypervisorNeutronPublicInterface:-$NeutronPublicInterface}
NEUTRON_NETWORK_TYPE=${NEUTRON_NETWORK_TYPE:-gre}
NEUTRON_TUNNEL_TYPES=${NEUTRON_TUNNEL_TYPES:-gre}
# Define the overcloud libvirt type for virtualization. kvm for
# baremetal, qemu for an overcloud running in vm's.
OVERCLOUD_LIBVIRT_TYPE=${OVERCLOUD_LIBVIRT_TYPE:-qemu}
NtpServer=${NtpServer:-""}
CONTROLSCALE=${CONTROLSCALE:-1}
COMPUTESCALE=${COMPUTESCALE:-1}
CEPHSTORAGESCALE=${CEPHSTORAGESCALE:-0}
BLOCKSTORAGESCALE=${BLOCKSTORAGESCALE:-0}
SWIFTSTORAGESCALE=${SWIFTSTORAGESCALE:-0}
# Default all image parameters to use overcloud-full
OVERCLOUD_CONTROLLER_IMAGE=${OVERCLOUD_CONTROLLER_IMAGE:-overcloud-full}
OVERCLOUD_COMPUTE_IMAGE=${OVERCLOUD_COMPUTE_IMAGE:-overcloud-full}
OVERCLOUD_BLOCKSTORAGE_IMAGE=${OVERCLOUD_BLOCKSTORAGE_IMAGE:-overcloud-full}
OVERCLOUD_SWIFTSTORAGE_IMAGE=${OVERCLOUD_SWIFTSTORAGE_IMAGE:-overcloud-full}
OVERCLOUD_CEPHSTORAGE_IMAGE=${OVERCLOUD_CEPHSTORAGE_IMAGE:-overcloud-full}
# Default flavor parameters
export OVERCLOUD_CONTROL_FLAVOR=${OVERCLOUD_CONTROL_FLAVOR:-"baremetal"}
export OVERCLOUD_COMPUTE_FLAVOR=${OVERCLOUD_COMPUTE_FLAVOR:-"baremetal"}
export OVERCLOUD_CEPHSTORAGE_FLAVOR=${OVERCLOUD_CEPHSTORAGE_FLAVOR:-"baremetal"}
# Even though we are not deploying nodes with these roles, the templates will
# still validate that a flavor exists, so just use the baremetal_compute flavor
# for now.
export OVERCLOUD_BLOCKSTORAGE_FLAVOR=${OVERCLOUD_BLOCKSTORAGE_FLAVOR:-"baremetal"}
export OVERCLOUD_SWIFTSTORAGE_FLAVOR=${OVERCLOUD_SWIFTSTORAGE_FLAVOR:-"baremetal"}
# Satellite parameters
export REG_ACTIVATION_KEY=${REG_ACTIVATION_KEY:-"''"}
export REG_ORG=${REG_ORG:-"''"}
export REG_FORCE=${REG_FORCE:-"1"}
export REG_SAT_URL=${REG_SAT_URL:-"''"}
export REG_METHOD=${REG_METHOD:-"''"}
# The modified resource registry must exist under
# /usr/share/openstack-tripleo-heat-templates for Tuskar's sake.
sudo cp /usr/share/instack-undercloud/heat-templates/overcloud-resource-registry-puppet-satellite.yaml \
/usr/share/openstack-tripleo-heat-templates
if [ "$REG_METHOD" = "satellite" ]; then
export OVERCLOUD_RESOURCE_REGISTRY=${OVERCLOUD_RESOURCE_REGISTRY:-"/usr/share/openstack-tripleo-heat-templates/overcloud-resource-registry-puppet-satellite.yaml"}
else
export OVERCLOUD_RESOURCE_REGISTRY=${OVERCLOUD_RESOURCE_REGISTRY:-"/usr/share/openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml"}
fi
NeutronControlPlaneID=$(neutron net-show ctlplane | grep ' id ' | awk '{print $4}')
# NOTE(gfidente): Taken from
# https://github.com/ceph/ceph-deploy/blob/master/ceph_deploy/new.py#L21
function create_cephx_key() {
local KEY=$(python -c 'import base64,os,struct,time;key = os.urandom(16);header = struct.pack("<hiih", 1, int(time.time()), 0, len(key));print(base64.b64encode(header + key))')
echo $KEY
}
if [ -n "$TUSKAR" ]; then
# Reload the tuskar resource registry that includes the satellite
# registration resource.
export TUSKAR_RESOURCE_REGISTRY=$OVERCLOUD_RESOURCE_REGISTRY
sudo -E /usr/libexec/os-refresh-config/configure.d/90-tuskar-db-sync
PLAN_ID=$(tuskar plan-show overcloud | awk '$2=="uuid" {print $4}')
if [ -n "$PLAN_ID" ]; then
tuskar plan-delete $PLAN_ID
fi
tuskar plan-create overcloud
PLAN_ID=$(tuskar plan-show overcloud | awk '$2=="uuid" {print $4}')
CONTROLLER_ID=$(tuskar role-list | awk '$4=="Controller" {print $2}')
COMPUTE_ID=$(tuskar role-list | awk '$4=="Compute" {print $2}')
SWIFT_ID=$(tuskar role-list | awk '$4=="Swift-Storage" {print $2}')
CINDER_ID=$(tuskar role-list | awk '$4=="Cinder-Storage" {print $2}')
CEPH_ID=$(tuskar role-list | awk '$4=="Ceph-Storage" {print $2}')
tuskar plan-add-role $PLAN_ID -r $CONTROLLER_ID
tuskar plan-add-role $PLAN_ID -r $COMPUTE_ID
tuskar plan-add-role $PLAN_ID -r $SWIFT_ID
tuskar plan-add-role $PLAN_ID -r $CINDER_ID
tuskar plan-add-role $PLAN_ID -r $CEPH_ID
export TUSKAR_PARAMETERS=${TUSKAR_PARAMETERS:-"
-A NeutronControlPlaneID=${NeutronControlPlaneID}
-A Controller-1::AdminPassword=${OVERCLOUD_ADMIN_PASSWORD}
-A Controller-1::AdminToken=${OVERCLOUD_ADMIN_TOKEN}
-A Compute-1::AdminPassword=${OVERCLOUD_ADMIN_PASSWORD}
-A Controller-1::SnmpdReadonlyUserPassword=${UNDERCLOUD_CEILOMETER_SNMPD_PASSWORD}
-A Cinder-Storage-1::SnmpdReadonlyUserPassword=${UNDERCLOUD_CEILOMETER_SNMPD_PASSWORD}
-A Swift-Storage-1::SnmpdReadonlyUserPassword=${UNDERCLOUD_CEILOMETER_SNMPD_PASSWORD}
-A Compute-1::SnmpdReadonlyUserPassword=${UNDERCLOUD_CEILOMETER_SNMPD_PASSWORD}
-A Controller-1::CeilometerPassword=${OVERCLOUD_CEILOMETER_PASSWORD}
-A Controller-1::CeilometerMeteringSecret=${OVERCLOUD_CEILOMETER_SECRET}
-A Compute-1::CeilometerPassword=${OVERCLOUD_CEILOMETER_PASSWORD}
-A Compute-1::CeilometerMeteringSecret=${OVERCLOUD_CEILOMETER_SECRET}
-A Controller-1::CinderPassword=${OVERCLOUD_CINDER_PASSWORD}
-A Controller-1::GlancePassword=${OVERCLOUD_GLANCE_PASSWORD}
-A Controller-1::HeatPassword=${OVERCLOUD_HEAT_PASSWORD}
-A Controller-1::NeutronPassword=${OVERCLOUD_NEUTRON_PASSWORD}
-A Compute-1::NeutronPassword=${OVERCLOUD_NEUTRON_PASSWORD}
-A Controller-1::NovaPassword=${OVERCLOUD_NOVA_PASSWORD}
-A Compute-1::NovaPassword=${OVERCLOUD_NOVA_PASSWORD}
-A Controller-1::SwiftHashSuffix=${OVERCLOUD_SWIFT_HASH}
-A Controller-1::SwiftPassword=${OVERCLOUD_SWIFT_PASSWORD}
-A Controller-1::CinderISCSIHelper=lioadm
-A Cinder-Storage-1::CinderISCSIHelper=lioadm
-A Controller-1::CloudName=overcloud
-A Controller-1::NeutronPublicInterface=$NeutronPublicInterface
-A Controller-1::NeutronBridgeMappings=$NeutronBridgeMappings
-A Compute-1::NeutronBridgeMappings=$NeutronBridgeMappings
-A Controller-1::NeutronFlatNetworks=$NeutronFlatNetworks
-A Compute-1::NeutronFlatNetworks=$NeutronFlatNetworks
-A Compute-1::NeutronPhysicalBridge=$NeutronPhysicalBridge
-A Compute-1::NeutronPublicInterface=$NeutronPublicInterface
-A Compute-1::NovaComputeLibvirtType=$OVERCLOUD_LIBVIRT_TYPE
-A Controller-1::NtpServer=${NtpServer}
-A Compute-1::NtpServer=${NtpServer}
-A Controller-1::NeutronNetworkType=${NEUTRON_NETWORK_TYPE}
-A Compute-1::NeutronNetworkType=${NEUTRON_NETWORK_TYPE}
-A Controller-1::NeutronTunnelTypes=${NEUTRON_TUNNEL_TYPES}
-A Compute-1::NeutronTunnelTypes=${NEUTRON_TUNNEL_TYPES}
-A Controller-1::count=${CONTROLSCALE}
-A Compute-1::count=${COMPUTESCALE}
-A Swift-Storage-1::count=${SWIFTSTORAGESCALE}
-A Cinder-Storage-1::count=${BLOCKSTORAGESCALE}
-A Ceph-Storage-1::count=${CEPHSTORAGESCALE}
-A Cinder-Storage-1::Flavor=${OVERCLOUD_BLOCKSTORAGE_FLAVOR}
-A Compute-1::Flavor=${OVERCLOUD_COMPUTE_FLAVOR}
-A Controller-1::Flavor=${OVERCLOUD_CONTROL_FLAVOR}
-A Swift-Storage-1::Flavor=${OVERCLOUD_SWIFTSTORAGE_FLAVOR}
-A Ceph-Storage-1::Flavor=${OVERCLOUD_CEPHSTORAGE_FLAVOR}
-A Swift-Storage-1::Image=${OVERCLOUD_SWIFTSTORAGE_IMAGE}
-A Cinder-Storage-1::Image=${OVERCLOUD_BLOCKSTORAGE_IMAGE}
-A Ceph-Storage-1::Image=${OVERCLOUD_BLOCKSTORAGE_IMAGE}
-A Controller-1::Image=${OVERCLOUD_CONTROLLER_IMAGE}
-A Compute-1::Image=${OVERCLOUD_COMPUTE_IMAGE}
"}
if [ $CONTROLSCALE -gt 1 ]; then
export TUSKAR_PARAMETERS="$TUSKAR_PARAMETERS
-A Controller-1::NeutronL3HA=True
-A Controller-1::NeutronAllowL3AgentFailover=False
-A Compute-1::NeutronL3HA=True
-A Compute-1::NeutronAllowL3AgentFailover=False
"
fi
# unsure if these should be present with puppet
#export TUSKAR_PARAMETERS="$TUSKAR_PARAMETERS
#-A cinder-storage-1::CinderPassword=${OVERCLOUD_CINDER_PASSWORD}
#-A swift-storage-1::NeutronNetworkType=${NEUTRON_NETWORK_TYPE}
#-A cinder-storage-1::AdminPassword=${OVERCLOUD_ADMIN_PASSWORD}
#"
if [ $CEPHSTORAGESCALE -gt 0 ]; then
FSID=$(uuidgen)
MON_KEY=$(create_cephx_key)
ADMIN_KEY=$(create_cephx_key)
CINDER_ISCSI=${CINDER_ISCSI:-0}
export TUSKAR_PARAMETERS="$TUSKAR_PARAMETERS
-A Controller-1::CinderEnableRbdBackend=True
-A Controller-1::GlanceBackend=rbd
-A CephClusterFSID=$FSID
-A CephMonKey=$MON_KEY
-A CephAdminKey=$ADMIN_KEY
-A Compute-1::NovaEnableRbdBackend=True
"
if [ $CINDER_ISCSI -eq 0 ]; then
export TUSKAR_PARAMETERS="$TUSKAR_PARAMETERS
-A Controller-1::CinderEnableIscsiBackend=false
"
else
# (this is the default parameter value)
export TUSKAR_PARAMETERS="$TUSKAR_PARAMETERS
-A Controller-1::CinderEnableIscsiBackend=true
"
fi
fi
# These attributes can't be changed in Tuskar-UI, so this is the only
# difference to deploying through UI
# -A NeutronDnsmasqOptions=dhcp-option-force=26,1400
# -A NeutronNetworkType=${NEUTRON_NETWORK_TYPE}
# -A NeutronTunnelTypes=${NEUTRON_TUNNEL_TYPES}
tuskar plan-update $TUSKAR_PARAMETERS $PLAN_ID
HEAT_ENV=${HEAT_ENV:-"overcloud-env.json"}
if [ -f $HEAT_ENV -a "$HEAT_OP" = "stack-update" ]; then
ENV_JSON=$(cat $HEAT_ENV)
else
ENV_JSON='{"parameters":{}}'
fi
jq . > "${HEAT_ENV}" <<< $ENV_JSON
chmod 0600 "${HEAT_ENV}"
if [ "$HEAT_OP" = "stack-create" ]; then
generate-keystone-pki --heatenv $HEAT_ENV
fi
KeystoneCACertificate=$(os-apply-config -m $HEAT_ENV --key parameters.KeystoneCACertificate --type raw)
KeystoneSigningCertificate=$(os-apply-config -m $HEAT_ENV --key parameters.KeystoneSigningCertificate --type raw)
KeystoneSigningKey=$(os-apply-config -m $HEAT_ENV --key parameters.KeystoneSigningKey --type raw)
# Sending the Certificates one by one, otherwise there are problems with escaping
tuskar plan-update -A Controller-1::KeystoneCACertificate="${KeystoneCACertificate}" $PLAN_ID
tuskar plan-update -A Controller-1::KeystoneSigningCertificate="${KeystoneSigningCertificate}" $PLAN_ID
tuskar plan-update -A Controller-1::KeystoneSigningKey="${KeystoneSigningKey}" $PLAN_ID
# Get templates from tuskar
tuskar plan-templates -O tuskar_templates $PLAN_ID
OVERCLOUD_YAML_PATH="tuskar_templates/plan.yaml"
ENVIRONMENT_YAML_PATH="tuskar_templates/environment.yaml"
if [ "$REG_METHOD" = "satellite" ]; then
mkdir -p tuskar_templates/extraconfig/post_deploy
cp -r /usr/share/openstack-tripleo-heat-templates/extraconfig/post_deploy/scripts tuskar_templates/extraconfig/post_deploy
echo "parameter_defaults:" >> $ENVIRONMENT_YAML_PATH
echo " rhel_reg_activation_key: $REG_ACTIVATION_KEY" >> $ENVIRONMENT_YAML_PATH
echo " rhel_reg_sat_url: $REG_SAT_URL" >> $ENVIRONMENT_YAML_PATH
echo " rhel_reg_org: $REG_ORG" >> $ENVIRONMENT_YAML_PATH
echo " rhel_reg_method: $REG_METHOD" >> $ENVIRONMENT_YAML_PATH
echo " rhel_reg_force: $REG_FORCE" >> $ENVIRONMENT_YAML_PATH
fi
heat $HEAT_OP -t $TIMEOUT -f $OVERCLOUD_YAML_PATH \
-e $ENVIRONMENT_YAML_PATH \
overcloud
else
OVERCLOUD_YAML_PATH="$INSTACK_ROOT/openstack-tripleo-heat-templates/overcloud-without-mergepy.yaml"
export OVERCLOUD_PARAMETERS=${OVERCLOUD_PARAMETERS:-"\
-P AdminPassword=${OVERCLOUD_ADMIN_PASSWORD} \
-P AdminToken=${OVERCLOUD_ADMIN_TOKEN} \
-P CeilometerPassword=${OVERCLOUD_CEILOMETER_PASSWORD} \
-P CeilometerMeteringSecret=${OVERCLOUD_CEILOMETER_SECRET} \
-P CinderPassword=${OVERCLOUD_CINDER_PASSWORD} \
-P CinderISCSIHelper=lioadm \
-P CloudName=overcloud \
-P GlancePassword=${OVERCLOUD_GLANCE_PASSWORD} \
-P HeatPassword=${OVERCLOUD_HEAT_PASSWORD} \
-P NeutronControlPlaneID=$NeutronControlPlaneID \
-P NeutronDnsmasqOptions=dhcp-option-force=26,1400 \
-P NeutronPassword=${OVERCLOUD_NEUTRON_PASSWORD} \
-P NeutronPublicInterface=$NeutronPublicInterface \
-P NeutronBridgeMappings=$NeutronBridgeMappings \
-P NeutronFlatNetworks=$NeutronFlatNetworks \
-P HypervisorNeutronPhysicalBridge=$NeutronPhysicalBridge \
-P HypervisorNeutronPublicInterface=$HypervisorNeutronPublicInterface \
-P NovaComputeLibvirtType=$OVERCLOUD_LIBVIRT_TYPE \
-P NovaPassword=${OVERCLOUD_NOVA_PASSWORD} \
-P SwiftHashSuffix=${OVERCLOUD_SWIFT_HASH} \
-P SwiftPassword=${OVERCLOUD_SWIFT_PASSWORD} \
-P NeutronNetworkType=${NEUTRON_NETWORK_TYPE} \
-P NeutronTunnelTypes=${NEUTRON_TUNNEL_TYPES} \
-P SnmpdReadonlyUserPassword=${UNDERCLOUD_CEILOMETER_SNMPD_PASSWORD} \
-P OvercloudControlFlavor=${OVERCLOUD_CONTROL_FLAVOR} \
-P OvercloudComputeFlavor=${OVERCLOUD_COMPUTE_FLAVOR} \
-P OvercloudBlockStorageFlavor=${OVERCLOUD_BLOCKSTORAGE_FLAVOR} \
-P OvercloudSwiftStorageFlavor=${OVERCLOUD_SWIFTSTORAGE_FLAVOR} \
-P OvercloudCephStorageFlavor=${OVERCLOUD_CEPHSTORAGE_FLAVOR} \
-P NtpServer=${NtpServer} \
-P controllerImage=${OVERCLOUD_CONTROLLER_IMAGE} \
-P NovaImage=${OVERCLOUD_COMPUTE_IMAGE} \
-P BlockStorageImage=${OVERCLOUD_BLOCKSTORAGE_IMAGE} \
-P SwiftStorageImage=${OVERCLOUD_SWIFTSTORAGE_IMAGE} \
-P CephStorageImage=${OVERCLOUD_SWIFTSTORAGE_IMAGE} \
-P Debug=True \
"}
if [ $CONTROLSCALE -gt 1 ]; then
export OVERCLOUD_PARAMETERS="$OVERCLOUD_PARAMETERS \
-P NeutronL3HA=True \
-P NeutronAllowL3AgentFailover=False \
"
fi
if [ $CEPHSTORAGESCALE -gt 0 ]; then
FSID=$(uuidgen)
MON_KEY=$(create_cephx_key)
ADMIN_KEY=$(create_cephx_key)
CINDER_ISCSI=${CINDER_ISCSI:-0}
export OVERCLOUD_PARAMETERS="$OVERCLOUD_PARAMETERS \
-P CephClusterFSID=$FSID \
-P CephMonKey=$MON_KEY \
-P CephAdminKey=$ADMIN_KEY \
-P CinderEnableRbdBackend=True \
-P NovaEnableRbdBackend=True \
-P GlanceBackend=rbd \
"
if [ $CINDER_ISCSI -eq 0 ]; then
export OVERCLOUD_PARAMETERS="$OVERCLOUD_PARAMETERS \
-P CinderEnableIscsiBackend=False
"
else
# (this is the default parameter value)
export OVERCLOUD_PARAMETERS="$OVERCLOUD_PARAMETERS \
-P CinderEnableIscsiBackend=True
"
fi
fi
HEAT_ENV=${HEAT_ENV:-"overcloud-env.json"}
if [ -f $HEAT_ENV -a "$HEAT_OP" = "stack-update" ]; then
ENV_JSON=$(cat $HEAT_ENV)
else
ENV_JSON='{"parameters":{}}'
fi
RESOURCE_REGISTRY="-e $OVERCLOUD_RESOURCE_REGISTRY"
ENV_JSON=$(jq '.parameters = .parameters + {
"ControllerCount": '${CONTROLSCALE}',
"ComputeCount": '${COMPUTESCALE}',
"CephStorageCount": '${CEPHSTORAGESCALE}',
"BlockStorageCount": '${BLOCKSTORAGESCALE}',
"ObjectStorageCount": '${SWIFTSTORAGESCALE}'
}' <<< $ENV_JSON)
ENV_JSON=$(jq ".parameter_defaults.rhel_reg_activation_key = \"$REG_ACTIVATION_KEY\"" <<< $ENV_JSON)
ENV_JSON=$(jq ".parameter_defaults.rhel_reg_sat_url = \"$REG_SAT_URL\"" <<< $ENV_JSON)
ENV_JSON=$(jq ".parameter_defaults.rhel_reg_org = \"$REG_ORG\"" <<< $ENV_JSON)
ENV_JSON=$(jq ".parameter_defaults.rhel_reg_method = \"$REG_METHOD\"" <<< $ENV_JSON)
ENV_JSON=$(jq ".parameter_defaults.rhel_reg_force = \"$REG_FORCE\"" <<< $ENV_JSON)
jq . > "${HEAT_ENV}" <<< $ENV_JSON
chmod 0600 "${HEAT_ENV}"
if [ "$HEAT_OP" = "stack-create" ]; then
generate-keystone-pki --heatenv $HEAT_ENV
fi
HEAT_ENVIRONMENT="-e ${HEAT_ENV}"
heat $HEAT_OP -t $TIMEOUT -f $OVERCLOUD_YAML_PATH \
$RESOURCE_REGISTRY \
$OVERCLOUD_PARAMETERS \
$HEAT_ENVIRONMENT \
overcloud
fi
tripleo wait_for_stack_ready 220 10 overcloud
if [ "$HEAT_OP" = "stack-create" ]; then
echo "Overcloud CREATE_COMPLETE"
else
echo "Overcloud UPDATE_COMPLETE"
exit 0
fi
OVERCLOUD_ENDPOINT=$(heat output-show overcloud KeystoneURL|sed 's/^"\(.*\)"$/\1/')
export OVERCLOUD_IP=$(echo $OVERCLOUD_ENDPOINT | awk -F '[/:]' '{print $4}')
touch ~/.ssh/known_hosts
chmod 600 ~/.ssh/known_hosts
ssh-keygen -R $OVERCLOUD_IP
NEW_JSON=$(jq '.overcloud.password="'${OVERCLOUD_ADMIN_PASSWORD}'" | .overcloud.endpoint="'${OVERCLOUD_ENDPOINT}'" | .overcloud.endpointhost="'${OVERCLOUD_IP}'"' $NODES_JSON)
echo $NEW_JSON > $NODES_JSON
export TE_DATAFILE=$NODES_JSON
# We're done with TRIPLEO_ROOT at this point, and the value set above doesn't
# work for creating the overcloudrc file.
unset TRIPLEO_ROOT
instack-create-overcloudrc
source ~/overcloudrc
init-keystone -o $OVERCLOUD_IP -t $OVERCLOUD_ADMIN_TOKEN \
-e admin.example.com -p $OVERCLOUD_ADMIN_PASSWORD -u heat-admin \
${SSLBASE:+-s $PUBLIC_API_URL}
REGISTER_SERVICE_OPTS=""
openstack role create swiftoperator
openstack role create ResellerAdmin
tripleo setup-endpoints $OVERCLOUD_IP \
--cinder-password $OVERCLOUD_CINDER_PASSWORD \
--glance-password $OVERCLOUD_GLANCE_PASSWORD \
--heat-password $OVERCLOUD_HEAT_PASSWORD \
--neutron-password $OVERCLOUD_NEUTRON_PASSWORD \
--nova-password $OVERCLOUD_NOVA_PASSWORD \
--swift-password $OVERCLOUD_SWIFT_PASSWORD \
--ceilometer-password $OVERCLOUD_CEILOMETER_PASSWORD \
$REGISTER_SERVICE_OPTS \
${SSLBASE:+--ssl $PUBLIC_API_URL}
openstack role create heat_stack_user
# setup-neutron "" "" 10.0.0.0/8 "" "" "" "" 192.0.2.45 192.0.2.64 192.0.2.0/24
NETWORK_CIDR=${NETWORK_CIDR:-"10.0.0.0/8"}
FLOATING_IP_START=${FLOATING_IP_START:-"192.0.2.45"}
FLOATING_IP_END=${FLOATING_IP_END:-"192.0.2.64"}
FLOATING_IP_CIDR=${FLOATING_IP_CIDR:-"192.0.2.0/24"}
OVERCLOUD_NAMESERVER="8.8.8.8"
BM_NETWORK_GATEWAY=${BM_NETWORK_GATEWAY:-"192.0.2.1"}
NETWORK_JSON=$(mktemp)
jq "." <<EOF > $NETWORK_JSON
{
"float": {
"cidr": "$NETWORK_CIDR",
"name": "default-net",
"nameserver": "$OVERCLOUD_NAMESERVER"
},
"external": {
"name": "ext-net",
"cidr": "$FLOATING_IP_CIDR",
"allocation_start": "$FLOATING_IP_START",
"allocation_end": "$FLOATING_IP_END",
"gateway": "$BM_NETWORK_GATEWAY"
}
}
EOF
setup-neutron -n $NETWORK_JSON
rm $NETWORK_JSON
nova flavor-create m1.demo auto 512 10 1
echo "Overcloud Deployed"