Browse code

Merge "Don't mix declaration and set of locals"

Jenkins authored on 2015/10/14 11:43:52
Showing 30 changed files
... ...
@@ -122,41 +122,47 @@ function foreach_tenant_net {
122 122
 }
123 123
 
124 124
 function get_image_id {
125
-    local IMAGE_ID=$(openstack image list | egrep " $DEFAULT_IMAGE_NAME " | get_field 1)
125
+    local IMAGE_ID
126
+    IMAGE_ID=$(openstack image list | egrep " $DEFAULT_IMAGE_NAME " | get_field 1)
126 127
     die_if_not_set $LINENO IMAGE_ID "Failure retrieving IMAGE_ID"
127 128
     echo "$IMAGE_ID"
128 129
 }
129 130
 
130 131
 function get_tenant_id {
131 132
     local TENANT_NAME=$1
132
-    local TENANT_ID=`openstack project list | grep " $TENANT_NAME " | head -n 1 | get_field 1`
133
+    local TENANT_ID
134
+    TENANT_ID=`openstack project list | grep " $TENANT_NAME " | head -n 1 | get_field 1`
133 135
     die_if_not_set $LINENO TENANT_ID "Failure retrieving TENANT_ID for $TENANT_NAME"
134 136
     echo "$TENANT_ID"
135 137
 }
136 138
 
137 139
 function get_user_id {
138 140
     local USER_NAME=$1
139
-    local USER_ID=`openstack user list | grep $USER_NAME | awk '{print $2}'`
141
+    local USER_ID
142
+    USER_ID=`openstack user list | grep $USER_NAME | awk '{print $2}'`
140 143
     die_if_not_set $LINENO USER_ID "Failure retrieving USER_ID for $USER_NAME"
141 144
     echo "$USER_ID"
142 145
 }
143 146
 
144 147
 function get_role_id {
145 148
     local ROLE_NAME=$1
146
-    local ROLE_ID=`openstack role list | grep $ROLE_NAME | awk '{print $2}'`
149
+    local ROLE_ID
150
+    ROLE_ID=`openstack role list | grep $ROLE_NAME | awk '{print $2}'`
147 151
     die_if_not_set $LINENO ROLE_ID "Failure retrieving ROLE_ID for $ROLE_NAME"
148 152
     echo "$ROLE_ID"
149 153
 }
150 154
 
151 155
 function get_network_id {
152 156
     local NETWORK_NAME="$1"
153
-    local NETWORK_ID=`neutron net-list -F id  -- --name=$NETWORK_NAME | awk "NR==4" | awk '{print $2}'`
157
+    local NETWORK_ID
158
+    NETWORK_ID=`neutron net-list -F id  -- --name=$NETWORK_NAME | awk "NR==4" | awk '{print $2}'`
154 159
     echo $NETWORK_ID
155 160
 }
156 161
 
157 162
 function get_flavor_id {
158 163
     local INSTANCE_TYPE=$1
159
-    local FLAVOR_ID=`nova flavor-list | grep $INSTANCE_TYPE | awk '{print $2}'`
164
+    local FLAVOR_ID
165
+    FLAVOR_ID=`nova flavor-list | grep $INSTANCE_TYPE | awk '{print $2}'`
160 166
     die_if_not_set $LINENO FLAVOR_ID "Failure retrieving FLAVOR_ID for $INSTANCE_TYPE"
161 167
     echo "$FLAVOR_ID"
162 168
 }
