instack-undercloud/scripts/instack-deploy-overcloud-tu...

153 lines
5.5 KiB
Bash
Executable File

#!/bin/bash
set -eux
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
# setup-baremetal requires this to be set
export TRIPLEO_ROOT=.
CPU=${CPU:-1}
MEM=${MEM:-3072}
DISK=${DISK:-30}
ARCH=${ARCH:-amd64}
MACS=${MACS:-}
PM_IPS=( ${PM_IPS:-} )
PM_USERS=( ${PM_USERS:-} )
PM_PASSWORDS=( ${PM_PASSWORDS:-} )
export USE_IRONIC=0
JSONFILE=nodes.json
rm -f $JSONFILE
echo '{}' > $JSONFILE
JSON=$(jq .nodes=[] $JSONFILE)
count=0
for mac in $MACS; do
if [ -n "${PM_IPS:-}" -a -n "${PM_USERS:-}" -a -n "${PM_PASSWORDS:-}" ]; then
JSON=$(jq ".nodes=(.nodes + [{mac:[\"$mac\"], cpu:\"$CPU\", memory:\"$MEM\", disk:\"$DISK\", arch:\"$ARCH\", pm_user:\"${PM_USERS[$count]}\", pm_addr:\"${PM_IPS[$count]}\", pm_password:\"${PM_PASSWORDS[$count]}\"}])" <<< $JSON)
else
JSON=$(jq ".nodes=(.nodes + [{mac:[\"$mac\"], cpu:\"$CPU\", memory:\"$MEM\", disk:\"$DISK\", arch:\"$ARCH\", pm_user:\"$USER\", pm_addr:\"ssh_host\", pm_password:\"ssh_key\"}])" <<< $JSON)
fi
count=$((count + 1))
done
echo $JSON | python -mjson.tool
echo $JSON > $JSONFILE
for i in ramdisk kernel; do
if glance image-show bm-deploy-$i 2>&1 1>/dev/null; then
glance image-delete bm-deploy-$i
fi
done
tripleo setup-baremetal --service-host undercloud --nodes <(jq '.nodes' $JSONFILE)
# Must wait for baremetal nodes to register as nova hypervisors
sleep 60
tripleo setup-overcloud-passwords -o
source tripleo-overcloud-passwords
# Define the interface that will be bridged onto the Neutron defined
# network.
NeutronPublicInterface=${NeutronPublicInterface:-eth0}
# 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}
export TUSKAR_URL=http://localhost:8585/
# tuskar needs the baremetal flavor id
flavor_id=$(nova flavor-show baremetal | grep '^| id ' | cut -d '|' -f3 | tr -d ' ')
controller_role_id=$(tuskar overcloud-role-list | grep overcloud-control | cut -d '|' -f2 | tr -d ' ')
compute_role_id=$(tuskar overcloud-role-list | grep overcloud-compute | cut -d '|' -f2 | tr -d ' ')
blockstorage_role_id=$(tuskar overcloud-role-list | grep overcloud-cinder-volume | cut -d '|' -f2 | tr -d ' ')
swiftstorage_role_id=$(tuskar overcloud-role-list | grep overcloud-swift-storage | cut -d '|' -f2 | tr -d ' ')
for id in $controller_role_id $compute_role_id $blockstorage_role_id; do
tuskar overcloud-role-update \
-f $flavor_id \
$id
done
COMPUTESCALE=${COMPUTESCALE:-1}
BLOCKSTORAGESCALE=${BLOCKSTORAGESCALE:-1}
SWIFTSTORAGESCALE=${SWIFTSTORAGESCALE:-1}
# create an overcloud with 1 controller and 1 compute node
tuskar overcloud-create overcloud \
--description "My overcloud" \
--attribute "AdminToken=${OVERCLOUD_ADMIN_TOKEN}" \
--attribute "AdminPassword=${OVERCLOUD_ADMIN_PASSWORD}" \
--attribute "CinderPassword=${OVERCLOUD_CINDER_PASSWORD}" \
--attribute "GlancePassword=${OVERCLOUD_GLANCE_PASSWORD}" \
--attribute "HeatPassword=${OVERCLOUD_HEAT_PASSWORD}" \
--attribute "NeutronPassword=${OVERCLOUD_NEUTRON_PASSWORD}" \
--attribute "NovaPassword=${OVERCLOUD_NOVA_PASSWORD}" \
--attribute "NeutronPublicInterface=$NeutronPublicInterface" \
--attribute "SwiftPassword=${OVERCLOUD_SWIFT_PASSWORD}" \
--attribute "SwiftHashSuffix=${OVERCLOUD_SWIFT_HASH}" \
--attribute "NovaComputeLibvirtType=$OVERCLOUD_LIBVIRT_TYPE" \
--attribute "GlanceLogFile=''" \
--attribute "NeutronDnsmasqOptions=dhcp-option-force=26,1400" \
--role-count $controller_role_id=1 \
--role-count $compute_role_id=$COMPUTESCALE \
--role-count $blockstorage_role_id=$BLOCKSTORAGESCALE \
--role-count $swiftstorage_role_id=$SWIFTSTORAGESCALE
tripleo wait_for_stack_ready 220 10 overcloud
echo "Overcloud CREATE_COMPLETE"
if [ -d /etc/tripleo ]; then
TRIPLEO_ROOT=/etc/tripleo
else
TRIPLEO_ROOT=/opt/stack/tripleo-incubator
fi
export OVERCLOUD_IP=$(nova list | grep notCompute0.*ctlplane | sed -e "s/.*=\\([0-9.]*\\).*/\1/")
touch ~/.ssh/known_hosts
chmod 600 ~/.ssh/known_hosts
ssh-keygen -R $OVERCLOUD_IP
export no_proxy=${no_proxy:-""}
export no_proxy=$no_proxy,$OVERCLOUD_IP
OVERCLOUD_ENDPOINT="http://$OVERCLOUD_IP:5000/v2.0"
NEW_JSON=$(jq '.overcloud.password="'${OVERCLOUD_ADMIN_PASSWORD}'" | .overcloud.endpoint="'${OVERCLOUD_ENDPOINT}'" | .overcloud.endpointhost="'${OVERCLOUD_IP}'"' $JSONFILE)
echo $NEW_JSON > $JSONFILE
export TE_DATAFILE=$JSONFILE
source $TRIPLEO_ROOT/overcloudrc
tripleo init-keystone -p $OVERCLOUD_ADMIN_PASSWORD $OVERCLOUD_ADMIN_TOKEN \
$OVERCLOUD_IP admin@example.com heat-admin@$OVERCLOUD_IP \
${SSLBASE:+--ssl $PUBLIC_API_URL}
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 \
${SSLBASE:+--ssl $PUBLIC_API_URL}
keystone role-create --name 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:-"172.17.0.45"}
FLOATING_IP_END=${FLOATING_IP_END:-"172.17.0.64"}
FLOATING_IP_CIDR=${FLOATING_IP_CIDR:-"172.17.0.0/16"}
tripleo setup-neutron "" "" $NETWORK_CIDR "" "" "" $FLOATING_IP_START $FLOATING_IP_END $FLOATING_IP_CIDR
nova flavor-delete m1.tiny
nova flavor-create m1.tiny 1 512 2 1
echo "Overcloud Deployed"