tripleo-ci/scripts/te-broker/create-env

122 lines
5.1 KiB
Bash
Executable File

#!/bin/bash
set -ex
ENVNUM=${1:-$(date +%s)}
NODECOUNT=${2:-2}
UCINSTANCE=${3:-}
CREATE_UNDERCLOUD=${4:-""}
SSH_KEY=${5:-""}
# We recognize 3 values for NETISO: none, multi-nic, public-bond
NETISO=${6:-'multi-nic'}
COMPUTE_NODECOUNT=${7:-0}
PROVISIONNET=provision-${ENVNUM}
PUBLICNET=public-${ENVNUM}
ENVFILE=env-${ENVNUM}-base.yaml
COMPUTE_ENVFILE=env-${ENVNUM}-compute.yaml
ROLE_ARGS=
source /etc/nodepoolrc
if [ ! -e /opt/stack/openstack-virtual-baremetal ] ; then
sudo git clone https://github.com/cybertron/openstack-virtual-baremetal.git /opt/stack/openstack-virtual-baremetal
sudo chown -R $USER /opt/stack/openstack-virtual-baremetal
fi
cd /opt/stack/openstack-virtual-baremetal/
if [ -n "$SSH_KEY" ]; then
echo "$SSH_KEY" > temp-key-$ENVNUM.pub
KEY_NAME="tripleo-ci-key-$ENVNUM"
openstack keypair create --public-key temp-key-$ENVNUM.pub $KEY_NAME
else
KEY_NAME="tripleo-cd-admins"
fi
BUILD_NODES_JSON_EXTRA_ARGS=""
/bin/cp --remove-destination templates/env.yaml.example $ENVFILE
sed -i -e "s/bmc_image:.*/bmc_image: bmc-template/" $ENVFILE
sed -i -e "s/key_name:.*/key_name: ${KEY_NAME}/" $ENVFILE
sed -i -e "s/node_count:.*/node_count: ${NODECOUNT}/" $ENVFILE
sed -i -e "s/provision_net_shared:.*/provision_net_shared: true/" $ENVFILE
sed -i -e "s/public_net_shared:.*/public_net_shared: true/" $ENVFILE
if [[ $NODEPOOL_PROVIDER == "rdo-cloud-tripleo" ]]; then
sed -i -e "s/provision_net_shared:.*/provision_net_shared: false/" $ENVFILE
sed -i -e "s/public_net_shared:.*/public_net_shared: false/" $ENVFILE
sed -i -e "s/bmc_flavor:.*/bmc_flavor: ci.m1.small/" $ENVFILE
sed -i -e "s/baremetal_flavor:.*/baremetal_flavor: ci.m1.large/" $ENVFILE
fi
if [ -n "$CREATE_UNDERCLOUD" ]; then
sed -i -e "s/undercloud_name:.*/undercloud_name: extra-node/" $ENVFILE
sed -i -e "s/undercloud_flavor:.*/undercloud_flavor: m1.small/" $ENVFILE
BUILD_NODES_JSON_EXTRA_ARGS="--add_undercloud"
fi
echo 'parameter_defaults:' >> $ENVFILE
echo ' bmc_use_cache: True' >> $ENVFILE
if [ $COMPUTE_NODECOUNT -gt 0 ]; then
echo 'parameter_defaults:' >> $ENVFILE
echo ' role: control' >> $ENVFILE
fi
echo -e 'resource_registry:\n' >> $ENVFILE
echo ' OS::OVB::UndercloudPorts: templates/undercloud-ports-port-security.yaml' >> $ENVFILE
echo ' OS::OVB::BMCPort: templates/bmc-port-port-security.yaml' >> $ENVFILE
if [ -z "$CREATE_UNDERCLOUD" ]; then
echo ' OS::OVB::UndercloudEnvironment: OS::Heat::None' >> $ENVFILE
fi
echo ' OS::OVB::UndercloudFloating: templates/undercloud-floating-none.yaml' >> $ENVFILE
function add_net_iso_overrides() {
local outfile=$1
if [ $NETISO == 'multi-nic' ]; then
echo ' OS::OVB::BaremetalNetworks: templates/baremetal-networks-all.yaml' >> $outfile
echo ' OS::OVB::BaremetalPorts: templates/baremetal-ports-all-port-security.yaml' >> $outfile
elif [ $NETISO == 'public-bond' ]; then
echo ' OS::OVB::BaremetalNetworks: templates/baremetal-networks-all.yaml' >> $outfile
echo ' OS::OVB::BaremetalPorts: templates/baremetal-ports-public-bond-port-security.yaml' >> $outfile
else
echo ' OS::OVB::BaremetalPorts: templates/baremetal-ports-default-port-security.yaml' >> $outfile
fi
}
add_net_iso_overrides $ENVFILE
if [ $COMPUTE_NODECOUNT -gt 0 ]; then
/bin/cp --remove-destination templates/env-role.yaml.example $COMPUTE_ENVFILE
sed -i -e "s/baremetal_flavor:.*/baremetal_flavor: baremetal-compute/" $COMPUTE_ENVFILE
sed -i -e "s/key_name:.*/key_name: ${KEY_NAME}/" $COMPUTE_ENVFILE
sed -i -e "s/node_count:.*/node_count: ${COMPUTE_NODECOUNT}/" $COMPUTE_ENVFILE
# This is already the default in the template, but just to be safe.
sed -i -e "s/role:.*/role: compute/" $COMPUTE_ENVFILE
echo 'resource_registry:' >> $COMPUTE_ENVFILE
add_net_iso_overrides $COMPUTE_ENVFILE
ROLE_ARGS="--role $COMPUTE_ENVFILE"
fi
/opt/stack/openstack-virtual-baremetal/bin/deploy.py --env $ENVFILE --name baremetal_${ENVNUM} --quintupleo --id ${ENVNUM} $ROLE_ARGS
while ! heat stack-show baremetal_${ENVNUM} | grep CREATE_COMPLETE ; do
sleep 10
if heat stack-show baremetal_${ENVNUM} | grep CREATE_FAILED ; then
echo "Failed creating OVB stack" > $TE_DATAFILE
heat stack-show baremetal_${ENVNUM} >> $TE_DATAFILE 2>&1
openstack stack failures list --long baremetal_${ENVNUM} >> $TE_DATAFILE 2>&1 || echo 'Failed to list stack failures' >> $TE_DATAFILE
exit 0
fi
done
nova interface-attach --net-id $(neutron net-show -F id -f value $PROVISIONNET) $UCINSTANCE
if [ $NETISO != 'none' ]; then
nova interface-attach --net-id $(neutron net-show -F id -f value $PUBLICNET) $UCINSTANCE
fi
for PORT_SECURITY_NET in $PROVISIONNET $PUBLICNET; do
neutron port-update $(openstack port list --network $PORT_SECURITY_NET --server $UCINSTANCE -f value -c ID) \
--no-security-groups --port-security-enabled=False
done
# This writes out the env file as env-ID.yaml while overwrites the one we have created
/opt/stack/openstack-virtual-baremetal/bin/build-nodes-json --env env-${ENVNUM}.yaml \
--nodes_json ${TE_DATAFILE:-~/instackenv.json} $BUILD_NODES_JSON_EXTRA_ARGS