... ...
@@ -185,13 +191,15 @@ function add_tenant {
185 185
 
186 186
 function remove_tenant {
187 187
     local TENANT=$1
188
-    local TENANT_ID=$(get_tenant_id $TENANT)
188
+    local TENANT_ID
189
+    TENANT_ID=$(get_tenant_id $TENANT)
189 190
     openstack project delete $TENANT_ID
190 191
 }
191 192
 
192 193
 function remove_user {
193 194
     local USER=$1
194
-    local USER_ID=$(get_user_id $USER)
195
+    local USER_ID
196
+    USER_ID=$(get_user_id $USER)
195 197
     openstack user delete $USER_ID
196 198
 }
197 199
 
... ...
@@ -221,9 +229,11 @@ function create_network {
221 221
     local NET_NAME="${TENANT}-net$NUM"
222 222
     local ROUTER_NAME="${TENANT}-router${NUM}"
223 223
     source $TOP_DIR/openrc admin admin
224
-    local TENANT_ID=$(get_tenant_id $TENANT)
224
+    local TENANT_ID
225
+    TENANT_ID=$(get_tenant_id $TENANT)
225 226
     source $TOP_DIR/openrc $TENANT $TENANT
226
-    local NET_ID=$(neutron net-create --tenant-id $TENANT_ID $NET_NAME $EXTRA| grep ' id ' | awk '{print $4}' )
227
+    local NET_ID
228
+    NET_ID=$(neutron net-create --tenant-id $TENANT_ID $NET_NAME $EXTRA| grep ' id ' | awk '{print $4}' )
227 229
     die_if_not_set $LINENO NET_ID "Failure creating NET_ID for $TENANT_ID $NET_NAME $EXTRA"
228 230
     neutron subnet-create --ip-version 4 --tenant-id $TENANT_ID --gateway $GATEWAY $NET_ID $CIDR
229 231
     neutron_debug_admin probe-create --device-owner compute $NET_ID
... ...
@@ -251,7 +261,8 @@ function create_vm {
251 251
     done
252 252
     #TODO (nati) Add multi-nic test
253 253
     #TODO (nati) Add public-net test
254
-    local VM_UUID=`nova boot --flavor $(get_flavor_id m1.tiny) \
254
+    local VM_UUID
255
+    VM_UUID=`nova boot --flavor $(get_flavor_id m1.tiny) \
255 256
         --image $(get_image_id) \
256 257
         $NIC \
257 258
         $TENANT-server$NUM | grep ' id ' | cut -d"|" -f3 | sed 's/ //g'`
... ...
@@ -309,7 +320,8 @@ function delete_network {
309 309
     local NUM=$2
310 310
     local NET_NAME="${TENANT}-net$NUM"
311 311
     source $TOP_DIR/openrc admin admin
312
-    local TENANT_ID=$(get_tenant_id $TENANT)
312
+    local TENANT_ID
313
+    TENANT_ID=$(get_tenant_id $TENANT)
313 314
     #TODO(nati) comment out until l3-agent merged
314 315
     #for res in port subnet net router;do
315 316
     for net_id in `neutron net-list -c id -c name | grep $NET_NAME | awk '{print $2}'`;do
... ...
@@ -264,7 +264,8 @@ function upload_image {
264 264
             ;;
265 265
         *.img)
266 266
             image_name=$(basename "$image" ".img")
267
-            local format=$(qemu-img info ${image} | awk '/^file format/ { print $3; exit }')
267
+            local format
268
+            format=$(qemu-img info ${image} | awk '/^file format/ { print $3; exit }')
268 269
             if [[ ",qcow2,raw,vdi,vmdk,vpc," =~ ",$format," ]]; then
269 270
                 disk_format=$format
270 271
             else
... ...
@@ -405,7 +406,8 @@ function get_instance_ip {
405 405
     local vm_id=$1
406 406
     local network_name=$2
407 407
     local nova_result="$(nova show $vm_id)"
408
-    local ip=$(echo "$nova_result" | grep "$network_name" | get_field 2)
408
+    local ip
409
+    ip=$(echo "$nova_result" | grep "$network_name" | get_field 2)
409 410
     if [[ $ip = "" ]];then
410 411
         echo "$nova_result"
411 412
         die $LINENO "[Fail] Coudn't get ipaddress of VM"
... ...
@@ -455,7 +457,8 @@ function check_path_perm_sanity {
455 455
     # homedir permissions on RHEL and common practice of making DEST in
456 456
     # the stack user's homedir.
457 457
 
458
-    local real_path=$(readlink -f $1)
458
+    local real_path
459
+    real_path=$(readlink -f $1)
459 460
     local rebuilt_path=""
460 461
     for i in $(echo ${real_path} | tr "/" " "); do
461 462
         rebuilt_path=$rebuilt_path"/"$i
... ...
@@ -140,7 +140,8 @@ function isset {
140 140
 # backtrace level
141 141
 function backtrace {
142 142
     local level=$1
143
-    local deep=$((${#BASH_SOURCE[@]} - 1))
143
+    local deep
144
+    deep=$((${#BASH_SOURCE[@]} - 1))
144 145
     echo "[Call Trace]"
145 146
     while [ $level -le $deep ]; do
146 147
         echo "${BASH_SOURCE[$deep]}:${BASH_LINENO[$deep-1]}:${FUNCNAME[$deep-1]}"
... ...
@@ -483,7 +484,8 @@ function git_clone {
483 483
     local git_remote=$1
484 484
     local git_dest=$2
485 485
     local git_ref=$3
486
-    local orig_dir=$(pwd)
486
+    local orig_dir
487
+    orig_dir=$(pwd)
487 488
     local git_clone_flags=""
488 489
 
489 490
     RECLONE=$(trueorfalse False RECLONE)
... ...
@@ -647,7 +649,8 @@ function get_default_host_ip {
647 647
         host_ip=""
648 648
         # Find the interface used for the default route
649 649
         host_ip_iface=${host_ip_iface:-$(ip -f $af route | awk '/default/ {print $5}' | head -1)}
650
-        local host_ips=$(LC_ALL=C ip -f $af addr show ${host_ip_iface} | sed /temporary/d |awk /$af'/ {split($2,parts,"/");  print parts[1]}')
650
+        local host_ips
651
+        host_ips=$(LC_ALL=C ip -f $af addr show ${host_ip_iface} | sed /temporary/d |awk /$af'/ {split($2,parts,"/");  print parts[1]}')
651 652
         local ip
652 653
         for ip in $host_ips; do
653 654
             # Attempt to filter out IP addresses that are part of the fixed and
... ...
@@ -696,7 +699,8 @@ function get_field {
696 696
 # copy over a default policy.json and policy.d for projects
697 697
 function install_default_policy {
698 698
     local project=$1
699
-    local project_uc=$(echo $1|tr a-z A-Z)
699
+    local project_uc
700
+    project_uc=$(echo $1|tr a-z A-Z)
700 701
     local conf_dir="${project_uc}_CONF_DIR"
701 702
     # eval conf dir to get the variable
702 703
     conf_dir="${!conf_dir}"
... ...
@@ -729,7 +733,8 @@ function policy_add {
729 729
 
730 730
     # Add a terminating comma to policy lines without one
731 731
     # Remove the closing '}' and all lines following to the end-of-file
732
-    local tmpfile=$(mktemp)
732
+    local tmpfile
733
+    tmpfile=$(mktemp)
733 734
     uniq ${policy_file} | sed -e '
734 735
         s/]$/],/
735 736
         /^[}]/,$d
... ...
@@ -922,7 +927,8 @@ function get_or_create_endpoint {
922 922
     # scenarios currently that use the returned id. Ideally this behaviour
923 923
     # should be pushed out to the service setups and let them create the
924 924
     # endpoints they need.
925
-    local public_id=$(_get_or_create_endpoint_with_interface $1 public $3 $2)
925
+    local public_id
926
+    public_id=$(_get_or_create_endpoint_with_interface $1 public $3 $2)
926 927
     _get_or_create_endpoint_with_interface $1 admin $4 $2
927 928
     _get_or_create_endpoint_with_interface $1 internal $5 $2
928 929
 
... ...
@@ -1048,7 +1054,8 @@ function get_packages {
1048 1048
     xtrace=$(set +o | grep xtrace)
1049 1049
     set +o xtrace
1050 1050
     local services=$@
1051
-    local package_dir=$(_get_package_dir)
1051
+    local package_dir
1052
+    package_dir=$(_get_package_dir)
1052 1053
     local file_to_parse=""
1053 1054
     local service=""
1054 1055
 
... ...
@@ -1992,8 +1999,10 @@ function address_in_net {
1992 1992
     local ip=$1
1993 1993
     local range=$2
1994 1994
     local masklen=${range#*/}
1995
-    local network=$(maskip ${range%/*} $(cidr2netmask $masklen))
1996
-    local subnet=$(maskip $ip $(cidr2netmask $masklen))
1995
+    local network
1996
+    network=$(maskip ${range%/*} $(cidr2netmask $masklen))
1997
+    local subnet
1998
+    subnet=$(maskip $ip $(cidr2netmask $masklen))
1997 1999
     [[ $network == $subnet ]]
1998 2000
 }
1999 2001
 
... ...
@@ -2045,7 +2054,8 @@ function export_proxy_variables {
2045 2045
 
2046 2046
 # Returns true if the directory is on a filesystem mounted via NFS.
2047 2047
 function is_nfs_directory {
2048
-    local mount_type=`stat -f -L -c %T $1`
2048
+    local mount_type
2049
+    mount_type=`stat -f -L -c %T $1`
2049 2050
     test "$mount_type" == "nfs"
2050 2051
 }
2051 2052
 
... ...
@@ -2056,13 +2066,15 @@ function maskip {
2056 2056
     local ip=$1
2057 2057
     local mask=$2
2058 2058
     local l="${ip%.*}"; local r="${ip#*.}"; local n="${mask%.*}"; local m="${mask#*.}"
2059
-    local subnet=$((${ip%%.*}&${mask%%.*})).$((${r%%.*}&${m%%.*})).$((${l##*.}&${n##*.})).$((${ip##*.}&${mask##*.}))
2059
+    local subnet
2060
+    subnet=$((${ip%%.*}&${mask%%.*})).$((${r%%.*}&${m%%.*})).$((${l##*.}&${n##*.})).$((${ip##*.}&${mask##*.}))
2060 2061
     echo $subnet
2061 2062
 }
2062 2063
 
2063 2064
 # Return the current python as "python<major>.<minor>"
2064 2065
 function python_version {
2065
-    local python_version=$(python -c 'import sys; print("%s.%s" % sys.version_info[0:2])')
2066
+    local python_version
2067
+    python_version=$(python -c 'import sys; print("%s.%s" % sys.version_info[0:2])')
2066 2068
     echo "python${python_version}"
2067 2069
 }
2068 2070
 
... ...
@@ -196,7 +196,8 @@ function iniset {
196 196
 $option = $value
197 197
 " "$file"
198 198
     else
199
-        local sep=$(echo -ne "\x01")
199
+        local sep
200
+        sep=$(echo -ne "\x01")
200 201
         # Replace it
201 202
         $sudo sed -i -e '/^\['${section}'\]/,/^\[.*\]/ s'${sep}'^\('${option}'[ \t]*=[ \t]*\).*$'${sep}'\1'"${value}"${sep} "$file"
202 203
     fi
... ...
@@ -89,7 +89,8 @@ function merge_config_file {
89 89
     # note, configfile might be a variable (note the iniset, etc
90 90
     # created in the mega-awk below is "eval"ed too, so we just leave
91 91
     # it alone.
92
-    local real_configfile=$(eval echo $configfile)
92
+    local real_configfile
93
+    real_configfile=$(eval echo $configfile)
93 94
     if [ ! -f $real_configfile ]; then
94 95
         touch $real_configfile
95 96
     fi
... ...
@@ -61,7 +61,8 @@ function get_python_exec_prefix {
61 61
 # pip_install_gr packagename
62 62
 function pip_install_gr {
63 63
     local name=$1
64
-    local clean_name=$(get_from_global_requirements $name)
64
+    local clean_name
65
+    clean_name=$(get_from_global_requirements $name)
65 66
     pip_install $clean_name
66 67
 }
67 68
 
... ...
@@ -102,7 +103,8 @@ function pip_install {
102 102
             local cmd_pip=$PIP_VIRTUAL_ENV/bin/pip
103 103
             local sudo_pip="env"
104 104
         else
105
-            local cmd_pip=$(get_pip_command)
105
+            local cmd_pip
106
+            cmd_pip=$(get_pip_command)
106 107
             local sudo_pip="sudo -H"
107 108
         fi
108 109
     fi
... ...
@@ -111,7 +113,8 @@ function pip_install {
111 111
     # Always apply constraints
112 112
     cmd_pip="$cmd_pip -c $REQUIREMENTS_DIR/upper-constraints.txt"
113 113
 
114
-    local pip_version=$(python -c "import pip; \
114
+    local pip_version
115
+    pip_version=$(python -c "import pip; \
115 116
                         print(pip.__version__.strip('.')[0])")
116 117
     if (( pip_version<6 )); then
117 118
         die $LINENO "Currently installed pip version ${pip_version} does not" \
... ...
@@ -147,7 +150,8 @@ function pip_install {
147 147
 # get_from_global_requirements <package>
148 148
 function get_from_global_requirements {
149 149
     local package=$1
150
-    local required_pkg=$(grep -i -h ^${package} $REQUIREMENTS_DIR/global-requirements.txt | cut -d\# -f1)
150
+    local required_pkg
151
+    required_pkg=$(grep -i -h ^${package} $REQUIREMENTS_DIR/global-requirements.txt | cut -d\# -f1)
151 152
     if [[ $required_pkg == ""  ]]; then
152 153
         die $LINENO "Can't find package $package in requirements"
153 154
     fi
... ...
@@ -226,7 +230,8 @@ function setup_develop {
226 226
 # practical ways.
227 227
 function is_in_projects_txt {
228 228
     local project_dir=$1
229
-    local project_name=$(basename $project_dir)
229
+    local project_name
230
+    project_name=$(basename $project_dir)
230 231
     grep -q "/$project_name\$" $REQUIREMENTS_DIR/projects.txt
231 232
 }
232 233
 
... ...
@@ -245,7 +250,8 @@ function setup_package_with_constraints_edit {
245 245
 
246 246
     if [ -n "$REQUIREMENTS_DIR" ]; then
247 247
         # Constrain this package to this project directory from here on out.
248
-        local name=$(awk '/^name.*=/ {print $3}' $project_dir/setup.cfg)
248
+        local name
249
+        name=$(awk '/^name.*=/ {print $3}' $project_dir/setup.cfg)
249 250
         $REQUIREMENTS_DIR/.venv/bin/edit-constraints \
250 251
             $REQUIREMENTS_DIR/upper-constraints.txt -- $name \
251 252
             "$flags file://$project_dir#egg=$name"
... ...
@@ -41,7 +41,8 @@ function add_sudo_secure_path {
41 41
 # configure_rootwrap project
42 42
 function configure_rootwrap {
43 43
     local project=$1
44
-    local project_uc=$(echo $1|tr a-z A-Z)
44
+    local project_uc
45
+    project_uc=$(echo $1|tr a-z A-Z)
45 46
     local bin_dir="${project_uc}_BIN_DIR"
46 47
     bin_dir="${!bin_dir}"
47 48
     local project_dir="${project_uc}_DIR"
... ...
@@ -60,7 +61,8 @@ function configure_rootwrap {
60 60
     sudo sed -e "s:^filters_path=.*$:filters_path=/etc/${project}/rootwrap.d:" -i /etc/${project}/rootwrap.conf
61 61
 
62 62
     # Set up the rootwrap sudoers
63
-    local tempfile=$(mktemp)
63
+    local tempfile
64
+    tempfile=$(mktemp)
64 65
     # Specify rootwrap.conf as first parameter to rootwrap
65 66
     rootwrap_sudo_cmd="${rootwrap_bin} /etc/${project}/rootwrap.conf *"
66 67
     echo "$STACK_USER ALL=(root) NOPASSWD: $rootwrap_sudo_cmd" >$tempfile
... ...
@@ -72,11 +72,14 @@ function install_apache_wsgi {
72 72
 # various differences between Apache 2.2 and 2.4 that warrant special handling.
73 73
 function get_apache_version {
74 74
     if is_ubuntu; then
75
-        local version_str=$(sudo /usr/sbin/apache2ctl -v | awk '/Server version/ {print $3}' | cut -f2 -d/)
75
+        local version_str
76
+        version_str=$(sudo /usr/sbin/apache2ctl -v | awk '/Server version/ {print $3}' | cut -f2 -d/)
76 77
     elif is_fedora; then
77
-        local version_str=$(rpm -qa --queryformat '%{VERSION}' httpd)
78
+        local version_str
79
+        version_str=$(rpm -qa --queryformat '%{VERSION}' httpd)
78 80
     elif is_suse; then
79
-        local version_str=$(rpm -qa --queryformat '%{VERSION}' apache2)
81
+        local version_str
82
+        version_str=$(rpm -qa --queryformat '%{VERSION}' apache2)
80 83
     else
81 84
         exit_distro_not_supported "cannot determine apache version"
82 85
     fi
... ...
@@ -115,7 +118,8 @@ function get_apache_version {
115 115
 function apache_site_config_for {
116 116
     local site=$@
117 117
     if is_ubuntu; then
118
-        local apache_version=$(get_apache_version)
118
+        local apache_version
119
+        apache_version=$(get_apache_version)
119 120
         if [[ "$apache_version" == "2.2" ]]; then
120 121
             # Ubuntu 12.04 - Apache 2.2
121 122
             echo $APACHE_CONF_DIR/${site}
... ...
@@ -83,7 +83,8 @@ ATTACH_ENCRYPTED_VOLUME_AVAILABLE=False
83 83
 # ------------
84 84
 
85 85
 function get_ceph_version {
86
-    local ceph_version_str=$(sudo ceph daemon mon.$(hostname) version | cut -d '"' -f 4 | cut -f 1,2 -d '.')
86
+    local ceph_version_str
87
+    ceph_version_str=$(sudo ceph daemon mon.$(hostname) version | cut -d '"' -f 4 | cut -f 1,2 -d '.')
87 88
     echo $ceph_version_str
88 89
 }
89 90
 
... ...
@@ -106,7 +107,8 @@ EOF
106 106
 # undefine_virsh_secret() - Undefine Cinder key secret from libvirt
107 107
 function undefine_virsh_secret {
108 108
     if is_service_enabled cinder || is_service_enabled nova; then
109
-        local virsh_uuid=$(sudo virsh secret-list | awk '/^ ?[0-9a-z]/ { print $1 }')
109
+        local virsh_uuid
110
+        virsh_uuid=$(sudo virsh secret-list | awk '/^ ?[0-9a-z]/ { print $1 }')
110 111
         sudo virsh secret-undefine ${virsh_uuid} >/dev/null 2>&1
111 112
     fi
112 113
 }
... ...
@@ -219,7 +221,8 @@ EOF
219 219
     done
220 220
 
221 221
     # pools data and metadata were removed in the Giant release so depending on the version we apply different commands
222
-    local ceph_version=$(get_ceph_version)
222
+    local ceph_version
223
+    ceph_version=$(get_ceph_version)
223 224
     # change pool replica size according to the CEPH_REPLICAS set by the user
224 225
     if [[ ${ceph_version%%.*} -eq 0 ]] && [[ ${ceph_version##*.} -lt 87 ]]; then
225 226
         sudo ceph -c ${CEPH_CONF_FILE} osd pool set rbd size ${CEPH_REPLICAS}
... ...
@@ -150,7 +150,8 @@ function cleanup_cinder {
150 150
     # ensure the volume group is cleared up because fails might
151 151
     # leave dead volumes in the group
152 152
     if [ "$CINDER_ISCSI_HELPER" = "tgtadm" ]; then
153
-        local targets=$(sudo tgtadm --op show --mode target)
153
+        local targets
154
+        targets=$(sudo tgtadm --op show --mode target)
154 155
         if [ $? -ne 0 ]; then
155 156
             # If tgt driver isn't running this won't work obviously
156 157
             # So check the response and restart if need be
... ...
@@ -198,7 +199,8 @@ function cleanup_cinder {
198 198
 
199 199
 # _cinder_config_apache_wsgi() - Set WSGI config files
200 200
 function _cinder_config_apache_wsgi {
201
-    local cinder_apache_conf=$(apache_site_config_for osapi-volume)
201
+    local cinder_apache_conf
202
+    cinder_apache_conf=$(apache_site_config_for osapi-volume)
202 203
     local cinder_ssl=""
203 204
     local cinder_certfile=""
204 205
     local cinder_keyfile=""
... ...
@@ -106,7 +106,8 @@ function configure_glance {
106 106
     iniset $GLANCE_REGISTRY_CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL
107 107
     iniset $GLANCE_REGISTRY_CONF DEFAULT bind_host $GLANCE_SERVICE_LISTEN_ADDRESS
108 108
     inicomment $GLANCE_REGISTRY_CONF DEFAULT log_file
109
-    local dburl=`database_connection_url glance`
109
+    local dburl
110
+    dburl=`database_connection_url glance`
110 111
     iniset $GLANCE_REGISTRY_CONF database connection $dburl
111 112
     iniset $GLANCE_REGISTRY_CONF DEFAULT use_syslog $SYSLOG
112 113
     iniset $GLANCE_REGISTRY_CONF DEFAULT workers "$API_WORKERS"
... ...
@@ -265,7 +266,8 @@ function create_glance_accounts {
265 265
         # required for swift access
266 266
         if is_service_enabled s-proxy; then
267 267
 
268
-            local glance_swift_user=$(get_or_create_user "glance-swift" \
268
+            local glance_swift_user
269
+            glance_swift_user=$(get_or_create_user "glance-swift" \
269 270
                 "$SERVICE_PASSWORD" "default" "glance-swift@example.com")
270 271
             get_or_add_user_project_role "ResellerAdmin" $glance_swift_user $SERVICE_TENANT_NAME
271 272
         fi
... ...
@@ -321,7 +321,8 @@ function build_heat_pip_mirror {
321 321
 
322 322
     echo "</body></html>" >> $HEAT_PIP_REPO/index.html
323 323
 
324
-    local heat_pip_repo_apache_conf=$(apache_site_config_for heat_pip_repo)
324
+    local heat_pip_repo_apache_conf
325
+    heat_pip_repo_apache_conf=$(apache_site_config_for heat_pip_repo)
325 326
 
326 327
     sudo cp $FILES/apache-heat-pip-repo.template $heat_pip_repo_apache_conf
327 328
     sudo sed -e "
... ...
@@ -49,7 +49,8 @@ function _horizon_config_set {
49 49
         sed -e "/^$option/d" -i $local_settings
50 50
         echo -e "\n$option=$value" >> $file
51 51
     elif grep -q "^$section" $file; then
52
-        local line=$(sed -ne "/^$section/,/^}/ { /^ *'$option':/ p; }" $file)
52
+        local line
53
+        line=$(sed -ne "/^$section/,/^}/ { /^ *'$option':/ p; }" $file)
53 54
         if [ -n "$line" ]; then
54 55
             sed -i -e "/^$section/,/^}/ s/^\( *'$option'\) *:.*$/\1: $value,/" $file
55 56
         else
... ...
@@ -68,7 +69,8 @@ function _horizon_config_set {
68 68
 # cleanup_horizon() - Remove residual data files, anything left over from previous
69 69
 # runs that a clean run would need to clean up
70 70
 function cleanup_horizon {
71
-    local horizon_conf=$(apache_site_config_for horizon)
71
+    local horizon_conf
72
+    horizon_conf=$(apache_site_config_for horizon)
72 73
     sudo rm -f $horizon_conf
73 74
 }
74 75
 
... ...
@@ -112,7 +114,8 @@ function init_horizon {
112 112
     # Create an empty directory that apache uses as docroot
113 113
     sudo mkdir -p $HORIZON_DIR/.blackhole
114 114
 
115
-    local horizon_conf=$(apache_site_config_for horizon)
115
+    local horizon_conf
116
+    horizon_conf=$(apache_site_config_for horizon)
116 117
 
117 118
     # Configure apache to run horizon
118 119
     sudo sh -c "sed -e \"
... ...
@@ -225,7 +225,8 @@ function _cleanup_ironic_apache_wsgi {
225 225
 
226 226
 # _config_ironic_apache_wsgi() - Set WSGI config files of Ironic
227 227
 function _config_ironic_apache_wsgi {
228
-    local ironic_apache_conf=$(apache_site_config_for ironic)
228
+    local ironic_apache_conf
229
+    ironic_apache_conf=$(apache_site_config_for ironic)
229 230
     sudo cp $FILES/apache-ironic.template $ironic_apache_conf
230 231
     sudo sed -e "
231 232
         s|%PUBLICPORT%|$IRONIC_HTTP_PORT|g;
... ...
@@ -325,11 +326,13 @@ function configure_ironic_api {
325 325
 function configure_ironic_conductor {
326 326
     cp $IRONIC_DIR/etc/ironic/rootwrap.conf $IRONIC_ROOTWRAP_CONF
327 327
     cp -r $IRONIC_DIR/etc/ironic/rootwrap.d $IRONIC_CONF_DIR
328
-    local ironic_rootwrap=$(get_rootwrap_location ironic)
328
+    local ironic_rootwrap
329
+    ironic_rootwrap=$(get_rootwrap_location ironic)
329 330
     local rootwrap_isudoer_cmd="$ironic_rootwrap $IRONIC_CONF_DIR/rootwrap.conf *"
330 331
 
331 332
     # Set up the rootwrap sudoers for ironic
332
-    local tempfile=`mktemp`
333
+    local tempfile
334
+    tempfile=`mktemp`
333 335
     echo "$STACK_USER ALL=(root) NOPASSWD: $rootwrap_isudoer_cmd" >$tempfile
334 336
     chmod 0440 $tempfile
335 337
     sudo chown root:root $tempfile
... ...
@@ -370,7 +373,8 @@ function configure_ironic_conductor {
370 370
         fi
371 371
         iniset $IRONIC_CONF_FILE glance swift_endpoint_url http://${HOST_IP}:${SWIFT_DEFAULT_BIND_PORT:-8080}
372 372
         iniset $IRONIC_CONF_FILE glance swift_api_version v1
373
-        local tenant_id=$(get_or_create_project $SERVICE_TENANT_NAME default)
373
+        local tenant_id
374
+        tenant_id=$(get_or_create_project $SERVICE_TENANT_NAME default)
374 375
         iniset $IRONIC_CONF_FILE glance swift_account AUTH_${tenant_id}
375 376
         iniset $IRONIC_CONF_FILE glance swift_container glance
376 377
         iniset $IRONIC_CONF_FILE glance swift_temp_url_duration 3600
... ...
@@ -379,7 +383,8 @@ function configure_ironic_conductor {
379 379
     fi
380 380
 
381 381
     if [[ "$IRONIC_IPXE_ENABLED" == "True" ]] ; then
382
-        local pxebin=`basename $IRONIC_PXE_BOOT_IMAGE`
382
+        local pxebin
383
+        pxebin=`basename $IRONIC_PXE_BOOT_IMAGE`
383 384
         iniset $IRONIC_CONF_FILE pxe ipxe_enabled True
384 385
         iniset $IRONIC_CONF_FILE pxe pxe_config_template '\$pybasedir/drivers/modules/ipxe_config.template'
385 386
         iniset $IRONIC_CONF_FILE pxe pxe_bootfile_name $pxebin
... ...
@@ -445,7 +450,8 @@ function init_ironic {
445 445
 # _ironic_bm_vm_names() - Generates list of names for baremetal VMs.
446 446
 function _ironic_bm_vm_names {
447 447
     local idx
448
-    local num_vms=$(($IRONIC_VM_COUNT - 1))
448
+    local num_vms
449
+    num_vms=$(($IRONIC_VM_COUNT - 1))
449 450
     for idx in $(seq 0 $num_vms); do
450 451
         echo "baremetal${IRONIC_VM_NETWORK_BRIDGE}_${idx}"
451 452
     done
... ...
@@ -498,22 +504,27 @@ function stop_ironic {
498 498
 }
499 499
 
500 500
 function create_ovs_taps {
501
-    local ironic_net_id=$(neutron net-list | grep private | get_field 1)
501
+    local ironic_net_id
502
+    ironic_net_id=$(neutron net-list | grep private | get_field 1)
502 503
 
503 504
     # Work around: No netns exists on host until a Neutron port is created.  We
504 505
     # need to create one in Neutron to know what netns to tap into prior to the
505 506
     # first node booting.
506
-    local port_id=$(neutron port-create private | grep " id " | get_field 2)
507
+    local port_id
508
+    port_id=$(neutron port-create private | grep " id " | get_field 2)
507 509
 
508 510
     # intentional sleep to make sure the tag has been set to port
509 511
     sleep 10
510 512
 
511 513
     if  [[ "$Q_USE_NAMESPACE" = "True" ]]; then
512
-        local tapdev=$(sudo ip netns exec qdhcp-${ironic_net_id} ip link list | grep " tap" | cut -d':' -f2 | cut -d'@' -f1 | cut -b2-)
514
+        local tapdev
515
+        tapdev=$(sudo ip netns exec qdhcp-${ironic_net_id} ip link list | grep " tap" | cut -d':' -f2 | cut -d'@' -f1 | cut -b2-)
513 516
     else
514
-        local tapdev=$(sudo ip link list | grep " tap" | cut -d':' -f2 | cut -d'@' -f1 | cut -b2-)
517
+        local tapdev
518
+        tapdev=$(sudo ip link list | grep " tap" | cut -d':' -f2 | cut -d'@' -f1 | cut -b2-)
515 519
     fi
516
-    local tag_id=$(sudo ovs-vsctl show |grep ${tapdev} -A1 -m1 | grep tag | cut -d':' -f2 | cut -b2-)
520
+    local tag_id
521
+    tag_id=$(sudo ovs-vsctl show |grep ${tapdev} -A1 -m1 | grep tag | cut -d':' -f2 | cut -b2-)
517 522
 
518 523
     # make sure veth pair is not existing, otherwise delete its links
519 524
     sudo ip link show ovs-tap1 && sudo ip link delete ovs-tap1
... ...
@@ -571,7 +582,8 @@ function wait_for_nova_resources {
571 571
 }
572 572
 
573 573
 function enroll_nodes {
574
-    local chassis_id=$(ironic chassis-create -d "ironic test chassis" | grep " uuid " | get_field 2)
574
+    local chassis_id
575
+    chassis_id=$(ironic chassis-create -d "ironic test chassis" | grep " uuid " | get_field 2)
575 576
 
576 577
     if ! is_ironic_hardware; then
577 578
         local ironic_node_cpu=$IRONIC_VM_SPECS_CPU
... ...
@@ -603,10 +615,14 @@ function enroll_nodes {
603 603
         if ! is_ironic_hardware; then
604 604
             local mac_address=$hardware_info
605 605
         elif [[ -z "${IRONIC_DEPLOY_DRIVER##*_ipmitool}" ]]; then
606
-            local ipmi_address=$(echo $hardware_info |awk  '{print $1}')
607
-            local mac_address=$(echo $hardware_info |awk '{print $2}')
608
-            local ironic_ipmi_username=$(echo $hardware_info |awk '{print $3}')
609
-            local ironic_ipmi_passwd=$(echo $hardware_info |awk '{print $4}')
606
+            local ipmi_address
607
+            ipmi_address=$(echo $hardware_info |awk  '{print $1}')
608
+            local mac_address
609
+            mac_address=$(echo $hardware_info |awk '{print $2}')
610
+            local ironic_ipmi_username
611
+            ironic_ipmi_username=$(echo $hardware_info |awk '{print $3}')
612
+            local ironic_ipmi_passwd
613
+            ironic_ipmi_passwd=$(echo $hardware_info |awk '{print $4}')
610 614
             # Currently we require all hardware platform have same CPU/RAM/DISK info
611 615
             # in future, this can be enhanced to support different type, and then
612 616
             # we create the bare metal flavor with minimum value
... ...
@@ -618,9 +634,11 @@ function enroll_nodes {
618 618
 
619 619
         # First node created will be used for testing in ironic w/o glance
620 620
         # scenario, so we need to know its UUID.
621
-        local standalone_node_uuid=$([ $total_nodes -eq 0 ] && echo "--uuid $IRONIC_NODE_UUID")
621
+        local standalone_node_uuid
622
+        standalone_node_uuid=$([ $total_nodes -eq 0 ] && echo "--uuid $IRONIC_NODE_UUID")
622 623
 
623
-        local node_id=$(ironic node-create $standalone_node_uuid\
624
+        local node_id
625
+        node_id=$(ironic node-create $standalone_node_uuid\
624 626
             --chassis_uuid $chassis_id \
625 627
             --driver $IRONIC_DEPLOY_DRIVER \
626 628
             --name node-$total_nodes \
... ...
@@ -641,7 +659,8 @@ function enroll_nodes {
641 641
     # NOTE(adam_g): Attempting to use an autogenerated UUID for flavor id here uncovered
642 642
     # bug (LP: #1333852) in Trove.  This can be changed to use an auto flavor id when the
643 643
     # bug is fixed in Juno.
644
-    local adjusted_disk=$(($ironic_node_disk - $ironic_ephemeral_disk))
644
+    local adjusted_disk
645
+    adjusted_disk=$(($ironic_node_disk - $ironic_ephemeral_disk))
645 646
     nova flavor-create --ephemeral $ironic_ephemeral_disk baremetal 551 $ironic_node_ram $adjusted_disk $ironic_node_cpu
646 647
 
647 648
     nova flavor-key baremetal set "cpu_arch"="x86_64"
... ...
@@ -772,7 +791,8 @@ function upload_baremetal_ironic_deploy {
772 772
         fi
773 773
     fi
774 774
 
775
-    local token=$(openstack token issue -c id -f value)
775
+    local token
776
+    token=$(openstack token issue -c id -f value)
776 777
     die_if_not_set $LINENO token "Keystone fail to get token"
777 778
 
778 779
     # load them into glance
... ...
@@ -810,7 +830,8 @@ function prepare_baremetal_basic_ops {
810 810
 function cleanup_baremetal_basic_ops {
811 811
     rm -f $IRONIC_VM_MACS_CSV_FILE
812 812
     if [ -f $IRONIC_KEY_FILE ]; then
813
-        local key=$(cat $IRONIC_KEY_FILE.pub)
813
+        local key
814
+        key=$(cat $IRONIC_KEY_FILE.pub)
814 815
         # remove public key from authorized_keys
815 816
         grep -v "$key" $IRONIC_AUTHORIZED_KEYS_FILE > temp && mv temp $IRONIC_AUTHORIZED_KEYS_FILE
816 817
         chmod 0600 $IRONIC_AUTHORIZED_KEYS_FILE
... ...
@@ -132,7 +132,8 @@ function _cleanup_keystone_apache_wsgi {
132 132
 
133 133
 # _config_keystone_apache_wsgi() - Set WSGI config files of Keystone
134 134
 function _config_keystone_apache_wsgi {
135
-    local keystone_apache_conf=$(apache_site_config_for keystone)
135
+    local keystone_apache_conf
136
+    keystone_apache_conf=$(apache_site_config_for keystone)
136 137
     local keystone_ssl=""
137 138
     local keystone_certfile=""
138 139
     local keystone_keyfile=""
... ...
@@ -347,9 +348,12 @@ function configure_keystone_extensions {
347 347
 function create_keystone_accounts {
348 348
 
349 349
     # admin
350
-    local admin_tenant=$(get_or_create_project "admin" default)
351
-    local admin_user=$(get_or_create_user "admin" "$ADMIN_PASSWORD" default)
352
-    local admin_role=$(get_or_create_role "admin")
350
+    local admin_tenant
351
+    admin_tenant=$(get_or_create_project "admin" default)
352
+    local admin_user
353
+    admin_user=$(get_or_create_user "admin" "$ADMIN_PASSWORD" default)
354
+    local admin_role
355
+    admin_role=$(get_or_create_role "admin")
353 356
     get_or_add_user_project_role $admin_role $admin_user $admin_tenant
354 357
 
355 358
     # Create service project/role
... ...
@@ -365,18 +369,23 @@ function create_keystone_accounts {
365 365
     get_or_create_role ResellerAdmin
366 366
 
367 367
     # The Member role is used by Horizon and Swift so we need to keep it:
368
-    local member_role=$(get_or_create_role "Member")
368
+    local member_role
369
+    member_role=$(get_or_create_role "Member")
369 370
 
370 371
     # another_role demonstrates that an arbitrary role may be created and used
371 372
     # TODO(sleepsonthefloor): show how this can be used for rbac in the future!
372
-    local another_role=$(get_or_create_role "anotherrole")
373
+    local another_role
374
+    another_role=$(get_or_create_role "anotherrole")
373 375
 
374 376
     # invisible tenant - admin can't see this one
375
-    local invis_tenant=$(get_or_create_project "invisible_to_admin" default)
377
+    local invis_tenant
378
+    invis_tenant=$(get_or_create_project "invisible_to_admin" default)
376 379
 
377 380
     # demo
378
-    local demo_tenant=$(get_or_create_project "demo" default)
379
-    local demo_user=$(get_or_create_user "demo" \
381
+    local demo_tenant
382
+    demo_tenant=$(get_or_create_project "demo" default)
383
+    local demo_user
384
+    demo_user=$(get_or_create_user "demo" \
380 385
         "$ADMIN_PASSWORD" "default" "demo@example.com")
381 386
 
382 387
     get_or_add_user_project_role $member_role $demo_user $demo_tenant
... ...
@@ -384,9 +393,11 @@ function create_keystone_accounts {
384 384
     get_or_add_user_project_role $another_role $demo_user $demo_tenant
385 385
     get_or_add_user_project_role $member_role $demo_user $invis_tenant
386 386
 
387
-    local admin_group=$(get_or_create_group "admins" \
387
+    local admin_group
388
+    admin_group=$(get_or_create_group "admins" \
388 389
         "default" "openstack admin group")
389
-    local non_admin_group=$(get_or_create_group "nonadmins" \
390
+    local non_admin_group
391
+    non_admin_group=$(get_or_create_group "nonadmins" \
390 392
         "default" "non-admin group")
391 393
 
392 394
     get_or_add_group_project_role $member_role $non_admin_group $demo_tenant
... ...
@@ -415,7 +426,8 @@ function create_keystone_accounts {
415 415
 function create_service_user {
416 416
     local role=${2:-service}
417 417
 
418
-    local user=$(get_or_create_user "$1" "$SERVICE_PASSWORD" default)
418
+    local user
419
+    user=$(get_or_create_user "$1" "$SERVICE_PASSWORD" default)
419 420
     get_or_add_user_project_role "$role" "$user" "$SERVICE_TENANT_NAME"
420 421
 }
421 422
 
... ...
@@ -82,7 +82,8 @@ function cleanup_ldap {
82 82
 function init_ldap {
83 83
     local keystone_ldif
84 84
 
85
-    local tmp_ldap_dir=$(mktemp -d -t ldap.$$.XXXXXXXXXX)
85
+    local tmp_ldap_dir
86
+    tmp_ldap_dir=$(mktemp -d -t ldap.$$.XXXXXXXXXX)
86 87
 
87 88
     # Remove data but not schemas
88 89
     clear_ldap_state
... ...
@@ -113,7 +114,8 @@ function install_ldap {
113 113
     echo "Installing LDAP inside function"
114 114
     echo "os_VENDOR is $os_VENDOR"
115 115
 
116
-    local tmp_ldap_dir=$(mktemp -d -t ldap.$$.XXXXXXXXXX)
116
+    local tmp_ldap_dir
117
+    tmp_ldap_dir=$(mktemp -d -t ldap.$$.XXXXXXXXXX)
117 118
 
118 119
     printf "installing OpenLDAP"
119 120
     if is_ubuntu; then
... ...
@@ -129,7 +131,8 @@ function install_ldap {
129 129
     fi
130 130
 
131 131
     echo "LDAP_PASSWORD is $LDAP_PASSWORD"
132
-    local slappass=$(slappasswd -s $LDAP_PASSWORD)
132
+    local slappass
133
+    slappass=$(slappasswd -s $LDAP_PASSWORD)
133 134
     printf "LDAP secret is $slappass\n"
134 135
 
135 136
     # Create manager.ldif and add to olcdb
... ...
@@ -56,7 +56,8 @@ function _clean_lvm_backing_file {
56 56
 
57 57
     # If the backing physical device is a loop device, it was probably setup by DevStack
58 58
     if [[ -n "$backing_file" ]] && [[ -e "$backing_file" ]]; then
59
-        local vg_dev=$(sudo losetup -j $backing_file | awk -F':' '/'$BACKING_FILE_SUFFIX'/ { print $1}')
59
+        local vg_dev
60
+        vg_dev=$(sudo losetup -j $backing_file | awk -F':' '/'$BACKING_FILE_SUFFIX'/ { print $1}')
60 61
         sudo losetup -d $vg_dev
61 62
         rm -f $backing_file
62 63
     fi
... ...
@@ -89,7 +90,8 @@ function _create_lvm_volume_group {
89 89
     if ! sudo vgs $vg; then
90 90
         # Only create if the file doesn't already exists
91 91
         [[ -f $backing_file ]] || truncate -s $size $backing_file
92
-        local vg_dev=`sudo losetup -f --show $backing_file`
92
+        local vg_dev
93
+        vg_dev=`sudo losetup -f --show $backing_file`
93 94
 
94 95
         # Only create volume group if it doesn't already exist
95 96
         if ! sudo vgs $vg; then
... ...
@@ -806,7 +806,8 @@ function _move_neutron_addresses_route {
806 806
 
807 807
         local IP_ADD=""
808 808
         local IP_DEL=""
809
-        local DEFAULT_ROUTE_GW=$(ip r | awk "/default.+$from_intf/ { print \$3; exit }")
809
+        local DEFAULT_ROUTE_GW
810
+        DEFAULT_ROUTE_GW=$(ip r | awk "/default.+$from_intf/ { print \$3; exit }")
810 811
         local ADD_OVS_PORT=""
811 812
 
812 813
         if [[ $af == "inet" ]]; then
... ...
@@ -1247,7 +1248,8 @@ function _neutron_create_private_subnet_v4 {
1247 1247
     subnet_params+="--gateway $NETWORK_GATEWAY "
1248 1248
     subnet_params+="--name $PRIVATE_SUBNET_NAME "
1249 1249
     subnet_params+="$NET_ID $FIXED_RANGE"
1250
-    local subnet_id=$(neutron subnet-create $subnet_params | grep ' id ' | get_field 2)
1250
+    local subnet_id
1251
+    subnet_id=$(neutron subnet-create $subnet_params | grep ' id ' | get_field 2)
1251 1252
     die_if_not_set $LINENO subnet_id "Failure creating private IPv4 subnet for $TENANT_ID"
1252 1253
     echo $subnet_id
1253 1254
 }
... ...
@@ -1262,7 +1264,8 @@ function _neutron_create_private_subnet_v6 {
1262 1262
     subnet_params+="--gateway $IPV6_PRIVATE_NETWORK_GATEWAY "
1263 1263
     subnet_params+="--name $IPV6_PRIVATE_SUBNET_NAME "
1264 1264
     subnet_params+="$NET_ID $FIXED_RANGE_V6 $ipv6_modes"
1265
-    local ipv6_subnet_id=$(neutron subnet-create $subnet_params | grep ' id ' | get_field 2)
1265
+    local ipv6_subnet_id
1266
+    ipv6_subnet_id=$(neutron subnet-create $subnet_params | grep ' id ' | get_field 2)
1266 1267
     die_if_not_set $LINENO ipv6_subnet_id "Failure creating private IPv6 subnet for $TENANT_ID"
1267 1268
     echo $ipv6_subnet_id
1268 1269
 }
... ...
@@ -1275,7 +1278,8 @@ function _neutron_create_public_subnet_v4 {
1275 1275
     subnet_params+="--name $PUBLIC_SUBNET_NAME "
1276 1276
     subnet_params+="$EXT_NET_ID $FLOATING_RANGE "
1277 1277
     subnet_params+="-- --enable_dhcp=False"
1278
-    local id_and_ext_gw_ip=$(neutron subnet-create $subnet_params | grep -e 'gateway_ip' -e ' id ')
1278
+    local id_and_ext_gw_ip
1279
+    id_and_ext_gw_ip=$(neutron subnet-create $subnet_params | grep -e 'gateway_ip' -e ' id ')
1279 1280
     die_if_not_set $LINENO id_and_ext_gw_ip "Failure creating public IPv4 subnet"
1280 1281
     echo $id_and_ext_gw_ip
1281 1282
 }
... ...
@@ -1287,7 +1291,8 @@ function _neutron_create_public_subnet_v6 {
1287 1287
     subnet_params+="--name $IPV6_PUBLIC_SUBNET_NAME "
1288 1288
     subnet_params+="$EXT_NET_ID $IPV6_PUBLIC_RANGE "
1289 1289
     subnet_params+="-- --enable_dhcp=False"
1290
-    local ipv6_id_and_ext_gw_ip=$(neutron subnet-create $subnet_params | grep -e 'gateway_ip' -e ' id ')
1290
+    local ipv6_id_and_ext_gw_ip
1291
+    ipv6_id_and_ext_gw_ip=$(neutron subnet-create $subnet_params | grep -e 'gateway_ip' -e ' id ')
1291 1292
     die_if_not_set $LINENO ipv6_id_and_ext_gw_ip "Failure creating an IPv6 public subnet"
1292 1293
     echo $ipv6_id_and_ext_gw_ip
1293 1294
 }
... ...
@@ -1296,8 +1301,10 @@ function _neutron_create_public_subnet_v6 {
1296 1296
 function _neutron_configure_router_v4 {
1297 1297
     neutron router-interface-add $ROUTER_ID $SUBNET_ID
1298 1298
     # Create a public subnet on the external network
1299
-    local id_and_ext_gw_ip=$(_neutron_create_public_subnet_v4 $EXT_NET_ID)
1300
-    local ext_gw_ip=$(echo $id_and_ext_gw_ip  | get_field 2)
1299
+    local id_and_ext_gw_ip
1300
+    id_and_ext_gw_ip=$(_neutron_create_public_subnet_v4 $EXT_NET_ID)
1301
+    local ext_gw_ip
1302
+    ext_gw_ip=$(echo $id_and_ext_gw_ip  | get_field 2)
1301 1303
     PUB_SUBNET_ID=$(echo $id_and_ext_gw_ip | get_field 5)
1302 1304
     # Configure the external network as the default router gateway
1303 1305
     neutron router-gateway-set $ROUTER_ID $EXT_NET_ID
... ...
@@ -1334,9 +1341,12 @@ function _neutron_configure_router_v4 {
1334 1334
 function _neutron_configure_router_v6 {
1335 1335
     neutron router-interface-add $ROUTER_ID $IPV6_SUBNET_ID
1336 1336
     # Create a public subnet on the external network
1337
-    local ipv6_id_and_ext_gw_ip=$(_neutron_create_public_subnet_v6 $EXT_NET_ID)
1338
-    local ipv6_ext_gw_ip=$(echo $ipv6_id_and_ext_gw_ip | get_field 2)
1339
-    local ipv6_pub_subnet_id=$(echo $ipv6_id_and_ext_gw_ip | get_field 5)
1337
+    local ipv6_id_and_ext_gw_ip
1338
+    ipv6_id_and_ext_gw_ip=$(_neutron_create_public_subnet_v6 $EXT_NET_ID)
1339
+    local ipv6_ext_gw_ip
1340
+    ipv6_ext_gw_ip=$(echo $ipv6_id_and_ext_gw_ip | get_field 2)
1341
+    local ipv6_pub_subnet_id
1342
+    ipv6_pub_subnet_id=$(echo $ipv6_id_and_ext_gw_ip | get_field 5)
1340 1343
 
1341 1344
     # If the external network has not already been set as the default router
1342 1345
     # gateway when configuring an IPv4 public subnet, do so now
... ...
@@ -1354,7 +1364,8 @@ function _neutron_configure_router_v6 {
1354 1354
         die_if_not_set $LINENO IPV6_ROUTER_GW_IP "Failure retrieving IPV6_ROUTER_GW_IP"
1355 1355
 
1356 1356
         if is_neutron_ovs_base_plugin && [[ "$Q_USE_NAMESPACE" = "True" ]]; then
1357
-            local ext_gw_interface=$(_neutron_get_ext_gw_interface)
1357
+            local ext_gw_interface
1358
+            ext_gw_interface=$(_neutron_get_ext_gw_interface)
1358 1359
             local ipv6_cidr_len=${IPV6_PUBLIC_RANGE#*/}
1359 1360
 
1360 1361
             # Configure interface for public bridge
... ...
@@ -10,7 +10,8 @@ set +o xtrace
10 10
 source $TOP_DIR/lib/neutron_plugins/openvswitch
11 11
 
12 12
 function save_function {
13
-    local ORIG_FUNC=$(declare -f $1)
13
+    local ORIG_FUNC
14
+    ORIG_FUNC=$(declare -f $1)
14 15
     local NEW_FUNC="$2${ORIG_FUNC#$1}"
15 16
     eval "$NEW_FUNC"
16 17
 }
... ...
@@ -49,8 +49,10 @@ function neutron_ovs_base_cleanup {
49 49
 
50 50
 function _neutron_ovs_base_install_ubuntu_dkms {
51 51
     # install Dynamic Kernel Module Support packages if needed
52
-    local kernel_version=$(uname -r)
53
-    local kernel_major_minor=`echo $kernel_version | cut -d. -f1-2`
52
+    local kernel_version
53
+    kernel_version=$(uname -r)
54
+    local kernel_major_minor
55
+    kernel_major_minor=`echo $kernel_version | cut -d. -f1-2`
54 56
     # From kernel 3.13 on, openvswitch-datapath-dkms is not needed
55 57
     if [ `vercmp_numbers "$kernel_major_minor" "3.13"` -lt "0" ]; then
56 58
         install_package "dkms openvswitch-datapath-dkms linux-headers-$kernel_version"
... ...
@@ -202,14 +202,16 @@ function cleanup_nova {
202 202
         clean_iptables
203 203
 
204 204
         # Destroy old instances
205
-        local instances=`sudo virsh list --all | grep $INSTANCE_NAME_PREFIX | sed "s/.*\($INSTANCE_NAME_PREFIX[0-9a-fA-F]*\).*/\1/g"`
205
+        local instances
206
+        instances=`sudo virsh list --all | grep $INSTANCE_NAME_PREFIX | sed "s/.*\($INSTANCE_NAME_PREFIX[0-9a-fA-F]*\).*/\1/g"`
206 207
         if [ ! "$instances" = "" ]; then
207 208
             echo $instances | xargs -n1 sudo virsh destroy || true
208 209
             echo $instances | xargs -n1 sudo virsh undefine --managed-save || true
209 210
         fi
210 211
 
211 212
         # Logout and delete iscsi sessions
212
-        local tgts=$(sudo iscsiadm --mode node | grep $VOLUME_NAME_PREFIX | cut -d ' ' -f2)
213
+        local tgts
214
+        tgts=$(sudo iscsiadm --mode node | grep $VOLUME_NAME_PREFIX | cut -d ' ' -f2)
213 215
         local target
214 216
         for target in $tgts; do
215 217
             sudo iscsiadm --mode node -T $target --logout || true
... ...
@@ -245,8 +247,10 @@ function _cleanup_nova_apache_wsgi {
245 245
 function _config_nova_apache_wsgi {
246 246
     sudo mkdir -p $NOVA_WSGI_DIR
247 247
 
248
-    local nova_apache_conf=$(apache_site_config_for nova-api)
249
-    local nova_ec2_apache_conf=$(apache_site_config_for nova-ec2-api)
248
+    local nova_apache_conf
249
+    nova_apache_conf=$(apache_site_config_for nova-api)
250
+    local nova_ec2_apache_conf
251
+    nova_ec2_apache_conf=$(apache_site_config_for nova-ec2-api)
250 252
     local nova_ssl=""
251 253
     local nova_certfile=""
252 254
     local nova_keyfile=""
... ...
@@ -784,7 +788,8 @@ function start_nova_api {
784 784
     export PATH=$NOVA_BIN_DIR:$PATH
785 785
 
786 786
     # If the site is not enabled then we are in a grenade scenario
787
-    local enabled_site_file=$(apache_site_config_for nova-api)
787
+    local enabled_site_file
788
+    enabled_site_file=$(apache_site_config_for nova-api)
788 789
     if [ -f ${enabled_site_file} ] && [ "$NOVA_USE_MOD_WSGI" == "True" ]; then
789 790
         enable_apache_site nova-api
790 791
         enable_apache_site nova-ec2-api
... ...
@@ -205,9 +205,12 @@ function _config_swift_apache_wsgi {
205 205
     # copy apache vhost file and set name and port
206 206
     local node_number
207 207
     for node_number in ${SWIFT_REPLICAS_SEQ}; do
208
-        local object_port=$(( OBJECT_PORT_BASE + 10 * (node_number - 1) ))
209
-        local container_port=$(( CONTAINER_PORT_BASE + 10 * (node_number - 1) ))
210
-        local account_port=$(( ACCOUNT_PORT_BASE + 10 * (node_number - 1) ))
208
+        local object_port
209
+        object_port=$(( OBJECT_PORT_BASE + 10 * (node_number - 1) ))
210
+        local container_port
211
+        container_port=$(( CONTAINER_PORT_BASE + 10 * (node_number - 1) ))
212
+        local account_port
213
+        account_port=$(( ACCOUNT_PORT_BASE + 10 * (node_number - 1) ))
211 214
 
212 215
         sudo cp ${SWIFT_DIR}/examples/apache2/object-server.template $(apache_site_config_for object-server-${node_number})
213 216
         sudo sed -e "
... ...
@@ -504,7 +507,8 @@ EOF
504 504
 
505 505
     if is_service_enabled keystone; then
506 506
         iniuncomment ${testfile} func_test auth_version
507
-        local auth_vers=$(iniget ${testfile} func_test auth_version)
507
+        local auth_vers
508
+        auth_vers=$(iniget ${testfile} func_test auth_version)
508 509
         iniset ${testfile} func_test auth_host ${KEYSTONE_SERVICE_HOST}
509 510
         iniset ${testfile} func_test auth_port ${KEYSTONE_AUTH_PORT}
510 511
         if [[ $auth_vers == "3" ]]; then
... ...
@@ -514,7 +518,8 @@ EOF
514 514
         fi
515 515
     fi
516 516
 
517
-    local user_group=$(id -g ${STACK_USER})
517
+    local user_group
518
+    user_group=$(id -g ${STACK_USER})
518 519
     sudo install -d -o ${STACK_USER} -g ${user_group} ${SWIFT_DATA_DIR}
519 520
 
520 521
     local swift_log_dir=${SWIFT_DATA_DIR}/logs
... ...
@@ -540,7 +545,8 @@ function create_swift_disk {
540 540
     # First do a bit of setup by creating the directories and
541 541
     # changing the permissions so we can run it as our user.
542 542
 
543
-    local user_group=$(id -g ${STACK_USER})
543
+    local user_group
544
+    user_group=$(id -g ${STACK_USER})
544 545
     sudo install -d -o ${STACK_USER} -g ${user_group} ${SWIFT_DATA_DIR}/{drives,cache,run,logs}
545 546
 
546 547
     # Create a loopback disk and format it to XFS.
... ...
@@ -607,7 +613,8 @@ function create_swift_accounts {
607 607
 
608 608
     KEYSTONE_CATALOG_BACKEND=${KEYSTONE_CATALOG_BACKEND:-sql}
609 609
 
610
-    local another_role=$(get_or_create_role "anotherrole")
610
+    local another_role
611
+    another_role=$(get_or_create_role "anotherrole")
611 612
 
612 613
     # NOTE(jroll): Swift doesn't need the admin role here, however Ironic uses
613 614
     # temp urls, which break when uploaded by a non-admin role
... ...
@@ -623,33 +630,40 @@ function create_swift_accounts {
623 623
             "$SWIFT_SERVICE_PROTOCOL://$SERVICE_HOST:8080/v1/AUTH_\$(tenant_id)s"
624 624
     fi
625 625
 
626
-    local swift_tenant_test1=$(get_or_create_project swifttenanttest1 default)
626
+    local swift_tenant_test1
627
+    swift_tenant_test1=$(get_or_create_project swifttenanttest1 default)
627 628
     die_if_not_set $LINENO swift_tenant_test1 "Failure creating swift_tenant_test1"
628 629
     SWIFT_USER_TEST1=$(get_or_create_user swiftusertest1 $swiftusertest1_password \
629 630
                         "default" "test@example.com")
630 631
     die_if_not_set $LINENO SWIFT_USER_TEST1 "Failure creating SWIFT_USER_TEST1"
631 632
     get_or_add_user_project_role admin $SWIFT_USER_TEST1 $swift_tenant_test1
632 633
 
633
-    local swift_user_test3=$(get_or_create_user swiftusertest3 $swiftusertest3_password \
634
+    local swift_user_test3
635
+    swift_user_test3=$(get_or_create_user swiftusertest3 $swiftusertest3_password \
634 636
                                 "default" "test3@example.com")
635 637
     die_if_not_set $LINENO swift_user_test3 "Failure creating swift_user_test3"
636 638
     get_or_add_user_project_role $another_role $swift_user_test3 $swift_tenant_test1
637 639
 
638
-    local swift_tenant_test2=$(get_or_create_project swifttenanttest2 default)
640
+    local swift_tenant_test2
641
+    swift_tenant_test2=$(get_or_create_project swifttenanttest2 default)
639 642
     die_if_not_set $LINENO swift_tenant_test2 "Failure creating swift_tenant_test2"
640 643
 
641
-    local swift_user_test2=$(get_or_create_user swiftusertest2 $swiftusertest2_password \
644
+    local swift_user_test2
645
+    swift_user_test2=$(get_or_create_user swiftusertest2 $swiftusertest2_password \
642 646
                                 "default" "test2@example.com")
643 647
     die_if_not_set $LINENO swift_user_test2 "Failure creating swift_user_test2"
644 648
     get_or_add_user_project_role admin $swift_user_test2 $swift_tenant_test2
645 649
 
646
-    local swift_domain=$(get_or_create_domain swift_test 'Used for swift functional testing')
650
+    local swift_domain
651
+    swift_domain=$(get_or_create_domain swift_test 'Used for swift functional testing')
647 652
     die_if_not_set $LINENO swift_domain "Failure creating swift_test domain"
648 653
 
649
-    local swift_tenant_test4=$(get_or_create_project swifttenanttest4 $swift_domain)
654
+    local swift_tenant_test4
655
+    swift_tenant_test4=$(get_or_create_project swifttenanttest4 $swift_domain)
650 656
     die_if_not_set $LINENO swift_tenant_test4 "Failure creating swift_tenant_test4"
651 657
 
652
-    local swift_user_test4=$(get_or_create_user swiftusertest4 $swiftusertest4_password \
658
+    local swift_user_test4
659
+    swift_user_test4=$(get_or_create_user swiftusertest4 $swiftusertest4_password \
653 660
                                 $swift_domain "test4@example.com")
654 661
     die_if_not_set $LINENO swift_user_test4 "Failure creating swift_user_test4"
655 662
     get_or_add_user_project_role admin $swift_user_test4 $swift_tenant_test4
... ...
@@ -363,7 +363,8 @@ function configure_tempest {
363 363
     # Compute Features
364 364
     # Run ``verify_tempest_config -ur`` to retrieve enabled extensions on API endpoints
365 365
     # NOTE(mtreinish): This must be done after auth settings are added to the tempest config
366
-    local tmp_cfg_file=$(mktemp)
366
+    local tmp_cfg_file
367
+    tmp_cfg_file=$(mktemp)
367 368
     cd $TEMPEST_DIR
368 369
     tox -revenv -- verify-tempest-config -uro $tmp_cfg_file
369 370
 
... ...
@@ -346,7 +346,8 @@ function make_root_CA {
346 346
 # we need to change it.
347 347
 function fix_system_ca_bundle_path {
348 348
     if is_service_enabled tls-proxy || [ "$USE_SSL" == "True" ]; then
349
-        local capath=$(python -c $'try:\n from requests import certs\n print certs.where()\nexcept ImportError: pass')
349
+        local capath
350
+        capath=$(python -c $'try:\n from requests import certs\n print certs.where()\nexcept ImportError: pass')
350 351
 
351 352
         if [[ ! $capath == "" && ! $capath =~ ^/etc/.* && ! -L $capath ]]; then
352 353
             if is_fedora; then
... ...
@@ -20,8 +20,10 @@ FAILED_FUNCS=""
20 20
 # pass a test, printing out MSG
21 21
 #  usage: passed message
22 22
 function passed {
23
-    local lineno=$(caller 0 | awk '{print $1}')
24
-    local function=$(caller 0 | awk '{print $2}')
23
+    local lineno
24
+    lineno=$(caller 0 | awk '{print $1}')
25
+    local function
26
+    function=$(caller 0 | awk '{print $2}')
25 27
     local msg="$1"
26 28
     if [ -z "$msg" ]; then
27 29
         msg="OK"
... ...
@@ -33,8 +35,10 @@ function passed {
33 33
 # fail a test, printing out MSG
34 34
 #  usage: failed message
35 35
 function failed {
36
-    local lineno=$(caller 0 | awk '{print $1}')
37
-    local function=$(caller 0 | awk '{print $2}')
36
+    local lineno
37
+    lineno=$(caller 0 | awk '{print $1}')
38
+    local function
39
+    function=$(caller 0 | awk '{print $2}')
38 40
     local msg="$1"
39 41
     FAILED_FUNCS+="$function:L$lineno\n"
40 42
     echo "ERROR: $function:L$lineno!"
... ...
@@ -45,8 +49,10 @@ function failed {
45 45
 # assert string comparision of val1 equal val2, printing out msg
46 46
 #  usage: assert_equal val1 val2 msg
47 47
 function assert_equal {
48
-    local lineno=`caller 0 | awk '{print $1}'`
49
-    local function=`caller 0 | awk '{print $2}'`
48
+    local lineno
49
+    lineno=`caller 0 | awk '{print $1}'`
50
+    local function
51
+    function=`caller 0 | awk '{print $2}'`
50 52
     local msg=$3
51 53
 
52 54
     if [ -z "$msg" ]; then
... ...
@@ -66,8 +72,10 @@ function assert_equal {
66 66
 # assert variable is empty/blank, printing out msg
67 67
 #  usage: assert_empty VAR msg
68 68
 function assert_empty {
69
-    local lineno=`caller 0 | awk '{print $1}'`
70
-    local function=`caller 0 | awk '{print $2}'`
69
+    local lineno
70
+    lineno=`caller 0 | awk '{print $1}'`
71
+    local function
72
+    function=`caller 0 | awk '{print $2}'`
71 73
     local msg=$2
72 74
 
73 75
     if [ -z "$msg" ]; then
... ...
@@ -190,7 +190,8 @@ function add_entry {
190 190
     local user_passwd=$5
191 191
 
192 192
     # The admin user can see all user's secret AWS keys, it does not looks good
193
-    local line=`openstack ec2 credentials list --user $user_id | grep " $project_id "`
193
+    local line
194
+    line=$(openstack ec2 credentials list --user $user_id | grep " $project_id " || true)
194 195
     if [ -z "$line" ]; then
195 196
         openstack ec2 credentials create --user $user_id --project $project_id 1>&2
196 197
         line=`openstack ec2 credentials list --user $user_id | grep " $project_id "`
... ...
@@ -41,10 +41,12 @@ function get_mem_available {
41 41
 # snapshot of current usage; i.e. checking the latest entry in the
42 42
 # file will give the peak-memory usage
43 43
 function tracker {
44
-    local low_point=$(get_mem_available)
44
+    local low_point
45
+    low_point=$(get_mem_available)
45 46
     while [ 1 ]; do
46 47
 
47
-        local mem_available=$(get_mem_available)
48
+        local mem_available
49
+        mem_available=$(get_mem_available)
48 50
 
49 51
         if [[ $mem_available -lt $low_point ]]; then
50 52
             low_point=$mem_available
... ...
@@ -100,7 +100,8 @@ create_vif()
100 100
 {
101 101
     local v="$1"
102 102
     echo "Installing VM interface on [$BRIDGE]"
103
-    local out_network_uuid=$(find_network "$BRIDGE")
103
+    local out_network_uuid
104
+    out_network_uuid=$(find_network "$BRIDGE")
104 105
     xe vif-create vm-uuid="$v" network-uuid="$out_network_uuid" device="0"
105 106
 }
106 107
 
... ...
@@ -35,9 +35,12 @@ xe_min()
35 35
 destroy_vdi()
36 36
 {
37 37
     local vbd_uuid="$1"
38
-    local type=$(xe_min vbd-list uuid=$vbd_uuid params=type)
39
-    local dev=$(xe_min vbd-list uuid=$vbd_uuid params=userdevice)
40
-    local vdi_uuid=$(xe_min vbd-list uuid=$vbd_uuid params=vdi-uuid)
38
+    local type
39
+    type=$(xe_min vbd-list uuid=$vbd_uuid params=type)
40
+    local dev
41
+    dev=$(xe_min vbd-list uuid=$vbd_uuid params=userdevice)
42
+    local vdi_uuid
43
+    vdi_uuid=$(xe_min vbd-list uuid=$vbd_uuid params=vdi-uuid)
41 44
 
42 45
     if [ "$type" == 'Disk' ] && [ "$dev" != 'xvda' ] && [ "$dev" != '0' ]; then
43 46
         xe vdi-destroy uuid=$vdi_uuid
... ...
@@ -47,7 +50,8 @@ destroy_vdi()
47 47
 uninstall()
48 48
 {
49 49
     local vm_uuid="$1"
50
-    local power_state=$(xe_min vm-list uuid=$vm_uuid params=power-state)
50
+    local power_state
51
+    power_state=$(xe_min vm-list uuid=$vm_uuid params=power-state)
51 52
 
52 53
     if [ "$power_state" != "halted" ]; then
53 54
         xe vm-shutdown vm=$vm_uuid force=true
... ...
@@ -165,7 +165,8 @@ EOF
165 165
 function test_get_local_sr {
166 166
     setup_xe_response "uuid123"
167 167
 
168
-    local RESULT=$(. mocks && get_local_sr)
168
+    local RESULT
169
+    RESULT=$(. mocks && get_local_sr)
169 170
 
170 171
     [ "$RESULT" == "uuid123" ]
171 172
 
... ...
@@ -173,7 +174,8 @@ function test_get_local_sr {
173 173
 }
174 174
 
175 175
 function test_get_local_sr_path {
176
-    local RESULT=$(mock_out get_local_sr "uuid1" && get_local_sr_path)
176
+    local RESULT
177
+    RESULT=$(mock_out get_local_sr "uuid1" && get_local_sr_path)
177 178
 
178 179
     [ "/var/run/sr-mount/uuid1" == "$RESULT" ]
179 180
 }