Merge "XenAPI: Add another plugin directory"
diff --git a/doc/source/guides/neutron.rst b/doc/source/guides/neutron.rst
index 59b7a9d..dc2fc71 100644
--- a/doc/source/guides/neutron.rst
+++ b/doc/source/guides/neutron.rst
@@ -23,7 +23,7 @@
 
 eth1 is manually configured at boot to not have an IP address.
 Consult your operating system documentation for the appropriate
-technique. For Ubuntu, the contents of `/etc/networking/interfaces`
+technique. For Ubuntu, the contents of `/etc/network/interfaces`
 contains:
 
 ::
diff --git a/functions-common b/functions-common
index 24507fe..686b508 100644
--- a/functions-common
+++ b/functions-common
@@ -831,15 +831,14 @@
     fi
     # Gets user id
     local user_id=$(
-        # Gets user id
-        $os_cmd user show $1 $domain -f value -c id 2>/dev/null ||
-        # Creates new user
+        # Creates new user with --or-show
         $os_cmd user create \
             $1 \
             --password "$2" \
             --project $3 \
             $email \
             $domain \
+            --or-show \
             -f value -c id
     )
     echo $user_id
@@ -856,10 +855,8 @@
         os_cmd="$os_cmd --os-url=$KEYSTONE_SERVICE_URI/v3 --os-identity-api-version=3"
     fi
     local project_id=$(
-        # Gets project id
-        $os_cmd project show $1 $domain -f value -c id 2>/dev/null ||
-        # Creates new project if not exists
-        $os_cmd project create $1 $domain -f value -c id
+        # Creates new project with --or-show
+        $os_cmd project create $1 $domain --or-show -f value -c id
     )
     echo $project_id
 }
@@ -868,10 +865,8 @@
 # Usage: get_or_create_role <name>
 function get_or_create_role {
     local role_id=$(
-        # Gets role id
-        openstack role show $1 -f value -c id 2>/dev/null ||
-        # Creates role if not exists
-        openstack role create $1 -f value -c id
+        # Creates role with --or-show
+        openstack role create $1 --or-show -f value -c id
     )
     echo $role_id
 }
diff --git a/lib/heat b/lib/heat
index 3ed9a5f..cdbd80c 100644
--- a/lib/heat
+++ b/lib/heat
@@ -251,17 +251,6 @@
     get_or_create_role "heat_stack_user"
 
     if [[ $HEAT_DEFERRED_AUTH == trusts ]]; then
-
-        # heat_stack_owner role is given to users who create Heat stacks,
-        # it's the default role used by heat to delegate to the heat service
-        # user (for performing deferred operations via trusts), see heat.conf
-        local heat_owner_role=$(get_or_create_role "heat_stack_owner")
-
-        # Give the role to the demo and admin users so they can create stacks
-        # in either of the projects created by devstack
-        get_or_add_user_role $heat_owner_role demo demo
-        get_or_add_user_role $heat_owner_role admin demo
-        get_or_add_user_role $heat_owner_role admin admin
         iniset $HEAT_CONF DEFAULT deferred_auth_method trusts
     fi
 
diff --git a/lib/oslo b/lib/oslo
index 1fff1f5..79d63ba 100644
--- a/lib/oslo
+++ b/lib/oslo
@@ -36,6 +36,7 @@
 GITDIR["pycadf"]=$DEST/pycadf
 GITDIR["stevedore"]=$DEST/stevedore
 GITDIR["taskflow"]=$DEST/taskflow
+GITDIR["tooz"]=$DEST/tooz
 
 # Support entry points installation of console scripts
 OSLO_BIN_DIR=$(get_python_exec_prefix)
@@ -69,6 +70,7 @@
     _do_install_oslo_lib "pycadf"
     _do_install_oslo_lib "stevedore"
     _do_install_oslo_lib "taskflow"
+    _do_install_oslo_lib "tooz"
 }
 
 # Restore xtrace
diff --git a/lib/tempest b/lib/tempest
index 46c9e26..a606944 100644
--- a/lib/tempest
+++ b/lib/tempest
@@ -63,6 +63,7 @@
 
 
 BOTO_MATERIALS_PATH="$FILES/images/s3-materials/cirros-${CIRROS_VERSION}"
