diff --git a/HACKING.rst b/HACKING.rst
index 103b579..5c15537 100644
--- a/HACKING.rst
+++ b/HACKING.rst
@@ -275,3 +275,5 @@
 - local variables should be lower case, global variables should be
   upper case
 - function names should_have_underscores, NotCamelCase.
+- functions should be declared as per the regex ^function foo {$
+  with code starting on the next line
diff --git a/driver_certs/cinder_driver_cert.sh b/driver_certs/cinder_driver_cert.sh
index e45b7f8..d2c636f 100755
--- a/driver_certs/cinder_driver_cert.sh
+++ b/driver_certs/cinder_driver_cert.sh
@@ -32,7 +32,7 @@
 TEMPFILE=`mktemp`
 RECLONE=True
 
-function log_message() {
+function log_message {
     MESSAGE=$1
     STEP_HEADER=$2
     if [[ "$STEP_HEADER" = "True" ]]; then
diff --git a/exercises/aggregates.sh b/exercises/aggregates.sh
index d223301..01d548d 100755
--- a/exercises/aggregates.sh
+++ b/exercises/aggregates.sh
@@ -57,7 +57,7 @@
 AGGREGATE2_NAME=test_aggregate_$RANDOM
 AGGREGATE_A_ZONE=nova
 
-exit_if_aggregate_present() {
+function exit_if_aggregate_present {
     aggregate_name=$1
 
     if [ $(nova aggregate-list | grep -c " $aggregate_name ") == 0 ]; then
diff --git a/exercises/client-args.sh b/exercises/client-args.sh
index e79774f..b360f1e 100755
--- a/exercises/client-args.sh
+++ b/exercises/client-args.sh
@@ -154,7 +154,7 @@
 # Results
 # =======
 
-function report() {
+function report {
     if [[ -n "$2" ]]; then
         echo "$1: $2"
     fi
diff --git a/exercises/client-env.sh b/exercises/client-env.sh
index 6c6fe12..d955e4d 100755
--- a/exercises/client-env.sh
+++ b/exercises/client-env.sh
@@ -165,7 +165,7 @@
 # Results
 # =======
 
-function report() {
+function report {
     if [[ -n "$2" ]]; then
         echo "$1: $2"
     fi
diff --git a/exercises/neutron-adv-test.sh b/exercises/neutron-adv-test.sh
index a9199e6..0a24fe9 100755
--- a/exercises/neutron-adv-test.sh
+++ b/exercises/neutron-adv-test.sh
@@ -20,7 +20,7 @@
 set -o errtrace
 
 trap failed ERR
-failed() {
+function failed {
     local r=$?
     set +o errtrace
     set +o xtrace
@@ -395,7 +395,7 @@
 # Usage and main
 # --------------
 
-usage() {
+function usage {
     echo "$0: [-h]"
     echo "  -h, --help              Display help message"
     echo "  -t, --tenant            Create tenants"
@@ -408,7 +408,7 @@
     echo "  -T, --test              Test functions"
 }
 
-main() {
+function main {
 
     echo Description
 
diff --git a/functions b/functions
index 3101111..43639c7 100644
--- a/functions
+++ b/functions
@@ -51,7 +51,7 @@
 # - ``GLANCE_HOSTPORT``
 #
 # upload_image image-url glance-token
-function upload_image() {
+function upload_image {
     local image_url=$1
     local token=$2
 
@@ -341,7 +341,7 @@
 
 # Wait for an HTTP server to start answering requests
 # wait_for_service timeout url
-function wait_for_service() {
+function wait_for_service {
     local timeout=$1
     local url=$2
     timeout $timeout sh -c "while ! curl --noproxy '*' -s $url >/dev/null; do sleep 1; done"
@@ -351,7 +351,7 @@
 # ping check
 # Uses globals ``ENABLED_SERVICES``
 # ping_check from-net ip boot-timeout expected
-function ping_check() {
+function ping_check {
     if is_service_enabled neutron; then
         _ping_check_neutron  "$1" $2 $3 $4
         return
@@ -361,7 +361,7 @@
 
 # ping check for nova
 # Uses globals ``MULTI_HOST``, ``PRIVATE_NETWORK``
-function _ping_check_novanet() {
+function _ping_check_novanet {
     local from_net=$1
     local ip=$2
     local boot_timeout=$3
@@ -386,7 +386,7 @@
 }
 
 # Get ip of instance
-function get_instance_ip(){
+function get_instance_ip {
     local vm_id=$1
     local network_name=$2
     local nova_result="$(nova show $vm_id)"
@@ -401,7 +401,7 @@
 # ssh check
 
 # ssh_check net-name key-file floating-ip default-user active-timeout
-function ssh_check() {
+function ssh_check {
     if is_service_enabled neutron; then
         _ssh_check_neutron  "$1" $2 $3 $4 $5
         return
@@ -409,7 +409,7 @@
     _ssh_check_novanet "$1" $2 $3 $4 $5
 }
 
-function _ssh_check_novanet() {
+function _ssh_check_novanet {
     local NET_NAME=$1
     local KEY_FILE=$2
     local FLOATING_IP=$3
@@ -425,7 +425,7 @@
 # Get the location of the $module-rootwrap executables, where module is cinder
 # or nova.
 # get_rootwrap_location module
-function get_rootwrap_location() {
+function get_rootwrap_location {
     local module=$1
 
     echo "$(get_python_exec_prefix)/$module-rootwrap"
@@ -434,7 +434,7 @@
 
 # Path permissions sanity check
 # check_path_perm_sanity path
-function check_path_perm_sanity() {
+function check_path_perm_sanity {
     # Ensure no element of the path has 0700 permissions, which is very
     # likely to cause issues for daemons.  Inspired by default 0700
     # homedir permissions on RHEL and common practice of making DEST in
@@ -505,7 +505,7 @@
 # The above will return "0", as the versions are equal.
 #
 # vercmp_numbers ver1 ver2
-vercmp_numbers() {
+function vercmp_numbers {
     typeset v1=$1 v2=$2 sep
     typeset -a ver1 ver2
 
@@ -523,7 +523,7 @@
 # Defaults are respectively 'project_name' and 'user_name'
 #
 # setup_colorized_logging something.conf SOMESECTION
-function setup_colorized_logging() {
+function setup_colorized_logging {
     local conf_file=$1
     local conf_section=$2
     local project_var=${3:-"project_name"}
diff --git a/functions-common b/functions-common
index 2248fbb..eba4985 100644
--- a/functions-common
+++ b/functions-common
@@ -38,7 +38,7 @@
 
 # Append a new option in an ini file without replacing the old value
 # iniadd config-file section option value1 value2 value3 ...
-function iniadd() {
+function iniadd {
     local xtrace=$(set +o | grep xtrace)
     set +o xtrace
     local file=$1
@@ -52,7 +52,7 @@
 
 # Comment an option in an INI file
 # inicomment config-file section option
-function inicomment() {
+function inicomment {
     local xtrace=$(set +o | grep xtrace)
     set +o xtrace
     local file=$1
@@ -64,7 +64,7 @@
 
 # Get an option from an INI file
 # iniget config-file section option
-function iniget() {
+function iniget {
     local xtrace=$(set +o | grep xtrace)
     set +o xtrace
     local file=$1
@@ -78,7 +78,7 @@
 
 # Get a multiple line option from an INI file
 # iniget_multiline config-file section option
-function iniget_multiline() {
+function iniget_multiline {
     local xtrace=$(set +o | grep xtrace)
     set +o xtrace
     local file=$1
@@ -92,7 +92,7 @@
 
 # Determinate is the given option present in the INI file
 # ini_has_option config-file section option
-function ini_has_option() {
+function ini_has_option {
     local xtrace=$(set +o | grep xtrace)
     set +o xtrace
     local file=$1
@@ -106,7 +106,7 @@
 
 # Set an option in an INI file
 # iniset config-file section option value
-function iniset() {
+function iniset {
     local xtrace=$(set +o | grep xtrace)
     set +o xtrace
     local file=$1
@@ -135,7 +135,7 @@
 
 # Set a multiple line option in an INI file
 # iniset_multiline config-file section option value1 value2 valu3 ...
-function iniset_multiline() {
+function iniset_multiline {
     local xtrace=$(set +o | grep xtrace)
     set +o xtrace
     local file=$1
@@ -167,7 +167,7 @@
 
 # Uncomment an option in an INI file
 # iniuncomment config-file section option
-function iniuncomment() {
+function iniuncomment {
     local xtrace=$(set +o | grep xtrace)
     set +o xtrace
     local file=$1
@@ -181,7 +181,7 @@
 # Accepts as False: 0 no No NO false False FALSE
 # Accepts as True: 1 yes Yes YES true True TRUE
 # VAR=$(trueorfalse default-value test-value)
-function trueorfalse() {
+function trueorfalse {
     local xtrace=$(set +o | grep xtrace)
     set +o xtrace
     local default=$1
@@ -213,7 +213,7 @@
 
 # Prints line number and "message" then exits
 # die $LINENO "message"
-function die() {
+function die {
     local exitcode=$?
     set +o xtrace
     local line=$1; shift
@@ -231,7 +231,7 @@
 # exit code is non-zero and prints "message" and exits
 # NOTE: env-var is the variable name without a '$'
 # die_if_not_set $LINENO env-var "message"
-function die_if_not_set() {
+function die_if_not_set {
     local exitcode=$?
     FXTRACE=$(set +o | grep xtrace)
     set +o xtrace
@@ -245,7 +245,7 @@
 
 # Prints line number and "message" in error format
 # err $LINENO "message"
-function err() {
+function err {
     local exitcode=$?
     errXTRACE=$(set +o | grep xtrace)
     set +o xtrace
@@ -262,7 +262,7 @@
 # exit code is non-zero and prints "message"
 # NOTE: env-var is the variable name without a '$'
 # err_if_not_set $LINENO env-var "message"
-function err_if_not_set() {
+function err_if_not_set {
     local exitcode=$?
     errinsXTRACE=$(set +o | grep xtrace)
     set +o xtrace
@@ -291,14 +291,14 @@
 
 # Test if the named environment variable is set and not zero length
 # is_set env-var
-function is_set() {
+function is_set {
     local var=\$"$1"
     eval "[ -n \"$var\" ]" # For ex.: sh -c "[ -n \"$var\" ]" would be better, but several exercises depends on this
 }
 
 # Prints line number and "message" in warning format
 # warn $LINENO "message"
-function warn() {
+function warn {
     local exitcode=$?
     errXTRACE=$(set +o | grep xtrace)
     set +o xtrace
@@ -324,7 +324,7 @@
 # os_PACKAGE - package type
 # os_CODENAME - vendor's codename for release
 # GetOSVersion
-GetOSVersion() {
+function GetOSVersion {
     # Figure out which vendor we are
     if [[ -x "`which sw_vers 2>/dev/null`" ]]; then
         # OS/X
@@ -414,7 +414,7 @@
 
 # Translate the OS version values into common nomenclature
 # Sets global ``DISTRO`` from the ``os_*`` values
-function GetDistro() {
+function GetDistro {
     GetOSVersion
     if [[ "$os_VENDOR" =~ (Ubuntu) || "$os_VENDOR" =~ (Debian) ]]; then
         # 'Everyone' refers to Ubuntu / Debian releases by the code name adjective
@@ -491,7 +491,7 @@
 
 # Returns openstack release name for a given branch name
 # ``get_release_name_from_branch branch-name``
-function get_release_name_from_branch(){
+function get_release_name_from_branch {
     local branch=$1
     if [[ $branch =~ "stable/" ]]; then
         echo ${branch#*/}
@@ -577,7 +577,7 @@
 # to timeout(1); otherwise the default value of 0 maintains the status
 # quo of waiting forever.
 # usage: git_timed <git-command>
-function git_timed() {
+function git_timed {
     local count=0
     local timeout=0
 
@@ -603,7 +603,7 @@
 
 # git update using reference as a branch.
 # git_update_branch ref
-function git_update_branch() {
+function git_update_branch {
 
     GIT_BRANCH=$1
 
@@ -615,7 +615,7 @@
 
 # git update using reference as a branch.
 # git_update_remote_branch ref
-function git_update_remote_branch() {
+function git_update_remote_branch {
 
     GIT_BRANCH=$1
 
@@ -625,7 +625,7 @@
 # git update using reference as a tag. Be careful editing source at that repo
 # as working copy will be in a detached mode
 # git_update_tag ref
-function git_update_tag() {
+function git_update_tag {
 
     GIT_TAG=$1
 
@@ -641,7 +641,7 @@
 
 # Get the default value for HOST_IP
 # get_default_host_ip fixed_range floating_range host_ip_iface host_ip
-function get_default_host_ip() {
+function get_default_host_ip {
     local fixed_range=$1
     local floating_range=$2
     local host_ip_iface=$3
@@ -673,7 +673,7 @@
 # Fields are numbered starting with 1
 # Reverse syntax is supported: -1 is the last field, -2 is second to last, etc.
 # get_field field-number
-function get_field() {
+function get_field {
     while read data; do
         if [ "$1" -lt 0 ]; then
             field="(\$(NF$1))"
@@ -687,7 +687,7 @@
 # Add a policy to a policy.json file
 # Do nothing if the policy already exists
 # ``policy_add policy_file policy_name policy_permissions``
-function policy_add() {
+function policy_add {
     local policy_file=$1
     local policy_name=$2
     local policy_perm=$3
@@ -717,7 +717,7 @@
 # =================
 
 # _get_package_dir
-function _get_package_dir() {
+function _get_package_dir {
     local pkg_dir
     if is_ubuntu; then
         pkg_dir=$FILES/apts
@@ -734,7 +734,7 @@
 # Wrapper for ``apt-get`` to set cache and proxy environment variables
 # Uses globals ``OFFLINE``, ``*_proxy``
 # apt_get operation package [package ...]
-function apt_get() {
+function apt_get {
     local xtrace=$(set +o | grep xtrace)
     set +o xtrace
 
@@ -759,7 +759,7 @@
 # - ``# NOPRIME`` defers installation to be performed later in `stack.sh`
 # - ``# dist:DISTRO`` or ``dist:DISTRO1,DISTRO2`` limits the selection
 #   of the package to the distros listed.  The distro names are case insensitive.
-function get_packages() {
+function get_packages {
     local xtrace=$(set +o | grep xtrace)
     set +o xtrace
     local services=$@
@@ -870,7 +870,7 @@
 
 # Distro-agnostic package installer
 # install_package package [package ...]
-function install_package() {
+function install_package {
     local xtrace=$(set +o | grep xtrace)
     set +o xtrace
     if is_ubuntu; then
@@ -895,7 +895,7 @@
 
 # Distro-agnostic function to tell if a package is installed
 # is_package_installed package [package ...]
-function is_package_installed() {
+function is_package_installed {
     if [[ -z "$@" ]]; then
         return 1
     fi
@@ -915,7 +915,7 @@
 
 # Distro-agnostic package uninstaller
 # uninstall_package package [package ...]
-function uninstall_package() {
+function uninstall_package {
     if is_ubuntu; then
         apt_get purge "$@"
     elif is_fedora; then
@@ -930,7 +930,7 @@
 # Wrapper for ``yum`` to set proxy environment variables
 # Uses globals ``OFFLINE``, ``*_proxy``
 # yum_install package [package ...]
-function yum_install() {
+function yum_install {
     [[ "$OFFLINE" = "True" ]] && return
     local sudo="sudo"
     [[ "$(id -u)" = "0" ]] && sudo="env"
@@ -941,7 +941,7 @@
 
 # zypper wrapper to set arguments correctly
 # zypper_install package [package ...]
-function zypper_install() {
+function zypper_install {
     [[ "$OFFLINE" = "True" ]] && return
     local sudo="sudo"
     [[ "$(id -u)" = "0" ]] && sudo="env"
@@ -958,7 +958,7 @@
 # files to produce the same logs as screen_it().  The log filename is derived
 # from the service name and global-and-now-misnamed SCREEN_LOGDIR
 # _run_process service "command-line"
-function _run_process() {
+function _run_process {
     local service=$1
     local command="$2"
 
@@ -983,7 +983,7 @@
 # Helper to remove the ``*.failure`` files under ``$SERVICE_DIR/$SCREEN_NAME``.
 # This is used for ``service_check`` when all the ``screen_it`` are called finished
 # init_service_check
-function init_service_check() {
+function init_service_check {
     SCREEN_NAME=${SCREEN_NAME:-stack}
     SERVICE_DIR=${SERVICE_DIR:-${DEST}/status}
 
@@ -996,7 +996,7 @@
 
 # Find out if a process exists by partial name.
 # is_running name
-function is_running() {
+function is_running {
     local name=$1
     ps auxw | grep -v grep | grep ${name} > /dev/null
     RC=$?
@@ -1009,7 +1009,7 @@
 # of screen_it() without screen.  PIDs are written to
 # $SERVICE_DIR/$SCREEN_NAME/$service.pid
 # run_process service "command-line"
-function run_process() {
+function run_process {
     local service=$1
     local command="$2"
 
@@ -1092,7 +1092,7 @@
 # If screen is being used kill the screen window; this will catch processes
 # that did not leave a PID behind
 # screen_stop service
-function screen_stop() {
+function screen_stop {
     SCREEN_NAME=${SCREEN_NAME:-stack}
     SERVICE_DIR=${SERVICE_DIR:-${DEST}/status}
     USE_SCREEN=$(trueorfalse True $USE_SCREEN)
@@ -1112,7 +1112,7 @@
 
 # Helper to get the status of each running service
 # service_check
-function service_check() {
+function service_check {
     local service
     local failures
     SCREEN_NAME=${SCREEN_NAME:-stack}
@@ -1145,7 +1145,7 @@
 
 # Get the path to the pip command.
 # get_pip_command
-function get_pip_command() {
+function get_pip_command {
     which pip || which pip-python
 
     if [ $? -ne 0 ]; then
@@ -1155,7 +1155,7 @@
 
 # Get the path to the direcotry where python executables are installed.
 # get_python_exec_prefix
-function get_python_exec_prefix() {
+function get_python_exec_prefix {
     if is_fedora || is_suse; then
         echo "/usr/bin"
     else
@@ -1221,7 +1221,7 @@
 #
 # Uses globals ``TRACK_DEPENDS``, ``REQUIREMENTS_DIR``, ``UNDO_REQUIREMENTS``
 # setup_develop directory
-function setup_develop() {
+function setup_develop {
     local project_dir=$1
 
     echo "cd $REQUIREMENTS_DIR; $SUDO_CMD python update.py $project_dir"
@@ -1257,7 +1257,7 @@
 # using pip before running `setup.py develop`
 # Uses globals ``STACK_USER``
 # setup_develop_no_requirements_update directory
-function setup_develop_no_requirements_update() {
+function setup_develop_no_requirements_update {
     local project_dir=$1
 
     pip_install -e $project_dir
@@ -1271,7 +1271,7 @@
 
 # remove extra commas from the input string (i.e. ``ENABLED_SERVICES``)
 # _cleanup_service_list service-list
-function _cleanup_service_list () {
+function _cleanup_service_list {
     echo "$1" | sed -e '
         s/,,/,/g;
         s/^,//;
@@ -1284,7 +1284,7 @@
 # before a minimal installation
 # Uses global ``ENABLED_SERVICES``
 # disable_all_services
-function disable_all_services() {
+function disable_all_services {
     ENABLED_SERVICES=""
 }
 
@@ -1293,7 +1293,7 @@
 # ENABLED_SERVICES+=",-rabbit"
 # Uses global ``ENABLED_SERVICES``
 # disable_negated_services
-function disable_negated_services() {
+function disable_negated_services {
     local tmpsvcs="${ENABLED_SERVICES}"
     local service
     for service in ${tmpsvcs//,/ }; do
@@ -1314,7 +1314,7 @@
 # for nova, glance, and neutron built into is_service_enabled().
 # Uses global ``ENABLED_SERVICES``
 # disable_service service [service ...]
-function disable_service() {
+function disable_service {
     local tmpsvcs=",${ENABLED_SERVICES},"
     local service
     for service in $@; do
@@ -1335,7 +1335,7 @@
 # for nova, glance, and neutron built into is_service_enabled().
 # Uses global ``ENABLED_SERVICES``
 # enable_service service [service ...]
-function enable_service() {
+function enable_service {
     local tmpsvcs="${ENABLED_SERVICES}"
     for service in $@; do
         if ! is_service_enabled $service; then
@@ -1369,7 +1369,7 @@
 #
 # Uses global ``ENABLED_SERVICES``
 # is_service_enabled service [service ...]
-function is_service_enabled() {
+function is_service_enabled {
     local xtrace=$(set +o | grep xtrace)
     set +o xtrace
     local enabled=1
@@ -1424,7 +1424,7 @@
 
 # Only run the command if the target file (the last arg) is not on an
 # NFS filesystem.
-function _safe_permission_operation() {
+function _safe_permission_operation {
     local xtrace=$(set +o | grep xtrace)
     set +o xtrace
     local args=( $@ )
@@ -1457,7 +1457,7 @@
 # Exit 0 if address is in network or 1 if address is not in network
 # ip-range is in CIDR notation: 1.2.3.4/20
 # address_in_net ip-address ip-range
-function address_in_net() {
+function address_in_net {
     local ip=$1
     local range=$2
     local masklen=${range#*/}
@@ -1468,7 +1468,7 @@
 
 # Add a user to a group.
 # add_user_to_group user group
-function add_user_to_group() {
+function add_user_to_group {
     local user=$1
     local group=$2
 
@@ -1486,7 +1486,7 @@
 
 # Convert CIDR notation to a IPv4 netmask
 # cidr2netmask cidr-bits
-function cidr2netmask() {
+function cidr2netmask {
     local maskpat="255 255 255 255"
     local maskdgt="254 252 248 240 224 192 128"
     set -- ${maskpat:0:$(( ($1 / 8) * 4 ))}${maskdgt:$(( (7 - ($1 % 8)) * 4 )):3}
@@ -1509,7 +1509,7 @@
 #
 #     http_proxy=http://proxy.example.com:3128/ no_proxy=repo.example.net ./stack.sh
 
-function export_proxy_variables() {
+function export_proxy_variables {
     if [[ -n "$http_proxy" ]]; then
         export http_proxy=$http_proxy
     fi
@@ -1522,7 +1522,7 @@
 }
 
 # Returns true if the directory is on a filesystem mounted via NFS.
-function is_nfs_directory() {
+function is_nfs_directory {
     local mount_type=`stat -f -L -c %T $1`
     test "$mount_type" == "nfs"
 }
@@ -1530,7 +1530,7 @@
 # Return the network portion of the given IP address using netmask
 # netmask is in the traditional dotted-quad format
 # maskip ip-address netmask
-function maskip() {
+function maskip {
     local ip=$1
     local mask=$2
     local l="${ip%.*}"; local r="${ip#*.}"; local n="${mask%.*}"; local m="${mask#*.}"
@@ -1540,7 +1540,7 @@
 
 # Service wrapper to restart services
 # restart_service service-name
-function restart_service() {
+function restart_service {
     if is_ubuntu; then
         sudo /usr/sbin/service $1 restart
     else
@@ -1550,19 +1550,19 @@
 
 # Only change permissions of a file or directory if it is not on an
 # NFS filesystem.
-function safe_chmod() {
+function safe_chmod {
     _safe_permission_operation chmod $@
 }
 
 # Only change ownership of a file or directory if it is not on an NFS
 # filesystem.
-function safe_chown() {
+function safe_chown {
     _safe_permission_operation chown $@
 }
 
 # Service wrapper to start services
 # start_service service-name
-function start_service() {
+function start_service {
     if is_ubuntu; then
         sudo /usr/sbin/service $1 start
     else
@@ -1572,7 +1572,7 @@
 
 # Service wrapper to stop services
 # stop_service service-name
-function stop_service() {
+function stop_service {
     if is_ubuntu; then
         sudo /usr/sbin/service $1 stop
     else
diff --git a/lib/apache b/lib/apache
index 0e5712f..2d5e39a 100644
--- a/lib/apache
+++ b/lib/apache
@@ -50,7 +50,7 @@
 #
 # Uses global ``APACHE_ENABLED_SERVICES``
 # APACHE_ENABLED_SERVICES service [service ...]
-function is_apache_enabled_service() {
+function is_apache_enabled_service {
     services=$@
     for service in ${services}; do
         [[ ,${APACHE_ENABLED_SERVICES}, =~ ,${service}, ]] && return 0
@@ -59,7 +59,7 @@
 }
 
 # install_apache_wsgi() - Install Apache server and wsgi module
-function install_apache_wsgi() {
+function install_apache_wsgi {
     # Apache installation, because we mark it NOPRIME
     if is_ubuntu; then
         # Install apache2, which is NOPRIME'd
@@ -79,7 +79,7 @@
 }
 
 # enable_apache_site() - Enable a particular apache site
-function enable_apache_site() {
+function enable_apache_site {
     local site=$@
     if is_ubuntu; then
         sudo a2ensite ${site}
@@ -90,7 +90,7 @@
 }
 
 # disable_apache_site() - Disable a particular apache site
-function disable_apache_site() {
+function disable_apache_site {
     local site=$@
     if is_ubuntu; then
         sudo a2dissite ${site}
@@ -100,12 +100,12 @@
 }
 
 # start_apache_server() - Start running apache server
-function start_apache_server() {
+function start_apache_server {
     start_service $APACHE_NAME
 }
 
 # stop_apache_server() - Stop running apache server
-function stop_apache_server() {
+function stop_apache_server {
     if [ -n "$APACHE_NAME" ]; then
         stop_service $APACHE_NAME
     else
@@ -114,7 +114,7 @@
 }
 
 # restart_apache_server
-function restart_apache_server() {
+function restart_apache_server {
     restart_service $APACHE_NAME
 }
 
diff --git a/lib/baremetal b/lib/baremetal
index d8cd7e9..473de0d 100644
--- a/lib/baremetal
+++ b/lib/baremetal
@@ -166,7 +166,7 @@
 # Check if baremetal is properly enabled
 # Returns false if VIRT_DRIVER is not baremetal, or if ENABLED_SERVICES
 # does not contain "baremetal"
-function is_baremetal() {
+function is_baremetal {
     if [[ "$ENABLED_SERVICES" =~ 'baremetal' && "$VIRT_DRIVER" = 'baremetal' ]]; then
         return 0
     fi
@@ -175,7 +175,7 @@
 
 # Install diskimage-builder and shell-in-a-box
 # so that we can build the deployment kernel & ramdisk
-function prepare_baremetal_toolchain() {
+function prepare_baremetal_toolchain {
     git_clone $BM_IMAGE_BUILD_REPO $BM_IMAGE_BUILD_DIR $BM_IMAGE_BUILD_BRANCH
     git_clone $BM_POSEUR_REPO $BM_POSEUR_DIR $BM_POSEUR_BRANCH
 
@@ -197,7 +197,7 @@
 }
 
 # set up virtualized environment for devstack-gate testing
-function create_fake_baremetal_env() {
+function create_fake_baremetal_env {
     local bm_poseur="$BM_POSEUR_DIR/bm_poseur"
     # TODO(deva): add support for >1 VM
     sudo $bm_poseur $BM_POSEUR_EXTRA_OPTS create-bridge
@@ -211,14 +211,14 @@
     BM_SECOND_MAC='12:34:56:78:90:12'
 }
 
-function cleanup_fake_baremetal_env() {
+function cleanup_fake_baremetal_env {
     local bm_poseur="$BM_POSEUR_DIR/bm_poseur"
     sudo $bm_poseur $BM_POSEUR_EXTRA_OPTS destroy-vm
     sudo $bm_poseur $BM_POSEUR_EXTRA_OPTS destroy-bridge
 }
 
 # prepare various directories needed by baremetal hypervisor
-function configure_baremetal_nova_dirs() {
+function configure_baremetal_nova_dirs {
     # ensure /tftpboot is prepared
     sudo mkdir -p /tftpboot
     sudo mkdir -p /tftpboot/pxelinux.cfg
@@ -249,7 +249,7 @@
 
 # build deploy kernel+ramdisk, then upload them to glance
 # this function sets BM_DEPLOY_KERNEL_ID and BM_DEPLOY_RAMDISK_ID
-function upload_baremetal_deploy() {
+function upload_baremetal_deploy {
     token=$1
 
     if [ "$BM_BUILD_DEPLOY_RAMDISK" = "True" ]; then
@@ -281,7 +281,7 @@
 # create a basic baremetal flavor, associated with deploy kernel & ramdisk
 #
 # Usage: create_baremetal_flavor <aki_uuid> <ari_uuid>
-function create_baremetal_flavor() {
+function create_baremetal_flavor {
     aki=$1
     ari=$2
     nova flavor-create $BM_FLAVOR_NAME $BM_FLAVOR_ID \
@@ -298,7 +298,7 @@
 # Sets KERNEL_ID and RAMDISK_ID
 #
 # Usage: extract_and_upload_k_and_r_from_image $token $file
-function extract_and_upload_k_and_r_from_image() {
+function extract_and_upload_k_and_r_from_image {
     token=$1
     file=$2
     image_name=$(basename "$file" ".qcow2")
@@ -339,7 +339,7 @@
 # Takes the same parameters, but has some peculiarities which made it
 # easier to create a separate method, rather than complicate the logic
 # of the existing function.
-function upload_baremetal_image() {
+function upload_baremetal_image {
     local image_url=$1
     local token=$2
 
@@ -429,7 +429,7 @@
     DEFAULT_IMAGE_NAME="${IMAGE_NAME%.img}"
 }
 
-function clear_baremetal_of_all_nodes() {
+function clear_baremetal_of_all_nodes {
     list=$(nova baremetal-node-list | awk -F '| ' 'NR>3 {print $2}' )
     for node in $list; do
         nova baremetal-node-delete $node
@@ -440,7 +440,7 @@
 # Defaults to using BM_FIRST_MAC and BM_SECOND_MAC if parameters not specified
 #
 # Usage: add_baremetal_node <first_mac> <second_mac>
-function add_baremetal_node() {
+function add_baremetal_node {
     mac_1=${1:-$BM_FIRST_MAC}
     mac_2=${2:-$BM_SECOND_MAC}
 
diff --git a/lib/ceilometer b/lib/ceilometer
index 6c87d03..d20d628 100644
--- a/lib/ceilometer
+++ b/lib/ceilometer
@@ -105,18 +105,18 @@
 
 # cleanup_ceilometer() - Remove residual data files, anything left over from previous
 # runs that a clean run would need to clean up
-function cleanup_ceilometer() {
+function cleanup_ceilometer {
     mongo ceilometer --eval "db.dropDatabase();"
 }
 
 # configure_ceilometerclient() - Set config files, create data dirs, etc
-function configure_ceilometerclient() {
+function configure_ceilometerclient {
     setup_develop $CEILOMETERCLIENT_DIR
     sudo install -D -m 0644 -o $STACK_USER {$CEILOMETERCLIENT_DIR/tools/,/etc/bash_completion.d/}ceilometer.bash_completion
 }
 
 # configure_ceilometer() - Set config files, create data dirs, etc
-function configure_ceilometer() {
+function configure_ceilometer {
     setup_develop $CEILOMETER_DIR
 
     [ ! -d $CEILOMETER_CONF_DIR ] && sudo mkdir -m 755 -p $CEILOMETER_CONF_DIR
@@ -162,7 +162,7 @@
     fi
 }
 
-function configure_mongodb() {
+function configure_mongodb {
     if is_fedora; then
         # install mongodb client
         install_package mongodb
@@ -174,7 +174,7 @@
 }
 
 # init_ceilometer() - Initialize etc.
-function init_ceilometer() {
+function init_ceilometer {
     # Create cache dir
     sudo mkdir -p $CEILOMETER_AUTH_CACHE_DIR
     sudo chown $STACK_USER $CEILOMETER_AUTH_CACHE_DIR
@@ -187,17 +187,17 @@
 }
 
 # install_ceilometer() - Collect source and prepare
-function install_ceilometer() {
+function install_ceilometer {
     git_clone $CEILOMETER_REPO $CEILOMETER_DIR $CEILOMETER_BRANCH
 }
 
 # install_ceilometerclient() - Collect source and prepare
-function install_ceilometerclient() {
+function install_ceilometerclient {
     git_clone $CEILOMETERCLIENT_REPO $CEILOMETERCLIENT_DIR $CEILOMETERCLIENT_BRANCH
 }
 
 # start_ceilometer() - Start running processes, including screen
-function start_ceilometer() {
+function start_ceilometer {
     if [[ "$VIRT_DRIVER" = 'libvirt' ]]; then
         screen_it ceilometer-acompute "cd ; sg $LIBVIRT_GROUP \"ceilometer-agent-compute --config-file $CEILOMETER_CONF\""
     fi
@@ -216,7 +216,7 @@
 }
 
 # stop_ceilometer() - Stop running processes
-function stop_ceilometer() {
+function stop_ceilometer {
     # Kill the ceilometer screen windows
     for serv in ceilometer-acompute ceilometer-acentral ceilometer-anotification ceilometer-collector ceilometer-api ceilometer-alarm-notifier ceilometer-alarm-evaluator; do
         screen_stop $serv
diff --git a/lib/cinder b/lib/cinder
index e8f30b6..d003f5d 100644
--- a/lib/cinder
+++ b/lib/cinder
@@ -102,7 +102,7 @@
 # _clean_lvm_lv removes all cinder LVM volumes
 #
 # Usage: _clean_lvm_lv $VOLUME_GROUP $VOLUME_NAME_PREFIX
-function _clean_lvm_lv() {
+function _clean_lvm_lv {
     local vg=$1
     local lv_prefix=$2
 
@@ -119,7 +119,7 @@
 # volume group used by cinder
 #
 # Usage: _clean_lvm_backing_file() $VOLUME_GROUP
-function _clean_lvm_backing_file() {
+function _clean_lvm_backing_file {
     local vg=$1
 
     # if there is no logical volume left, it's safe to attempt a cleanup
@@ -136,7 +136,7 @@
 
 # cleanup_cinder() - Remove residual data files, anything left over from previous
 # runs that a clean run would need to clean up
-function cleanup_cinder() {
+function cleanup_cinder {
     # ensure the volume group is cleared up because fails might
     # leave dead volumes in the group
     TARGETS=$(sudo tgtadm --op show --mode target)
@@ -181,7 +181,7 @@
 }
 
 # configure_cinder_rootwrap() - configure Cinder's rootwrap
-function configure_cinder_rootwrap() {
+function configure_cinder_rootwrap {
     # Set the paths of certain binaries
     CINDER_ROOTWRAP=$(get_rootwrap_location cinder)
 
@@ -212,7 +212,7 @@
 }
 
 # configure_cinder() - Set config files, create data dirs, etc
-function configure_cinder() {
+function configure_cinder {
     if [[ ! -d $CINDER_CONF_DIR ]]; then
         sudo mkdir -p $CINDER_CONF_DIR
     fi
@@ -328,7 +328,7 @@
 # service              cinder     admin        # if enabled
 
 # Migrated from keystone_data.sh
-create_cinder_accounts() {
+function create_cinder_accounts {
 
     SERVICE_TENANT=$(openstack project list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
     ADMIN_ROLE=$(openstack role list | awk "/ admin / { print \$2 }")
@@ -373,14 +373,14 @@
 }
 
 # create_cinder_cache_dir() - Part of the init_cinder() process
-function create_cinder_cache_dir() {
+function create_cinder_cache_dir {
     # Create cache dir
     sudo mkdir -p $CINDER_AUTH_CACHE_DIR
     sudo chown $STACK_USER $CINDER_AUTH_CACHE_DIR
     rm -f $CINDER_AUTH_CACHE_DIR/*
 }
 
-create_cinder_volume_group() {
+function create_cinder_volume_group {
     # According to the ``CINDER_MULTI_LVM_BACKEND`` value, configure one or two default volumes
     # group called ``stack-volumes`` (and ``stack-volumes2``) for the volume
     # service if it (they) does (do) not yet exist. If you don't wish to use a
@@ -428,7 +428,7 @@
 }
 
 # init_cinder() - Initialize database and volume group
-function init_cinder() {
+function init_cinder {
     # Force nova volumes off
     NOVA_ENABLED_APIS=$(echo $NOVA_ENABLED_APIS | sed "s/osapi_volume,//")
 
@@ -464,20 +464,20 @@
 }
 
 # install_cinder() - Collect source and prepare
-function install_cinder() {
+function install_cinder {
     git_clone $CINDER_REPO $CINDER_DIR $CINDER_BRANCH
     setup_develop $CINDER_DIR
 }
 
 # install_cinderclient() - Collect source and prepare
-function install_cinderclient() {
+function install_cinderclient {
     git_clone $CINDERCLIENT_REPO $CINDERCLIENT_DIR $CINDERCLIENT_BRANCH
     setup_develop $CINDERCLIENT_DIR
     sudo install -D -m 0644 -o $STACK_USER {$CINDERCLIENT_DIR/tools/,/etc/bash_completion.d/}cinder.bash_completion
 }
 
 # apply config.d approach for cinder volumes directory
-function _configure_tgt_for_config_d() {
+function _configure_tgt_for_config_d {
     if [[ ! -d /etc/tgt/stack.d/ ]]; then
         sudo ln -sf $CINDER_STATE_PATH/volumes /etc/tgt/stack.d
         echo "include /etc/tgt/stack.d/*" | sudo tee -a /etc/tgt/targets.conf
@@ -485,7 +485,7 @@
 }
 
 # start_cinder() - Start running processes, including screen
-function start_cinder() {
+function start_cinder {
     if is_service_enabled c-vol; then
         # Delete any old stack.conf
         sudo rm -f /etc/tgt/conf.d/stack.conf
@@ -529,7 +529,7 @@
 }
 
 # stop_cinder() - Stop running processes
-function stop_cinder() {
+function stop_cinder {
     # Kill the cinder screen windows
     for serv in c-api c-bak c-sch c-vol; do
         screen_stop $serv
diff --git a/lib/cinder_plugins/XenAPINFS b/lib/cinder_plugins/XenAPINFS
index 72e1c13..fa10715 100644
--- a/lib/cinder_plugins/XenAPINFS
+++ b/lib/cinder_plugins/XenAPINFS
@@ -27,7 +27,7 @@
 # ------------
 
 # configure_cinder_driver - Set config files, create data dirs, etc
-function configure_cinder_driver() {
+function configure_cinder_driver {
     iniset $CINDER_CONF DEFAULT volume_driver "cinder.volume.drivers.xenapi.sm.XenAPINFSDriver"
     iniset $CINDER_CONF DEFAULT xenapi_connection_url "$CINDER_XENAPI_CONNECTION_URL"
     iniset $CINDER_CONF DEFAULT xenapi_connection_username "$CINDER_XENAPI_CONNECTION_USERNAME"
diff --git a/lib/cinder_plugins/glusterfs b/lib/cinder_plugins/glusterfs
index a0c5ae8..b4196e4 100644
--- a/lib/cinder_plugins/glusterfs
+++ b/lib/cinder_plugins/glusterfs
@@ -27,7 +27,7 @@
 # ------------
 
 # configure_cinder_driver - Set config files, create data dirs, etc
-function configure_cinder_driver() {
+function configure_cinder_driver {
     # To use glusterfs, set the following in localrc:
     # CINDER_DRIVER=glusterfs
     # CINDER_GLUSTERFS_SHARES="127.0.0.1:/vol1;127.0.0.1:/vol2"
diff --git a/lib/cinder_plugins/nfs b/lib/cinder_plugins/nfs
index ea2c9ce..2d9d875 100644
--- a/lib/cinder_plugins/nfs
+++ b/lib/cinder_plugins/nfs
@@ -27,7 +27,7 @@
 # ------------
 
 # configure_cinder_driver - Set config files, create data dirs, etc
-function configure_cinder_driver() {
+function configure_cinder_driver {
     iniset $CINDER_CONF DEFAULT volume_driver "cinder.volume.drivers.nfs.NfsDriver"
     iniset $CINDER_CONF DEFAULT nfs_shares_config "$CINDER_CONF_DIR/nfs_shares.conf"
     echo "$CINDER_NFS_SERVERPATH" | sudo tee "$CINDER_CONF_DIR/nfs_shares.conf"
diff --git a/lib/cinder_plugins/sheepdog b/lib/cinder_plugins/sheepdog
index 4435932..30c60c6 100644
--- a/lib/cinder_plugins/sheepdog
+++ b/lib/cinder_plugins/sheepdog
@@ -27,7 +27,7 @@
 # ------------
 
 # configure_cinder_driver - Set config files, create data dirs, etc
-function configure_cinder_driver() {
+function configure_cinder_driver {
     iniset $CINDER_CONF DEFAULT volume_driver "cinder.volume.drivers.sheepdog.SheepdogDriver"
 }
 
diff --git a/lib/cinder_plugins/solidfire b/lib/cinder_plugins/solidfire
index 47c113e..2c970b5 100644
--- a/lib/cinder_plugins/solidfire
+++ b/lib/cinder_plugins/solidfire
@@ -27,7 +27,7 @@
 # ------------
 
 # configure_cinder_driver - Set config files, create data dirs, etc
-function configure_cinder_driver() {
+function configure_cinder_driver {
     # To use solidfire, set the following in localrc:
     # CINDER_DRIVER=solidfire
     # SAN_IP=<mvip>
diff --git a/lib/cinder_plugins/vsphere b/lib/cinder_plugins/vsphere
index c8cab6a..436b060 100644
--- a/lib/cinder_plugins/vsphere
+++ b/lib/cinder_plugins/vsphere
@@ -27,7 +27,7 @@
 # ------------
 
 # configure_cinder_driver - Set config files, create data dirs, etc
-function configure_cinder_driver() {
+function configure_cinder_driver {
     iniset $CINDER_CONF DEFAULT vmware_host_ip "$VMWAREAPI_IP"
     iniset $CINDER_CONF DEFAULT vmware_host_username "$VMWAREAPI_USER"
     iniset $CINDER_CONF DEFAULT vmware_host_password "$VMWAREAPI_PASSWORD"
diff --git a/lib/config b/lib/config
index 1678aec..552aeb0 100644
--- a/lib/config
+++ b/lib/config
@@ -25,7 +25,7 @@
 
 # Get the section for the specific group and config file
 # get_meta_section infile group configfile
-function get_meta_section() {
+function get_meta_section {
     local file=$1
     local matchgroup=$2
     local configfile=$3
@@ -57,7 +57,7 @@
 
 # Get a list of config files for a specific group
 # get_meta_section_files infile group
-function get_meta_section_files() {
+function get_meta_section_files {
     local file=$1
     local matchgroup=$2
 
@@ -77,7 +77,7 @@
 # Merge the contents of a meta-config file into its destination config file
 # If configfile does not exist it will be created.
 # merge_config_file infile group configfile
-function merge_config_file() {
+function merge_config_file {
     local file=$1
     local matchgroup=$2
     local configfile=$3
@@ -106,7 +106,7 @@
 
 # Merge all of the files specified by group
 # merge_config_group infile group [group ...]
-function merge_config_group() {
+function merge_config_group {
     local localfile=$1; shift
     local matchgroups=$@
 
diff --git a/lib/gantt b/lib/gantt
index 832d759..8db2ca1 100644
--- a/lib/gantt
+++ b/lib/gantt
@@ -47,42 +47,42 @@
 
 # cleanup_gantt() - Remove residual data files, anything left over from previous
 # runs that a clean run would need to clean up
-function cleanup_gantt() {
+function cleanup_gantt {
     echo "Cleanup Gantt"
 }
 
 # configure_gantt() - Set config files, create data dirs, etc
-function configure_gantt() {
+function configure_gantt {
     echo "Configure Gantt"
 }
 
 # init_gantt() - Initialize database and volume group
-function init_gantt() {
+function init_gantt {
     echo "Initialize Gantt"
 }
 
 # install_gantt() - Collect source and prepare
-function install_gantt() {
+function install_gantt {
     git_clone $GANTT_REPO $GANTT_DIR $GANTT_BRANCH
     setup_develop $GANTT_DIR
 }
 
 # install_ganttclient() - Collect source and prepare
-function install_ganttclient() {
+function install_ganttclient {
     echo "Install Gantt Client"
 #    git_clone $GANTTCLIENT_REPO $GANTTCLIENT_DIR $GANTTCLIENT_BRANCH
 #    setup_develop $GANTTCLIENT_DIR
 }
 
 # start_gantt() - Start running processes, including screen
-function start_gantt() {
+function start_gantt {
     if is_service_enabled gantt; then
         screen_it gantt "cd $GANTT_DIR && $GANTT_BIN_DIR/gantt-scheduler --config-file $GANTT_CONF"
     fi
 }
 
 # stop_gantt() - Stop running processes
-function stop_gantt() {
+function stop_gantt {
     echo "Stop Gantt"
     screen_stop gantt
 }
diff --git a/lib/glance b/lib/glance
index 1ebeeb3..8a4c21b 100644
--- a/lib/glance
+++ b/lib/glance
@@ -68,14 +68,14 @@
 
 # cleanup_glance() - Remove residual data files, anything left over from previous
 # runs that a clean run would need to clean up
-function cleanup_glance() {
+function cleanup_glance {
     # kill instances (nova)
     # delete image files (glance)
     sudo rm -rf $GLANCE_CACHE_DIR $GLANCE_IMAGE_DIR $GLANCE_AUTH_CACHE_DIR
 }
 
 # configure_glance() - Set config files, create data dirs, etc
-function configure_glance() {
+function configure_glance {
     if [[ ! -d $GLANCE_CONF_DIR ]]; then
         sudo mkdir -p $GLANCE_CONF_DIR
     fi
@@ -160,7 +160,7 @@
 }
 
 # create_glance_cache_dir() - Part of the init_glance() process
-function create_glance_cache_dir() {
+function create_glance_cache_dir {
     # Create cache dir
     sudo mkdir -p $GLANCE_AUTH_CACHE_DIR/api
     sudo chown $STACK_USER $GLANCE_AUTH_CACHE_DIR/api
@@ -171,7 +171,7 @@
 }
 
 # init_glance() - Initialize databases, etc.
-function init_glance() {
+function init_glance {
     # Delete existing images
     rm -rf $GLANCE_IMAGE_DIR
     mkdir -p $GLANCE_IMAGE_DIR
@@ -190,19 +190,19 @@
 }
 
 # install_glanceclient() - Collect source and prepare
-function install_glanceclient() {
+function install_glanceclient {
     git_clone $GLANCECLIENT_REPO $GLANCECLIENT_DIR $GLANCECLIENT_BRANCH
     setup_develop $GLANCECLIENT_DIR
 }
 
 # install_glance() - Collect source and prepare
-function install_glance() {
+function install_glance {
     git_clone $GLANCE_REPO $GLANCE_DIR $GLANCE_BRANCH
     setup_develop $GLANCE_DIR
 }
 
 # start_glance() - Start running processes, including screen
-function start_glance() {
+function start_glance {
     screen_it g-reg "cd $GLANCE_DIR; $GLANCE_BIN_DIR/glance-registry --config-file=$GLANCE_CONF_DIR/glance-registry.conf"
     screen_it g-api "cd $GLANCE_DIR; $GLANCE_BIN_DIR/glance-api --config-file=$GLANCE_CONF_DIR/glance-api.conf"
     echo "Waiting for g-api ($GLANCE_HOSTPORT) to start..."
@@ -212,7 +212,7 @@
 }
 
 # stop_glance() - Stop running processes
-function stop_glance() {
+function stop_glance {
     # Kill the Glance screen windows
     screen_stop g-api
     screen_stop g-reg
diff --git a/lib/heat b/lib/heat
index 972c35c..d0c0302 100644
--- a/lib/heat
+++ b/lib/heat
@@ -47,14 +47,14 @@
 
 # cleanup_heat() - Remove residual data files, anything left over from previous
 # runs that a clean run would need to clean up
-function cleanup_heat() {
+function cleanup_heat {
     sudo rm -rf $HEAT_AUTH_CACHE_DIR
     sudo rm -rf $HEAT_ENV_DIR
     sudo rm -rf $HEAT_TEMPLATES_DIR
 }
 
 # configure_heat() - Set config files, create data dirs, etc
-function configure_heat() {
+function configure_heat {
     setup_develop $HEAT_DIR
 
     if [[ ! -d $HEAT_CONF_DIR ]]; then
@@ -137,7 +137,7 @@
 }
 
 # init_heat() - Initialize database
-function init_heat() {
+function init_heat {
 
     # (re)create heat database
     recreate_database heat utf8
@@ -147,26 +147,26 @@
 }
 
 # create_heat_cache_dir() - Part of the init_heat() process
-function create_heat_cache_dir() {
+function create_heat_cache_dir {
     # Create cache dirs
     sudo mkdir -p $HEAT_AUTH_CACHE_DIR
     sudo chown $STACK_USER $HEAT_AUTH_CACHE_DIR
 }
 
 # install_heatclient() - Collect source and prepare
-function install_heatclient() {
+function install_heatclient {
     git_clone $HEATCLIENT_REPO $HEATCLIENT_DIR $HEATCLIENT_BRANCH
     setup_develop $HEATCLIENT_DIR
     sudo install -D -m 0644 -o $STACK_USER {$HEATCLIENT_DIR/tools/,/etc/bash_completion.d/}heat.bash_completion
 }
 
 # install_heat() - Collect source and prepare
-function install_heat() {
+function install_heat {
     git_clone $HEAT_REPO $HEAT_DIR $HEAT_BRANCH
 }
 
 # start_heat() - Start running processes, including screen
-function start_heat() {
+function start_heat {
     screen_it h-eng "cd $HEAT_DIR; bin/heat-engine --config-file=$HEAT_CONF"
     screen_it h-api "cd $HEAT_DIR; bin/heat-api --config-file=$HEAT_CONF"
     screen_it h-api-cfn "cd $HEAT_DIR; bin/heat-api-cfn --config-file=$HEAT_CONF"
@@ -174,7 +174,7 @@
 }
 
 # stop_heat() - Stop running processes
-function stop_heat() {
+function stop_heat {
     # Kill the screen windows
     for serv in h-eng h-api h-api-cfn h-api-cw; do
         screen_stop $serv
@@ -198,7 +198,7 @@
 
 # create_heat_accounts() - Set up common required heat accounts
 # Note this is in addition to what is in files/keystone_data.sh
-function create_heat_accounts() {
+function create_heat_accounts {
     # Note we have to pass token/endpoint here because the current endpoint and
     # version negotiation in OSC means just --os-identity-api-version=3 won't work
     KS_ENDPOINT_V3="$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v3"
diff --git a/lib/horizon b/lib/horizon
index 2f5795d..27c2d26 100644
--- a/lib/horizon
+++ b/lib/horizon
@@ -39,7 +39,7 @@
 # ---------
 
 # utility method of setting python option
-function _horizon_config_set() {
+function _horizon_config_set {
     local file=$1
     local section=$2
     local option=$3
@@ -64,7 +64,7 @@
 
 # cleanup_horizon() - Remove residual data files, anything left over from previous
 # runs that a clean run would need to clean up
-function cleanup_horizon() {
+function cleanup_horizon {
     if [[ is_fedora && $DISTRO =~ (rhel6) ]]; then
         # If ``/usr/bin/node`` points into ``$DEST``
         # we installed it via ``install_nodejs``
@@ -75,12 +75,12 @@
 }
 
 # configure_horizon() - Set config files, create data dirs, etc
-function configure_horizon() {
+function configure_horizon {
     setup_develop $HORIZON_DIR
 }
 
 # init_horizon() - Initialize databases, etc.
-function init_horizon() {
+function init_horizon {
     # ``local_settings.py`` is used to override horizon default settings.
     local_settings=$HORIZON_DIR/openstack_dashboard/local/local_settings.py
     cp $HORIZON_SETTINGS $local_settings
@@ -143,7 +143,7 @@
 }
 
 # install_horizon() - Collect source and prepare
-function install_horizon() {
+function install_horizon {
     # Apache installation, because we mark it NOPRIME
     install_apache_wsgi
 
@@ -151,13 +151,13 @@
 }
 
 # start_horizon() - Start running processes, including screen
-function start_horizon() {
+function start_horizon {
     restart_apache_server
     screen_it horizon "cd $HORIZON_DIR && sudo tail -f /var/log/$APACHE_NAME/horizon_error.log"
 }
 
 # stop_horizon() - Stop running processes (non-screen)
-function stop_horizon() {
+function stop_horizon {
     stop_apache_server
 }
 
diff --git a/lib/infra b/lib/infra
index 0dcf0ad..7f70ff2 100644
--- a/lib/infra
+++ b/lib/infra
@@ -27,7 +27,7 @@
 # ------------
 
 # unfubar_setuptools() - Unbreak the giant mess that is the current state of setuptools
-function unfubar_setuptools() {
+function unfubar_setuptools {
     # this is a giant game of who's on first, but it does consistently work
     # there is hope that upstream python packaging fixes this in the future
     echo_summary "Unbreaking setuptools"
@@ -40,7 +40,7 @@
 
 
 # install_infra() - Collect source and prepare
-function install_infra() {
+function install_infra {
     # bring down global requirements
     git_clone $REQUIREMENTS_REPO $REQUIREMENTS_DIR $REQUIREMENTS_BRANCH
 
diff --git a/lib/ironic b/lib/ironic
index 607b131..177188d 100644
--- a/lib/ironic
+++ b/lib/ironic
@@ -57,25 +57,25 @@
 }
 
 # install_ironic() - Collect source and prepare
-function install_ironic() {
+function install_ironic {
     git_clone $IRONIC_REPO $IRONIC_DIR $IRONIC_BRANCH
     setup_develop $IRONIC_DIR
 }
 
 # install_ironicclient() - Collect sources and prepare
-function install_ironicclient() {
+function install_ironicclient {
     git_clone $IRONICCLIENT_REPO $IRONICCLIENT_DIR $IRONICCLIENT_BRANCH
     setup_develop $IRONICCLIENT_DIR
 }
 
 # cleanup_ironic() - Remove residual data files, anything left over from previous
 # runs that would need to clean up.
-function cleanup_ironic() {
+function cleanup_ironic {
     sudo rm -rf $IRONIC_AUTH_CACHE_DIR
 }
 
 # configure_ironic() - Set config files, create data dirs, etc
-function configure_ironic() {
+function configure_ironic {
     if [[ ! -d $IRONIC_CONF_DIR ]]; then
         sudo mkdir -p $IRONIC_CONF_DIR
     fi
@@ -101,7 +101,7 @@
 
 # configure_ironic_api() - Is used by configure_ironic(). Performs
 # API specific configuration.
-function configure_ironic_api() {
+function configure_ironic_api {
     iniset $IRONIC_CONF_FILE DEFAULT auth_strategy keystone
     iniset $IRONIC_CONF_FILE DEFAULT policy_file $IRONIC_POLICY_JSON
     iniset $IRONIC_CONF_FILE keystone_authtoken auth_host $KEYSTONE_AUTH_HOST
@@ -120,7 +120,7 @@
 
 # configure_ironic_conductor() - Is used by configure_ironic().
 # Sets conductor specific settings.
-function configure_ironic_conductor() {
+function configure_ironic_conductor {
     cp $IRONIC_DIR/etc/ironic/rootwrap.conf $IRONIC_ROOTWRAP_CONF
     cp -r $IRONIC_DIR/etc/ironic/rootwrap.d $IRONIC_CONF_DIR
 
@@ -128,7 +128,7 @@
 }
 
 # create_ironic_cache_dir() - Part of the init_ironic() process
-function create_ironic_cache_dir() {
+function create_ironic_cache_dir {
     # Create cache dir
     sudo mkdir -p $IRONIC_AUTH_CACHE_DIR/api
     sudo chown $STACK_USER $IRONIC_AUTH_CACHE_DIR/api
@@ -143,7 +143,7 @@
 # Tenant               User       Roles
 # ------------------------------------------------------------------
 # service              ironic     admin        # if enabled
-create_ironic_accounts() {
+function create_ironic_accounts {
 
     SERVICE_TENANT=$(openstack project list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
     ADMIN_ROLE=$(openstack role list | awk "/ admin / { print \$2 }")
@@ -178,7 +178,7 @@
 
 
 # init_ironic() - Initialize databases, etc.
-function init_ironic() {
+function init_ironic {
     # (Re)create  ironic database
     recreate_database ironic utf8
 
@@ -192,7 +192,7 @@
 }
 
 # start_ironic() - Start running processes, including screen
-function start_ironic() {
+function start_ironic {
     # Start Ironic API server, if enabled.
     if is_service_enabled ir-api; then
         start_ironic_api
@@ -206,7 +206,7 @@
 
 # start_ironic_api() - Used by start_ironic().
 # Starts Ironic API server.
-function start_ironic_api() {
+function start_ironic_api {
     screen_it ir-api "cd $IRONIC_DIR; $IRONIC_BIN_DIR/ironic-api --config-file=$IRONIC_CONF_FILE"
     echo "Waiting for ir-api ($IRONIC_HOSTPORT) to start..."
     if ! timeout $SERVICE_TIMEOUT sh -c "while ! wget --no-proxy -q -O- http://$IRONIC_HOSTPORT; do sleep 1; done"; then
@@ -216,13 +216,13 @@
 
 # start_ironic_conductor() - Used by start_ironic().
 # Starts Ironic conductor.
-function start_ironic_conductor() {
+function start_ironic_conductor {
     screen_it ir-cond "cd $IRONIC_DIR; $IRONIC_BIN_DIR/ironic-conductor --config-file=$IRONIC_CONF_FILE"
     # TODO(romcheg): Find a way to check whether the conductor has started.
 }
 
 # stop_ironic() - Stop running processes
-function stop_ironic() {
+function stop_ironic {
     # Kill the Ironic screen windows
     screen -S $SCREEN_NAME -p ir-api -X kill
     screen -S $SCREEN_NAME -p ir-cond -X kill
diff --git a/lib/keystone b/lib/keystone
index 73af1d3..0548c24 100644
--- a/lib/keystone
+++ b/lib/keystone
@@ -90,7 +90,7 @@
 # ---------
 # cleanup_keystone() - Remove residual data files, anything left over from previous
 # runs that a clean run would need to clean up
-function cleanup_keystone() {
+function cleanup_keystone {
     # kill instances (nova)
     # delete image files (glance)
     # This function intentionally left blank
@@ -98,14 +98,14 @@
 }
 
 # _cleanup_keystone_apache_wsgi() - Remove wsgi files, disable and remove apache vhost file
-function _cleanup_keystone_apache_wsgi() {
+function _cleanup_keystone_apache_wsgi {
     sudo rm -f $KEYSTONE_WSGI_DIR/*.wsgi
     disable_apache_site keystone
     sudo rm -f /etc/$APACHE_NAME/$APACHE_CONF_DIR/keystone
 }
 
 # _config_keystone_apache_wsgi() - Set WSGI config files of Keystone
-function _config_keystone_apache_wsgi() {
+function _config_keystone_apache_wsgi {
     sudo mkdir -p $KEYSTONE_WSGI_DIR
 
     # copy proxy vhost and wsgi file
@@ -125,7 +125,7 @@
 }
 
 # configure_keystone() - Set config files, create data dirs, etc
-function configure_keystone() {
+function configure_keystone {
     if [[ ! -d $KEYSTONE_CONF_DIR ]]; then
         sudo mkdir -p $KEYSTONE_CONF_DIR
     fi
@@ -272,7 +272,7 @@
 # invisible_to_admin   demo       Member
 
 # Migrated from keystone_data.sh
-create_keystone_accounts() {
+function create_keystone_accounts {
 
     # admin
     ADMIN_TENANT=$(openstack project create \
@@ -346,14 +346,14 @@
 
 # Configure the API version for the OpenStack projects.
 # configure_API_version conf_file version
-function configure_API_version() {
+function configure_API_version {
     local conf_file=$1
     local api_version=$2
     iniset $conf_file keystone_authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v$api_version
 }
 
 # init_keystone() - Initialize databases, etc.
-function init_keystone() {
+function init_keystone {
     if is_service_enabled ldap; then
         init_ldap
     fi
@@ -377,14 +377,14 @@
 }
 
 # install_keystoneclient() - Collect source and prepare
-function install_keystoneclient() {
+function install_keystoneclient {
     git_clone $KEYSTONECLIENT_REPO $KEYSTONECLIENT_DIR $KEYSTONECLIENT_BRANCH
     setup_develop $KEYSTONECLIENT_DIR
     sudo install -D -m 0644 -o $STACK_USER {$KEYSTONECLIENT_DIR/tools/,/etc/bash_completion.d/}keystone.bash_completion
 }
 
 # install_keystone() - Collect source and prepare
-function install_keystone() {
+function install_keystone {
     # only install ldap if the service has been enabled
     if is_service_enabled ldap; then
         install_ldap
@@ -408,7 +408,7 @@
 }
 
 # start_keystone() - Start running processes, including screen
-function start_keystone() {
+function start_keystone {
     # Get right service port for testing
     local service_port=$KEYSTONE_SERVICE_PORT
     if is_service_enabled tls-proxy; then
@@ -436,7 +436,7 @@
 }
 
 # stop_keystone() - Stop running processes
-function stop_keystone() {
+function stop_keystone {
     # Kill the Keystone screen window
     screen_stop key
 }
diff --git a/lib/ldap b/lib/ldap
index e4bd416..51d0251 100644
--- a/lib/ldap
+++ b/lib/ldap
@@ -49,7 +49,7 @@
 
 # Perform common variable substitutions on the data files
 # _ldap_varsubst file
-function _ldap_varsubst() {
+function _ldap_varsubst {
     local infile=$1
     sed -e "
         s|\${LDAP_OLCDB_NUMBER}|$LDAP_OLCDB_NUMBER|
@@ -62,7 +62,7 @@
 }
 
 # clean_ldap() - Remove ldap server
-function cleanup_ldap() {
+function cleanup_ldap {
     uninstall_package $(get_packages ldap)
     if is_ubuntu; then
         uninstall_package slapd ldap-utils libslp1
@@ -76,7 +76,7 @@
 
 # init_ldap
 # init_ldap() - Initialize databases, etc.
-function init_ldap() {
+function init_ldap {
     local keystone_ldif
 
     TMP_LDAP_DIR=$(mktemp -d -t ldap.$$.XXXXXXXXXX)
@@ -106,7 +106,7 @@
 
 # install_ldap
 # install_ldap() - Collect source and prepare
-function install_ldap() {
+function install_ldap {
     echo "Installing LDAP inside function"
     echo "os_VENDOR is $os_VENDOR"
 
@@ -143,17 +143,17 @@
 }
 
 # start_ldap() - Start LDAP
-function start_ldap() {
+function start_ldap {
     sudo service $LDAP_SERVICE_NAME restart
 }
 
 # stop_ldap() - Stop LDAP
-function stop_ldap() {
+function stop_ldap {
     sudo service $LDAP_SERVICE_NAME stop
 }
 
 # clear_ldap_state() - Clear LDAP State
-function clear_ldap_state() {
+function clear_ldap_state {
     ldapdelete -x -w $LDAP_PASSWORD -D "$LDAP_MANAGER_DN" -H $LDAP_URL -r "$LDAP_BASE_DN"
 }
 
diff --git a/lib/marconi b/lib/marconi
index 1c8be49..8cfc55c 100644
--- a/lib/marconi
+++ b/lib/marconi
@@ -73,19 +73,19 @@
 
 # cleanup_marconi() - Remove residual data files, anything left over from previous
 # runs that a clean run would need to clean up
-function cleanup_marconi() {
+function cleanup_marconi {
     if ! timeout $SERVICE_TIMEOUT sh -c "while ! mongo marconi --eval 'db.dropDatabase();'; do sleep 1; done"; then
         die $LINENO "Mongo DB did not start"
     fi
 }
 
 # configure_marconiclient() - Set config files, create data dirs, etc
-function configure_marconiclient() {
+function configure_marconiclient {
     setup_develop $MARCONICLIENT_DIR
 }
 
 # configure_marconi() - Set config files, create data dirs, etc
-function configure_marconi() {
+function configure_marconi {
     setup_develop $MARCONI_DIR
 
     [ ! -d $MARCONI_CONF_DIR ] && sudo mkdir -m 755 -p $MARCONI_CONF_DIR
@@ -110,7 +110,7 @@
     fi
 }
 
-function configure_mongodb() {
+function configure_mongodb {
     # Set nssize to 2GB. This increases the number of namespaces supported
     # # per database.
     if is_ubuntu; then
@@ -126,7 +126,7 @@
 }
 
 # init_marconi() - Initialize etc.
-function init_marconi() {
+function init_marconi {
     # Create cache dir
     sudo mkdir -p $MARCONI_AUTH_CACHE_DIR
     sudo chown $STACK_USER $MARCONI_AUTH_CACHE_DIR
@@ -134,19 +134,19 @@
 }
 
 # install_marconi() - Collect source and prepare
-function install_marconi() {
+function install_marconi {
     git_clone $MARCONI_REPO $MARCONI_DIR $MARCONI_BRANCH
     setup_develop $MARCONI_DIR
 }
 
 # install_marconiclient() - Collect source and prepare
-function install_marconiclient() {
+function install_marconiclient {
     git_clone $MARCONICLIENT_REPO $MARCONICLIENT_DIR $MARCONICLIENT_BRANCH
     setup_develop $MARCONICLIENT_DIR
 }
 
 # start_marconi() - Start running processes, including screen
-function start_marconi() {
+function start_marconi {
     screen_it marconi-server "marconi-server --config-file $MARCONI_CONF"
     echo "Waiting for Marconi to start..."
     if ! timeout $SERVICE_TIMEOUT sh -c "while ! wget --no-proxy -q -O- $MARCONI_SERVICE_PROTOCOL://$MARCONI_SERVICE_HOST:$MARCONI_SERVICE_PORT/v1/health; do sleep 1; done"; then
@@ -155,14 +155,14 @@
 }
 
 # stop_marconi() - Stop running processes
-function stop_marconi() {
+function stop_marconi {
     # Kill the marconi screen windows
     for serv in marconi-server; do
         screen -S $SCREEN_NAME -p $serv -X kill
     done
 }
 
-function create_marconi_accounts() {
+function create_marconi_accounts {
     SERVICE_TENANT=$(openstack project list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
     ADMIN_ROLE=$(openstack role list | awk "/ admin / { print \$2 }")
 
diff --git a/lib/neutron b/lib/neutron
index df276c7..35575c0 100644
--- a/lib/neutron
+++ b/lib/neutron
@@ -253,7 +253,7 @@
 
 # configure_neutron()
 # Set common config for all neutron server and agents.
-function configure_neutron() {
+function configure_neutron {
     _configure_neutron_common
     iniset_rpc_backend neutron $NEUTRON_CONF DEFAULT
 
@@ -289,7 +289,7 @@
     _configure_neutron_debug_command
 }
 
-function create_nova_conf_neutron() {
+function create_nova_conf_neutron {
     iniset $NOVA_CONF DEFAULT network_api_class "nova.network.neutronv2.api.API"
     iniset $NOVA_CONF DEFAULT neutron_admin_username "$Q_ADMIN_USERNAME"
     iniset $NOVA_CONF DEFAULT neutron_admin_password "$SERVICE_PASSWORD"
@@ -316,7 +316,7 @@
 }
 
 # create_neutron_cache_dir() - Part of the _neutron_setup_keystone() process
-function create_neutron_cache_dir() {
+function create_neutron_cache_dir {
     # Create cache dir
     sudo mkdir -p $NEUTRON_AUTH_CACHE_DIR
     sudo chown $STACK_USER $NEUTRON_AUTH_CACHE_DIR
@@ -330,7 +330,7 @@
 # service              neutron    admin        # if enabled
 
 # Migrated from keystone_data.sh
-function create_neutron_accounts() {
+function create_neutron_accounts {
 
     SERVICE_TENANT=$(openstack project list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
     ADMIN_ROLE=$(openstack role list | awk "/ admin / { print \$2 }")
@@ -362,7 +362,7 @@
     fi
 }
 
-function create_neutron_initial_network() {
+function create_neutron_initial_network {
     TENANT_ID=$(openstack project list | grep " demo " | get_field 1)
     die_if_not_set $LINENO TENANT_ID "Failure retrieving TENANT_ID for demo"
 
@@ -429,27 +429,27 @@
 }
 
 # init_neutron() - Initialize databases, etc.
-function init_neutron() {
+function init_neutron {
     recreate_database $Q_DB_NAME utf8
     # Run Neutron db migrations
     $NEUTRON_BIN_DIR/neutron-db-manage --config-file $NEUTRON_CONF --config-file /$Q_PLUGIN_CONF_FILE upgrade head
 }
 
 # install_neutron() - Collect source and prepare
-function install_neutron() {
+function install_neutron {
     git_clone $NEUTRON_REPO $NEUTRON_DIR $NEUTRON_BRANCH
     setup_develop $NEUTRON_DIR
 }
 
 # install_neutronclient() - Collect source and prepare
-function install_neutronclient() {
+function install_neutronclient {
     git_clone $NEUTRONCLIENT_REPO $NEUTRONCLIENT_DIR $NEUTRONCLIENT_BRANCH
     setup_develop $NEUTRONCLIENT_DIR
     sudo install -D -m 0644 -o $STACK_USER {$NEUTRONCLIENT_DIR/tools/,/etc/bash_completion.d/}neutron.bash_completion
 }
 
 # install_neutron_agent_packages() - Collect source and prepare
-function install_neutron_agent_packages() {
+function install_neutron_agent_packages {
     # install packages that are specific to plugin agent(s)
     if is_service_enabled q-agt q-dhcp q-l3; then
         neutron_plugin_install_agent_packages
@@ -461,7 +461,7 @@
 }
 
 # Start running processes, including screen
-function start_neutron_service_and_check() {
+function start_neutron_service_and_check {
     # build config-file options
     local cfg_file
     local CFG_FILE_OPTIONS="--config-file $NEUTRON_CONF --config-file /$Q_PLUGIN_CONF_FILE"
@@ -477,7 +477,7 @@
 }
 
 # Start running processes, including screen
-function start_neutron_agents() {
+function start_neutron_agents {
     # Start up the neutron agents if enabled
     screen_it q-agt "cd $NEUTRON_DIR && python $AGENT_BINARY --config-file $NEUTRON_CONF --config-file /$Q_PLUGIN_CONF_FILE"
     screen_it q-dhcp "cd $NEUTRON_DIR && python $AGENT_DHCP_BINARY --config-file $NEUTRON_CONF --config-file=$Q_DHCP_CONF_FILE"
@@ -510,7 +510,7 @@
 }
 
 # stop_neutron() - Stop running processes (non-screen)
-function stop_neutron() {
+function stop_neutron {
     if is_service_enabled q-dhcp; then
         pid=$(ps aux | awk '/[d]nsmasq.+interface=(tap|ns-)/ { print $2 }')
         [ ! -z "$pid" ] && sudo kill -9 $pid
@@ -535,7 +535,7 @@
 
 # cleanup_neutron() - Remove residual data files, anything left over from previous
 # runs that a clean run would need to clean up
-function cleanup_neutron() {
+function cleanup_neutron {
     if is_neutron_ovs_base_plugin; then
         neutron_ovs_base_cleanup
     fi
@@ -549,7 +549,7 @@
 # _configure_neutron_common()
 # Set common config for all neutron server and agents.
 # This MUST be called before other ``_configure_neutron_*`` functions.
-function _configure_neutron_common() {
+function _configure_neutron_common {
     # Put config files in ``NEUTRON_CONF_DIR`` for everyone to find
     if [[ ! -d $NEUTRON_CONF_DIR ]]; then
         sudo mkdir -p $NEUTRON_CONF_DIR
@@ -611,7 +611,7 @@
     _neutron_setup_rootwrap
 }
 
-function _configure_neutron_debug_command() {
+function _configure_neutron_debug_command {
     if [[ "$Q_USE_DEBUG_COMMAND" != "True" ]]; then
         return
     fi
@@ -628,7 +628,7 @@
     neutron_plugin_configure_debug_command
 }
 
-function _configure_neutron_dhcp_agent() {
+function _configure_neutron_dhcp_agent {
     AGENT_DHCP_BINARY="$NEUTRON_BIN_DIR/neutron-dhcp-agent"
     Q_DHCP_CONF_FILE=$NEUTRON_CONF_DIR/dhcp_agent.ini
 
@@ -652,7 +652,7 @@
     neutron_plugin_configure_dhcp_agent
 }
 
-function _configure_neutron_l3_agent() {
+function _configure_neutron_l3_agent {
     Q_L3_ENABLED=True
     # for l3-agent, only use per tenant router if we have namespaces
     Q_L3_ROUTER_PER_TENANT=$Q_USE_NAMESPACE
@@ -676,7 +676,7 @@
     neutron_plugin_configure_l3_agent
 }
 
-function _configure_neutron_metadata_agent() {
+function _configure_neutron_metadata_agent {
     AGENT_META_BINARY="$NEUTRON_BIN_DIR/neutron-metadata-agent"
     Q_META_CONF_FILE=$NEUTRON_CONF_DIR/metadata_agent.ini
 
@@ -691,30 +691,29 @@
 
 }
 
-function _configure_neutron_lbaas() {
+function _configure_neutron_lbaas {
     neutron_agent_lbaas_configure_common
     neutron_agent_lbaas_configure_agent
 }
 
-function _configure_neutron_metering() {
+function _configure_neutron_metering {
     neutron_agent_metering_configure_common
     neutron_agent_metering_configure_agent
 }
 
-function _configure_neutron_fwaas() {
+function _configure_neutron_fwaas {
     neutron_fwaas_configure_common
     neutron_fwaas_configure_driver
 }
 
-function _configure_neutron_vpn()
-{
+function _configure_neutron_vpn {
     neutron_vpn_install_agent_packages
     neutron_vpn_configure_common
 }
 
 # _configure_neutron_plugin_agent() - Set config files for neutron plugin agent
 # It is called when q-agt is enabled.
-function _configure_neutron_plugin_agent() {
+function _configure_neutron_plugin_agent {
     # Specify the default root helper prior to agent configuration to
     # ensure that an agent's configuration can override the default
     iniset /$Q_PLUGIN_CONF_FILE agent root_helper "$Q_RR_COMMAND"
@@ -727,7 +726,7 @@
 
 # _configure_neutron_service() - Set config files for neutron service
 # It is called when q-svc is enabled.
-function _configure_neutron_service() {
+function _configure_neutron_service {
     Q_API_PASTE_FILE=$NEUTRON_CONF_DIR/api-paste.ini
     Q_POLICY_FILE=$NEUTRON_CONF_DIR/policy.json
 
@@ -765,7 +764,7 @@
 #------------------
 
 # _neutron_service_plugin_class_add() - add service plugin class
-function _neutron_service_plugin_class_add() {
+function _neutron_service_plugin_class_add {
     local service_plugin_class=$1
     if [[ $Q_SERVICE_PLUGIN_CLASSES == '' ]]; then
         Q_SERVICE_PLUGIN_CLASSES=$service_plugin_class
@@ -775,7 +774,7 @@
 }
 
 # _neutron_setup_rootwrap() - configure Neutron's rootwrap
-function _neutron_setup_rootwrap() {
+function _neutron_setup_rootwrap {
     if [[ "$Q_USE_ROOTWRAP" == "False" ]]; then
         return
     fi
@@ -815,7 +814,7 @@
 }
 
 # Configures keystone integration for neutron service and agents
-function _neutron_setup_keystone() {
+function _neutron_setup_keystone {
     local conf_file=$1
     local section=$2
     local use_auth_url=$3
@@ -842,7 +841,7 @@
     fi
 }
 
-function _neutron_setup_interface_driver() {
+function _neutron_setup_interface_driver {
 
     # ovs_use_veth needs to be set before the plugin configuration
     # occurs to allow plugins to override the setting.
@@ -854,14 +853,14 @@
 # Functions for Neutron Exercises
 #--------------------------------
 
-function delete_probe() {
+function delete_probe {
     local from_net="$1"
     net_id=`_get_net_id $from_net`
     probe_id=`neutron-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-list -c id -c network_id | grep $net_id | awk '{print $2}'`
     neutron-debug --os-tenant-name admin --os-username admin probe-delete $probe_id
 }
 
-function setup_neutron_debug() {
+function setup_neutron_debug {
     if [[ "$Q_USE_DEBUG_COMMAND" == "True" ]]; then
         public_net_id=`_get_net_id $PUBLIC_NETWORK_NAME`
         neutron-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-create --device-owner compute $public_net_id
@@ -870,23 +869,23 @@
     fi
 }
 
-function teardown_neutron_debug() {
+function teardown_neutron_debug {
     delete_probe $PUBLIC_NETWORK_NAME
     delete_probe $PRIVATE_NETWORK_NAME
 }
 
-function _get_net_id() {
+function _get_net_id {
     neutron --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD net-list | grep $1 | awk '{print $2}'
 }
 
-function _get_probe_cmd_prefix() {
+function _get_probe_cmd_prefix {
     local from_net="$1"
     net_id=`_get_net_id $from_net`
     probe_id=`neutron-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-list -c id -c network_id | grep $net_id | awk '{print $2}' | head -n 1`
     echo "$Q_RR_COMMAND ip netns exec qprobe-$probe_id"
 }
 
-function _ping_check_neutron() {
+function _ping_check_neutron {
     local from_net=$1
     local ip=$2
     local timeout_sec=$3
@@ -908,7 +907,7 @@
 }
 
 # ssh check
-function _ssh_check_neutron() {
+function _ssh_check_neutron {
     local from_net=$1
     local key_file=$2
     local ip=$3
@@ -934,39 +933,39 @@
     fi
 done
 
-function _neutron_third_party_do() {
+function _neutron_third_party_do {
     for third_party in ${NEUTRON_THIRD_PARTIES//,/ }; do
         ${1}_${third_party}
     done
 }
 
 # configure_neutron_third_party() - Set config files, create data dirs, etc
-function configure_neutron_third_party() {
+function configure_neutron_third_party {
     _neutron_third_party_do configure
 }
 
 # init_neutron_third_party() - Initialize databases, etc.
-function init_neutron_third_party() {
+function init_neutron_third_party {
     _neutron_third_party_do init
 }
 
 # install_neutron_third_party() - Collect source and prepare
-function install_neutron_third_party() {
+function install_neutron_third_party {
     _neutron_third_party_do install
 }
 
 # start_neutron_third_party() - Start running processes, including screen
-function start_neutron_third_party() {
+function start_neutron_third_party {
     _neutron_third_party_do start
 }
 
 # stop_neutron_third_party - Stop running processes (non-screen)
-function stop_neutron_third_party() {
+function stop_neutron_third_party {
     _neutron_third_party_do stop
 }
 
 # check_neutron_third_party_integration() - Check that third party integration is sane
-function check_neutron_third_party_integration() {
+function check_neutron_third_party_integration {
     _neutron_third_party_do check
 }
 
diff --git a/lib/neutron_plugins/bigswitch_floodlight b/lib/neutron_plugins/bigswitch_floodlight
index 1e4aa00..4cb0da8 100644
--- a/lib/neutron_plugins/bigswitch_floodlight
+++ b/lib/neutron_plugins/bigswitch_floodlight
@@ -8,15 +8,15 @@
 source $TOP_DIR/lib/neutron_plugins/ovs_base
 source $TOP_DIR/lib/neutron_thirdparty/bigswitch_floodlight     # for third party service specific configuration values
 
-function neutron_plugin_create_nova_conf() {
+function neutron_plugin_create_nova_conf {
     :
 }
 
-function neutron_plugin_install_agent_packages() {
+function neutron_plugin_install_agent_packages {
     _neutron_ovs_base_install_agent_packages
 }
 
-function neutron_plugin_configure_common() {
+function neutron_plugin_configure_common {
     Q_PLUGIN_CONF_PATH=etc/neutron/plugins/bigswitch
     Q_PLUGIN_CONF_FILENAME=restproxy.ini
     Q_DB_NAME="restproxy_neutron"
@@ -25,23 +25,23 @@
     BS_FL_CONTROLLER_TIMEOUT=${BS_FL_CONTROLLER_TIMEOUT:-10}
 }
 
-function neutron_plugin_configure_debug_command() {
+function neutron_plugin_configure_debug_command {
     _neutron_ovs_base_configure_debug_command
 }
 
-function neutron_plugin_configure_dhcp_agent() {
+function neutron_plugin_configure_dhcp_agent {
     :
 }
 
-function neutron_plugin_configure_l3_agent() {
+function neutron_plugin_configure_l3_agent {
     _neutron_ovs_base_configure_l3_agent
 }
 
-function neutron_plugin_configure_plugin_agent() {
+function neutron_plugin_configure_plugin_agent {
     :
 }
 
-function neutron_plugin_configure_service() {
+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
@@ -49,7 +49,7 @@
     fi
 }
 
-function neutron_plugin_setup_interface_driver() {
+function neutron_plugin_setup_interface_driver {
     local conf_file=$1
     if [ "$BS_FL_VIF_DRIVER" = "ivs" ]; then
         iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.IVSInterfaceDriver
@@ -59,12 +59,12 @@
 }
 
 
-function has_neutron_plugin_security_group() {
+function has_neutron_plugin_security_group {
     # 1 means False here
     return 1
 }
 
-function neutron_plugin_check_adv_test_requirements() {
+function neutron_plugin_check_adv_test_requirements {
     is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
 }
 
diff --git a/lib/neutron_plugins/brocade b/lib/neutron_plugins/brocade
index 8e18d04..4443fa7 100644
--- a/lib/neutron_plugins/brocade
+++ b/lib/neutron_plugins/brocade
@@ -5,53 +5,53 @@
 BRCD_XTRACE=$(set +o | grep xtrace)
 set +o xtrace
 
-function is_neutron_ovs_base_plugin() {
+function is_neutron_ovs_base_plugin {
     return 1
 }
 
-function neutron_plugin_create_nova_conf() {
+function neutron_plugin_create_nova_conf {
     NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
 }
 
-function neutron_plugin_install_agent_packages() {
+function neutron_plugin_install_agent_packages {
     install_package bridge-utils
 }
 
-function neutron_plugin_configure_common() {
+function neutron_plugin_configure_common {
     Q_PLUGIN_CONF_PATH=etc/neutron/plugins/brocade
     Q_PLUGIN_CONF_FILENAME=brocade.ini
     Q_DB_NAME="brcd_neutron"
     Q_PLUGIN_CLASS="neutron.plugins.brocade.NeutronPlugin.BrocadePluginV2"
 }
 
-function neutron_plugin_configure_debug_command() {
+function neutron_plugin_configure_debug_command {
     iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT external_network_bridge
 }
 
-function neutron_plugin_configure_dhcp_agent() {
+function neutron_plugin_configure_dhcp_agent {
     iniset $Q_DHCP_CONF_FILE DEFAULT dhcp_agent_manager neutron.agent.dhcp_agent.DhcpAgentWithStateReport
 }
 
-function neutron_plugin_configure_l3_agent() {
+function neutron_plugin_configure_l3_agent {
     iniset $Q_L3_CONF_FILE DEFAULT external_network_bridge
     iniset $Q_L3_CONF_FILE DEFAULT l3_agent_manager neutron.agent.l3_agent.L3NATAgentWithStateReport
 }
 
-function neutron_plugin_configure_plugin_agent() {
+function neutron_plugin_configure_plugin_agent {
     AGENT_BINARY="$NEUTRON_BIN_DIR/neutron-linuxbridge-agent"
 }
 
-function neutron_plugin_setup_interface_driver() {
+function neutron_plugin_setup_interface_driver {
     local conf_file=$1
     iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.BridgeInterfaceDriver
 }
 
-function has_neutron_plugin_security_group() {
+function has_neutron_plugin_security_group {
     # 0 means True here
     return 0
 }
 
-function neutron_plugin_check_adv_test_requirements() {
+function neutron_plugin_check_adv_test_requirements {
     is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
 }
 
diff --git a/lib/neutron_plugins/cisco b/lib/neutron_plugins/cisco
index 8948be6..7728eb1 100644
--- a/lib/neutron_plugins/cisco
+++ b/lib/neutron_plugins/cisco
@@ -27,12 +27,12 @@
 NCCLIENT_BRANCH=${NCCLIENT_BRANCH:-master}
 
 # This routine put a prefix on an existing function name
-function _prefix_function() {
+function _prefix_function {
     declare -F $1 > /dev/null || die "$1 doesn't exist"
     eval "$(echo "${2}_${1}()"; declare -f ${1} | tail -n +2)"
 }
 
-function _has_ovs_subplugin() {
+function _has_ovs_subplugin {
     local subplugin
     for subplugin in ${Q_CISCO_PLUGIN_SUBPLUGINS[@]}; do
         if [[ "$subplugin" == "openvswitch" ]]; then
@@ -42,7 +42,7 @@
     return 1
 }
 
-function _has_nexus_subplugin() {
+function _has_nexus_subplugin {
     local subplugin
     for subplugin in ${Q_CISCO_PLUGIN_SUBPLUGINS[@]}; do
         if [[ "$subplugin" == "nexus" ]]; then
@@ -52,7 +52,7 @@
     return 1
 }
 
-function _has_n1kv_subplugin() {
+function _has_n1kv_subplugin {
     local subplugin
     for subplugin in ${Q_CISCO_PLUGIN_SUBPLUGINS[@]}; do
         if [[ "$subplugin" == "n1kv" ]]; then
@@ -64,7 +64,7 @@
 
 # This routine populates the cisco config file with the information for
 # a particular nexus switch
-function _config_switch() {
+function _config_switch {
     local cisco_cfg_file=$1
     local switch_ip=$2
     local username=$3
@@ -99,7 +99,7 @@
 _prefix_function has_neutron_plugin_security_group ovs
 
 # Check the version of the installed ncclient package
-function check_ncclient_version() {
+function check_ncclient_version {
 python << EOF
 version = '$NCCLIENT_VERSION'
 import sys
@@ -115,13 +115,13 @@
 }
 
 # Install the ncclient package
-function install_ncclient() {
+function install_ncclient {
     git_clone $NCCLIENT_REPO $NCCLIENT_DIR $NCCLIENT_BRANCH
     (cd $NCCLIENT_DIR; sudo python setup.py install)
 }
 
 # Check if the required version of ncclient has been installed
-function is_ncclient_installed() {
+function is_ncclient_installed {
     # Check if the Cisco ncclient repository exists
     if [[ -d $NCCLIENT_DIR ]]; then
         remotes=$(cd $NCCLIENT_DIR; git remote -v | grep fetch | awk '{ print $2}')
@@ -144,7 +144,7 @@
     return 0
 }
 
-function has_neutron_plugin_security_group() {
+function has_neutron_plugin_security_group {
     if _has_ovs_subplugin; then
         ovs_has_neutron_plugin_security_group
     else
@@ -152,14 +152,14 @@
     fi
 }
 
-function is_neutron_ovs_base_plugin() {
+function is_neutron_ovs_base_plugin {
     # Cisco uses OVS if openvswitch subplugin is deployed
     _has_ovs_subplugin
     return
 }
 
 # populate required nova configuration parameters
-function neutron_plugin_create_nova_conf() {
+function neutron_plugin_create_nova_conf {
     if _has_ovs_subplugin; then
         ovs_neutron_plugin_create_nova_conf
     else
@@ -167,13 +167,13 @@
     fi
 }
 
-function neutron_plugin_install_agent_packages() {
+function neutron_plugin_install_agent_packages {
     # Cisco plugin uses openvswitch to operate in one of its configurations
     ovs_neutron_plugin_install_agent_packages
 }
 
 # Configure common parameters
-function neutron_plugin_configure_common() {
+function neutron_plugin_configure_common {
     # setup default subplugins
     if [ ! -v Q_CISCO_PLUGIN_SUBPLUGINS ]; then
         declare -ga Q_CISCO_PLUGIN_SUBPLUGINS
@@ -191,23 +191,23 @@
     Q_DB_NAME=cisco_neutron
 }
 
-function neutron_plugin_configure_debug_command() {
+function neutron_plugin_configure_debug_command {
     if _has_ovs_subplugin; then
         ovs_neutron_plugin_configure_debug_command
     fi
 }
 
-function neutron_plugin_configure_dhcp_agent() {
+function neutron_plugin_configure_dhcp_agent {
     iniset $Q_DHCP_CONF_FILE DEFAULT dhcp_agent_manager neutron.agent.dhcp_agent.DhcpAgentWithStateReport
 }
 
-function neutron_plugin_configure_l3_agent() {
+function neutron_plugin_configure_l3_agent {
     if _has_ovs_subplugin; then
         ovs_neutron_plugin_configure_l3_agent
     fi
 }
 
-function _configure_nexus_subplugin() {
+function _configure_nexus_subplugin {
     local cisco_cfg_file=$1
 
     # Install a known compatible ncclient from the Cisco repository if necessary
@@ -252,7 +252,7 @@
 }
 
 # Configure n1kv plugin
-function _configure_n1kv_subplugin() {
+function _configure_n1kv_subplugin {
     local cisco_cfg_file=$1
 
     # populate the cisco plugin cfg file with the VSM information
@@ -270,13 +270,13 @@
     _neutron_ovs_base_setup_bridge $OVS_BRIDGE
 }
 
-function neutron_plugin_configure_plugin_agent() {
+function neutron_plugin_configure_plugin_agent {
     if _has_ovs_subplugin; then
         ovs_neutron_plugin_configure_plugin_agent
     fi
 }
 
-function neutron_plugin_configure_service() {
+function neutron_plugin_configure_service {
     local subplugin
     local cisco_cfg_file
 
@@ -318,7 +318,7 @@
     fi
 }
 
-function neutron_plugin_setup_interface_driver() {
+function neutron_plugin_setup_interface_driver {
     local conf_file=$1
     iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
 }
diff --git a/lib/neutron_plugins/embrane b/lib/neutron_plugins/embrane
index 325e939..62f9737 100644
--- a/lib/neutron_plugins/embrane
+++ b/lib/neutron_plugins/embrane
@@ -7,7 +7,7 @@
 
 source $TOP_DIR/lib/neutron_plugins/openvswitch
 
-save_function() {
+function save_function {
     local ORIG_FUNC=$(declare -f $1)
     local NEW_FUNC="$2${ORIG_FUNC#$1}"
     eval "$NEW_FUNC"
@@ -15,14 +15,14 @@
 
 save_function neutron_plugin_configure_service _neutron_plugin_configure_service
 
-function neutron_plugin_configure_common() {
+function neutron_plugin_configure_common {
     Q_PLUGIN_CONF_PATH=etc/neutron/plugins/embrane
     Q_PLUGIN_CONF_FILENAME=heleos_conf.ini
     Q_DB_NAME="ovs_neutron"
     Q_PLUGIN_CLASS="neutron.plugins.embrane.plugins.embrane_ovs_plugin.EmbraneOvsPlugin"
 }
 
-function neutron_plugin_configure_service() {
+function neutron_plugin_configure_service {
     _neutron_plugin_configure_service
     iniset /$Q_PLUGIN_CONF_FILE heleos esm_mgmt $HELEOS_ESM_MGMT
     iniset /$Q_PLUGIN_CONF_FILE heleos admin_username $HELEOS_ADMIN_USERNAME
diff --git a/lib/neutron_plugins/linuxbridge b/lib/neutron_plugins/linuxbridge
index 37bc748..362fd5b 100644
--- a/lib/neutron_plugins/linuxbridge
+++ b/lib/neutron_plugins/linuxbridge
@@ -7,14 +7,14 @@
 
 source $TOP_DIR/lib/neutron_plugins/linuxbridge_agent
 
-function neutron_plugin_configure_common() {
+function neutron_plugin_configure_common {
     Q_PLUGIN_CONF_PATH=etc/neutron/plugins/linuxbridge
     Q_PLUGIN_CONF_FILENAME=linuxbridge_conf.ini
     Q_DB_NAME="neutron_linux_bridge"
     Q_PLUGIN_CLASS="neutron.plugins.linuxbridge.lb_neutron_plugin.LinuxBridgePluginV2"
 }
 
-function neutron_plugin_configure_service() {
+function neutron_plugin_configure_service {
     if [[ "$ENABLE_TENANT_VLANS" = "True" ]]; then
         iniset /$Q_PLUGIN_CONF_FILE vlans tenant_network_type vlan
     else
@@ -47,7 +47,7 @@
     done
 }
 
-function has_neutron_plugin_security_group() {
+function has_neutron_plugin_security_group {
     # 0 means True here
     return 0
 }
diff --git a/lib/neutron_plugins/linuxbridge_agent b/lib/neutron_plugins/linuxbridge_agent
index 85e8c08..74799e4 100644
--- a/lib/neutron_plugins/linuxbridge_agent
+++ b/lib/neutron_plugins/linuxbridge_agent
@@ -5,33 +5,33 @@
 PLUGIN_XTRACE=$(set +o | grep xtrace)
 set +o xtrace
 
-function is_neutron_ovs_base_plugin() {
+function is_neutron_ovs_base_plugin {
     # linuxbridge doesn't use OVS
     return 1
 }
 
-function neutron_plugin_create_nova_conf() {
+function neutron_plugin_create_nova_conf {
     :
 }
 
-function neutron_plugin_install_agent_packages() {
+function neutron_plugin_install_agent_packages {
     install_package bridge-utils
 }
 
-function neutron_plugin_configure_debug_command() {
+function neutron_plugin_configure_debug_command {
     iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT external_network_bridge
 }
 
-function neutron_plugin_configure_dhcp_agent() {
+function neutron_plugin_configure_dhcp_agent {
     iniset $Q_DHCP_CONF_FILE DEFAULT dhcp_agent_manager neutron.agent.dhcp_agent.DhcpAgentWithStateReport
 }
 
-function neutron_plugin_configure_l3_agent() {
+function neutron_plugin_configure_l3_agent {
     iniset $Q_L3_CONF_FILE DEFAULT external_network_bridge
     iniset $Q_L3_CONF_FILE DEFAULT l3_agent_manager neutron.agent.l3_agent.L3NATAgentWithStateReport
 }
 
-function neutron_plugin_configure_plugin_agent() {
+function neutron_plugin_configure_plugin_agent {
     # Setup physical network interface mappings.  Override
     # ``LB_VLAN_RANGES`` and ``LB_INTERFACE_MAPPINGS`` in ``localrc`` for more
     # complex physical network configurations.
@@ -63,12 +63,12 @@
     done
 }
 
-function neutron_plugin_setup_interface_driver() {
+function neutron_plugin_setup_interface_driver {
     local conf_file=$1
     iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.BridgeInterfaceDriver
 }
 
-function neutron_plugin_check_adv_test_requirements() {
+function neutron_plugin_check_adv_test_requirements {
     is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
 }
 
diff --git a/lib/neutron_plugins/midonet b/lib/neutron_plugins/midonet
index dd3b2ba..742e3b2 100644
--- a/lib/neutron_plugins/midonet
+++ b/lib/neutron_plugins/midonet
@@ -9,32 +9,32 @@
 MY_XTRACE=$(set +o | grep xtrace)
 set +o xtrace
 
-function is_neutron_ovs_base_plugin() {
+function is_neutron_ovs_base_plugin {
     # MidoNet does not use l3-agent
     # 0 means True here
     return 1
 }
 
-function neutron_plugin_create_nova_conf() {
+function neutron_plugin_create_nova_conf {
     NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
 }
 
-function neutron_plugin_install_agent_packages() {
+function neutron_plugin_install_agent_packages {
     :
 }
 
-function neutron_plugin_configure_common() {
+function neutron_plugin_configure_common {
     Q_PLUGIN_CONF_PATH=etc/neutron/plugins/midonet
     Q_PLUGIN_CONF_FILENAME=midonet.ini
     Q_DB_NAME="neutron_midonet"
     Q_PLUGIN_CLASS="neutron.plugins.midonet.plugin.MidonetPluginV2"
 }
 
-function neutron_plugin_configure_debug_command() {
+function neutron_plugin_configure_debug_command {
     :
 }
 
-function neutron_plugin_configure_dhcp_agent() {
+function neutron_plugin_configure_dhcp_agent {
     DHCP_DRIVER=${DHCP_DRIVER:-"neutron.plugins.midonet.agent.midonet_driver.DhcpNoOpDriver"}
     neutron_plugin_setup_interface_driver $Q_DHCP_CONF_FILE
     iniset $Q_DHCP_CONF_FILE DEFAULT dhcp_driver $DHCP_DRIVER
@@ -42,15 +42,15 @@
     iniset $Q_DHCP_CONF_FILE DEFAULT enable_isolated_metadata True
 }
 
-function neutron_plugin_configure_l3_agent() {
+function neutron_plugin_configure_l3_agent {
     die $LINENO "q-l3 must not be executed with MidoNet plugin!"
 }
 
-function neutron_plugin_configure_plugin_agent() {
+function neutron_plugin_configure_plugin_agent {
     die $LINENO "q-agt must not be executed with MidoNet plugin!"
 }
 
-function neutron_plugin_configure_service() {
+function neutron_plugin_configure_service {
     if [[ "$MIDONET_API_URL" != "" ]]; then
         iniset /$Q_PLUGIN_CONF_FILE MIDONET midonet_uri $MIDONET_API_URL
     fi
@@ -68,17 +68,17 @@
     Q_L3_ROUTER_PER_TENANT=True
 }
 
-function neutron_plugin_setup_interface_driver() {
+function neutron_plugin_setup_interface_driver {
     local conf_file=$1
     iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.MidonetInterfaceDriver
 }
 
-function has_neutron_plugin_security_group() {
+function has_neutron_plugin_security_group {
     # 0 means True here
     return 0
 }
 
-function neutron_plugin_check_adv_test_requirements() {
+function neutron_plugin_check_adv_test_requirements {
     # 0 means True here
     return 1
 }
diff --git a/lib/neutron_plugins/ml2 b/lib/neutron_plugins/ml2
index 4ceabe7..e985dcb 100644
--- a/lib/neutron_plugins/ml2
+++ b/lib/neutron_plugins/ml2
@@ -33,7 +33,7 @@
 # L3 Plugin to load for ML2
 ML2_L3_PLUGIN=${ML2_L3_PLUGIN:-neutron.services.l3_router.l3_router_plugin.L3RouterPlugin}
 
-function populate_ml2_config() {
+function populate_ml2_config {
     CONF=$1
     SECTION=$2
     OPTS=$3
@@ -47,7 +47,7 @@
     done
 }
 
-function neutron_plugin_configure_common() {
+function neutron_plugin_configure_common {
     Q_PLUGIN_CONF_PATH=etc/neutron/plugins/ml2
     Q_PLUGIN_CONF_FILENAME=ml2_conf.ini
     Q_DB_NAME="neutron_ml2"
@@ -57,7 +57,7 @@
     _neutron_service_plugin_class_add $ML2_L3_PLUGIN
 }
 
-function neutron_plugin_configure_service() {
+function neutron_plugin_configure_service {
     if [[ "$Q_ML2_TENANT_NETWORK_TYPE" != "" ]]; then
         Q_SRV_EXTRA_OPTS+=(tenant_network_types=$Q_ML2_TENANT_NETWORK_TYPE)
     elif [[ "$ENABLE_TENANT_TUNNELS" = "True" ]]; then
@@ -114,7 +114,7 @@
     populate_ml2_config /$Q_PLUGIN_CONF_FILE ml2_type_vlan $Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS
 }
 
-function has_neutron_plugin_security_group() {
+function has_neutron_plugin_security_group {
     return 0
 }
 
diff --git a/lib/neutron_plugins/nec b/lib/neutron_plugins/nec
index 1cb2fef..6d4bfca 100644
--- a/lib/neutron_plugins/nec
+++ b/lib/neutron_plugins/nec
@@ -22,11 +22,11 @@
 
 source $TOP_DIR/lib/neutron_plugins/ovs_base
 
-function neutron_plugin_create_nova_conf() {
+function neutron_plugin_create_nova_conf {
     _neutron_ovs_base_configure_nova_vif_driver
 }
 
-function neutron_plugin_install_agent_packages() {
+function neutron_plugin_install_agent_packages {
     # SKIP_OVS_INSTALL is useful when we want to use Open vSwitch whose
     # version is different from the version provided by the distribution.
     if [[ "$SKIP_OVS_INSTALL" = "True" ]]; then
@@ -36,26 +36,26 @@
     _neutron_ovs_base_install_agent_packages
 }
 
-function neutron_plugin_configure_common() {
+function neutron_plugin_configure_common {
     Q_PLUGIN_CONF_PATH=etc/neutron/plugins/nec
     Q_PLUGIN_CONF_FILENAME=nec.ini
     Q_DB_NAME="neutron_nec"
     Q_PLUGIN_CLASS="neutron.plugins.nec.nec_plugin.NECPluginV2"
 }
 
-function neutron_plugin_configure_debug_command() {
+function neutron_plugin_configure_debug_command {
     _neutron_ovs_base_configure_debug_command
 }
 
-function neutron_plugin_configure_dhcp_agent() {
+function neutron_plugin_configure_dhcp_agent {
     :
 }
 
-function neutron_plugin_configure_l3_agent() {
+function neutron_plugin_configure_l3_agent {
     _neutron_ovs_base_configure_l3_agent
 }
 
-function _quantum_plugin_setup_bridge() {
+function _quantum_plugin_setup_bridge {
     if [[ "$SKIP_OVS_BRIDGE_SETUP" = "True" ]]; then
         return
     fi
@@ -72,7 +72,7 @@
     _neutron_setup_ovs_tunnels $OVS_BRIDGE
 }
 
-function neutron_plugin_configure_plugin_agent() {
+function neutron_plugin_configure_plugin_agent {
     _quantum_plugin_setup_bridge
 
     AGENT_BINARY="$NEUTRON_BIN_DIR/neutron-nec-agent"
@@ -80,7 +80,7 @@
     _neutron_ovs_base_configure_firewall_driver
 }
 
-function neutron_plugin_configure_service() {
+function neutron_plugin_configure_service {
     iniset $NEUTRON_CONF DEFAULT api_extensions_path neutron/plugins/nec/extensions/
     iniset /$Q_PLUGIN_CONF_FILE ofc host $OFC_API_HOST
     iniset /$Q_PLUGIN_CONF_FILE ofc port $OFC_API_PORT
@@ -91,7 +91,7 @@
     _neutron_ovs_base_configure_firewall_driver
 }
 
-function neutron_plugin_setup_interface_driver() {
+function neutron_plugin_setup_interface_driver {
     local conf_file=$1
     iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
     iniset $conf_file DEFAULT ovs_use_veth True
@@ -101,7 +101,7 @@
 # ---------------------------
 
 # Setup OVS tunnel manually
-function _neutron_setup_ovs_tunnels() {
+function _neutron_setup_ovs_tunnels {
     local bridge=$1
     local id=0
     GRE_LOCAL_IP=${GRE_LOCAL_IP:-$HOST_IP}
@@ -117,12 +117,12 @@
     fi
 }
 
-function has_neutron_plugin_security_group() {
+function has_neutron_plugin_security_group {
     # 0 means True here
     return 0
 }
 
-function neutron_plugin_check_adv_test_requirements() {
+function neutron_plugin_check_adv_test_requirements {
     is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
 }
 
diff --git a/lib/neutron_plugins/openvswitch b/lib/neutron_plugins/openvswitch
index f99eb38..bdbc5a9 100644
--- a/lib/neutron_plugins/openvswitch
+++ b/lib/neutron_plugins/openvswitch
@@ -7,14 +7,14 @@
 
 source $TOP_DIR/lib/neutron_plugins/openvswitch_agent
 
-function neutron_plugin_configure_common() {
+function neutron_plugin_configure_common {
     Q_PLUGIN_CONF_PATH=etc/neutron/plugins/openvswitch
     Q_PLUGIN_CONF_FILENAME=ovs_neutron_plugin.ini
     Q_DB_NAME="ovs_neutron"
     Q_PLUGIN_CLASS="neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2"
 }
 
-function neutron_plugin_configure_service() {
+function neutron_plugin_configure_service {
     if [[ "$ENABLE_TENANT_TUNNELS" = "True" ]]; then
         iniset /$Q_PLUGIN_CONF_FILE ovs tenant_network_type gre
         iniset /$Q_PLUGIN_CONF_FILE ovs tunnel_id_ranges $TENANT_TUNNEL_RANGES
@@ -52,7 +52,7 @@
     done
 }
 
-function has_neutron_plugin_security_group() {
+function has_neutron_plugin_security_group {
     return 0
 }
 
diff --git a/lib/neutron_plugins/openvswitch_agent b/lib/neutron_plugins/openvswitch_agent
index 46c2a5c..3a2bdc3 100644
--- a/lib/neutron_plugins/openvswitch_agent
+++ b/lib/neutron_plugins/openvswitch_agent
@@ -7,7 +7,7 @@
 
 source $TOP_DIR/lib/neutron_plugins/ovs_base
 
-function neutron_plugin_create_nova_conf() {
+function neutron_plugin_create_nova_conf {
     _neutron_ovs_base_configure_nova_vif_driver
     if [ "$VIRT_DRIVER" = 'xenserver' ]; then
         iniset $NOVA_CONF DEFAULT xenapi_vif_driver nova.virt.xenapi.vif.XenAPIOpenVswitchDriver
@@ -17,24 +17,24 @@
     fi
 }
 
-function neutron_plugin_install_agent_packages() {
+function neutron_plugin_install_agent_packages {
     _neutron_ovs_base_install_agent_packages
 }
 
-function neutron_plugin_configure_debug_command() {
+function neutron_plugin_configure_debug_command {
     _neutron_ovs_base_configure_debug_command
 }
 
-function neutron_plugin_configure_dhcp_agent() {
+function neutron_plugin_configure_dhcp_agent {
     iniset $Q_DHCP_CONF_FILE DEFAULT dhcp_agent_manager neutron.agent.dhcp_agent.DhcpAgentWithStateReport
 }
 
-function neutron_plugin_configure_l3_agent() {
+function neutron_plugin_configure_l3_agent {
     _neutron_ovs_base_configure_l3_agent
     iniset $Q_L3_CONF_FILE DEFAULT l3_agent_manager neutron.agent.l3_agent.L3NATAgentWithStateReport
 }
 
-function neutron_plugin_configure_plugin_agent() {
+function neutron_plugin_configure_plugin_agent {
     # Setup integration bridge
     _neutron_ovs_base_setup_bridge $OVS_BRIDGE
     _neutron_ovs_base_configure_firewall_driver
@@ -118,12 +118,12 @@
     done
 }
 
-function neutron_plugin_setup_interface_driver() {
+function neutron_plugin_setup_interface_driver {
     local conf_file=$1
     iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
 }
 
-function neutron_plugin_check_adv_test_requirements() {
+function neutron_plugin_check_adv_test_requirements {
     is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
 }
 
diff --git a/lib/neutron_plugins/ovs_base b/lib/neutron_plugins/ovs_base
index 89db29d..0a2ba58 100644
--- a/lib/neutron_plugins/ovs_base
+++ b/lib/neutron_plugins/ovs_base
@@ -8,19 +8,19 @@
 OVS_BRIDGE=${OVS_BRIDGE:-br-int}
 PUBLIC_BRIDGE=${PUBLIC_BRIDGE:-br-ex}
 
-function is_neutron_ovs_base_plugin() {
+function is_neutron_ovs_base_plugin {
     # Yes, we use OVS.
     return 0
 }
 
-function _neutron_ovs_base_setup_bridge() {
+function _neutron_ovs_base_setup_bridge {
     local bridge=$1
     neutron-ovs-cleanup
     sudo ovs-vsctl --no-wait -- --may-exist add-br $bridge
     sudo ovs-vsctl --no-wait br-set-external-id $bridge bridge-id $bridge
 }
 
-function neutron_ovs_base_cleanup() {
+function neutron_ovs_base_cleanup {
     # remove all OVS ports that look like Neutron created ports
     for port in $(sudo ovs-vsctl list port | grep -o -e tap[0-9a-f\-]* -e q[rg]-[0-9a-f\-]*); do
         sudo ovs-vsctl del-port ${port}
@@ -32,7 +32,7 @@
     done
 }
 
-function _neutron_ovs_base_install_agent_packages() {
+function _neutron_ovs_base_install_agent_packages {
     local kernel_version
     # Install deps
     # FIXME add to ``files/apts/neutron``, but don't install if not needed!
@@ -50,11 +50,11 @@
     fi
 }
 
-function _neutron_ovs_base_configure_debug_command() {
+function _neutron_ovs_base_configure_debug_command {
     iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT external_network_bridge $PUBLIC_BRIDGE
 }
 
-function _neutron_ovs_base_configure_firewall_driver() {
+function _neutron_ovs_base_configure_firewall_driver {
     if [[ "$Q_USE_SECGROUP" == "True" ]]; then
         iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
     else
@@ -62,7 +62,7 @@
     fi
 }
 
-function _neutron_ovs_base_configure_l3_agent() {
+function _neutron_ovs_base_configure_l3_agent {
     iniset $Q_L3_CONF_FILE DEFAULT external_network_bridge $PUBLIC_BRIDGE
 
     neutron-ovs-cleanup
@@ -72,7 +72,7 @@
     sudo ip addr flush dev $PUBLIC_BRIDGE
 }
 
-function _neutron_ovs_base_configure_nova_vif_driver() {
+function _neutron_ovs_base_configure_nova_vif_driver {
     :
 }
 
diff --git a/lib/neutron_plugins/plumgrid b/lib/neutron_plugins/plumgrid
index bccd301..19f94cb 100644
--- a/lib/neutron_plugins/plumgrid
+++ b/lib/neutron_plugins/plumgrid
@@ -6,15 +6,15 @@
 MY_XTRACE=$(set +o | grep xtrace)
 set +o xtrace
 
-function neutron_plugin_create_nova_conf() {
+function neutron_plugin_create_nova_conf {
     :
 }
 
-function neutron_plugin_setup_interface_driver() {
+function neutron_plugin_setup_interface_driver {
     :
 }
 
-function neutron_plugin_configure_common() {
+function neutron_plugin_configure_common {
     Q_PLUGIN_CONF_PATH=etc/neutron/plugins/plumgrid
     Q_PLUGIN_CONF_FILENAME=plumgrid.ini
     Q_DB_NAME="plumgrid_neutron"
@@ -26,7 +26,7 @@
     PLUMGRID_TIMEOUT=${PLUMGRID_TIMEOUT:-70}
 }
 
-function neutron_plugin_configure_service() {
+function neutron_plugin_configure_service {
     iniset /$Q_PLUGIN_CONF_FILE PLUMgridDirector director_server $PLUMGRID_DIRECTOR_IP
     iniset /$Q_PLUGIN_CONF_FILE PLUMgridDirector director_server_port $PLUMGRID_DIRECTOR_PORT
     iniset /$Q_PLUGIN_CONF_FILE PLUMgridDirector username $PLUMGRID_ADMIN
@@ -34,21 +34,21 @@
     iniset /$Q_PLUGIN_CONF_FILE PLUMgridDirector servertimeout $PLUMGRID_TIMEOUT
 }
 
-function neutron_plugin_configure_debug_command() {
+function neutron_plugin_configure_debug_command {
     :
 }
 
-function is_neutron_ovs_base_plugin() {
+function is_neutron_ovs_base_plugin {
     # False
     return 1
 }
 
-function has_neutron_plugin_security_group() {
+function has_neutron_plugin_security_group {
     # False
     return 1
 }
 
-function neutron_plugin_check_adv_test_requirements() {
+function neutron_plugin_check_adv_test_requirements {
     is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
 }
 # Restore xtrace
diff --git a/lib/neutron_plugins/ryu b/lib/neutron_plugins/ryu
index 334c227..9ae36d3 100644
--- a/lib/neutron_plugins/ryu
+++ b/lib/neutron_plugins/ryu
@@ -8,12 +8,12 @@
 source $TOP_DIR/lib/neutron_plugins/ovs_base
 source $TOP_DIR/lib/neutron_thirdparty/ryu      # for configuration value
 
-function neutron_plugin_create_nova_conf() {
+function neutron_plugin_create_nova_conf {
     _neutron_ovs_base_configure_nova_vif_driver
     iniset $NOVA_CONF DEFAULT libvirt_ovs_integration_bridge "$OVS_BRIDGE"
 }
 
-function neutron_plugin_install_agent_packages() {
+function neutron_plugin_install_agent_packages {
     _neutron_ovs_base_install_agent_packages
 
     # neutron_ryu_agent requires ryu module
@@ -22,28 +22,28 @@
     configure_ryu
 }
 
-function neutron_plugin_configure_common() {
+function neutron_plugin_configure_common {
     Q_PLUGIN_CONF_PATH=etc/neutron/plugins/ryu
     Q_PLUGIN_CONF_FILENAME=ryu.ini
     Q_DB_NAME="ovs_neutron"
     Q_PLUGIN_CLASS="neutron.plugins.ryu.ryu_neutron_plugin.RyuNeutronPluginV2"
 }
 
-function neutron_plugin_configure_debug_command() {
+function neutron_plugin_configure_debug_command {
     _neutron_ovs_base_configure_debug_command
     iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT ryu_api_host $RYU_API_HOST:$RYU_API_PORT
 }
 
-function neutron_plugin_configure_dhcp_agent() {
+function neutron_plugin_configure_dhcp_agent {
     iniset $Q_DHCP_CONF_FILE DEFAULT ryu_api_host $RYU_API_HOST:$RYU_API_PORT
 }
 
-function neutron_plugin_configure_l3_agent() {
+function neutron_plugin_configure_l3_agent {
     iniset $Q_L3_CONF_FILE DEFAULT ryu_api_host $RYU_API_HOST:$RYU_API_PORT
     _neutron_ovs_base_configure_l3_agent
 }
 
-function neutron_plugin_configure_plugin_agent() {
+function neutron_plugin_configure_plugin_agent {
     # Set up integration bridge
     _neutron_ovs_base_setup_bridge $OVS_BRIDGE
     if [ -n "$RYU_INTERNAL_INTERFACE" ]; then
@@ -55,24 +55,24 @@
     _neutron_ovs_base_configure_firewall_driver
 }
 
-function neutron_plugin_configure_service() {
+function neutron_plugin_configure_service {
     iniset /$Q_PLUGIN_CONF_FILE ovs openflow_rest_api $RYU_API_HOST:$RYU_API_PORT
 
     _neutron_ovs_base_configure_firewall_driver
 }
 
-function neutron_plugin_setup_interface_driver() {
+function neutron_plugin_setup_interface_driver {
     local conf_file=$1
     iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
     iniset $conf_file DEFAULT ovs_use_veth True
 }
 
-function has_neutron_plugin_security_group() {
+function has_neutron_plugin_security_group {
     # 0 means True here
     return 0
 }
 
-function neutron_plugin_check_adv_test_requirements() {
+function neutron_plugin_check_adv_test_requirements {
     is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
 }
 
diff --git a/lib/neutron_plugins/services/firewall b/lib/neutron_plugins/services/firewall
index 8273e54..ab6c324 100644
--- a/lib/neutron_plugins/services/firewall
+++ b/lib/neutron_plugins/services/firewall
@@ -7,11 +7,11 @@
 
 FWAAS_PLUGIN=neutron.services.firewall.fwaas_plugin.FirewallPlugin
 
-function neutron_fwaas_configure_common() {
+function neutron_fwaas_configure_common {
     _neutron_service_plugin_class_add $FWAAS_PLUGIN
 }
 
-function neutron_fwaas_configure_driver() {
+function neutron_fwaas_configure_driver {
     FWAAS_DRIVER_CONF_FILENAME=/etc/neutron/fwaas_driver.ini
     cp $NEUTRON_DIR/etc/fwaas_driver.ini $FWAAS_DRIVER_CONF_FILENAME
 
@@ -19,7 +19,7 @@
     iniset_multiline $FWAAS_DRIVER_CONF_FILENAME fwaas driver "neutron.services.firewall.drivers.linux.iptables_fwaas.IptablesFwaasDriver"
 }
 
-function neutron_fwaas_stop() {
+function neutron_fwaas_stop {
     :
 }
 
diff --git a/lib/neutron_plugins/services/loadbalancer b/lib/neutron_plugins/services/loadbalancer
index 5d7a94e..744826e 100644
--- a/lib/neutron_plugins/services/loadbalancer
+++ b/lib/neutron_plugins/services/loadbalancer
@@ -9,7 +9,7 @@
 AGENT_LBAAS_BINARY="$NEUTRON_BIN_DIR/neutron-lbaas-agent"
 LBAAS_PLUGIN=neutron.services.loadbalancer.plugin.LoadBalancerPlugin
 
-function neutron_agent_lbaas_install_agent_packages() {
+function neutron_agent_lbaas_install_agent_packages {
     if is_ubuntu || is_fedora; then
         install_package haproxy
     elif is_suse; then
@@ -18,11 +18,11 @@
     fi
 }
 
-function neutron_agent_lbaas_configure_common() {
+function neutron_agent_lbaas_configure_common {
     _neutron_service_plugin_class_add $LBAAS_PLUGIN
 }
 
-function neutron_agent_lbaas_configure_agent() {
+function neutron_agent_lbaas_configure_agent {
     LBAAS_AGENT_CONF_PATH=/etc/neutron/services/loadbalancer/haproxy
     mkdir -p $LBAAS_AGENT_CONF_PATH
 
@@ -41,7 +41,7 @@
     fi
 }
 
-function neutron_lbaas_stop() {
+function neutron_lbaas_stop {
     pids=$(ps aux | awk '/haproxy/ { print $2 }')
     [ ! -z "$pids" ] && sudo kill $pids
 }
diff --git a/lib/neutron_plugins/services/metering b/lib/neutron_plugins/services/metering
index 37952bb..0e5f75b 100644
--- a/lib/neutron_plugins/services/metering
+++ b/lib/neutron_plugins/services/metering
@@ -9,11 +9,11 @@
 AGENT_METERING_BINARY="$NEUTRON_BIN_DIR/neutron-metering-agent"
 METERING_PLUGIN="neutron.services.metering.metering_plugin.MeteringPlugin"
 
-function neutron_agent_metering_configure_common() {
+function neutron_agent_metering_configure_common {
     _neutron_service_plugin_class_add $METERING_PLUGIN
 }
 
-function neutron_agent_metering_configure_agent() {
+function neutron_agent_metering_configure_agent {
     METERING_AGENT_CONF_PATH=/etc/neutron/services/metering
     mkdir -p $METERING_AGENT_CONF_PATH
 
@@ -22,7 +22,7 @@
     cp $NEUTRON_DIR/etc/metering_agent.ini $METERING_AGENT_CONF_FILENAME
 }
 
-function neutron_metering_stop() {
+function neutron_metering_stop {
     :
 }
 
diff --git a/lib/neutron_plugins/services/vpn b/lib/neutron_plugins/services/vpn
index 02370e7..e56d361 100644
--- a/lib/neutron_plugins/services/vpn
+++ b/lib/neutron_plugins/services/vpn
@@ -10,15 +10,15 @@
 VPN_PLUGIN="neutron.services.vpn.plugin.VPNDriverPlugin"
 IPSEC_PACKAGE=${IPSEC_PACKAGE:-"openswan"}
 
-function neutron_vpn_install_agent_packages() {
+function neutron_vpn_install_agent_packages {
     install_package $IPSEC_PACKAGE
 }
 
-function neutron_vpn_configure_common() {
+function neutron_vpn_configure_common {
     _neutron_service_plugin_class_add $VPN_PLUGIN
 }
 
-function neutron_vpn_stop() {
+function neutron_vpn_stop {
     local ipsec_data_dir=$DATA_DIR/neutron/ipsec
     local pids
     if [ -d $ipsec_data_dir ]; then
diff --git a/lib/neutron_plugins/vmware_nsx b/lib/neutron_plugins/vmware_nsx
index d506cb6..0930422 100644
--- a/lib/neutron_plugins/vmware_nsx
+++ b/lib/neutron_plugins/vmware_nsx
@@ -7,7 +7,7 @@
 
 source $TOP_DIR/lib/neutron_plugins/ovs_base
 
-function setup_integration_bridge() {
+function setup_integration_bridge {
     _neutron_ovs_base_setup_bridge $OVS_BRIDGE
     # Set manager to NSX controller (1st of list)
     if [[ "$NSX_CONTROLLERS" != "" ]]; then
@@ -20,24 +20,24 @@
     sudo ovs-vsctl set-manager ssl:$OVS_MGR_IP
 }
 
-function is_neutron_ovs_base_plugin() {
+function is_neutron_ovs_base_plugin {
     # NSX uses OVS, but not the l3-agent
     return 0
 }
 
-function neutron_plugin_create_nova_conf() {
+function neutron_plugin_create_nova_conf {
     # if n-cpu is enabled, then setup integration bridge
     if is_service_enabled n-cpu; then
         setup_integration_bridge
     fi
 }
 
-function neutron_plugin_install_agent_packages() {
+function neutron_plugin_install_agent_packages {
     # VMware NSX Plugin does not run q-agt, but it currently needs dhcp and metadata agents
     _neutron_ovs_base_install_agent_packages
 }
 
-function neutron_plugin_configure_common() {
+function neutron_plugin_configure_common {
     Q_PLUGIN_CONF_PATH=etc/neutron/plugins/vmware
     Q_PLUGIN_CONF_FILENAME=nsx.ini
     Q_DB_NAME="neutron_nsx"
@@ -45,29 +45,29 @@
     Q_PLUGIN_CLASS="neutron.plugins.nicira.NeutronPlugin.NvpPluginV2"
 }
 
-function neutron_plugin_configure_debug_command() {
+function neutron_plugin_configure_debug_command {
     sudo ovs-vsctl --no-wait -- --may-exist add-br $PUBLIC_BRIDGE
     iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT external_network_bridge "$PUBLIC_BRIDGE"
 }
 
-function neutron_plugin_configure_dhcp_agent() {
+function neutron_plugin_configure_dhcp_agent {
     setup_integration_bridge
     iniset $Q_DHCP_CONF_FILE DEFAULT enable_isolated_metadata True
     iniset $Q_DHCP_CONF_FILE DEFAULT enable_metadata_network True
     iniset $Q_DHCP_CONF_FILE DEFAULT ovs_use_veth True
 }
 
-function neutron_plugin_configure_l3_agent() {
+function neutron_plugin_configure_l3_agent {
     # VMware NSX plugin does not run L3 agent
     die $LINENO "q-l3 should must not be executed with VMware NSX plugin!"
 }
 
-function neutron_plugin_configure_plugin_agent() {
+function neutron_plugin_configure_plugin_agent {
     # VMware NSX plugin does not run L2 agent
     die $LINENO "q-agt must not be executed with VMware NSX plugin!"
 }
 
-function neutron_plugin_configure_service() {
+function neutron_plugin_configure_service {
     if [[ "$MAX_LP_PER_BRIDGED_LS" != "" ]]; then
         iniset /$Q_PLUGIN_CONF_FILE nsx max_lp_per_bridged_ls $MAX_LP_PER_BRIDGED_LS
     fi
@@ -132,17 +132,17 @@
     fi
 }
 
-function neutron_plugin_setup_interface_driver() {
+function neutron_plugin_setup_interface_driver {
     local conf_file=$1
     iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
 }
 
-function has_neutron_plugin_security_group() {
+function has_neutron_plugin_security_group {
     # 0 means True here
     return 0
 }
 
-function neutron_plugin_check_adv_test_requirements() {
+function neutron_plugin_check_adv_test_requirements {
     is_service_enabled q-dhcp && return 0
 }
 
diff --git a/lib/neutron_thirdparty/bigswitch_floodlight b/lib/neutron_thirdparty/bigswitch_floodlight
index 24c1044..f03de56 100644
--- a/lib/neutron_thirdparty/bigswitch_floodlight
+++ b/lib/neutron_thirdparty/bigswitch_floodlight
@@ -8,11 +8,11 @@
 BS_FL_CONTROLLERS_PORT=${BS_FL_CONTROLLERS_PORT:-localhost:80}
 BS_FL_OF_PORT=${BS_FL_OF_PORT:-6633}
 
-function configure_bigswitch_floodlight() {
+function configure_bigswitch_floodlight {
     :
 }
 
-function init_bigswitch_floodlight() {
+function init_bigswitch_floodlight {
     install_neutron_agent_packages
 
     echo -n "Installing OVS managed by the openflow controllers:"
@@ -32,19 +32,19 @@
     sudo ovs-vsctl --no-wait set-controller ${OVS_BRIDGE} ${ctrls}
 }
 
-function install_bigswitch_floodlight() {
+function install_bigswitch_floodlight {
     :
 }
 
-function start_bigswitch_floodlight() {
+function start_bigswitch_floodlight {
     :
 }
 
-function stop_bigswitch_floodlight() {
+function stop_bigswitch_floodlight {
     :
 }
 
-function check_bigswitch_floodlight() {
+function check_bigswitch_floodlight {
     :
 }
 
diff --git a/lib/neutron_thirdparty/midonet b/lib/neutron_thirdparty/midonet
index 98be425..ad417bb 100644
--- a/lib/neutron_thirdparty/midonet
+++ b/lib/neutron_thirdparty/midonet
@@ -20,28 +20,28 @@
 MY_XTRACE=$(set +o | grep xtrace)
 set +o xtrace
 
-function configure_midonet() {
+function configure_midonet {
     :
 }
 
-function init_midonet() {
+function init_midonet {
     :
 }
 
-function install_midonet() {
+function install_midonet {
     git_clone $MIDONET_CLIENT_REPO $MIDONET_CLIENT_DIR $MIDONET_CLIENT_BRANCH
     export PYTHONPATH=$MIDONET_CLIENT_DIR/src:$PYTHONPATH
 }
 
-function start_midonet() {
+function start_midonet {
     :
 }
 
-function stop_midonet() {
+function stop_midonet {
     :
 }
 
-function check_midonet() {
+function check_midonet {
     :
 }
 
diff --git a/lib/neutron_thirdparty/ryu b/lib/neutron_thirdparty/ryu
index 5edf273..424a900 100644
--- a/lib/neutron_thirdparty/ryu
+++ b/lib/neutron_thirdparty/ryu
@@ -21,14 +21,14 @@
 # configure_ryu can be called multiple times as neutron_pluing/ryu may call
 # this function for neutron-ryu-agent
 _RYU_CONFIGURED=${_RYU_CONFIGURED:-False}
-function configure_ryu() {
+function configure_ryu {
     if [[ "$_RYU_CONFIGURED" == "False" ]]; then
         setup_develop $RYU_DIR
         _RYU_CONFIGURED=True
     fi
 }
 
-function init_ryu() {
+function init_ryu {
     RYU_CONF_DIR=/etc/ryu
     if [[ ! -d $RYU_CONF_DIR ]]; then
         sudo mkdir -p $RYU_CONF_DIR
@@ -60,22 +60,22 @@
 # Make this function idempotent and avoid cloning same repo many times
 # with RECLONE=yes
 _RYU_INSTALLED=${_RYU_INSTALLED:-False}
-function install_ryu() {
+function install_ryu {
     if [[ "$_RYU_INSTALLED" == "False" ]]; then
         git_clone $RYU_REPO $RYU_DIR $RYU_BRANCH
         _RYU_INSTALLED=True
     fi
 }
 
-function start_ryu() {
+function start_ryu {
     screen_it ryu "cd $RYU_DIR && $RYU_DIR/bin/ryu-manager --config-file $RYU_CONF"
 }
 
-function stop_ryu() {
+function stop_ryu {
     :
 }
 
-function check_ryu() {
+function check_ryu {
     :
 }
 
diff --git a/lib/neutron_thirdparty/trema b/lib/neutron_thirdparty/trema
index 2b12564..d465ac7 100644
--- a/lib/neutron_thirdparty/trema
+++ b/lib/neutron_thirdparty/trema
@@ -31,7 +31,7 @@
 TREMA_SS_APACHE_CONFIG=/etc/apache2/sites-available/sliceable_switch.conf
 
 # configure_trema - Set config files, create data dirs, etc
-function configure_trema() {
+function configure_trema {
     # prepare dir
     for d in $TREMA_SS_ETC_DIR $TREMA_SS_DB_DIR $TREMA_SS_SCRIPT_DIR; do
         sudo mkdir -p $d
@@ -41,7 +41,7 @@
 }
 
 # init_trema - Initialize databases, etc.
-function init_trema() {
+function init_trema {
     local _pwd=$(pwd)
 
     # Initialize databases for Sliceable Switch
@@ -70,7 +70,7 @@
         $TREMA_SS_CONFIG
 }
 
-function gem_install() {
+function gem_install {
     [[ "$OFFLINE" = "True" ]] && return
     [ -n "$RUBYGEMS_CMD" ] || get_gem_command
 
@@ -79,7 +79,7 @@
     sudo $RUBYGEMS_CMD install $pkg
 }
 
-function get_gem_command() {
+function get_gem_command {
     # Trema requires ruby 1.8, so gem1.8 is checked first
     RUBYGEMS_CMD=$(which gem1.8 || which gem)
     if [ -z "$RUBYGEMS_CMD" ]; then
@@ -87,7 +87,7 @@
     fi
 }
 
-function install_trema() {
+function install_trema {
     # Trema
     gem_install trema
     # Sliceable Switch
@@ -97,7 +97,7 @@
     make -C $TREMA_DIR/apps/sliceable_switch
 }
 
-function start_trema() {
+function start_trema {
     # APACHE_NAME is defined in init_horizon (in lib/horizon)
     restart_service $APACHE_NAME
 
@@ -105,11 +105,11 @@
         trema run -d -c $TREMA_SS_CONFIG
 }
 
-function stop_trema() {
+function stop_trema {
     sudo TREMA_TMP=$TREMA_TMP_DIR trema killall
 }
 
-function check_trema() {
+function check_trema {
     :
 }
 
diff --git a/lib/neutron_thirdparty/vmware_nsx b/lib/neutron_thirdparty/vmware_nsx
index 4eb177a..3fecc62 100644
--- a/lib/neutron_thirdparty/vmware_nsx
+++ b/lib/neutron_thirdparty/vmware_nsx
@@ -22,11 +22,11 @@
 # is invoked by unstack.sh
 FLOATING_RANGE=${FLOATING_RANGE:-172.24.4.0/24}
 
-function configure_vmware_nsx() {
+function configure_vmware_nsx {
     :
 }
 
-function init_vmware_nsx() {
+function init_vmware_nsx {
     if ! is_set NSX_GATEWAY_NETWORK_CIDR; then
         NSX_GATEWAY_NETWORK_CIDR=$PUBLIC_NETWORK_GATEWAY/${FLOATING_RANGE#*/}
         echo "The IP address to set on br-ex was not specified. "
@@ -52,15 +52,15 @@
     sudo ip addr add dev $PUBLIC_BRIDGE $NSX_GATEWAY_NETWORK_CIDR
 }
 
-function install_vmware_nsx() {
+function install_vmware_nsx {
     :
 }
 
-function start_vmware_nsx() {
+function start_vmware_nsx {
     :
 }
 
-function stop_vmware_nsx() {
+function stop_vmware_nsx {
     if ! is_set NSX_GATEWAY_NETWORK_CIDR; then
         NSX_GATEWAY_NETWORK_CIDR=$PUBLIC_NETWORK_GATEWAY/${FLOATING_RANGE#*/}
         echo "The IP address expected on br-ex was not specified. "
@@ -78,7 +78,7 @@
     done
 }
 
-function check_vmware_nsx() {
+function check_vmware_nsx {
     neutron-check-nsx-config $NEUTRON_CONF_DIR/plugins/vmware/nsx.ini
 }
 
diff --git a/lib/nova b/lib/nova
index fefeda1..90b1ba4 100644
--- a/lib/nova
+++ b/lib/nova
@@ -144,7 +144,7 @@
 }
 
 # Helper to clean iptables rules
-function clean_iptables() {
+function clean_iptables {
     # Delete rules
     sudo iptables -S -v | sed "s/-c [0-9]* [0-9]* //g" | grep "nova" | grep "\-A" |  sed "s/-A/-D/g" | awk '{print "sudo iptables",$0}' | bash
     # Delete nat rules
@@ -157,7 +157,7 @@
 
 # cleanup_nova() - Remove residual data files, anything left over from previous
 # runs that a clean run would need to clean up
-function cleanup_nova() {
+function cleanup_nova {
     if is_service_enabled n-cpu; then
         # Clean iptables from previous runs
         clean_iptables
@@ -191,7 +191,7 @@
 }
 
 # configure_nova_rootwrap() - configure Nova's rootwrap
-function configure_nova_rootwrap() {
+function configure_nova_rootwrap {
     # Deploy new rootwrap filters files (owned by root).
     # Wipe any existing rootwrap.d files first
     if [[ -d $NOVA_CONF_DIR/rootwrap.d ]]; then
@@ -219,7 +219,7 @@
 }
 
 # configure_nova() - Set config files, create data dirs, etc
-function configure_nova() {
+function configure_nova {
     # Put config files in ``/etc/nova`` for everyone to find
     if [[ ! -d $NOVA_CONF_DIR ]]; then
         sudo mkdir -p $NOVA_CONF_DIR
@@ -367,7 +367,7 @@
 }
 
 # create_nova_conf() - Create a new nova.conf file
-function create_nova_conf() {
+function create_nova_conf {
     # Remove legacy ``nova.conf``
     rm -f $NOVA_DIR/bin/nova.conf
 
@@ -515,7 +515,7 @@
     iniset $NOVA_CONF DEFAULT glance_api_servers "$GLANCE_HOSTPORT"
 }
 
-function init_nova_cells() {
+function init_nova_cells {
     if is_service_enabled n-cell; then
         cp $NOVA_CONF $NOVA_CELLS_CONF
         iniset $NOVA_CELLS_CONF DEFAULT sql_connection `database_connection_url $NOVA_CELLS_DB`
@@ -542,14 +542,14 @@
 }
 
 # create_nova_cache_dir() - Part of the init_nova() process
-function create_nova_cache_dir() {
+function create_nova_cache_dir {
     # Create cache dir
     sudo mkdir -p $NOVA_AUTH_CACHE_DIR
     sudo chown $STACK_USER $NOVA_AUTH_CACHE_DIR
     rm -f $NOVA_AUTH_CACHE_DIR/*
 }
 
-function create_nova_conf_nova_network() {
+function create_nova_conf_nova_network {
     iniset $NOVA_CONF DEFAULT network_manager "nova.network.manager.$NETWORK_MANAGER"
     iniset $NOVA_CONF DEFAULT public_interface "$PUBLIC_INTERFACE"
     iniset $NOVA_CONF DEFAULT vlan_interface "$VLAN_INTERFACE"
@@ -560,14 +560,14 @@
 }
 
 # create_nova_keys_dir() - Part of the init_nova() process
-function create_nova_keys_dir() {
+function create_nova_keys_dir {
     # Create keys dir
     sudo mkdir -p ${NOVA_STATE_PATH}/keys
     sudo chown -R $STACK_USER ${NOVA_STATE_PATH}
 }
 
 # init_nova() - Initialize databases, etc.
-function init_nova() {
+function init_nova {
     # All nova components talk to a central database.
     # Only do this step once on the API node for an entire cluster.
     if is_service_enabled $DATABASE_BACKENDS && is_service_enabled n-api; then
@@ -596,14 +596,14 @@
 }
 
 # install_novaclient() - Collect source and prepare
-function install_novaclient() {
+function install_novaclient {
     git_clone $NOVACLIENT_REPO $NOVACLIENT_DIR $NOVACLIENT_BRANCH
     setup_develop $NOVACLIENT_DIR
     sudo install -D -m 0644 -o $STACK_USER {$NOVACLIENT_DIR/tools/,/etc/bash_completion.d/}nova.bash_completion
 }
 
 # install_nova() - Collect source and prepare
-function install_nova() {
+function install_nova {
     if is_service_enabled n-cpu && [[ -r $NOVA_PLUGINS/hypervisor-$VIRT_DRIVER ]]; then
         install_nova_hypervisor
     fi
@@ -638,7 +638,7 @@
 }
 
 # start_nova_api() - Start the API process ahead of other things
-function start_nova_api() {
+function start_nova_api {
     # Get right service port for testing
     local service_port=$NOVA_SERVICE_PORT
     if is_service_enabled tls-proxy; then
@@ -658,7 +658,7 @@
 }
 
 # start_nova_compute() - Start the compute process
-function start_nova_compute() {
+function start_nova_compute {
     if is_service_enabled n-cell; then
         local compute_cell_conf=$NOVA_CELLS_CONF
     else
@@ -693,7 +693,7 @@
 }
 
 # start_nova() - Start running processes, including screen
-function start_nova_rest() {
+function start_nova_rest {
     local api_cell_conf=$NOVA_CONF
     if is_service_enabled n-cell; then
         local compute_cell_conf=$NOVA_CELLS_CONF
@@ -722,13 +722,13 @@
         screen_it n-obj "cd $NOVA_DIR && $NOVA_BIN_DIR/nova-objectstore --config-file $api_cell_conf"
 }
 
-function start_nova() {
+function start_nova {
     start_nova_compute
     start_nova_rest
 }
 
 # stop_nova() - Stop running processes (non-screen)
-function stop_nova() {
+function stop_nova {
     # Kill the nova screen windows
     # Some services are listed here twice since more than one instance
     # of a service may be running in certain configs.
diff --git a/lib/nova_plugins/hypervisor-baremetal b/lib/nova_plugins/hypervisor-baremetal
index 660c977..2da1097 100644
--- a/lib/nova_plugins/hypervisor-baremetal
+++ b/lib/nova_plugins/hypervisor-baremetal
@@ -33,13 +33,13 @@
 # ------------
 
 # clean_nova_hypervisor - Clean up an installation
-function cleanup_nova_hypervisor() {
+function cleanup_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # configure_nova_hypervisor - Set config files, create data dirs, etc
-function configure_nova_hypervisor() {
+function configure_nova_hypervisor {
     configure_baremetal_nova_dirs
 
     iniset $NOVA_CONF baremetal sql_connection `database_connection_url nova_bm`
@@ -67,19 +67,19 @@
 }
 
 # install_nova_hypervisor() - Install external components
-function install_nova_hypervisor() {
+function install_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # start_nova_hypervisor - Start any required external services
-function start_nova_hypervisor() {
+function start_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # stop_nova_hypervisor - Stop any external services
-function stop_nova_hypervisor() {
+function stop_nova_hypervisor {
     # This function intentionally left blank
     :
 }
diff --git a/lib/nova_plugins/hypervisor-docker b/lib/nova_plugins/hypervisor-docker
index b5df19d..f8dc6af 100644
--- a/lib/nova_plugins/hypervisor-docker
+++ b/lib/nova_plugins/hypervisor-docker
@@ -44,7 +44,7 @@
 # ------------
 
 # clean_nova_hypervisor - Clean up an installation
-function cleanup_nova_hypervisor() {
+function cleanup_nova_hypervisor {
     stop_service docker
 
     # Clean out work area
@@ -52,13 +52,13 @@
 }
 
 # configure_nova_hypervisor - Set config files, create data dirs, etc
-function configure_nova_hypervisor() {
+function configure_nova_hypervisor {
     iniset $NOVA_CONF DEFAULT compute_driver docker.DockerDriver
     iniset $GLANCE_API_CONF DEFAULT container_formats ami,ari,aki,bare,ovf,docker
 }
 
 # install_nova_hypervisor() - Install external components
-function install_nova_hypervisor() {
+function install_nova_hypervisor {
     # So far this is Ubuntu only
     if ! is_ubuntu; then
         die $LINENO "Docker is only supported on Ubuntu at this time"
@@ -77,7 +77,7 @@
 }
 
 # start_nova_hypervisor - Start any required external services
-function start_nova_hypervisor() {
+function start_nova_hypervisor {
     local docker_pid
     read docker_pid <$DOCKER_PID_FILE
     if [[ -z $docker_pid ]] || ! ps -p $docker_pid | grep [d]ocker; then
@@ -111,7 +111,7 @@
 }
 
 # stop_nova_hypervisor - Stop any external services
-function stop_nova_hypervisor() {
+function stop_nova_hypervisor {
     # Stop the docker registry container
     docker kill $(docker ps | grep docker-registry | cut -d' ' -f1)
 }
diff --git a/lib/nova_plugins/hypervisor-fake b/lib/nova_plugins/hypervisor-fake
index fe0d190..e7a833f 100644
--- a/lib/nova_plugins/hypervisor-fake
+++ b/lib/nova_plugins/hypervisor-fake
@@ -27,13 +27,13 @@
 # ------------
 
 # clean_nova_hypervisor - Clean up an installation
-function cleanup_nova_hypervisor() {
+function cleanup_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # configure_nova_hypervisor - Set config files, create data dirs, etc
-function configure_nova_hypervisor() {
+function configure_nova_hypervisor {
     iniset $NOVA_CONF DEFAULT compute_driver "nova.virt.fake.FakeDriver"
     # Disable arbitrary limits
     iniset $NOVA_CONF DEFAULT quota_instances -1
@@ -51,19 +51,19 @@
 }
 
 # install_nova_hypervisor() - Install external components
-function install_nova_hypervisor() {
+function install_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # start_nova_hypervisor - Start any required external services
-function start_nova_hypervisor() {
+function start_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # stop_nova_hypervisor - Stop any external services
-function stop_nova_hypervisor() {
+function stop_nova_hypervisor {
     # This function intentionally left blank
     :
 }
diff --git a/lib/nova_plugins/hypervisor-libvirt b/lib/nova_plugins/hypervisor-libvirt
index a550600..b39c57c 100644
--- a/lib/nova_plugins/hypervisor-libvirt
+++ b/lib/nova_plugins/hypervisor-libvirt
@@ -31,13 +31,13 @@
 # ------------
 
 # clean_nova_hypervisor - Clean up an installation
-function cleanup_nova_hypervisor() {
+function cleanup_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # configure_nova_hypervisor - Set config files, create data dirs, etc
-function configure_nova_hypervisor() {
+function configure_nova_hypervisor {
     if is_service_enabled neutron && is_neutron_ovs_base_plugin && ! sudo grep -q '^cgroup_device_acl' $QEMU_CONF; then
         # Add /dev/net/tun to cgroup_device_acls, needed for type=ethernet interfaces
         cat <<EOF | sudo tee -a $QEMU_CONF
@@ -135,7 +135,7 @@
 }
 
 # install_nova_hypervisor() - Install external components
-function install_nova_hypervisor() {
+function install_nova_hypervisor {
     if is_ubuntu; then
         install_package kvm
         install_package libvirt-bin
@@ -165,13 +165,13 @@
 }
 
 # start_nova_hypervisor - Start any required external services
-function start_nova_hypervisor() {
+function start_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # stop_nova_hypervisor - Stop any external services
-function stop_nova_hypervisor() {
+function stop_nova_hypervisor {
     # This function intentionally left blank
     :
 }
diff --git a/lib/nova_plugins/hypervisor-openvz b/lib/nova_plugins/hypervisor-openvz
index fc5ed0c..a1636ad 100644
--- a/lib/nova_plugins/hypervisor-openvz
+++ b/lib/nova_plugins/hypervisor-openvz
@@ -27,13 +27,13 @@
 # ------------
 
 # clean_nova_hypervisor - Clean up an installation
-function cleanup_nova_hypervisor() {
+function cleanup_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # configure_nova_hypervisor - Set config files, create data dirs, etc
-function configure_nova_hypervisor() {
+function configure_nova_hypervisor {
     iniset $NOVA_CONF DEFAULT compute_driver "openvz.OpenVzDriver"
     iniset $NOVA_CONF DEFAULT connection_type "openvz"
     LIBVIRT_FIREWALL_DRIVER=${LIBVIRT_FIREWALL_DRIVER:-"nova.virt.libvirt.firewall.IptablesFirewallDriver"}
@@ -41,19 +41,19 @@
 }
 
 # install_nova_hypervisor() - Install external components
-function install_nova_hypervisor() {
+function install_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # start_nova_hypervisor - Start any required external services
-function start_nova_hypervisor() {
+function start_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # stop_nova_hypervisor - Stop any external services
-function stop_nova_hypervisor() {
+function stop_nova_hypervisor {
     # This function intentionally left blank
     :
 }
diff --git a/lib/nova_plugins/hypervisor-vsphere b/lib/nova_plugins/hypervisor-vsphere
index 1666246..b04aeda 100644
--- a/lib/nova_plugins/hypervisor-vsphere
+++ b/lib/nova_plugins/hypervisor-vsphere
@@ -27,13 +27,13 @@
 # ------------
 
 # clean_nova_hypervisor - Clean up an installation
-function cleanup_nova_hypervisor() {
+function cleanup_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # configure_nova_hypervisor - Set config files, create data dirs, etc
-function configure_nova_hypervisor() {
+function configure_nova_hypervisor {
     iniset $NOVA_CONF DEFAULT compute_driver "vmwareapi.VMwareVCDriver"
     VMWAREAPI_USER=${VMWAREAPI_USER:-"root"}
     iniset $NOVA_CONF vmware host_ip "$VMWAREAPI_IP"
@@ -46,19 +46,19 @@
 }
 
 # install_nova_hypervisor() - Install external components
-function install_nova_hypervisor() {
+function install_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # start_nova_hypervisor - Start any required external services
-function start_nova_hypervisor() {
+function start_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # stop_nova_hypervisor - Stop any external services
-function stop_nova_hypervisor() {
+function stop_nova_hypervisor {
     # This function intentionally left blank
     :
 }
diff --git a/lib/nova_plugins/hypervisor-xenserver b/lib/nova_plugins/hypervisor-xenserver
index 9843261..10bda2c 100644
--- a/lib/nova_plugins/hypervisor-xenserver
+++ b/lib/nova_plugins/hypervisor-xenserver
@@ -37,13 +37,13 @@
 # ------------
 
 # clean_nova_hypervisor - Clean up an installation
-function cleanup_nova_hypervisor() {
+function cleanup_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # configure_nova_hypervisor - Set config files, create data dirs, etc
-function configure_nova_hypervisor() {
+function configure_nova_hypervisor {
     if [ -z "$XENAPI_CONNECTION_URL" ]; then
         die $LINENO "XENAPI_CONNECTION_URL is not specified"
     fi
@@ -87,19 +87,19 @@
 }
 
 # install_nova_hypervisor() - Install external components
-function install_nova_hypervisor() {
+function install_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # start_nova_hypervisor - Start any required external services
-function start_nova_hypervisor() {
+function start_nova_hypervisor {
     # This function intentionally left blank
     :
 }
 
 # stop_nova_hypervisor - Stop any external services
-function stop_nova_hypervisor() {
+function stop_nova_hypervisor {
     # This function intentionally left blank
     :
 }
diff --git a/lib/oslo b/lib/oslo
index 516ce1c..8ef179c 100644
--- a/lib/oslo
+++ b/lib/oslo
@@ -33,7 +33,7 @@
 # ------------
 
 # install_oslo() - Collect source and prepare
-function install_oslo() {
+function install_oslo {
     # TODO(sdague): remove this once we get to Icehouse, this just makes
     # for a smoother transition of existing users.
     cleanup_oslo
@@ -64,7 +64,7 @@
 }
 
 # cleanup_oslo() - purge possibly old versions of oslo
-function cleanup_oslo() {
+function cleanup_oslo {
     # this means we've got an old oslo installed, lets get rid of it
     if ! python -c 'import oslo.config' 2>/dev/null; then
         echo "Found old oslo.config... removing to ensure consistency"
diff --git a/lib/rpc_backend b/lib/rpc_backend
index 34f576f..a0424b1 100644
--- a/lib/rpc_backend
+++ b/lib/rpc_backend
@@ -25,7 +25,7 @@
 
 # Make sure we only have one rpc backend enabled.
 # Also check the specified rpc backend is available on your platform.
-function check_rpc_backend() {
+function check_rpc_backend {
     local rpc_needed=1
     # We rely on the fact that filenames in lib/* match the service names
     # that can be passed as arguments to is_service_enabled.
@@ -91,7 +91,7 @@
 }
 
 # install rpc backend
-function install_rpc_backend() {
+function install_rpc_backend {
     if is_service_enabled rabbit; then
         # Install rabbitmq-server
         # the temp file is necessary due to LP: #878600
@@ -135,7 +135,7 @@
 }
 
 # restart the rpc backend
-function restart_rpc_backend() {
+function restart_rpc_backend {
     if is_service_enabled rabbit; then
         # Start rabbitmq-server
         echo_summary "Starting RabbitMQ"
@@ -165,7 +165,7 @@
 }
 
 # iniset cofiguration
-function iniset_rpc_backend() {
+function iniset_rpc_backend {
     local package=$1
     local file=$2
     local section=$3
@@ -193,7 +193,7 @@
 
 # Check if qpid can be used on the current distro.
 # qpid_is_supported
-function qpid_is_supported() {
+function qpid_is_supported {
     if [[ -z "$DISTRO" ]]; then
         GetDistro
     fi
diff --git a/lib/savanna b/lib/savanna
index 954f0e7..d7152b1 100644
--- a/lib/savanna
+++ b/lib/savanna
@@ -55,7 +55,7 @@
 # Tenant      User       Roles
 # ------------------------------
 # service     savanna    admin
-function create_savanna_accounts() {
+function create_savanna_accounts {
 
     SERVICE_TENANT=$(openstack project list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
     ADMIN_ROLE=$(openstack role list | awk "/ admin / { print \$2 }")
@@ -88,14 +88,14 @@
 
 # cleanup_savanna() - Remove residual data files, anything left over from
 # previous runs that would need to clean up.
-function cleanup_savanna() {
+function cleanup_savanna {
 
     # Cleanup auth cache dir
     sudo rm -rf $SAVANNA_AUTH_CACHE_DIR
 }
 
 # configure_savanna() - Set config files, create data dirs, etc
-function configure_savanna() {
+function configure_savanna {
 
     if [[ ! -d $SAVANNA_CONF_DIR ]]; then
         sudo mkdir -p $SAVANNA_CONF_DIR
@@ -142,18 +142,18 @@
 }
 
 # install_savanna() - Collect source and prepare
-function install_savanna() {
+function install_savanna {
     git_clone $SAVANNA_REPO $SAVANNA_DIR $SAVANNA_BRANCH
     setup_develop $SAVANNA_DIR
 }
 
 # start_savanna() - Start running processes, including screen
-function start_savanna() {
+function start_savanna {
     screen_it savanna "cd $SAVANNA_DIR && $SAVANNA_BIN_DIR/savanna-api --config-file $SAVANNA_CONF_FILE"
 }
 
 # stop_savanna() - Stop running processes
-function stop_savanna() {
+function stop_savanna {
     # Kill the Savanna screen windows
     screen -S $SCREEN_NAME -p savanna -X kill
 }
diff --git a/lib/savanna-dashboard b/lib/savanna-dashboard
index 691b23f..6fe15a3 100644
--- a/lib/savanna-dashboard
+++ b/lib/savanna-dashboard
@@ -35,7 +35,7 @@
 # Functions
 # ---------
 
-function configure_savanna_dashboard() {
+function configure_savanna_dashboard {
 
     echo -e "AUTO_ASSIGNMENT_ENABLED = False" >> $HORIZON_DIR/openstack_dashboard/local/local_settings.py
     echo -e "HORIZON_CONFIG['dashboards'] += ('savanna',)" >> $HORIZON_DIR/openstack_dashboard/settings.py
@@ -47,19 +47,19 @@
 }
 
 # install_savanna_dashboard() - Collect source and prepare
-function install_savanna_dashboard() {
+function install_savanna_dashboard {
     install_python_savannaclient
     git_clone $SAVANNA_DASHBOARD_REPO $SAVANNA_DASHBOARD_DIR $SAVANNA_DASHBOARD_BRANCH
     setup_develop $SAVANNA_DASHBOARD_DIR
 }
 
-function install_python_savannaclient() {
+function install_python_savannaclient {
     git_clone $SAVANNA_PYTHONCLIENT_REPO $SAVANNA_PYTHONCLIENT_DIR $SAVANNA_PYTHONCLIENT_BRANCH
     setup_develop $SAVANNA_PYTHONCLIENT_DIR
 }
 
 # Cleanup file settings.py from Savanna
-function cleanup_savanna_dashboard() {
+function cleanup_savanna_dashboard {
     sed -i '/savanna/d' $HORIZON_DIR/openstack_dashboard/settings.py
 }
 
diff --git a/lib/stackforge b/lib/stackforge
index 5fa4570..dca08cc 100644
--- a/lib/stackforge
+++ b/lib/stackforge
@@ -34,7 +34,7 @@
 # ------------
 
 # install_stackforge() - Collect source and prepare
-function install_stackforge() {
+function install_stackforge {
     # TODO(sdague): remove this once we get to Icehouse, this just makes
     # for a smoother transition of existing users.
     cleanup_stackforge
@@ -47,7 +47,7 @@
 }
 
 # cleanup_stackforge() - purge possibly old versions of stackforge libraries
-function cleanup_stackforge() {
+function cleanup_stackforge {
     # this means we've got an old version installed, lets get rid of it
     # otherwise python hates itself
     for lib in wsme pecan; do
diff --git a/lib/swift b/lib/swift
index 6c33af5..59c1e54 100644
--- a/lib/swift
+++ b/lib/swift
@@ -126,7 +126,7 @@
 }
 
 # cleanup_swift() - Remove residual data files
-function cleanup_swift() {
+function cleanup_swift {
     rm -f ${SWIFT_CONF_DIR}{*.builder,*.ring.gz,backups/*.builder,backups/*.ring.gz}
     if egrep -q ${SWIFT_DATA_DIR}/drives/sdb1 /proc/mounts; then
         sudo umount ${SWIFT_DATA_DIR}/drives/sdb1
@@ -141,7 +141,7 @@
 }
 
 # _cleanup_swift_apache_wsgi() - Remove wsgi files, disable and remove apache vhost file
-function _cleanup_swift_apache_wsgi() {
+function _cleanup_swift_apache_wsgi {
     sudo rm -f $SWIFT_APACHE_WSGI_DIR/*.wsgi
     disable_apache_site proxy-server
     for node_number in ${SWIFT_REPLICAS_SEQ}; do
@@ -154,7 +154,7 @@
 }
 
 # _config_swift_apache_wsgi() - Set WSGI config files of Swift
-function _config_swift_apache_wsgi() {
+function _config_swift_apache_wsgi {
     sudo mkdir -p ${SWIFT_APACHE_WSGI_DIR}
     local apache_vhost_dir=/etc/${APACHE_NAME}/$APACHE_CONF_DIR
     local proxy_port=${SWIFT_DEFAULT_BIND_PORT:-8080}
@@ -233,7 +233,7 @@
 
 # This function generates an object/container/account configuration
 # emulating 4 nodes on different ports
-function generate_swift_config() {
+function generate_swift_config {
     local swift_node_config=$1
     local node_id=$2
     local bind_port=$3
@@ -272,7 +272,7 @@
 
 
 # configure_swift() - Set config files, create data dirs and loop image
-function configure_swift() {
+function configure_swift {
     local swift_pipeline="${SWIFT_EXTRAS_MIDDLEWARE_NO_AUTH}"
     local node_number
     local swift_node_config
@@ -460,7 +460,7 @@
 }
 
 # create_swift_disk - Create Swift backing disk
-function create_swift_disk() {
+function create_swift_disk {
     local node_number
 
     # First do a bit of setup by creating the directories and
@@ -520,7 +520,7 @@
 # swifttenanttest1   swiftusertest3     anotherrole
 # swifttenanttest2   swiftusertest2     admin
 
-function create_swift_accounts() {
+function create_swift_accounts {
     # Defines specific passwords used by tools/create_userrc.sh
     SWIFTUSERTEST1_PASSWORD=testing
     SWIFTUSERTEST2_PASSWORD=testing2
@@ -578,7 +578,7 @@
 }
 
 # init_swift() - Initialize rings
-function init_swift() {
+function init_swift {
     local node_number
     # Make sure to kill all swift processes first
     swift-init --run-dir=${SWIFT_DATA_DIR}/run all stop || true
@@ -612,7 +612,7 @@
     rm -f $SWIFT_AUTH_CACHE_DIR/*
 }
 
-function install_swift() {
+function install_swift {
     git_clone $SWIFT_REPO $SWIFT_DIR $SWIFT_BRANCH
     setup_develop $SWIFT_DIR
     if is_apache_enabled_service swift; then
@@ -620,13 +620,13 @@
     fi
 }
 
-function install_swiftclient() {
+function install_swiftclient {
     git_clone $SWIFTCLIENT_REPO $SWIFTCLIENT_DIR $SWIFTCLIENT_BRANCH
     setup_develop $SWIFTCLIENT_DIR
 }
 
 # start_swift() - Start running processes, including screen
-function start_swift() {
+function start_swift {
     # (re)start rsyslog
     restart_service rsyslog
     # (re)start memcached to make sure we have a clean memcache.
@@ -674,7 +674,7 @@
 }
 
 # stop_swift() - Stop running processes (non-screen)
-function stop_swift() {
+function stop_swift {
 
     if is_apache_enabled_service swift; then
         swift-init --run-dir=${SWIFT_DATA_DIR}/run rest stop && return 0
diff --git a/lib/tempest b/lib/tempest
index 410c80c..16f8744 100644
--- a/lib/tempest
+++ b/lib/tempest
@@ -70,7 +70,7 @@
 # ---------
 
 # configure_tempest() - Set config files, create data dirs, etc
-function configure_tempest() {
+function configure_tempest {
     setup_develop $TEMPEST_DIR
     local image_lines
     local images
@@ -359,12 +359,12 @@
 }
 
 # install_tempest() - Collect source and prepare
-function install_tempest() {
+function install_tempest {
     git_clone $TEMPEST_REPO $TEMPEST_DIR $TEMPEST_BRANCH
 }
 
 # init_tempest() - Initialize ec2 images
-function init_tempest() {
+function init_tempest {
     local base_image_name=cirros-0.3.1-x86_64
     # /opt/stack/devstack/files/images/cirros-0.3.1-x86_64-uec
     local image_dir="$FILES/images/${base_image_name}-uec"
diff --git a/lib/template b/lib/template
index b8e7c4d..efe5826 100644
--- a/lib/template
+++ b/lib/template
@@ -45,7 +45,7 @@
 
 # cleanup_XXXX() - Remove residual data files, anything left over from previous
 # runs that a clean run would need to clean up
-function cleanup_XXXX() {
+function cleanup_XXXX {
     # kill instances (nova)
     # delete image files (glance)
     # This function intentionally left blank
@@ -53,7 +53,7 @@
 }
 
 # configure_XXXX() - Set config files, create data dirs, etc
-function configure_XXXX() {
+function configure_XXXX {
     # sudo python setup.py deploy
     # iniset $XXXX_CONF ...
     # This function intentionally left blank
@@ -61,26 +61,26 @@
 }
 
 # init_XXXX() - Initialize databases, etc.
-function init_XXXX() {
+function init_XXXX {
     # clean up from previous (possibly aborted) runs
     # create required data files
     :
 }
 
 # install_XXXX() - Collect source and prepare
-function install_XXXX() {
+function install_XXXX {
     # git clone xxx
     :
 }
 
 # start_XXXX() - Start running processes, including screen
-function start_XXXX() {
+function start_XXXX {
     # screen_it XXXX "cd $XXXX_DIR && $XXXX_DIR/bin/XXXX-bin"
     :
 }
 
 # stop_XXXX() - Stop running processes (non-screen)
-function stop_XXXX() {
+function stop_XXXX {
     # FIXME(dtroyer): stop only our screen screen window?
     :
 }
diff --git a/lib/tls b/lib/tls
index 6134fa1..072059d 100644
--- a/lib/tls
+++ b/lib/tls
@@ -61,7 +61,7 @@
 OPENSSL=${OPENSSL:-/usr/bin/openssl}
 
 # Do primary CA configuration
-function configure_CA() {
+function configure_CA {
     # build common config file
 
     # Verify ``TLS_IP`` is good
@@ -73,7 +73,7 @@
 
 # Creates a new CA directory structure
 # create_CA_base ca-dir
-function create_CA_base() {
+function create_CA_base {
     local ca_dir=$1
 
     if [[ -d $ca_dir ]]; then
@@ -92,7 +92,7 @@
 
 # Create a new CA configuration file
 # create_CA_config ca-dir common-name
-function create_CA_config() {
+function create_CA_config {
     local ca_dir=$1
     local common_name=$2
 
@@ -145,7 +145,7 @@
 
 # Create a new signing configuration file
 # create_signing_config ca-dir
-function create_signing_config() {
+function create_signing_config {
     local ca_dir=$1
 
     echo "
@@ -225,7 +225,7 @@
 
 # make_cert creates and signs a new certificate with the given commonName and CA
 # make_cert ca-dir cert-name "common-name" ["alt-name" ...]
-function make_cert() {
+function make_cert {
     local ca_dir=$1
     local cert_name=$2
     local common_name=$3
@@ -261,7 +261,7 @@
 
 # Make an intermediate CA to sign everything else
 # make_int_CA ca-dir signing-ca-dir
-function make_int_CA() {
+function make_int_CA {
     local ca_dir=$1
     local signing_ca_dir=$2
 
@@ -291,7 +291,7 @@
 
 # Make a root CA to sign other CAs
 # make_root_CA ca-dir
-function make_root_CA() {
+function make_root_CA {
     local ca_dir=$1
 
     # Create the root CA
@@ -319,7 +319,7 @@
 # is a short-circuit boolean, i.e it returns on the first match.
 #
 # Uses global ``SSL_ENABLED_SERVICES``
-function is_ssl_enabled_service() {
+function is_ssl_enabled_service {
     services=$@
     for service in ${services}; do
         [[ ,${SSL_ENABLED_SERVICES}, =~ ,${service}, ]] && return 0
@@ -337,7 +337,7 @@
 # example for keystone this would be KEYSTONE_SSL_CERT, KEYSTONE_SSL_KEY and
 # KEYSTONE_SSL_CA. If it does not find these certificates the program will
 # quit.
-function ensure_certificates() {
+function ensure_certificates {
     local service=$1
 
     local cert_var="${service}_SSL_CERT"
@@ -362,7 +362,7 @@
 
 # Starts the TLS proxy for the given IP/ports
 # start_tls_proxy front-host front-port back-host back-port
-function start_tls_proxy() {
+function start_tls_proxy {
     local f_host=$1
     local f_port=$2
     local b_host=$3
diff --git a/lib/trove b/lib/trove
index 6834149..75b990f 100644
--- a/lib/trove
+++ b/lib/trove
@@ -53,7 +53,7 @@
 }
 
 # setup_trove_logging() - Adds logging configuration to conf files
-function setup_trove_logging() {
+function setup_trove_logging {
     local CONF=$1
     iniset $CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL
     iniset $CONF DEFAULT use_syslog $SYSLOG
@@ -69,7 +69,7 @@
 # ------------------------------------------------------------------
 # service              trove     admin        # if enabled
 
-create_trove_accounts() {
+function create_trove_accounts {
     # Trove
     SERVICE_TENANT=$(openstack project list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
     SERVICE_ROLE=$(openstack role list | awk "/ admin / { print \$2 }")
@@ -106,19 +106,19 @@
 
 # cleanup_trove() - Remove residual data files, anything left over from previous
 # runs that a clean run would need to clean up
-function cleanup_trove() {
+function cleanup_trove {
     #Clean up dirs
     rm -fr $TROVE_AUTH_CACHE_DIR/*
     rm -fr $TROVE_CONF_DIR/*
 }
 
 # configure_troveclient() - Set config files, create data dirs, etc
-function configure_troveclient() {
+function configure_troveclient {
     setup_develop $TROVECLIENT_DIR
 }
 
 # configure_trove() - Set config files, create data dirs, etc
-function configure_trove() {
+function configure_trove {
     setup_develop $TROVE_DIR
 
     # Create the trove conf dir and cache dirs if they don't exist
@@ -182,17 +182,17 @@
 }
 
 # install_troveclient() - Collect source and prepare
-function install_troveclient() {
+function install_troveclient {
     git_clone $TROVECLIENT_REPO $TROVECLIENT_DIR $TROVECLIENT_BRANCH
 }
 
 # install_trove() - Collect source and prepare
-function install_trove() {
+function install_trove {
     git_clone $TROVE_REPO $TROVE_DIR $TROVE_BRANCH
 }
 
 # init_trove() - Initializes Trove Database as a Service
-function init_trove() {
+function init_trove {
     #(Re)Create trove db
     recreate_database trove utf8
 
@@ -201,14 +201,14 @@
 }
 
 # start_trove() - Start running processes, including screen
-function start_trove() {
+function start_trove {
     screen_it tr-api "cd $TROVE_DIR; $TROVE_BIN_DIR/trove-api --config-file=$TROVE_CONF_DIR/trove.conf --debug 2>&1"
     screen_it tr-tmgr "cd $TROVE_DIR; $TROVE_BIN_DIR/trove-taskmanager --config-file=$TROVE_CONF_DIR/trove-taskmanager.conf --debug 2>&1"
     screen_it tr-cond "cd $TROVE_DIR; $TROVE_BIN_DIR/trove-conductor --config-file=$TROVE_CONF_DIR/trove-conductor.conf --debug 2>&1"
 }
 
 # stop_trove() - Stop running processes
-function stop_trove() {
+function stop_trove {
     # Kill the trove screen windows
     for serv in tr-api tr-tmgr tr-cond; do
         screen_stop $serv
diff --git a/stack.sh b/stack.sh
index ac89e52..a702679 100755
--- a/stack.sh
+++ b/stack.sh
@@ -464,7 +464,7 @@
 # -----------------
 
 # Draw a spinner so the user knows something is happening
-function spinner() {
+function spinner {
     local delay=0.75
     local spinstr='/-\|'
     printf "..." >&3
@@ -479,7 +479,7 @@
 
 # Echo text to the log file, summary log file and stdout
 # echo_summary "something to say"
-function echo_summary() {
+function echo_summary {
     if [[ -t 3 && "$VERBOSE" != "True" ]]; then
         kill >/dev/null 2>&1 $LAST_SPINNER_PID
         if [ ! -z "$LAST_SPINNER_PID" ]; then
@@ -495,7 +495,7 @@
 
 # Echo text only to stdout, no log files
 # echo_nolog "something not for the logs"
-function echo_nolog() {
+function echo_nolog {
     echo $@ >&3
 }
 
diff --git a/tests/functions.sh b/tests/functions.sh
index 06a4134..874d022 100755
--- a/tests/functions.sh
+++ b/tests/functions.sh
@@ -42,7 +42,7 @@
 
 echo "Testing enable_service()"
 
-function test_enable_service() {
+function test_enable_service {
     local start="$1"
     local add="$2"
     local finish="$3"
@@ -68,7 +68,7 @@
 test_enable_service 'a,b,-c' c 'a,b'
 test_enable_service 'a,b,c' -c 'a,b'
 
-function test_disable_service() {
+function test_disable_service {
     local start="$1"
     local del="$2"
     local finish="$3"
@@ -109,7 +109,7 @@
 echo "Testing disable_negated_services()"
 
 
-function test_disable_negated_services() {
+function test_disable_negated_services {
     local start="$1"
     local finish="$2"
 
diff --git a/tests/test_config.sh b/tests/test_config.sh
index 39603c9..5700f8d 100755
--- a/tests/test_config.sh
+++ b/tests/test_config.sh
@@ -12,7 +12,7 @@
 
 # check_result() tests and reports the result values
 # check_result "actual" "expected"
-function check_result() {
+function check_result {
     local actual=$1
     local expected=$2
     if [[ "$actual" == "$expected" ]]; then
@@ -26,7 +26,7 @@
 type=new
 multi = foo2"
 
-function create_test1c() {
+function create_test1c {
     cat >test1c.conf <<EOF
 [eee]
 # original comment
@@ -34,7 +34,7 @@
 EOF
 }
 
-function create_test2a() {
+function create_test2a {
     cat >test2a.conf <<EOF
 [ddd]
 # original comment
diff --git a/tools/bash8.py b/tools/bash8.py
index f89b241..3abf87b 100755
--- a/tools/bash8.py
+++ b/tools/bash8.py
@@ -102,6 +102,21 @@
         if (len(m.group('indent')) % 4) != 0:
             print_error('E003: Indent not multiple of 4', line)
 
+def check_function_decl(line):
+    failed = False
+    if line.startswith("function"):
+        if not re.search('^function [\w-]* \{$', line):
+            failed = True
+    else:
+        # catch the case without "function", e.g.
+        # things like '^foo() {'
+        if re.search('^\s*?\(\)\s*?\{', line):
+            failed = True
+
+    if failed:
+        print_error('E020: Function declaration not in format '
+                    ' "^function name {$"', line)
+
 
 def starts_multiline(line):
     m = re.search("[^<]<<\s*(?P<token>\w+)", line)
@@ -169,6 +184,7 @@
         check_indents(logical_line)
         check_for_do(logical_line)
         check_if_then(logical_line)
+        check_function_decl(logical_line)
 
         prev_line = logical_line
         prev_lineno = fileinput.filelineno()
diff --git a/tools/build_pxe_env.sh b/tools/build_pxe_env.sh
index e6f98b4..50d91d0 100755
--- a/tools/build_pxe_env.sh
+++ b/tools/build_pxe_env.sh
@@ -17,7 +17,7 @@
 PROGDIR=`dirname $0`
 
 # Clean up any resources that may be in use
-cleanup() {
+function cleanup {
     set +o errexit
 
     # Mop up temporary files
diff --git a/tools/build_ramdisk.sh b/tools/build_ramdisk.sh
index 7372555..50ba8ef 100755
--- a/tools/build_ramdisk.sh
+++ b/tools/build_ramdisk.sh
@@ -14,7 +14,7 @@
 fi
 
 # Clean up any resources that may be in use
-cleanup() {
+function cleanup {
     set +o errexit
 
     # Mop up temporary files
@@ -87,7 +87,7 @@
 # Finds and returns full device path for the next available NBD device.
 # Exits script if error connecting or none free.
 # map_nbd image
-function map_nbd() {
+function map_nbd {
     for i in `seq 0 15`; do
         if [ ! -e /sys/block/nbd$i/pid ]; then
             NBD=/dev/nbd$i
diff --git a/tools/build_uec_ramdisk.sh b/tools/build_uec_ramdisk.sh
index 3ab5daf..5f3acc5 100755
--- a/tools/build_uec_ramdisk.sh
+++ b/tools/build_uec_ramdisk.sh
@@ -20,7 +20,7 @@
 fi
 
 # Clean up resources that may be in use
-cleanup() {
+function cleanup {
     set +o errexit
 
     if [ -n "$MNT_DIR" ]; then
diff --git a/tools/build_usb_boot.sh b/tools/build_usb_boot.sh
index 8566229..c97e0a1 100755
--- a/tools/build_usb_boot.sh
+++ b/tools/build_usb_boot.sh
@@ -13,7 +13,7 @@
 PXEDIR=${PXEDIR:-/opt/ramstack/pxe}
 
 # Clean up any resources that may be in use
-cleanup() {
+function cleanup {
     set +o errexit
 
     # Mop up temporary files
diff --git a/tools/copy_dev_environment_to_uec.sh b/tools/copy_dev_environment_to_uec.sh
index 3fd4423..94a4926 100755
--- a/tools/copy_dev_environment_to_uec.sh
+++ b/tools/copy_dev_environment_to_uec.sh
@@ -22,7 +22,7 @@
 source ./stackrc
 
 # Echo usage
-usage() {
+function usage {
     echo "Add stack user and keys"
     echo ""
     echo "Usage: $0 [full path to raw uec base image]"
diff --git a/tools/create_userrc.sh b/tools/create_userrc.sh
index cd5a1c9..47da334 100755
--- a/tools/create_userrc.sh
+++ b/tools/create_userrc.sh
@@ -11,8 +11,7 @@
 
 ACCOUNT_DIR=./accrc
 
-display_help()
-{
+function display_help {
 cat <<EOF
 
 usage: $0 <options..>
@@ -151,7 +150,7 @@
 fi
 
 
-function add_entry(){
+function add_entry {
     local user_id=$1
     local user_name=$2
     local tenant_id=$3
@@ -213,7 +212,7 @@
 }
 
 #admin users expected
-function create_or_get_tenant(){
+function create_or_get_tenant {
     local tenant_name=$1
     local tenant_id=`keystone tenant-list | awk '/\|[[:space:]]*'"$tenant_name"'[[:space:]]*\|.*\|/ {print $2}'`
     if [ -n "$tenant_id" ]; then
@@ -223,7 +222,7 @@
     fi
 }
 
-function create_or_get_role(){
+function create_or_get_role {
     local role_name=$1
     local role_id=`keystone role-list| awk '/\|[[:space:]]*'"$role_name"'[[:space:]]*\|/ {print $2}'`
     if [ -n "$role_id" ]; then
@@ -234,7 +233,7 @@
 }
 
 # Provides empty string when the user does not exists
-function get_user_id(){
+function get_user_id {
     local user_name=$1
     keystone user-list | awk '/^\|[^|]*\|[[:space:]]*'"$user_name"'[[:space:]]*\|.*\|/ {print $2}'
 }
diff --git a/tools/fixup_stuff.sh b/tools/fixup_stuff.sh
index 47b0cd1..7833278 100755
--- a/tools/fixup_stuff.sh
+++ b/tools/fixup_stuff.sh
@@ -40,7 +40,7 @@
 # ---------------
 
 # get_package_path python-package    # in import notation
-function get_package_path() {
+function get_package_path {
     local package=$1
     echo $(python -c "import os; import $package; print(os.path.split(os.path.realpath($package.__file__))[0])")
 }
diff --git a/tools/get_uec_image.sh b/tools/get_uec_image.sh
index da13f4b..225742c 100755
--- a/tools/get_uec_image.sh
+++ b/tools/get_uec_image.sh
@@ -18,7 +18,7 @@
 set -o errexit
 set -o xtrace
 
-usage() {
+function usage {
     echo "Usage: $0 - Download and prepare Ubuntu UEC images"
     echo ""
     echo "$0 [-r rootsize] release imagefile [kernel]"
@@ -31,7 +31,7 @@
 }
 
 # Clean up any resources that may be in use
-cleanup() {
+function cleanup {
     set +o errexit
 
     # Mop up temporary files
diff --git a/tools/info.sh b/tools/info.sh
index 1e521b9..a8f9544 100755
--- a/tools/info.sh
+++ b/tools/info.sh
@@ -61,7 +61,7 @@
 # -----
 
 # git_report <dir>
-function git_report() {
+function git_report {
     local dir=$1
     local proj ref branch head
     if [[ -d $dir/.git ]]; then
diff --git a/tools/install_openvpn.sh b/tools/install_openvpn.sh
index 2f52aa1..9a4f036 100755
--- a/tools/install_openvpn.sh
+++ b/tools/install_openvpn.sh
@@ -22,7 +22,7 @@
 fi
 
 # Do some IP manipulation
-function cidr2netmask() {
+function cidr2netmask {
     set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 << (8 - ($1 % 8))) & 255 )) 0 0 0
     if [[ $1 -gt 1 ]]; then
         shift $1
@@ -50,7 +50,7 @@
 VPN_DIR=/etc/openvpn
 CA_DIR=$VPN_DIR/easy-rsa
 
-usage() {
+function usage {
     echo "$0 - OpenVPN install and certificate generation"
     echo ""
     echo "$0 --client name"
@@ -102,7 +102,7 @@
     openvpn --genkey --secret $CA_DIR/keys/ta.key  ## Build a TLS key
 fi
 
-do_server() {
+function do_server {
     NAME=$1
     # Generate server certificate
     $CA_DIR/pkitool --server $NAME
@@ -162,7 +162,7 @@
     /etc/init.d/openvpn restart
 }
 
-do_client() {
+function do_client {
     NAME=$1
     # Generate a client certificate
     $CA_DIR/pkitool $NAME
diff --git a/tools/install_pip.sh b/tools/install_pip.sh
index d714d33..9fa161e 100755
--- a/tools/install_pip.sh
+++ b/tools/install_pip.sh
@@ -50,7 +50,7 @@
 GetDistro
 echo "Distro: $DISTRO"
 
-function get_versions() {
+function get_versions {
     PIP=$(which pip 2>/dev/null || which pip-python 2>/dev/null || true)
     if [[ -n $PIP ]]; then
         PIP_VERSION=$($PIP --version | awk '{ print $2}')
@@ -61,7 +61,7 @@
 }
 
 
-function install_get_pip() {
+function install_get_pip {
     if [[ ! -r $FILES/get-pip.py ]]; then
         (cd $FILES; \
             curl -O $PIP_GET_PIP_URL; \
@@ -70,7 +70,7 @@
     sudo -E python $FILES/get-pip.py
 }
 
-function install_pip_tarball() {
+function install_pip_tarball {
     (cd $FILES; \
         curl -O $PIP_TAR_URL; \
         tar xvfz pip-$INSTALL_PIP_VERSION.tar.gz 1>/dev/null; \
diff --git a/tools/jenkins/build_configuration.sh b/tools/jenkins/build_configuration.sh
index e295ef2..64ee159 100755
--- a/tools/jenkins/build_configuration.sh
+++ b/tools/jenkins/build_configuration.sh
@@ -5,7 +5,7 @@
 ADAPTER=$3
 RC=$4
 
-function usage() {
+function usage {
     echo "Usage: $0 -  Build a configuration"
     echo ""
     echo "$0 [EXECUTOR_NUMBER] [CONFIGURATION] [ADAPTER] [RC (optional)]"
diff --git a/tools/jenkins/configurations/kvm.sh b/tools/jenkins/configurations/kvm.sh
index d9a160a..6927fd7 100755
--- a/tools/jenkins/configurations/kvm.sh
+++ b/tools/jenkins/configurations/kvm.sh
@@ -9,7 +9,7 @@
 ADAPTER=$3
 RC=$4
 
-function usage() {
+function usage {
     echo "Usage: $0 - Build a test configuration"
     echo ""
     echo "$0 [EXECUTOR_NUMBER] [CONFIGURATION] [ADAPTER] [RC (optional)]"
diff --git a/tools/jenkins/configurations/xs.sh b/tools/jenkins/configurations/xs.sh
index 864f949..7b671e9 100755
--- a/tools/jenkins/configurations/xs.sh
+++ b/tools/jenkins/configurations/xs.sh
@@ -8,7 +8,7 @@
 ADAPTER=$3
 RC=$4
 
-function usage() {
+function usage {
     echo "Usage: $0 - Build a test configuration"
     echo ""
     echo "$0 [EXECUTOR_NUMBER] [CONFIGURATION] [ADAPTER] [RC (optional)]"
diff --git a/tools/jenkins/run_test.sh b/tools/jenkins/run_test.sh
index 4649563..d2b8284 100755
--- a/tools/jenkins/run_test.sh
+++ b/tools/jenkins/run_test.sh
@@ -4,7 +4,7 @@
 ADAPTER=$2
 RC=$3
 
-function usage() {
+function usage {
     echo "Usage: $0 - Run a test"
     echo ""
     echo "$0 [EXECUTOR_NUMBER] [ADAPTER] [RC (optional)]"
diff --git a/tools/warm_apts_for_uec.sh b/tools/warm_apts_for_uec.sh
index 3c15f52..c57fc2e 100755
--- a/tools/warm_apts_for_uec.sh
+++ b/tools/warm_apts_for_uec.sh
@@ -16,7 +16,7 @@
 cd $TOP_DIR
 
 # Echo usage
-usage() {
+function usage {
     echo "Cache OpenStack dependencies on a uec image to speed up performance."
     echo ""
     echo "Usage: $0 [full path to raw uec base image]"
diff --git a/tools/xen/build_xva.sh b/tools/xen/build_xva.sh
index fbbfd6f..cc3cbe1 100755
--- a/tools/xen/build_xva.sh
+++ b/tools/xen/build_xva.sh
@@ -42,7 +42,7 @@
 #
 GUEST_NAME="$1"
 
-function _print_interface_config() {
+function _print_interface_config {
     local device_nr
     local ip_address
     local netmask
@@ -68,7 +68,7 @@
     echo "  post-up ethtool -K $device tx off"
 }
 
-function print_interfaces_config() {
+function print_interfaces_config {
     echo "auto lo"
     echo "iface lo inet loopback"
 
diff --git a/tools/xen/install_os_domU.sh b/tools/xen/install_os_domU.sh
index 7b59bae..a4b3e06 100755
--- a/tools/xen/install_os_domU.sh
+++ b/tools/xen/install_os_domU.sh
@@ -166,7 +166,7 @@
 SNAME_TEMPLATE="jeos_snapshot_for_devstack"
 SNAME_FIRST_BOOT="before_first_boot"
 
-function wait_for_VM_to_halt() {
+function wait_for_VM_to_halt {
     set +x
     echo "Waiting for the VM to halt.  Progress in-VM can be checked with vncviewer:"
     mgmt_ip=$(echo $XENAPI_CONNECTION_URL | tr -d -c '1234567890.')
@@ -318,7 +318,7 @@
 #
 xe vm-start vm="$GUEST_NAME"
 
-function ssh_no_check() {
+function ssh_no_check {
     ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "$@"
 }
 
@@ -349,7 +349,7 @@
 xenstore-write /local/domain/$DOMID/authorized_keys/$DOMZERO_USER "$(cat /root/dom0key.pub)"
 xenstore-chmod -u /local/domain/$DOMID/authorized_keys/$DOMZERO_USER r$DOMID
 
-function run_on_appliance() {
+function run_on_appliance {
     ssh \
         -i /root/dom0key \
         -o UserKnownHostsFile=/dev/null \
diff --git a/tools/xen/prepare_guest.sh b/tools/xen/prepare_guest.sh
index 0946126..440774e 100755
--- a/tools/xen/prepare_guest.sh
+++ b/tools/xen/prepare_guest.sh
@@ -21,7 +21,7 @@
 DOMZERO_USER="$4"
 
 
-function setup_domzero_user() {
+function setup_domzero_user {
     local username
 
     username="$1"
