Merge "No need to loop over with pkill -f"
diff --git a/exercises/neutron-adv-test.sh b/exercises/neutron-adv-test.sh
index 1343f11..a9199e6 100755
--- a/exercises/neutron-adv-test.sh
+++ b/exercises/neutron-adv-test.sh
@@ -1,6 +1,11 @@
 #!/usr/bin/env bash
 #
-
+# Copyright 2012, Cisco Systems
+# Copyright 2012, VMware, Inc.
+# Copyright 2012, NTT MCL, Inc.
+#
+# Please direct any questions to dedutta@cisco.com, dwendlandt@vmware.com, nachi@nttmcl.com
+#
 # **neutron-adv-test.sh**
 
 # Perform integration testing of Nova and other components with Neutron.
@@ -406,14 +411,6 @@
 main() {
 
     echo Description
-    echo
-    echo Copyright 2012, Cisco Systems
-    echo Copyright 2012, VMware, Inc.
-    echo Copyright 2012, NTT MCL, Inc.
-    echo
-    echo Please direct any questions to dedutta@cisco.com, dwendlandt@vmware.com, nachi@nttmcl.com
-    echo
-
 
     if [ $# -eq 0 ] ; then
         # if no args are provided, run all tests
diff --git a/functions b/functions
index 73d65ce..281b676 100644
--- a/functions
+++ b/functions
@@ -1450,7 +1450,7 @@
         # vmdk disk type
         vmdk_create_type="$(head -25 $IMAGE | grep -a -F -m 1 'createType=' $IMAGE)"
         vmdk_create_type="${vmdk_create_type#*\"}"
-        vmdk_create_type="${vmdk_create_type%?}"
+        vmdk_create_type="${vmdk_create_type%\"*}"
 
         descriptor_data_pair_msg="Monolithic flat and VMFS disks "`
                                     `"should use a descriptor-data pair."
@@ -1495,6 +1495,8 @@
                 IMAGE_NAME="${flat_fname}"
             fi
             vmdk_disktype="preallocated"
+        elif [[ "$vmdk_create_type" = "streamOptimized" ]]; then
+            vmdk_disktype="streamOptimized"
         elif [[ -z "$vmdk_create_type" ]]; then
             # *-flat.vmdk provided: attempt to retrieve the descriptor (*.vmdk)
             # to retrieve appropriate metadata
@@ -1533,10 +1535,8 @@
                     vmdk_adapter_type="${vmdk_adapter_type%?}"
                 fi
             fi
-            #TODO(alegendre): handle streamOptimized once supported by the VMware driver.
             vmdk_disktype="preallocated"
         else
-            #TODO(alegendre): handle streamOptimized once supported by the VMware driver.
             vmdk_disktype="preallocated"
         fi
 
diff --git a/lib/baremetal b/lib/baremetal
index a0df85e..d8cd7e9 100644
--- a/lib/baremetal
+++ b/lib/baremetal
@@ -431,8 +431,7 @@
 
 function clear_baremetal_of_all_nodes() {
     list=$(nova baremetal-node-list | awk -F '| ' 'NR>3 {print $2}' )
-    for node in $list
-    do
+    for node in $list; do
         nova baremetal-node-delete $node
     done
 }
diff --git a/lib/glance b/lib/glance
index 00f499a..a5cb360 100644
--- a/lib/glance
+++ b/lib/glance
@@ -108,10 +108,8 @@
     iniset $GLANCE_API_CONF keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME
     iniset $GLANCE_API_CONF keystone_authtoken admin_user glance
     iniset $GLANCE_API_CONF keystone_authtoken admin_password $SERVICE_PASSWORD
-    if is_service_enabled qpid; then
-        iniset $GLANCE_API_CONF DEFAULT notifier_strategy qpid
-    elif [ -n "$RABBIT_HOST" ] &&  [ -n "$RABBIT_PASSWORD" ]; then
-        iniset $GLANCE_API_CONF DEFAULT notifier_strategy rabbit
+    if is_service_enabled qpid || [ -n "$RABBIT_HOST" ] && [ -n "$RABBIT_PASSWORD" ]; then
+        iniset $GLANCE_API_CONF DEFAULT notification_driver messaging
     fi
     iniset_rpc_backend glance $GLANCE_API_CONF DEFAULT
     iniset $GLANCE_API_CONF keystone_authtoken signing_dir $GLANCE_AUTH_CACHE_DIR/api
diff --git a/lib/heat b/lib/heat
index f171cb4..9f5dd8b 100644
--- a/lib/heat
+++ b/lib/heat
@@ -186,8 +186,7 @@
     local elements=$2
     local arch=$3
     local output=$TOP_DIR/files/$4
-    if [[ -f "$output.qcow2" ]];
-    then
+    if [[ -f "$output.qcow2" ]]; then
         echo "Image file already exists: $output_file"
     else
         ELEMENTS_PATH=$elements_path disk-image-create \
diff --git a/lib/neutron_plugins/bigswitch_floodlight b/lib/neutron_plugins/bigswitch_floodlight
index 93ec497..1e4aa00 100644
--- a/lib/neutron_plugins/bigswitch_floodlight
+++ b/lib/neutron_plugins/bigswitch_floodlight
@@ -44,16 +44,14 @@
 function neutron_plugin_configure_service() {
     iniset /$Q_PLUGIN_CONF_FILE restproxy servers $BS_FL_CONTROLLERS_PORT
     iniset /$Q_PLUGIN_CONF_FILE restproxy servertimeout $BS_FL_CONTROLLER_TIMEOUT
-    if [ "$BS_FL_VIF_DRIVER" = "ivs" ]
-    then
+    if [ "$BS_FL_VIF_DRIVER" = "ivs" ]; then
         iniset /$Q_PLUGIN_CONF_FILE nova vif_type ivs
     fi
 }
 
 function neutron_plugin_setup_interface_driver() {
     local conf_file=$1
-    if [ "$BS_FL_VIF_DRIVER" = "ivs" ]
-    then
+    if [ "$BS_FL_VIF_DRIVER" = "ivs" ]; then
         iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.IVSInterfaceDriver
     else
         iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
diff --git a/lib/neutron_plugins/nec b/lib/neutron_plugins/nec
index d8d8b7c..1cb2fef 100644
--- a/lib/neutron_plugins/nec
+++ b/lib/neutron_plugins/nec
@@ -106,8 +106,7 @@
     local id=0
     GRE_LOCAL_IP=${GRE_LOCAL_IP:-$HOST_IP}
     if [ -n "$GRE_REMOTE_IPS" ]; then
-        for ip in ${GRE_REMOTE_IPS//:/ }
-        do
+        for ip in ${GRE_REMOTE_IPS//:/ }; do
             if [[ "$ip" == "$GRE_LOCAL_IP" ]]; then
                 continue
             fi
diff --git a/lib/neutron_thirdparty/bigswitch_floodlight b/lib/neutron_thirdparty/bigswitch_floodlight
index 1fd4fd8..24c1044 100644
--- a/lib/neutron_thirdparty/bigswitch_floodlight
+++ b/lib/neutron_thirdparty/bigswitch_floodlight
@@ -24,8 +24,7 @@
     sudo ovs-vsctl --no-wait br-set-external-id ${OVS_BRIDGE} bridge-id ${OVS_BRIDGE}
 
     ctrls=
-    for ctrl in `echo ${BS_FL_CONTROLLERS_PORT} | tr ',' ' '`
-    do
+    for ctrl in `echo ${BS_FL_CONTROLLERS_PORT} | tr ',' ' '`; do
         ctrl=${ctrl%:*}
         ctrls="${ctrls} tcp:${ctrl}:${BS_FL_OF_PORT}"
     done
diff --git a/lib/nova b/lib/nova
index d5f7514..dbc5c3d 100644
--- a/lib/nova
+++ b/lib/nova
@@ -240,11 +240,6 @@
         sudo sysctl -w net.ipv4.ip_forward=1
 
         if [[ "$VIRT_DRIVER" = 'libvirt' ]]; then
-            # When libguestfs is available for file injection, enable using
-            # libguestfs to inspect the image and figure out the proper
-            # partition to inject into.
-            iniset $NOVA_CONF libvirt inject_partition '-1'
-
             # Check for kvm (hardware based virtualization).  If unable to initialize
             # kvm, we drop back to the slower emulation mode (qemu).  Note: many systems
             # come with hardware virtualization disabled in BIOS.
@@ -500,6 +495,12 @@
     iniset $NOVA_CONF DEFAULT ec2_dmz_host "$EC2_DMZ_HOST"
     iniset_rpc_backend nova $NOVA_CONF DEFAULT
     iniset $NOVA_CONF DEFAULT glance_api_servers "$GLANCE_HOSTPORT"
+
+    if [[ "$VIRT_DRIVER" = 'libvirt' ]]; then
+        # File injection is being disabled by default in the near future -
+        # disable it here for now to avoid surprises later.
+        iniset $NOVA_CONF libvirt inject_partition '-2'
+    fi
 }
 
 function init_nova_cells() {
diff --git a/lib/trove b/lib/trove
index 2000446..bb45491 100644
--- a/lib/trove
+++ b/lib/trove
@@ -148,8 +148,6 @@
     iniset $TROVE_CONF_DIR/trove.conf DEFAULT add_addresses True
 
     iniset $TROVE_LOCAL_CONF_DIR/trove-guestagent.conf.sample DEFAULT rabbit_password $RABBIT_PASSWORD
-    iniset $TROVE_LOCAL_CONF_DIR/trove-guestagent.conf.sample DEFAULT sql_connection `database_connection_url trove`
-    iniset $TROVE_LOCAL_CONF_DIR/trove-guestagent.conf.sample DEFAULT control_exchange trove
     sed -i "s/localhost/$NETWORK_GATEWAY/g" $TROVE_LOCAL_CONF_DIR/trove-guestagent.conf.sample
 
     setup_trove_logging $TROVE_CONF_DIR/trove.conf
diff --git a/stack.sh b/stack.sh
index 45d47c8..15e1430 100755
--- a/stack.sh
+++ b/stack.sh
@@ -1124,8 +1124,8 @@
 # Create a randomized default value for the keymgr's fixed_key
 if is_service_enabled nova; then
     FIXED_KEY=""
-    for i in $(seq 1 64);
-        do FIXED_KEY+=$(echo "obase=16; $(($RANDOM % 16))" | bc);
+    for i in $(seq 1 64); do
+        FIXED_KEY+=$(echo "obase=16; $(($RANDOM % 16))" | bc);
     done;
     iniset $NOVA_CONF keymgr fixed_key "$FIXED_KEY"
 fi
diff --git a/tests/functions.sh b/tests/functions.sh
index 95dafe1..06a4134 100755
--- a/tests/functions.sh
+++ b/tests/functions.sh
@@ -49,8 +49,7 @@
 
     ENABLED_SERVICES="$start"
     enable_service $add
-    if [ "$ENABLED_SERVICES" = "$finish" ]
-    then
+    if [ "$ENABLED_SERVICES" = "$finish" ]; then
         echo "OK: $start + $add -> $ENABLED_SERVICES"
     else
         echo "changing $start to $finish with $add failed: $ENABLED_SERVICES"
@@ -76,8 +75,7 @@
 
     ENABLED_SERVICES="$start"
     disable_service "$del"
-    if [ "$ENABLED_SERVICES" = "$finish" ]
-    then
+    if [ "$ENABLED_SERVICES" = "$finish" ]; then
         echo "OK: $start - $del -> $ENABLED_SERVICES"
     else
         echo "changing $start to $finish with $del failed: $ENABLED_SERVICES"
@@ -102,8 +100,7 @@
 ENABLED_SERVICES=a,b,c
 disable_all_services
 
-if [[ -z "$ENABLED_SERVICES" ]]
-then
+if [[ -z "$ENABLED_SERVICES" ]]; then
     echo "OK"
 else
     echo "disabling all services FAILED: $ENABLED_SERVICES"
@@ -118,8 +115,7 @@
 
     ENABLED_SERVICES="$start"
     disable_negated_services
-    if [ "$ENABLED_SERVICES" = "$finish" ]
-    then
+    if [ "$ENABLED_SERVICES" = "$finish" ]; then
         echo "OK: $start + $add -> $ENABLED_SERVICES"
     else
         echo "changing $start to $finish failed: $ENABLED_SERVICES"
diff --git a/tools/bash8.py b/tools/bash8.py
index edf7da4..7552e0d 100755
--- a/tools/bash8.py
+++ b/tools/bash8.py
@@ -21,17 +21,37 @@
 # Currently Supported checks
 #
 # Errors
+# Basic white space errors, for consistent indenting
 # - E001: check that lines do not end with trailing whitespace
 # - E002: ensure that indents are only spaces, and not hard tabs
 # - E003: ensure all indents are a multiple of 4 spaces
+#
+# Structure errors
+#
+# A set of rules that help keep things consistent in control blocks.
+# These are ignored on long lines that have a continuation, because
+# unrolling that is kind of "interesting"
+#
+# - E010: *do* not on the same line as *for*
+# - E011: *then* not on the same line as *if*
 
 import argparse
 import fileinput
 import re
 import sys
 
-
 ERRORS = 0
+IGNORE = None
+
+
+def register_ignores(ignores):
+    global IGNORE
+    if ignores:
+        IGNORE = '^(' + '|'.join(ignores.split(',')) + ')'
+
+
+def should_ignore(error):
+    return IGNORE and re.search(IGNORE, error)
 
 
 def print_error(error, line):
@@ -41,6 +61,27 @@
     print(" - %s: L%s" % (fileinput.filename(), fileinput.filelineno()))
 
 
+def not_continuation(line):
+    return not re.search('\\\\$', line)
+
+
+def check_for_do(line):
+    if not_continuation(line):
+        match = re.match('^\s*(for|while|until)\s', line)
+        if match:
+            operator = match.group(1).strip()
+            if not re.search(';\s*do(\b|$)', line):
+                print_error('E010: Do not on same line as %s' % operator,
+                            line)
+
+
+def check_if_then(line):
+    if not_continuation(line):
+        if re.search('^\s*if \[', line):
+            if not re.search(';\s*then(\b|$)', line):
+                print_error('E011: Then non on same line as if', line)
+
+
 def check_no_trailing_whitespace(line):
     if re.search('[ \t]+$', line):
         print_error('E001: Trailing Whitespace', line)
@@ -90,6 +131,8 @@
 
         check_no_trailing_whitespace(logical_line)
         check_indents(logical_line)
+        check_for_do(logical_line)
+        check_if_then(logical_line)
 
 
 def get_options():
@@ -97,11 +140,13 @@
         description='A bash script style checker')
     parser.add_argument('files', metavar='file', nargs='+',
                         help='files to scan for errors')
+    parser.add_argument('-i', '--ignore', help='Rules to ignore')
     return parser.parse_args()
 
 
 def main():
     opts = get_options()
+    register_ignores(opts.ignore)
     check_files(opts.files)
 
     if ERRORS > 0:
diff --git a/tools/create_userrc.sh b/tools/create_userrc.sh
index 5f4c486..e2d855c 100755
--- a/tools/create_userrc.sh
+++ b/tools/create_userrc.sh
@@ -71,8 +71,7 @@
 ROLE=Member
 USER_NAME=""
 USER_PASS=""
-while [ $# -gt 0 ]
-do
+while [ $# -gt 0 ]; do
     case "$1" in
     -h|--help) display_help; exit 0 ;;
     --os-username) export OS_USERNAME=$2; shift ;;
diff --git a/tools/xen/install_os_domU.sh b/tools/xen/install_os_domU.sh
index 41b184c..d0d81a2 100755
--- a/tools/xen/install_os_domU.sh
+++ b/tools/xen/install_os_domU.sh
@@ -191,11 +191,9 @@
     domid=$(xe vm-list name-label="$GUEST_NAME" params=dom-id minimal=true)
     port=$(xenstore-read /local/domain/$domid/console/vnc-port)
     echo "vncviewer -via root@$mgmt_ip localhost:${port:2}"
-    while true
-    do
+    while true; do
         state=$(xe_min vm-list name-label="$GUEST_NAME" power-state=halted)
-        if [ -n "$state" ]
-        then
+        if [ -n "$state" ]; then
             break
         else
             echo -n "."
diff --git a/tools/xen/scripts/install-os-vpx.sh b/tools/xen/scripts/install-os-vpx.sh
index 7b0d891..b9b65fd 100755
--- a/tools/xen/scripts/install-os-vpx.sh
+++ b/tools/xen/scripts/install-os-vpx.sh
@@ -42,8 +42,7 @@
 
 get_params()
 {
-    while getopts "hbn:r:l:t:" OPTION;
-    do
+    while getopts "hbn:r:l:t:" OPTION; do
         case $OPTION in
             h) usage
                 exit 1
@@ -63,8 +62,7 @@
                 ;;
         esac
     done
-    if [[ -z $BRIDGE ]]
-    then
+    if [[ -z $BRIDGE ]]; then
         BRIDGE=xenbr0
     fi
 
@@ -91,8 +89,7 @@
 find_network()
 {
     result=$(xe_min network-list bridge="$1")
-    if [ "$result" = "" ]
-    then
+    if [ "$result" = "" ]; then
         result=$(xe_min network-list name-label="$1")
     fi
     echo "$result"
@@ -121,8 +118,7 @@
 {
     local v="$1"
     IFS=,
-    for vif in $(xe_min vif-list vm-uuid="$v")
-    do
+    for vif in $(xe_min vif-list vm-uuid="$v"); do
         xe vif-destroy uuid="$vif"
     done
     unset IFS
diff --git a/tools/xen/scripts/on_exit.sh b/tools/xen/scripts/on_exit.sh
index a4db39c..2441e3d 100755
--- a/tools/xen/scripts/on_exit.sh
+++ b/tools/xen/scripts/on_exit.sh
@@ -7,8 +7,7 @@
 
 on_exit()
 {
-    for i in $(seq $((${#on_exit_hooks[*]} - 1)) -1 0)
-    do
+    for i in $(seq $((${#on_exit_hooks[*]} - 1)) -1 0); do
         eval "${on_exit_hooks[$i]}"
     done
 }
@@ -17,8 +16,7 @@
 {
     local n=${#on_exit_hooks[*]}
     on_exit_hooks[$n]="$*"
-    if [[ $n -eq 0 ]]
-    then
+    if [[ $n -eq 0 ]]; then
         trap on_exit EXIT
     fi
 }
diff --git a/tools/xen/test_functions.sh b/tools/xen/test_functions.sh
index 373d996..838f86a 100755
--- a/tools/xen/test_functions.sh
+++ b/tools/xen/test_functions.sh
@@ -227,16 +227,14 @@
 }
 
 [ "$1" = "run_tests" ] && {
-    for testname in $($0)
-    do
+    for testname in $($0); do
         echo "$testname"
         before_each_test
         (
             set -eux
             $testname
         )
-        if [ "$?" != "0" ]
-        then
+        if [ "$?" != "0" ]; then
             echo "FAIL"
             exit 1
         else