+BOTO_CONF=$TEMPEST_DIR/boto.cfg
 
 # Cinder/Volume variables
 TEMPEST_VOLUME_DRIVER=${TEMPEST_VOLUME_DRIVER:-default}
@@ -247,7 +248,7 @@
         fi
     fi
 
-    iniset $TEMPEST_CONF DEFAULT use_syslog $SYSLOG
+    iniset $TEMPEST_CONFIG DEFAULT use_syslog $SYSLOG
     # Oslo
     iniset $TEMPEST_CONFIG DEFAULT lock_path $TEMPEST_STATE_PATH
     mkdir -p $TEMPEST_STATE_PATH
@@ -389,8 +390,8 @@
         iniset $TEMPEST_CONFIG volume vendor_name "$TEMPEST_VOLUME_VENDOR"
     fi
     if [ $TEMPEST_VOLUME_DRIVER != "default" -o \
-        $TEMPEST_STORAGE_PROTOCOL != $TEMPEST_DEFAULT_STORAGE_PROTOCOL ]; then
-        iniset $TEMPEST_CONFIG volume storage_protocol $TEMPEST_STORAGE_PROTOCOL
+        "$TEMPEST_STORAGE_PROTOCOL" != "$TEMPEST_DEFAULT_STORAGE_PROTOCOL" ]; then
+        iniset $TEMPEST_CONFIG volume storage_protocol "$TEMPEST_STORAGE_PROTOCOL"
     fi
 
     # Dashboard
@@ -424,6 +425,12 @@
         fi
     done
 
+    if is_ssl_enabled_service "keystone" || is_service_enabled tls-proxy; then
+        # Use the BOTO_CONFIG environment variable to point to this file
+        iniset $BOTO_CONF Boto ca_certificates_file $SSL_BUNDLE_FILE
+        sudo chown $STACK_USER $BOTO_CONF
+    fi
+
     # Restore IFS
     IFS=$ifs
 }
diff --git a/stackrc b/stackrc
index ac79889..81b6067 100644
--- a/stackrc
+++ b/stackrc
@@ -346,6 +346,10 @@
 GITREPO["taskflow"]=${TASKFLOW_REPO:-${GIT_BASE}/openstack/taskflow.git}
 GITBRANCH["taskflow"]=${TASKFLOW_BRANCH:-master}
 
+# tooz plugin manager
+GITREPO["tooz"]=${TOOZ_REPO:-${GIT_BASE}/openstack/tooz.git}
+GITBRANCH["tooz"]=${TOOZ_BRANCH:-master}
+
 # pbr drives the setuptools configs
 GITREPO["pbr"]=${PBR_REPO:-${GIT_BASE}/openstack-dev/pbr.git}
 GITBRANCH["pbr"]=${PBR_BRANCH:-master}
diff --git a/tests/test_libs_from_pypi.sh b/tests/test_libs_from_pypi.sh
index 1b576d8..7e96bae 100755
--- a/tests/test_libs_from_pypi.sh
+++ b/tests/test_libs_from_pypi.sh
@@ -27,7 +27,7 @@
     fi
 done
 
-ALL_LIBS="python-novaclient oslo.config pbr oslo.context python-troveclient python-keystoneclient taskflow oslo.middleware pycadf python-glanceclient python-ironicclient tempest-lib oslo.messaging oslo.log cliff python-heatclient stevedore python-cinderclient glance_store oslo.concurrency oslo.db oslo.vmware keystonemiddleware oslo.serialization python-saharaclient django_openstack_auth python-openstackclient oslo.rootwrap oslo.i18n python-ceilometerclient oslo.utils python-swiftclient python-neutronclient"
+ALL_LIBS="python-novaclient oslo.config pbr oslo.context python-troveclient python-keystoneclient taskflow oslo.middleware pycadf python-glanceclient python-ironicclient tempest-lib oslo.messaging oslo.log cliff python-heatclient stevedore python-cinderclient glance_store oslo.concurrency oslo.db oslo.vmware keystonemiddleware oslo.serialization python-saharaclient django_openstack_auth python-openstackclient oslo.rootwrap oslo.i18n python-ceilometerclient oslo.utils python-swiftclient python-neutronclient tooz"
 
 # Generate the above list with
 # echo ${!GITREPO[@]}