#!/bin/bash
# Get the Controller and Tools VM slave addresses
+set -x
+
ODL_SYSTEM=()
TOOLS_SYSTEM=()
OPENSTACK_SYSTEM=()
+OPENSTACK_CONTROLLERS=()
[ "$NUM_OPENSTACK_SITES" ] || NUM_OPENSTACK_SITES=1
OPENSTACK_VENV="/tmp/v/openstack"
ADDR=($(openstack stack show -f json -c outputs "$STACK_NAME" | \
jq -r '.outputs[] | select(.output_key | match("^vm_[0-9]+_ips$")) | .output_value | .[]'))
+# The next two blocks of code will parse the list of vm IP's hostnames to determine which type of node
+# the vm is: odl, devstack controller or compute, ha_proxy or tools. For the odl node's the hsotname will contain
+# java in the name. The tools nodes are anything left after odl and devstack nodes have been found.
+#
+# The devstack nodes are identified with devstack in the hostname but require more checks to determine the controller
+# node. Heat names the vms as devstack-<index> with index starting at 0. The vms are created in groups of which
+# the openstack jobs create a vm_1_group for the controller and vm_2_group for the other vms such as the compute
+# and ha_proxy nodes. The list of IP addresses for all the created vms is returned in reverse order of the group
+# creation, but ordered within the group. I.E vm_1_group will be created first and named devstack-0, followed by
+# vm_2_group and named devstack-0, devstack-1 and devstack-2. The list of IPs will be: devstack-0 (vm_2_group, compute),
+# devstack-1, devstack-2, devstack-0 (vm_1_group, controller). Notice both the compute and first control node are both
+# named devstack-0. We know the controller because it would be last in the list of IPs. This first block of code will
+# produce two lists: one for the list of potential controllers and the second is a list of all devstack nodes.
+
for i in "${ADDR[@]}"
do
REMHOST=$(ssh "${i}" hostname)
ODL_SYSTEM=( "${ODL_SYSTEM[@]}" "${i}" )
;;
*devstack*)
+ # track potential controllers which would have -0 at the end of the hostname
+ if [[ ${REMHOST: -2} == "-0" ]]; then
+ OPENSTACK_CONTROLLERS=( "${OPENSTACK_CONTROLLERS[@]}" "${i}" )
+ fi
+
OPENSTACK_SYSTEM=( "${OPENSTACK_SYSTEM[@]}" "${i}" )
;;
*)
fi
echo "NUM_OPENSTACK_SYSTEM=${NUM_OPENSTACK_SYSTEM}" >> slave_addresses.txt
+# Rearrange the devstack node list to place the controller at the beginning of the list. The later code expects
+# the list to be ordered with controller first followed by other types.
+#
+# At this point there is a list of potential devstack controllers as: devstack-0 (vm_2_group, compute),
+# devstack-0 (vm_1_group, controller) and there is the full list with other compute or ha_proxy nodes in the middle.
+# We know the controller is at the end of the devstack nodes list based on the ordering described above. Swap that entry
+# with the first entry.
+if [ ${#OPENSTACK_CONTROLLERS[@]} -eq 2 ]; then
+ ctrl_index=${#OPENSTACK_SYSTEM[@]}
+ ctrl_index=$((ctrl_index -1))
+ tmp_addr=${OPENSTACK_SYSTEM[0]}
+ OPENSTACK_SYSTEM[0]=${OPENSTACK_SYSTEM[$ctrl_index]}
+ OPENSTACK_SYSTEM[$ctrl_index]=$tmp_addr
+fi
+
# Add alias for ODL_SYSTEM_1_IP as ODL_SYSTEM_IP
echo "ODL_SYSTEM_IP=${ODL_SYSTEM[0]}" >> slave_addresses.txt
for i in $(seq 0 $(( ${#ODL_SYSTEM[@]} - 1 )))
do
echo "OPENSTACK_HAPROXY_$((i+1))_IP=${OPENSTACK_SYSTEM[$((openstack_index++))]}" >> slave_addresses.txt
done
+echo "Contents of slave_addresses.txt:"
+cat slave_addresses.txt
# vim: sw=4 ts=4 sts=4 et ft=sh :
- timed: '{schedule}'
builders:
- - integration-infra-stack:
+ - integration-infra-stack-3-type:
stack-template: '{stack-template}'
vm_0_count: '{odl_system_count}'
vm_0_flavor: '{odl_system_flavor}'
vm_1_count: '{openstack_system_count}'
vm_1_flavor: '{openstack_system_flavor}'
vm_1_image: '{openstack_system_image}'
+ vm_2_count: '{openstack_system2_count}'
+ vm_2_flavor: '{openstack_system2_flavor}'
+ vm_2_image: '{openstack_system2_image}'
- integration-install-robotframework
- inject:
properties-file: 'env.properties'
topology:
- 1node:
- openstack_system_count: 3
+ openstack_system_count: 1
+ openstack_system2_count: 2
odl_system_count: 1
enable-haproxy: 'no'
install-features: 'odl-netvirt-openstack'
- 3node:
- openstack_system_count: 4
+ openstack_system_count: 1
+ openstack_system2_count: 3
odl_system_count: 3
enable-haproxy: 'yes'
install-features: 'odl-jolokia,odl-netvirt-openstack'
topology:
- 1node:
- openstack_system_count: 3
+ openstack_system_count: 1
+ openstack_system2_count: 2
odl_system_count: 1
enable-haproxy: 'no'
install-features: 'odl-netvirt-openstack'
- 3node:
- openstack_system_count: 4
+ openstack_system_count: 1
+ openstack_system2_count: 3
odl_system_count: 3
enable-haproxy: 'yes'
install-features: 'odl-jolokia,odl-netvirt-openstack'
topology:
- 1node:
- openstack_system_count: 3
+ openstack_system_count: 1
+ openstack_system2_count: 2
+ stack-template: 'csit-3-instance-type.yaml'
odl_system_count: 1
enable-haproxy: 'no'
install-features: 'odl-netvirt-openstack'
- 3node:
- openstack_system_count: 4
+ openstack_system_count: 1
+ openstack_system2_count: 3
odl_system_count: 3
enable-haproxy: 'yes'
install-features: 'odl-jolokia,odl-netvirt-openstack'
openstack-branch: 'stable/newton'
odl-ml2-branch: 'stable/newton'
openstack_system_image: 'CentOS 7 - devstack-newton - 20170707-0359'
+ openstack_system2_image: 'CentOS 7 - devstack-newton - 20170707-0359'
- newton-nodl-v2:
openstack-branch: 'stable/newton'
odl-ml2-branch: 'stable/newton'
odl-ml2-driver-version: 'v2'
openstack_system_image: 'CentOS 7 - devstack-newton - 20170707-0359'
+ openstack_system2_image: 'CentOS 7 - devstack-newton - 20170707-0359'
- ocata:
openstack-branch: 'stable/ocata'
odl-ml2-branch: 'stable/ocata'
odl-ml2-driver-version: 'v2'
openstack_system_image: 'CentOS 7 - devstack-newton - 20170707-0359'
+ openstack_system2_image: 'CentOS 7 - devstack-newton - 20170707-0359'
security-group-mode: '{sg-mode}'
topology:
- 1node:
- openstack_system_count: 3
+ openstack_system_count: 1
+ openstack_system2_count: 2
odl_system_count: 1
enable-haproxy: 'no'
install-features: 'odl-netvirt-sfc'
topology:
- 1node:
- openstack_system_count: 3
+ openstack_system_count: 1
+ openstack_system2_count: 2
odl_system_count: 1
enable-haproxy: 'no'
install-features: 'odl-ovsdb-openstack,decanter-collector-jmx,decanter-appender-elasticsearch'
- 3node:
- openstack_system_count: 4
+ openstack_system_count: 1
+ openstack_system2_count: 3
odl_system_count: 3
enable-haproxy: 'yes'
install-features: 'odl-jolokia,odl-ovsdb-openstack,decanter-collector-jmx,decanter-appender-elasticsearch'
openstack_system_count: 1
openstack_system_flavor: 8 GB General Purpose v1
openstack_system_image: CentOS 7 - devstack - 20170609-0220
+ openstack_system2_count: 0
+ openstack_system2_flavor: 2 GB General Purpose v1
+ openstack_system2_image: CentOS 7 - devstack - 20170609-0220
tools_system_count: 1
tools_system_flavor: 2 GB General Purpose v1
tools_system_image: Ubuntu 14.04 - mininet - 20170609-0220