From 19561a4cb44fe3a20a0eab50ce91d83790d0333d Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Mon, 27 Jun 2016 10:15:11 -0400 Subject: [PATCH] support local.conf instead of localrc This moves the bulk of devstack-gate to local.conf instead of localrc, which makes it so that we can do more interesting and complicated things with the devstack setup. grenade local.conf support Depends-On: I9bf5ac24dc87404e054068d7ed643e0bf0fac311 Change-Id: I111a6df3adc07ed426ac714cb9e64667a63e0e5a --- devstack-vm-gate.sh | 334 +++++++++++++++++++++----------------------- 1 file changed, 162 insertions(+), 172 deletions(-) diff --git a/devstack-vm-gate.sh b/devstack-vm-gate.sh index f0616b71..e1c99e64 100755 --- a/devstack-vm-gate.sh +++ b/devstack-vm-gate.sh @@ -20,6 +20,7 @@ # limitations under the License. set -o errexit +set -o xtrace # Keep track of the devstack directory TOP_DIR=$(cd $(dirname "$0") && pwd) @@ -29,6 +30,8 @@ TOP_DIR=$(cd $(dirname "$0") && pwd) # Import common functions source $TOP_DIR/functions.sh +# Get access to iniset and friends +source $BASE/new/devstack/inc/ini-config echo $PPID > $WORKSPACE/gate.pid source `dirname "$(readlink -f "$0")"`/functions.sh @@ -88,10 +91,8 @@ function setup_nova_net_networking { $sub_nodes ovs_vxlan_bridge "br_flat" $primary_node "False" 128 \ $sub_nodes - cat <>"$localrc" -FLAT_INTERFACE=br_flat -PUBLIC_INTERFACE=br_pub -EOF + localrc_set $localrc "FLAT_INTERFACE" "br_flat" + localrc_set $localrc "PUBLIC_INTERFACE" "br_pub" } function setup_multinode_connectivity { @@ -114,11 +115,11 @@ function setup_multinode_connectivity { # set explicit paths on all conf files we're writing so that # current working directory doesn't introduce subtle bugs. local devstack_dir=$BASE/$old_or_new/devstack - local sub_localrc=$devstack_dir/sub_localrc + local sub_localconf=$devstack_dir/sub_local.conf local localconf=$devstack_dir/local.conf set -x # for now enabling debug and do not turn it off - setup_localrc $old_or_new "$sub_localrc" "sub" + setup_localrc $old_or_new "$sub_localconf" "sub" local primary_node primary_node=$(cat /etc/nodepool/primary_node_private) @@ -126,14 +127,11 @@ function setup_multinode_connectivity { sub_nodes=$(cat /etc/nodepool/sub_nodes_private) if [[ "$DEVSTACK_GATE_NEUTRON" -ne '1' ]]; then setup_nova_net_networking $localrc $primary_node $sub_nodes - cat <>"$sub_localrc" -FLAT_INTERFACE=br_flat -PUBLIC_INTERFACE=br_pub -MULTI_HOST=True -EOF - cat <>"$localrc" -MULTI_HOST=True -EOF + localrc_set $sub_localconf "FLAT_INTERFACE" "br_flat" + localrc_set $sub_localconf "PUBLIC_INTERFACE" "br_pub" + localrc_set $sub_localconf "MULTI_HOST" "True" + # and on the master + localrc_set $localconf "MULTI_HOST" "True" elif [[ "$DEVSTACK_GATE_NEUTRON_DVR" -eq '1' ]]; then ovs_vxlan_bridge "br-ex" $primary_node "True" 1 \ $FLOATING_HOST_PREFIX $FLOATING_HOST_MASK \ @@ -191,10 +189,9 @@ EOF for NODE in $sub_nodes; do remote_copy_file /tmp/tmp_hosts $NODE:/tmp/tmp_hosts remote_command $NODE "cat /tmp/tmp_hosts | sudo tee --append /etc/hosts > /dev/null" - cp $sub_localrc /tmp/tmp_sub_localrc - echo "HOST_IP=$NODE" >> /tmp/tmp_sub_localrc - remote_copy_file /tmp/tmp_sub_localrc $NODE:$devstack_dir/localrc - remote_copy_file $localconf $NODE:$localconf + cp $sub_localconf /tmp/tmp_sub_localconf + localrc_set /tmp/tmp_sub_localconf "HOST_IP" "$NODE" + remote_copy_file /tmp/tmp_sub_localconf $NODE:$devstack_dir/local.conf done # NOTE(vsaienko) we need to have ssh connection among nodes to manage @@ -214,11 +211,12 @@ function setup_networking { # sauce to function. if [[ "$DEVSTACK_GATE_TOPOLOGY" != "multinode" ]] && \ [[ "$DEVSTACK_GATE_NEUTRON" -ne '1' ]]; then - local localrc=$BASE/new/devstack/localrc if [[ "$mode" == "grenade" ]]; then - localrc=$BASE/new/grenade/devstack.localrc + setup_nova_net_networking "$BASE/new/grenade/devstack.local.conf.base" "127.0.0.1" + setup_nova_net_networking "$BASE/new/grenade/devstack.local.conf.target" "127.0.0.1" + else + setup_nova_net_networking "$BASE/new/devstack/local.conf" "127.0.0.1" fi - setup_nova_net_networking "$localrc" "127.0.0.1" elif [[ "$DEVSTACK_GATE_TOPOLOGY" == "multinode" ]]; then setup_multinode_connectivity $mode fi @@ -289,131 +287,129 @@ function setup_localrc { fi if [[ ! -z $DEVSTACK_GATE_USE_PYTHON3 ]] ; then - echo "USE_PYTHON3=$DEVSTACK_GATE_USE_PYTHON3" >>"$localrc_file" + localrc_set $localrc_file "USE_PYTHON3" "$DEVSTACK_GATE_USE_PYTHON3" fi if [[ "$DEVSTACK_GATE_CEPH" == "1" ]]; then - echo "CINDER_ENABLED_BACKENDS=ceph:ceph" >>"$localrc_file" - echo "TEMPEST_STORAGE_PROTOCOL=ceph" >>"$localrc_file" + localrc_set $localrc_file "CINDER_ENABLED_BACKENDS" "ceph:ceph" + localrc_set $localrc_file "TEMPEST_STORAGE_PROTOCOL" "ceph" fi # the exercises we *don't* want to test on for devstack SKIP_EXERCISES=boot_from_volume,bundle,client-env,euca if [[ "$DEVSTACK_GATE_NEUTRON" -eq "1" ]]; then - echo "Q_USE_DEBUG_COMMAND=True" >>"$localrc_file" - echo "NETWORK_GATEWAY=10.1.0.1" >>"$localrc_file" + localrc_set $localrc_file "Q_USE_DEBUG_COMMAND" "True" + localrc_set $localrc_file "NETWORK_GATEWAY" "10.1.0.1" fi if [[ "$DEVSTACK_GATE_NEUTRON_DVR" -eq "1" ]]; then if [[ "$DEVSTACK_GATE_TOPOLOGY" != "aio" ]] && [[ $role = sub ]]; then # The role for L3 agents running on compute nodes is 'dvr' - echo "Q_DVR_MODE=dvr" >>"$localrc_file" + localrc_set $localrc_file "Q_DVR_MODE" "dvr" else # The role for L3 agents running on controller nodes is 'dvr_snat' - echo "Q_DVR_MODE=dvr_snat" >>"$localrc_file" + localrc_set $localrc_file "Q_DVR_MODE" "dvr_snat" fi fi - cat <>"$localrc_file" -USE_SCREEN=False -DEST=$BASE/$localrc_oldnew -# move DATA_DIR outside of DEST to keep DEST a bit cleaner -DATA_DIR=$BASE/data -ACTIVE_TIMEOUT=90 -BOOT_TIMEOUT=90 -ASSOCIATE_TIMEOUT=60 -TERMINATE_TIMEOUT=60 -MYSQL_PASSWORD=secretmysql -DATABASE_PASSWORD=secretdatabase -RABBIT_PASSWORD=secretrabbit -ADMIN_PASSWORD=secretadmin -SERVICE_PASSWORD=secretservice -SERVICE_TOKEN=111222333444 -SWIFT_HASH=1234123412341234 -ROOTSLEEP=0 -# ERROR_ON_CLONE should never be set to FALSE in gate jobs. -# Setting up git trees must be done by zuul -# because it needs specific git references directly from gerrit -# to correctly do testing. Otherwise you are not testing -# the code you have posted for review. -ERROR_ON_CLONE=True -# Since git clone can't be used for novnc in gates, force it to install the packages -NOVNC_FROM_PACKAGE=True -ENABLED_SERVICES=$MY_ENABLED_SERVICES -SKIP_EXERCISES=$SKIP_EXERCISES -# Screen console logs will capture service logs. -SYSLOG=False -SCREEN_LOGDIR=$BASE/$localrc_oldnew/screen-logs -LOGFILE=$BASE/$localrc_oldnew/devstacklog.txt -VERBOSE=True -FIXED_RANGE=$FIXED_RANGE -IPV4_ADDRS_SAFE_TO_USE=$IPV4_ADDRS_SAFE_TO_USE -FLOATING_RANGE=$FLOATING_RANGE -PUBLIC_NETWORK_GATEWAY=$PUBLIC_NETWORK_GATEWAY -FIXED_NETWORK_SIZE=4096 -VIRT_DRIVER=$DEVSTACK_GATE_VIRT_DRIVER -SWIFT_REPLICAS=1 -LOG_COLOR=False -# Don't reset the requirements.txt files after g-r updates -UNDO_REQUIREMENTS=False -CINDER_PERIODIC_INTERVAL=10 -export OS_NO_CACHE=True -CEILOMETER_BACKEND=$DEVSTACK_GATE_CEILOMETER_BACKEND -LIBS_FROM_GIT=$DEVSTACK_PROJECT_FROM_GIT -# set this until all testing platforms have libvirt >= 1.2.11 -# see bug #1501558 -EBTABLES_RACE_FIX=True -EOF + localrc_set "$localrc_file" "USE_SCREEN" "False" + localrc_set "$localrc_file" "DEST" "$BASE/$localrc_oldnew" + # move DATA_DIR outside of DEST to keep DEST a bit cleaner + localrc_set "$localrc_file" "DATA_DIR" "$BASE/data" + localrc_set "$localrc_file" "ACTIVE_TIMEOUT" "90" + localrc_set "$localrc_file" "BOOT_TIMEOUT" "90" + localrc_set "$localrc_file" "ASSOCIATE_TIMEOUT" "60" + localrc_set "$localrc_file" "TERMINATE_TIMEOUT" "60" + localrc_set "$localrc_file" "MYSQL_PASSWORD" "secretmysql" + localrc_set "$localrc_file" "DATABASE_PASSWORD" "secretdatabase" + localrc_set "$localrc_file" "RABBIT_PASSWORD" "secretrabbit" + localrc_set "$localrc_file" "ADMIN_PASSWORD" "secretadmin" + localrc_set "$localrc_file" "SERVICE_PASSWORD" "secretservice" + localrc_set "$localrc_file" "SERVICE_TOKEN" "111222333444" + localrc_set "$localrc_file" "SWIFT_HASH" "1234123412341234" + localrc_set "$localrc_file" "ROOTSLEEP" "0" + # ERROR_ON_CLONE should never be set to FALSE in gate jobs. + # Setting up git trees must be done by zuul + # because it needs specific git references directly from gerrit + # to correctly do testing. Otherwise you are not testing + # the code you have posted for review. + localrc_set "$localrc_file" "ERROR_ON_CLONE" "True" + # Since git clone can't be used for novnc in gates, force it to install the packages + localrc_set "$localrc_file" "NOVNC_FROM_PACKAGE" "True" + localrc_set "$localrc_file" "ENABLED_SERVICES" "$MY_ENABLED_SERVICES" + localrc_set "$localrc_file" "SKIP_EXERCISES" "$SKIP_EXERCISES" + # Screen console logs will capture service logs. + localrc_set "$localrc_file" "SYSLOG" "False" + localrc_set "$localrc_file" "SCREEN_LOGDIR" "$BASE/$localrc_oldnew/screen-logs" + localrc_set "$localrc_file" "LOGFILE" "$BASE/$localrc_oldnew/devstacklog.txt" + localrc_set "$localrc_file" "VERBOSE" "True" + localrc_set "$localrc_file" "FIXED_RANGE" "$FIXED_RANGE" + localrc_set "$localrc_file" "IPV4_ADDRS_SAFE_TO_USE" "$IPV4_ADDRS_SAFE_TO_USE" + localrc_set "$localrc_file" "FLOATING_RANGE" "$FLOATING_RANGE" + localrc_set "$localrc_file" "PUBLIC_NETWORK_GATEWAY" "$PUBLIC_NETWORK_GATEWAY" + localrc_set "$localrc_file" "FIXED_NETWORK_SIZE" "4096" + localrc_set "$localrc_file" "VIRT_DRIVER" "$DEVSTACK_GATE_VIRT_DRIVER" + localrc_set "$localrc_file" "SWIFT_REPLICAS" "1" + localrc_set "$localrc_file" "LOG_COLOR" "False" + # Don't reset the requirements.txt files after g-r updates + localrc_set "$localrc_file" "UNDO_REQUIREMENTS" "False" + localrc_set "$localrc_file" "CINDER_PERIODIC_INTERVAL" "10" + localrc_set "$localrc_file" "export OS_NO_CACHE" "True" + localrc_set "$localrc_file" "CEILOMETER_BACKEND" "$DEVSTACK_GATE_CEILOMETER_BACKEND" + localrc_set "$localrc_file" "LIBS_FROM_GIT" "$DEVSTACK_PROJECT_FROM_GIT" + # set this until all testing platforms have libvirt >= 1.2.11 + # see bug #1501558 + localrc_set "$localrc_file" "EBTABLES_RACE_FIX" "True" if [[ "$DEVSTACK_GATE_TOPOLOGY" == "multinode" ]] && [[ $DEVSTACK_GATE_NEUTRON -eq "1" ]]; then # Reduce the MTU on br-ex to match the MTU of underlying tunnels - echo "PUBLIC_BRIDGE_MTU=$EXTERNAL_BRIDGE_MTU" >>"$localrc_file" + localrc_set "$localrc_file" "PUBLIC_BRIDGE_MTU" "$EXTERNAL_BRIDGE_MTU" fi if [[ "$DEVSTACK_CINDER_SECURE_DELETE" -eq "0" ]]; then - echo "CINDER_SECURE_DELETE=False" >>"$localrc_file" + localrc_set "$localrc_file" "CINDER_SECURE_DELETE" "False" fi - echo "CINDER_VOLUME_CLEAR=${DEVSTACK_CINDER_VOLUME_CLEAR}" >>"$localrc_file" + localrc_set "$localrc_file" "CINDER_VOLUME_CLEAR" "${DEVSTACK_CINDER_VOLUME_CLEAR}" if [[ "$DEVSTACK_GATE_TEMPEST_HEAT_SLOW" -eq "1" ]]; then - echo "HEAT_CREATE_TEST_IMAGE=False" >>"$localrc_file" + localrc_set "$localrc_file" "HEAT_CREATE_TEST_IMAGE" "False" # Use Fedora 20 for heat test image, it has heat-cfntools pre-installed - echo "HEAT_FETCHED_TEST_IMAGE=Fedora-i386-20-20131211.1-sda" >>"$localrc_file" + localrc_set "$localrc_file" "HEAT_FETCHED_TEST_IMAGE" "Fedora-i386-20-20131211.1-sda" fi if [[ "$DEVSTACK_GATE_VIRT_DRIVER" == "libvirt" ]]; then if [[ -n "$DEVSTACK_GATE_LIBVIRT_TYPE" ]]; then - echo "LIBVIRT_TYPE=${DEVSTACK_GATE_LIBVIRT_TYPE}" >>"$localrc_file" + localrc_set "$localrc_file" "LIBVIRT_TYPE" "${DEVSTACK_GATE_LIBVIRT_TYPE}" fi fi if [[ "$DEVSTACK_GATE_VIRT_DRIVER" == "ironic" ]]; then export TEMPEST_OS_TEST_TIMEOUT=${DEVSTACK_GATE_OS_TEST_TIMEOUT:-1200} - echo "IRONIC_DEPLOY_DRIVER=$DEVSTACK_GATE_IRONIC_DRIVER" >>"$localrc_file" - echo "IRONIC_BAREMETAL_BASIC_OPS=True" >>"$localrc_file" - echo "IRONIC_VM_LOG_DIR=$BASE/$localrc_oldnew/ironic-bm-logs" >>"$localrc_file" - echo "DEFAULT_INSTANCE_TYPE=baremetal" >>"$localrc_file" - echo "BUILD_TIMEOUT=${DEVSTACK_GATE_TEMPEST_BAREMETAL_BUILD_TIMEOUT:-600}" >>"$localrc_file" - echo "IRONIC_CALLBACK_TIMEOUT=600" >>"$localrc_file" - echo "Q_AGENT=openvswitch" >>"$localrc_file" - echo "Q_ML2_TENANT_NETWORK_TYPE=vxlan" >>"$localrc_file" + localrc_set "$localrc_file" "IRONIC_DEPLOY_DRIVER" "$DEVSTACK_GATE_IRONIC_DRIVER" + localrc_set "$localrc_file" "IRONIC_BAREMETAL_BASIC_OPS" "True" + localrc_set "$localrc_file" "IRONIC_VM_LOG_DIR" "$BASE/$localrc_oldnew/ironic-bm-logs" + localrc_set "$localrc_file" "DEFAULT_INSTANCE_TYPE" "baremetal" + localrc_set "$localrc_file" "BUILD_TIMEOUT" "${DEVSTACK_GATE_TEMPEST_BAREMETAL_BUILD_TIMEOUT:-600}" + localrc_set "$localrc_file" "IRONIC_CALLBACK_TIMEOUT" "600" + localrc_set "$localrc_file" "Q_AGENT" "openvswitch" + localrc_set "$localrc_file" "Q_ML2_TENANT_NETWORK_TYPE" "vxlan" if [[ "$DEVSTACK_GATE_IRONIC_BUILD_RAMDISK" -eq 0 ]]; then - echo "IRONIC_BUILD_DEPLOY_RAMDISK=False" >>"$localrc_file" + localrc_set "$localrc_file" "IRONIC_BUILD_DEPLOY_RAMDISK" "False" else - echo "IRONIC_BUILD_DEPLOY_RAMDISK=True" >>"$localrc_file" + localrc_set "$localrc_file" "IRONIC_BUILD_DEPLOY_RAMDISK" "True" fi if [[ -z "${DEVSTACK_GATE_IRONIC_DRIVER%%agent*}" ]]; then - echo "SWIFT_ENABLE_TEMPURLS=True" >>"$localrc_file" - echo "SWIFT_TEMPURL_KEY=secretkey" >>"$localrc_file" - echo "IRONIC_ENABLED_DRIVERS=fake,agent_ssh,agent_ipmitool" >>"$localrc_file" + localrc_set "$localrc_file" "SWIFT_ENABLE_TEMPURLS" "True" + localrc_set "$localrc_file" "SWIFT_TEMPURL_KEY" "secretkey" + localrc_set "$localrc_file" "IRONIC_ENABLED_DRIVERS" "fake,agent_ssh,agent_ipmitool" # agent driver doesn't support ephemeral volumes yet - echo "IRONIC_VM_EPHEMERAL_DISK=0" >>"$localrc_file" + localrc_set "$localrc_file" "IRONIC_VM_EPHEMERAL_DISK" "0" # agent CoreOS ramdisk is a little heavy - echo "IRONIC_VM_SPECS_RAM=1024" >>"$localrc_file" + localrc_set "$localrc_file" "IRONIC_VM_SPECS_RAM" "1024" else - echo "IRONIC_ENABLED_DRIVERS=fake,pxe_ssh,pxe_ipmitool" >>"$localrc_file" - echo "IRONIC_VM_EPHEMERAL_DISK=1" >>"$localrc_file" + localrc_set "$localrc_file" "IRONIC_ENABLED_DRIVERS" "fake,pxe_ssh,pxe_ipmitool" + localrc_set "$localrc_file" "IRONIC_VM_EPHEMERAL_DISK" "1" fi fi @@ -422,44 +418,42 @@ EOF echo "XenAPI must have DEVSTACK_GATE_XENAPI_DOM0_IP, DEVSTACK_GATE_XENAPI_DOMU_IP and DEVSTACK_GATE_XENAPI_PASSWORD all set" exit 1 fi - cat >> "$localrc_file" << EOF -SKIP_EXERCISES=${SKIP_EXERCISES},volumes -XENAPI_PASSWORD=${DEVSTACK_GATE_XENAPI_PASSWORD} -XENAPI_CONNECTION_URL=http://${DEVSTACK_GATE_XENAPI_DOM0_IP} -VNCSERVER_PROXYCLIENT_ADDRESS=${DEVSTACK_GATE_XENAPI_DOM0_IP} -VIRT_DRIVER=xenserver + localrc_set "$localrc_file" "SKIP_EXERCISES" "${SKIP_EXERCISES},volumes" + localrc_set "$localrc_file" "XENAPI_PASSWORD" "${DEVSTACK_GATE_XENAPI_PASSWORD}" + localrc_set "$localrc_file" "XENAPI_CONNECTION_URL" "http://${DEVSTACK_GATE_XENAPI_DOM0_IP}" + localrc_set "$localrc_file" "VNCSERVER_PROXYCLIENT_ADDRESS" "${DEVSTACK_GATE_XENAPI_DOM0_IP}" + localrc_set "$localrc_file" "VIRT_DRIVER" "xenserver" -# A separate xapi network is created with this name-label -FLAT_NETWORK_BRIDGE=vmnet + # A separate xapi network is created with this name-label + localrc_set "$localrc_file" "FLAT_NETWORK_BRIDGE" "vmnet" -# A separate xapi network on eth4 serves the purpose of the public network. -# This interface is added in Citrix's XenServer environment as an internal -# interface -PUBLIC_INTERFACE=eth4 + # A separate xapi network on eth4 serves the purpose of the public network. + # This interface is added in Citrix's XenServer environment as an internal + # interface + localrc_set "$localrc_file" "PUBLIC_INTERFACE" "eth4" -# The xapi network "vmnet" is connected to eth3 in domU -# We need to explicitly specify these, as the devstack/xenserver driver -# sets GUEST_INTERFACE_DEFAULT -VLAN_INTERFACE=eth3 -FLAT_INTERFACE=eth3 + # The xapi network "vmnet" is connected to eth3 in domU + # We need to explicitly specify these, as the devstack/xenserver driver + # sets GUEST_INTERFACE_DEFAULT + localrc_set "$localrc_file" "VLAN_INTERFACE" "eth3" + localrc_set "$localrc_file" "FLAT_INTERFACE" "eth3" -# Explicitly set HOST_IP, so that it will be passed down to xapi, -# thus it will be able to reach glance -HOST_IP=${DEVSTACK_GATE_XENAPI_DOMU_IP} -SERVICE_HOST=${DEVSTACK_GATE_XENAPI_DOMU_IP} + # Explicitly set HOST_IP, so that it will be passed down to xapi, + # thus it will be able to reach glance + localrc_set "$localrc_file" "HOST_IP" "${DEVSTACK_GATE_XENAPI_DOMU_IP}" + localrc_set "$localrc_file" "SERVICE_HOST" "${DEVSTACK_GATE_XENAPI_DOMU_IP}" -# Disable firewall -XEN_FIREWALL_DRIVER=nova.virt.firewall.NoopFirewallDriver + # Disable firewall + localrc_set "$localrc_file" "XEN_FIREWALL_DRIVER" "nova.virt.firewall.NoopFirewallDriver" -# Disable agent -EXTRA_OPTS=("xenapi_disable_agent=True") + # Disable agent + localrc_set "$localrc_file" "EXTRA_OPTS" "(\"xenapi_disable_agent=True\")" -# Add a separate device for volumes -VOLUME_BACKING_DEVICE=/dev/xvdb + # Add a separate device for volumes + localrc_set "$localrc_file" "VOLUME_BACKING_DEVICE" "/dev/xvdb" -# Set multi-host config -MULTI_HOST=1 -EOF + # Set multi-host config + localrc_set "$localrc_file" "MULTI_HOST" "1" fi if [[ "$DEVSTACK_GATE_TEMPEST" -eq "1" ]]; then @@ -469,81 +463,81 @@ EOF # # The 24G setting is expected to be enough even # in parallel run. - echo "VOLUME_BACKING_FILE_SIZE=24G" >> "$localrc_file" + localrc_set "$localrc_file" "VOLUME_BACKING_FILE_SIZE" "24G" # in order to ensure glance http tests don't time out, we # specify the TEMPEST_HTTP_IMAGE address that's in infra on a # service we need to be up for anything to work anyway. - echo "TEMPEST_HTTP_IMAGE=http://git.openstack.org/static/openstack.png" >> "$localrc_file" + localrc_set "$localrc_file" "TEMPEST_HTTP_IMAGE" "http://git.openstack.org/static/openstack.png" fi if [[ "$DEVSTACK_GATE_TEMPEST_DISABLE_TENANT_ISOLATION" -eq "1" ]]; then - echo "TEMPEST_ALLOW_TENANT_ISOLATION=False" >>"$localrc_file" + localrc_set "$localrc_file" "TEMPEST_ALLOW_TENANT_ISOLATION" "False" fi if [[ -n "$DEVSTACK_GATE_GRENADE" ]]; then if [[ "$localrc_oldnew" == "old" ]]; then - echo "GRENADE_PHASE=base" >> "$localrc_file" + localrc_set "$localrc_file" "GRENADE_PHASE" "base" else - echo "GRENADE_PHASE=target" >> "$localrc_file" + localrc_set "$localrc_file" "GRENADE_PHASE" "target" fi - echo "CEILOMETER_USE_MOD_WSGI=False" >> "$localrc_file" + localrc_set "$localrc_file" "CEILOMETER_USE_MOD_WSGI" "False" fi if [[ "$DEVSTACK_GATE_TEMPEST_LARGE_OPS" -eq "1" ]]; then # NOTE(danms): Temporary transition to =NUM_RESOURCES - echo "VIRT_DRIVER=fake" >> "$localrc_file" - echo "TEMPEST_LARGE_OPS_NUMBER=50" >>"$localrc_file" + localrc_set "$localrc_file" "VIRT_DRIVER" "fake" + localrc_set "$localrc_file" "TEMPEST_LARGE_OPS_NUMBER" "50" elif [[ "$DEVSTACK_GATE_TEMPEST_LARGE_OPS" -gt "1" ]]; then # use fake virt driver and 10 copies of nova-compute - echo "VIRT_DRIVER=fake" >> "$localrc_file" + localrc_set "$localrc_file" "VIRT_DRIVER" "fake" # To make debugging easier, disabled until bug 1218575 is fixed. # echo "NUMBER_FAKE_NOVA_COMPUTE=10" >>"$localrc_file" - echo "TEMPEST_LARGE_OPS_NUMBER=$DEVSTACK_GATE_TEMPEST_LARGE_OPS" >>"$localrc_file" + localrc_set "$localrc_file" "TEMPEST_LARGE_OPS_NUMBER" "$DEVSTACK_GATE_TEMPEST_LARGE_OPS" fi if [[ "$DEVSTACK_GATE_CONFIGDRIVE" -eq "1" ]]; then - echo "FORCE_CONFIG_DRIVE=True" >>"$localrc_file" + localrc_set "$localrc_file" "FORCE_CONFIG_DRIVE" "True" else - echo "FORCE_CONFIG_DRIVE=False" >>"$localrc_file" + localrc_set "$localrc_file" "FORCE_CONFIG_DRIVE" "False" fi if [[ "$CEILOMETER_NOTIFICATION_TOPICS" ]]; then # Add specified ceilometer notification topics to localrc # Set to notifications,profiler to enable profiling - echo "CEILOMETER_NOTIFICATION_TOPICS=$CEILOMETER_NOTIFICATION_TOPICS" >>"$localrc_file" + localrc_set "$localrc_file" "CEILOMETER_NOTIFICATION_TOPICS" "$CEILOMETER_NOTIFICATION_TOPICS" fi if [[ "$DEVSTACK_GATE_INSTALL_TESTONLY" -eq "1" ]]; then # Sometimes we do want the test packages - echo "INSTALL_TESTONLY_PACKAGES=True" >> "$localrc_file" + localrc_set "$localrc_file" "INSTALL_TESTONLY_PACKAGES" "True" fi if [[ "$DEVSTACK_GATE_TOPOLOGY" != "aio" ]]; then - echo "NOVA_ALLOW_MOVE_TO_SAME_HOST=False" >> "$localrc_file" - echo "LIVE_MIGRATION_AVAILABLE=True" >> "$localrc_file" - echo "USE_BLOCK_MIGRATION_FOR_LIVE_MIGRATION=True" >> "$localrc_file" + localrc_set "$localrc_file" "NOVA_ALLOW_MOVE_TO_SAME_HOST" "False" + localrc_set "$localrc_file" "LIVE_MIGRATION_AVAILABLE" "True" + localrc_set "$localrc_file" "USE_BLOCK_MIGRATION_FOR_LIVE_MIGRATION" "True" local primary_node=`cat /etc/nodepool/primary_node_private` - echo "SERVICE_HOST=$primary_node" >>"$localrc_file" + localrc_set "$localrc_file" "SERVICE_HOST" "$primary_node" if [[ "$role" = sub ]]; then if [[ $original_enabled_services =~ "qpid" ]]; then - echo "QPID_HOST=$primary_node" >>"$localrc_file" + localrc_set "$localrc_file" "QPID_HOST" "$primary_node" fi if [[ $original_enabled_services =~ "rabbit" ]]; then - echo "RABBIT_HOST=$primary_node" >>"$localrc_file" + localrc_set "$localrc_file" "RABBIT_HOST" "$primary_node" fi - echo "DATABASE_HOST=$primary_node" >>"$localrc_file" + localrc_set "$localrc_file" "DATABASE_HOST" "$primary_node" if [[ $original_enabled_services =~ "mysql" ]]; then - echo "DATABASE_TYPE=mysql" >>"$localrc_file" + localrc_set "$localrc_file" "DATABASE_TYPE" "mysql" else - echo "DATABASE_TYPE=postgresql" >>"$localrc_file" + localrc_set "$localrc_file" "DATABASE_TYPE" "postgresql" fi - echo "GLANCE_HOSTPORT=$primary_node:9292" >>"$localrc_file" - echo "Q_HOST=$primary_node" >>"$localrc_file" + localrc_set "$localrc_file" "GLANCE_HOSTPORT" "$primary_node:9292" + localrc_set "$localrc_file" "Q_HOST" "$primary_node" # Set HOST_IP in subnodes before copying localrc to each node else - echo "HOST_IP=$primary_node" >>"$localrc_file" + localrc_set "$localrc_file" "HOST_IP" "$primary_node" fi fi @@ -554,7 +548,7 @@ EOF # If we are in a multinode environment, we may want to specify 2 # different sets of plugins if [[ -n "$DEVSTACK_SUBNODE_CONFIG" ]]; then - echo "$DEVSTACK_SUBNODE_CONFIG" >>"$localrc_file" + localrc_set "$localrc_file" "$DEVSTACK_SUBNODE_CONFIG" >>"$localrc_file" else if [[ -n "$DEVSTACK_LOCAL_CONFIG" ]]; then echo "$DEVSTACK_LOCAL_CONFIG" >>"$localrc_file" @@ -582,11 +576,9 @@ function setup_access_for_stack_user { } if [[ -n "$DEVSTACK_GATE_GRENADE" ]]; then - cd $BASE/old/devstack - setup_localrc "old" "localrc" "primary" - - cd $BASE/new/devstack - setup_localrc "new" "localrc" "primary" + cd $BASE/new/grenade + setup_localrc "old" "devstack.local.conf.base" "primary" + setup_localrc "new" "devstack.local.conf.target" "primary" cat <$BASE/new/grenade/localrc BASE_RELEASE=old @@ -614,14 +606,13 @@ EOF if [[ "$DEVSTACK_GATE_TOPOLOGY" == "multinode" ]]; then # ensure local.conf exists to remove conditional logic - touch local.conf if [[ $DEVSTACK_GATE_NEUTRON -eq "1" ]]; then - echo -e "[[post-config|\$NEUTRON_CONF]]\n[DEFAULT]\nglobal_physnet_mtu=$EXTERNAL_BRIDGE_MTU" >> local.conf + localconf_set "devstack.local.conf.base" "post-config" "\$NEUTRON_CONF" \ + "DEFAULT" "global_physnet_mtu" "$EXTERNAL_BRIDGE_MTU" + localconf_set "devstack.local.conf.target" "post-config" "\$NEUTRON_CONF" \ + "DEFAULT" "global_physnet_mtu" "$EXTERNAL_BRIDGE_MTU" fi - # get this in our base config - cp local.conf $BASE/old/devstack - # build the post-stack.sh config, this will be run as stack user so no sudo required cat > $BASE/new/grenade/post-stack.sh <> local.conf + localconf_set "local.conf" "post-config" "\$NEUTRON_CONF" \ + "DEFAULT" "global_physnet_mtu" "$EXTERNAL_BRIDGE_MTU" fi fi