122 lines
5.1 KiB
Bash
Executable File
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
|