Merge "Support MultiStrOpt options in configuration file."
diff --git a/files/apts/ceilometer-collector b/files/apts/ceilometer-collector
index c67ade3..71007ba 100644
--- a/files/apts/ceilometer-collector
+++ b/files/apts/ceilometer-collector
@@ -1,2 +1,6 @@
 python-pymongo
 mongodb-server
+libnspr4-dev
+pkg-config
+libxml2-dev
+libxslt-dev
\ No newline at end of file
diff --git a/files/apts/general b/files/apts/general
index 0264066..a1fcf3c 100644
--- a/files/apts/general
+++ b/files/apts/general
@@ -9,6 +9,7 @@
 git
 lsof # useful when debugging
 openssh-server
+openssl
 vim-nox
 locate # useful when debugging
 python-virtualenv
diff --git a/files/apts/n-vol b/files/apts/n-vol
deleted file mode 100644
index 5db06ea..0000000
--- a/files/apts/n-vol
+++ /dev/null
@@ -1,2 +0,0 @@
-tgt
-lvm2
diff --git a/files/keystone_data.sh b/files/keystone_data.sh
index 4c76c9b..a6fab09 100755
--- a/files/keystone_data.sh
+++ b/files/keystone_data.sh
@@ -167,9 +167,9 @@
         keystone endpoint-create \
             --region RegionOne \
             --service_id $CEILOMETER_SERVICE \
-            --publicurl "http://$SERVICE_HOST:8777/" \
-            --adminurl "http://$SERVICE_HOST:8777/" \
-            --internalurl "http://$SERVICE_HOST:8777/"
+            --publicurl "http://$SERVICE_HOST:8777" \
+            --adminurl "http://$SERVICE_HOST:8777" \
+            --internalurl "http://$SERVICE_HOST:8777"
     fi
 fi
 
diff --git a/files/ldap/openstack.ldif b/files/ldap/openstack.ldif
index 00c9861..2b76372 100644
--- a/files/ldap/openstack.ldif
+++ b/files/ldap/openstack.ldif
@@ -20,6 +20,10 @@
 objectClass: organizationalUnit
 ou: Projects
 
+dn: ou=Domains,dc=openstack,dc=org
+objectClass: organizationalUnit
+ou: Domains
+
 dn: cn=9fe2ff9ee4384b1894a90878d3e92bab,ou=Roles,dc=openstack,dc=org
 objectClass: organizationalRole
 ou: _member_
diff --git a/files/rpms-suse/general b/files/rpms-suse/general
index 8ed74ec..b8ceeb7 100644
--- a/files/rpms-suse/general
+++ b/files/rpms-suse/general
@@ -4,6 +4,7 @@
 git-core
 iputils
 openssh
+openssl
 psmisc
 python-cmd2 # dist:opensuse-12.3
 python-netaddr
diff --git a/files/rpms-suse/ldap b/files/rpms-suse/ldap
new file mode 100644
index 0000000..46d26f0
--- /dev/null
+++ b/files/rpms-suse/ldap
@@ -0,0 +1,3 @@
+openldap2
+openldap2-client
+python-ldap
diff --git a/files/rpms-suse/n-spice b/files/rpms-suse/n-spice
new file mode 100644
index 0000000..c8722b9
--- /dev/null
+++ b/files/rpms-suse/n-spice
@@ -0,0 +1 @@
+python-numpy
diff --git a/files/rpms-suse/n-vol b/files/rpms-suse/n-vol
deleted file mode 100644
index e5b4727..0000000
--- a/files/rpms-suse/n-vol
+++ /dev/null
@@ -1,2 +0,0 @@
-lvm2
-tgt
diff --git a/files/rpms-suse/nova b/files/rpms-suse/nova
index 0306716..04af7f3 100644
--- a/files/rpms-suse/nova
+++ b/files/rpms-suse/nova
@@ -3,6 +3,7 @@
 dnsmasq
 ebtables
 gawk
+genisoimage # required for config_drive
 iptables
 iputils
 kpartx
@@ -34,6 +35,7 @@
 python-mox
 python-mysql
 python-netaddr
+python-numpy # needed by websockify for spice console
 python-paramiko
 python-python-gflags
 python-sqlalchemy-migrate
diff --git a/files/rpms-suse/ryu b/files/rpms-suse/ryu
index 763fd24..90b43a4 100644
--- a/files/rpms-suse/ryu
+++ b/files/rpms-suse/ryu
@@ -2,4 +2,5 @@
 python-setuptools # instead of python-distribute; dist:sle11sp2
 python-Sphinx
 python-gevent
+python-netifaces
 python-python-gflags
diff --git a/files/rpms/ceilometer-collector b/files/rpms/ceilometer-collector
index c5c855c..d7b7ea8 100644
--- a/files/rpms/ceilometer-collector
+++ b/files/rpms/ceilometer-collector
@@ -1,2 +1,3 @@
+selinux-policy-targeted
 mongodb-server
 pymongo
diff --git a/files/rpms/general b/files/rpms/general
index e4f143d..fc3412b 100644
--- a/files/rpms/general
+++ b/files/rpms/general
@@ -3,6 +3,7 @@
 euca2ools # only for testing client
 git-core
 openssh-server
+openssl
 psmisc
 pylint
 python-netaddr
diff --git a/files/rpms/n-vol b/files/rpms/n-vol
deleted file mode 100644
index df861aa..0000000
--- a/files/rpms/n-vol
+++ /dev/null
@@ -1,2 +0,0 @@
-lvm2
-scsi-target-utils
diff --git a/functions b/functions
index 80d1f61..f5c9421 100644
--- a/functions
+++ b/functions
@@ -271,6 +271,8 @@
             if [[ $? -eq 0 ]]; then
                 os_VENDOR="openSUSE"
             fi
+        elif [[ $os_VENDOR == "openSUSE project" ]]; then
+            os_VENDOR="openSUSE"
         elif [[ $os_VENDOR =~ Red.*Hat ]]; then
             os_VENDOR="Red Hat"
         fi
diff --git a/lib/baremetal b/lib/baremetal
index 2659386..57048a1 100644
--- a/lib/baremetal
+++ b/lib/baremetal
@@ -63,7 +63,7 @@
 
 # sub-driver to use for remote power management
 # - nova.virt.baremetal.fake.FakePowerManager, for manual power control
-# - nova.virt.baremetal.ipmi.Ipmi, for remote IPMI
+# - nova.virt.baremetal.ipmi.IPMI, for remote IPMI
 # - nova.virt.baremetal.tilera_pdu.Pdu, for TilePro hardware
 BM_POWER_MANAGER=${BM_POWER_MANAGER:-nova.virt.baremetal.fake.FakePowerManager}
 
@@ -258,9 +258,10 @@
     nova flavor-create $BM_FLAVOR_NAME $BM_FLAVOR_ID \
             $BM_FLAVOR_RAM $BM_FLAVOR_ROOT_DISK $BM_FLAVOR_CPU
     nova flavor-key $BM_FLAVOR_NAME set \
-            cpu_arch=$BM_FLAVOR_ARCH \
-            deploy_kernel_id=$aki \
-            deploy_ramdisk_id=$ari
+            "cpu_arch"="$BM_FLAVOR_ARCH" \
+            "baremetal:deploy_kernel_id"="$aki" \
+            "baremetal:deploy_ramdisk_id"="$ari"
+
 }
 
 # pull run-time kernel/ramdisk out of disk image and load into glance
diff --git a/lib/ceilometer b/lib/ceilometer
index 8772867..d90694c 100644
--- a/lib/ceilometer
+++ b/lib/ceilometer
@@ -68,7 +68,7 @@
 
     iniset $CEILOMETER_CONF DEFAULT notification_topics 'notifications,glance_notifications'
     iniset $CEILOMETER_CONF DEFAULT verbose True
-    iniset $CEILOMETER_CONF DEFAULT sql_connection $BASE_SQL_CONN/nova?charset=utf8
+    iniset $CEILOMETER_CONF DEFAULT `database_connection_url nova`
 
     # Install the policy file for the API server
     cp $CEILOMETER_DIR/etc/ceilometer/policy.json $CEILOMETER_CONF_DIR
@@ -88,9 +88,20 @@
     iniset $CEILOMETER_CONF keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME
     iniset $CEILOMETER_CONF keystone_authtoken signing_dir $CEILOMETER_AUTH_CACHE_DIR
 
+    configure_mongodb
+
     cleanup_ceilometer
 }
 
+function configure_mongodb() {
+    if is_fedora ; then
+        # ensure smallfiles selected to minimize freespace requirements
+        sudo sed -i '/--smallfiles/!s/OPTIONS=\"/OPTIONS=\"--smallfiles /' /etc/sysconfig/mongod
+
+        restart_service mongod
+    fi
+}
+
 # init_ceilometer() - Initialize etc.
 function init_ceilometer() {
     # Create cache dir
diff --git a/lib/cinder b/lib/cinder
index f487c8e..b3e1904 100644
--- a/lib/cinder
+++ b/lib/cinder
@@ -171,6 +171,7 @@
 
     cp $CINDER_DIR/etc/cinder/cinder.conf.sample $CINDER_CONF
     iniset $CINDER_CONF DEFAULT auth_strategy keystone
+    iniset $CINDER_CONF DEFAULT debug True
     iniset $CINDER_CONF DEFAULT verbose True
     if [ "$CINDER_MULTI_LVM_BACKEND" = "True" ]; then
         iniset $CINDER_CONF DEFAULT enabled_backends lvmdriver-1,lvmdriver-2
@@ -185,9 +186,7 @@
         iniset $CINDER_CONF DEFAULT volume_name_template ${VOLUME_NAME_PREFIX}%s
     fi
     iniset $CINDER_CONF DEFAULT iscsi_helper tgtadm
-    local dburl
-    database_connection_url dburl cinder
-    iniset $CINDER_CONF DEFAULT sql_connection $dburl
+    iniset $CINDER_CONF DEFAULT sql_connection `database_connection_url cinder`
     iniset $CINDER_CONF DEFAULT api_paste_config $CINDER_API_PASTE_INI
     iniset $CINDER_CONF DEFAULT rootwrap_config "$CINDER_CONF_DIR/rootwrap.conf"
     iniset $CINDER_CONF DEFAULT osapi_volume_extension cinder.api.contrib.standard_extensions
diff --git a/lib/databases/mysql b/lib/databases/mysql
index 94aedc6..ec65c36 100644
--- a/lib/databases/mysql
+++ b/lib/databases/mysql
@@ -115,9 +115,8 @@
 }
 
 function database_connection_url_mysql {
-    local output=$1
-    local db=$2
-    eval "$output=$BASE_SQL_CONN/$db?charset=utf8"
+    local db=$1
+    echo "$BASE_SQL_CONN/$db?charset=utf8"
 }
 
 # Restore xtrace
diff --git a/lib/databases/postgresql b/lib/databases/postgresql
index 2c37f49..7d4a6c5 100644
--- a/lib/databases/postgresql
+++ b/lib/databases/postgresql
@@ -70,9 +70,8 @@
 }
 
 function database_connection_url_postgresql {
-    local output=$1
-    local db=$2
-    eval "$output=$BASE_SQL_CONN/$db?client_encoding=utf8"
+    local db=$1
+    echo "$BASE_SQL_CONN/$db?client_encoding=utf8"
 }
 
 # Restore xtrace
diff --git a/lib/glance b/lib/glance
index a6b698f..9ec2112 100644
--- a/lib/glance
+++ b/lib/glance
@@ -81,8 +81,7 @@
     cp $GLANCE_DIR/etc/glance-registry.conf $GLANCE_REGISTRY_CONF
     iniset $GLANCE_REGISTRY_CONF DEFAULT debug True
     inicomment $GLANCE_REGISTRY_CONF DEFAULT log_file
-    local dburl
-    database_connection_url dburl glance
+    local dburl=`database_connection_url glance`
     iniset $GLANCE_REGISTRY_CONF DEFAULT sql_connection $dburl
     iniset $GLANCE_REGISTRY_CONF DEFAULT use_syslog $SYSLOG
     iniset $GLANCE_REGISTRY_CONF paste_deploy flavor keystone
diff --git a/lib/heat b/lib/heat
index 5b8b360..56d6f39 100644
--- a/lib/heat
+++ b/lib/heat
@@ -117,9 +117,7 @@
     iniset $HEAT_ENGINE_CONF DEFAULT heat_metadata_server_url http://$HEAT_API_CFN_HOST:$HEAT_API_CFN_PORT
     iniset $HEAT_ENGINE_CONF DEFAULT heat_waitcondition_server_url http://$HEAT_API_CFN_HOST:$HEAT_API_CFN_PORT/v1/waitcondition
     iniset $HEAT_ENGINE_CONF DEFAULT heat_watch_server_url http://$HEAT_API_CW_HOST:$HEAT_API_CW_PORT
-    local dburl
-    database_connection_url dburl heat
-    iniset $HEAT_ENGINE_CONF DEFAULT sql_connection $dburl
+    iniset $HEAT_ENGINE_CONF DEFAULT sql_connection `database_connection_url heat`
     iniset $HEAT_ENGINE_CONF DEFAULT auth_encryption_key `hexdump -n 16 -v -e '/1 "%02x"' /dev/random`
 
     iniset_rpc_backend heat $HEAT_ENGINE_CONF DEFAULT
diff --git a/lib/keystone b/lib/keystone
index 2580351..16b6d6c 100644
--- a/lib/keystone
+++ b/lib/keystone
@@ -91,8 +91,6 @@
     fi
 
     # Rewrite stock ``keystone.conf``
-    local dburl
-    database_connection_url dburl keystone
 
     if is_service_enabled ldap; then
         #Set all needed ldap values
@@ -123,7 +121,7 @@
 
     iniset $KEYSTONE_CONF DEFAULT admin_token "$SERVICE_TOKEN"
     iniset $KEYSTONE_CONF signing token_format "$KEYSTONE_TOKEN_FORMAT"
-    iniset $KEYSTONE_CONF sql connection $dburl
+    iniset $KEYSTONE_CONF sql connection `database_connection_url keystone`
     iniset $KEYSTONE_CONF ec2 driver "keystone.contrib.ec2.backends.sql.Ec2"
     sed -e "
         /^pipeline.*ec2_extension crud_/s|ec2_extension crud_extension|ec2_extension s3_extension crud_extension|;
diff --git a/lib/ldap b/lib/ldap
index 5cb4534..0a0d197 100644
--- a/lib/ldap
+++ b/lib/ldap
@@ -16,13 +16,11 @@
     echo "os_VENDOR is $os_VENDOR"
     printf "installing"
     if is_ubuntu; then
-        echo "os vendor is Ubuntu"
         LDAP_OLCDB_NUMBER=1
         LDAP_ROOTPW_COMMAND=replace
         sudo DEBIAN_FRONTEND=noninteractive apt-get install slapd ldap-utils
         #automatically starts LDAP on ubuntu so no need to call start_ldap
-    elif is_fedora; then
-        echo "os vendor is Fedora"
+    elif is_fedora || is_suse; then
         LDAP_OLCDB_NUMBER=2
         LDAP_ROOTPW_COMMAND=add
         start_ldap
diff --git a/lib/nova b/lib/nova
index 89dc3f7..13e20f8 100644
--- a/lib/nova
+++ b/lib/nova
@@ -377,12 +377,9 @@
     iniset $NOVA_CONF DEFAULT s3_port "$S3_SERVICE_PORT"
     iniset $NOVA_CONF DEFAULT osapi_compute_extension "nova.api.openstack.compute.contrib.standard_extensions"
     iniset $NOVA_CONF DEFAULT my_ip "$HOST_IP"
-    local dburl
-    database_connection_url dburl nova
-    iniset $NOVA_CONF DEFAULT sql_connection "$dburl"
+    iniset $NOVA_CONF DEFAULT sql_connection `database_connection_url nova`
     if is_baremetal; then
-        database_connection_url dburl nova_bm
-        iniset $NOVA_CONF baremetal sql_connection $dburl
+        iniset $NOVA_CONF baremetal sql_connection `database_connection_url nova_bm`
     fi
     iniset $NOVA_CONF DEFAULT libvirt_type "$LIBVIRT_TYPE"
     iniset $NOVA_CONF DEFAULT libvirt_cpu_mode "none"
diff --git a/lib/quantum b/lib/quantum
index 3e41d8d..66360d4 100644
--- a/lib/quantum
+++ b/lib/quantum
@@ -89,7 +89,7 @@
 # Meta data IP
 Q_META_DATA_IP=${Q_META_DATA_IP:-$HOST_IP}
 # Allow Overlapping IP among subnets
-Q_ALLOW_OVERLAPPING_IP=${Q_ALLOW_OVERLAPPING_IP:-False}
+Q_ALLOW_OVERLAPPING_IP=${Q_ALLOW_OVERLAPPING_IP:-True}
 # Use quantum-debug command
 Q_USE_DEBUG_COMMAND=${Q_USE_DEBUG_COMMAND:-False}
 # The name of the default q-l3 router
@@ -176,6 +176,11 @@
 # Please refer to lib/quantum_plugins/README.md for details.
 source $TOP_DIR/lib/quantum_plugins/$Q_PLUGIN
 
+# Agent loadbalancer service plugin functions
+# -------------------------------------------
+# Hardcoding for 1 service plugin for now
+source $TOP_DIR/lib/quantum_plugins/agent_loadbalancer
+
 # Entry Points
 # ------------
 
@@ -185,6 +190,10 @@
     _configure_quantum_common
     iniset_rpc_backend quantum $QUANTUM_CONF DEFAULT
 
+    # goes before q-svc to init Q_SERVICE_PLUGIN_CLASSES
+    if is_service_enabled q-lbaas; then
+        _configure_quantum_lbaas
+    fi
     if is_service_enabled q-svc; then
         _configure_quantum_service
     fi
@@ -362,6 +371,10 @@
     screen_it q-dhcp "python $AGENT_DHCP_BINARY --config-file $QUANTUM_CONF --config-file=$Q_DHCP_CONF_FILE"
     screen_it q-meta "python $AGENT_META_BINARY --config-file $QUANTUM_CONF --config-file=$Q_META_CONF_FILE"
     screen_it q-l3 "python $AGENT_L3_BINARY --config-file $QUANTUM_CONF --config-file=$Q_L3_CONF_FILE"
+
+    if is_service_enabled q-lbaas; then
+        screen_it q-lbaas "python $AGENT_LBAAS_BINARY --config-file $QUANTUM_CONF --config-file=$LBAAS_AGENT_CONF_FILENAME"
+    fi
 }
 
 # stop_quantum() - Stop running processes (non-screen)
@@ -403,9 +416,7 @@
     Q_PLUGIN_CONF_FILE=$Q_PLUGIN_CONF_PATH/$Q_PLUGIN_CONF_FILENAME
     cp $QUANTUM_DIR/$Q_PLUGIN_CONF_FILE /$Q_PLUGIN_CONF_FILE
 
-    database_connection_url dburl $Q_DB_NAME
-    iniset /$Q_PLUGIN_CONF_FILE DATABASE sql_connection $dburl
-    unset dburl
+    iniset /$Q_PLUGIN_CONF_FILE DATABASE sql_connection `database_connection_url $Q_DB_NAME`
 
     _quantum_setup_rootwrap
 }
@@ -483,6 +494,13 @@
     _quantum_setup_keystone $Q_META_CONF_FILE DEFAULT set_auth_url
 }
 
+function _configure_quantum_lbaas()
+{
+    quantum_agent_lbaas_install_agent_packages
+    quantum_agent_lbaas_configure_common
+    quantum_agent_lbaas_configure_agent
+}
+
 # _configure_quantum_plugin_agent() - Set config files for quantum plugin agent
 # It is called when q-agt is enabled.
 function _configure_quantum_plugin_agent() {
@@ -512,9 +530,14 @@
     # Update either configuration file with plugin
     iniset $QUANTUM_CONF DEFAULT core_plugin $Q_PLUGIN_CLASS
 
+    if [[ $Q_SERVICE_PLUGIN_CLASSES != '' ]]; then
+        iniset $QUANTUM_CONF DEFAULT service_plugins $Q_SERVICE_PLUGIN_CLASSES
+    fi
+
     iniset $QUANTUM_CONF DEFAULT verbose True
     iniset $QUANTUM_CONF DEFAULT debug True
     iniset $QUANTUM_CONF DEFAULT state_path $DATA_DIR/quantum
+    iniset $QUANTUM_CONF DEFAULT policy_file $Q_POLICY_FILE
     iniset $QUANTUM_CONF DEFAULT allow_overlapping_ips $Q_ALLOW_OVERLAPPING_IP
 
     iniset $QUANTUM_CONF DEFAULT auth_strategy $Q_AUTH_STRATEGY
diff --git a/lib/quantum_plugins/README.md b/lib/quantum_plugins/README.md
index a66d35a..5411de0 100644
--- a/lib/quantum_plugins/README.md
+++ b/lib/quantum_plugins/README.md
@@ -18,7 +18,7 @@
 * ``quantum_plugin_create_nova_conf`` :
   set ``NOVA_VIF_DRIVER`` and optionally set options in nova_conf
   e.g.
-  NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver"}
+  NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
 * ``quantum_plugin_install_agent_packages`` :
   install packages that is specific to plugin agent
   e.g.
diff --git a/lib/quantum_plugins/agent_loadbalancer b/lib/quantum_plugins/agent_loadbalancer
new file mode 100644
index 0000000..87e7aaa
--- /dev/null
+++ b/lib/quantum_plugins/agent_loadbalancer
@@ -0,0 +1,48 @@
+# Quantum loadbalancer plugin
+# ---------------------------
+
+# Save trace setting
+MY_XTRACE=$(set +o | grep xtrace)
+set +o xtrace
+
+
+AGENT_LBAAS_BINARY="$QUANTUM_DIR/bin/quantum-lbaas-agent"
+
+function quantum_agent_lbaas_install_agent_packages() {
+    if is_ubuntu || is_fedora; then
+        install_package haproxy
+    elif is_suse; then
+        ### FIXME: Find out if package can be pushed to Factory
+        echo "HAProxy packages can be installed from server:http project in OBS"
+    fi
+}
+
+function quantum_agent_lbaas_configure_common() {
+    if [[ $Q_SERVICE_PLUGIN_CLASSES == '' ]]; then
+        Q_SERVICE_PLUGIN_CLASSES="quantum.plugins.services.agent_loadbalancer.plugin.LoadBalancerPlugin"
+    else
+        Q_SERVICE_PLUGIN_CLASSES="$Q_SERVICE_PLUGIN_CLASSES,quantum.plugins.services.agent_loadbalancer.plugin.LoadBalancerPlugin"
+    fi
+}
+
+function quantum_agent_lbaas_configure_agent() {
+    LBAAS_AGENT_CONF_PATH=/etc/quantum/plugins/services/agent_loadbalancer
+    mkdir -p $LBAAS_AGENT_CONF_PATH
+
+    LBAAS_AGENT_CONF_FILENAME="$LBAAS_AGENT_CONF_PATH/lbaas_agent.ini"
+
+    cp $QUANTUM_DIR/etc/lbaas_agent.ini /$LBAAS_AGENT_CONF_FILENAME
+
+    if [[ $Q_PLUGIN == 'linuxbridge' || $Q_PLUGIN == 'brocade' ]]; then
+        iniset $LBAAS_AGENT_CONF_FILENAME DEFAULT interface_driver "quantum.agent.linux.interface.BridgeInterfaceDriver"
+    else
+        iniset $LBAAS_AGENT_CONF_FILENAME DEFAULT interface_driver "quantum.agent.linux.interface.OVSInterfaceDriver"
+    fi
+
+    if is_fedora; then
+        iniset $LBAAS_AGENT_CONF_FILENAME DEFAULT user_group "nobody"
+    fi
+}
+
+# Restore xtrace
+$MY_XTRACE
diff --git a/lib/quantum_plugins/bigswitch_floodlight b/lib/quantum_plugins/bigswitch_floodlight
index 2c928be..7d3fd96 100644
--- a/lib/quantum_plugins/bigswitch_floodlight
+++ b/lib/quantum_plugins/bigswitch_floodlight
@@ -9,7 +9,7 @@
 source $TOP_DIR/lib/quantum_thirdparty/bigswitch_floodlight     # for third party service specific configuration values
 
 function quantum_plugin_create_nova_conf() {
-    NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver"}
+    NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
 }
 
 function quantum_plugin_install_agent_packages() {
diff --git a/lib/quantum_plugins/brocade b/lib/quantum_plugins/brocade
index c372c19..ac91143 100644
--- a/lib/quantum_plugins/brocade
+++ b/lib/quantum_plugins/brocade
@@ -10,7 +10,7 @@
 }
 
 function quantum_plugin_create_nova_conf() {
-    NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.QuantumLinuxBridgeVIFDriver"}
+    NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
 }
 
 function quantum_plugin_install_agent_packages() {
diff --git a/lib/quantum_plugins/linuxbridge b/lib/quantum_plugins/linuxbridge
index 0756de4..11bc585 100644
--- a/lib/quantum_plugins/linuxbridge
+++ b/lib/quantum_plugins/linuxbridge
@@ -11,7 +11,7 @@
 }
 
 function quantum_plugin_create_nova_conf() {
-    NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.QuantumLinuxBridgeVIFDriver"}
+    NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
 }
 
 function quantum_plugin_install_agent_packages() {
diff --git a/lib/quantum_plugins/openvswitch b/lib/quantum_plugins/openvswitch
index a57336e..dda1239 100644
--- a/lib/quantum_plugins/openvswitch
+++ b/lib/quantum_plugins/openvswitch
@@ -8,7 +8,7 @@
 source $TOP_DIR/lib/quantum_plugins/ovs_base
 
 function quantum_plugin_create_nova_conf() {
-    NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver"}
+    NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
     if [ "$VIRT_DRIVER" = 'xenserver' ]; then
         iniset $NOVA_CONF DEFAULT xenapi_vif_driver nova.virt.xenapi.vif.XenAPIOpenVswitchDriver
         iniset $NOVA_CONF DEFAULT xenapi_ovs_integration_bridge $FLAT_NETWORK_BRIDGE
diff --git a/lib/quantum_plugins/ovs_base b/lib/quantum_plugins/ovs_base
index 915129e..ab988d9 100644
--- a/lib/quantum_plugins/ovs_base
+++ b/lib/quantum_plugins/ovs_base
@@ -29,8 +29,8 @@
         # Ensure that the service is started
         restart_service openvswitch
     elif is_suse; then
-        ### FIXME: Find RPMs for OpenVSwitch
-        echo "OpenVSwitch packages need to be located"
+        ### FIXME: Find out if package can be pushed to Factory
+        echo "OpenVSwitch packages can be installed from Cloud:OpenStack:Master in OBS"
         restart_service openvswitch
     fi
 }
diff --git a/lib/swift b/lib/swift
index 5ba7e56..2f772fb 100644
--- a/lib/swift
+++ b/lib/swift
@@ -352,6 +352,9 @@
 function start_swift() {
     # (re)start rsyslog
     restart_service rsyslog
+    # (re)start memcached to make sure we have a clean memcache.
+    restart_service memcached
+
     # Start rsync
     if is_ubuntu; then
         sudo /etc/init.d/rsync restart || :
diff --git a/lib/tempest b/lib/tempest
index 9cc19ae..85e643e 100644
--- a/lib/tempest
+++ b/lib/tempest
@@ -266,10 +266,6 @@
 # install_tempest() - Collect source and prepare
 function install_tempest() {
     git_clone $TEMPEST_REPO $TEMPEST_DIR $TEMPEST_BRANCH
-
-    # Tempest doesn't satisfy its dependencies on its own, so
-    # install them here instead.
-    pip_install -r $TEMPEST_DIR/tools/pip-requires
 }
 
 # init_tempest() - Initialize ec2 images
diff --git a/stack.sh b/stack.sh
index 6952fba..0f5401a 100755
--- a/stack.sh
+++ b/stack.sh
@@ -1076,9 +1076,8 @@
         iniset $NOVA_CONF DEFAULT compute_driver nova.virt.baremetal.driver.BareMetalDriver
         iniset $NOVA_CONF DEFAULT firewall_driver $LIBVIRT_FIREWALL_DRIVER
         iniset $NOVA_CONF DEFAULT scheduler_host_manager nova.scheduler.baremetal_host_manager.BaremetalHostManager
-        # NOTE(deva): ComputeCapabilitiesFilter does not currently work with Baremetal. See bug # 1129485
-        #             As a work around, we disable CCFilter by explicitly enabling all the other default filters.
-        iniset $NOVA_CONF DEFAULT scheduler_default_filters ComputeFilter,RetryFilter,AvailabilityZoneFilter,ImagePropertiesFilter
+        iniset $NOVA_CONF DEFAULT ram_allocation_ratio 1.0
+        iniset $NOVA_CONF DEFAULT reserved_host_memory_mb 0
         iniset $NOVA_CONF baremetal instance_type_extra_specs cpu_arch:$BM_CPU_ARCH
         iniset $NOVA_CONF baremetal driver $BM_DRIVER
         iniset $NOVA_CONF baremetal power_manager $BM_POWER_MANAGER
diff --git a/stackrc b/stackrc
index 008bc9c..d418a0e 100644
--- a/stackrc
+++ b/stackrc
@@ -45,15 +45,15 @@
 CEILOMETER_BRANCH=master
 
 # ceilometer client library
-CEILOMETERCLIENT_REPO=${GIT_BASE}/openstack/python-ceilometerclient
+CEILOMETERCLIENT_REPO=${GIT_BASE}/openstack/python-ceilometerclient.git
 CEILOMETERCLIENT_BRANCH=master
 
 # volume service
-CINDER_REPO=${GIT_BASE}/openstack/cinder
+CINDER_REPO=${GIT_BASE}/openstack/cinder.git
 CINDER_BRANCH=master
 
 # volume client
-CINDERCLIENT_REPO=${GIT_BASE}/openstack/python-cinderclient
+CINDERCLIENT_REPO=${GIT_BASE}/openstack/python-cinderclient.git
 CINDERCLIENT_BRANCH=master
 
 # compute service
@@ -63,11 +63,11 @@
 # storage service
 SWIFT_REPO=${GIT_BASE}/openstack/swift.git
 SWIFT_BRANCH=master
-SWIFT3_REPO=https://github.com/fujita/swift3.git
+SWIFT3_REPO=${GIT_BASE}/fujita/swift3.git
 SWIFT3_BRANCH=master
 
 # python swift client library
-SWIFTCLIENT_REPO=${GIT_BASE}/openstack/python-swiftclient
+SWIFTCLIENT_REPO=${GIT_BASE}/openstack/python-swiftclient.git
 SWIFTCLIENT_BRANCH=master
 
 # image catalog service
@@ -75,7 +75,7 @@
 GLANCE_BRANCH=master
 
 # python glance client library
-GLANCECLIENT_REPO=${GIT_BASE}/openstack/python-glanceclient
+GLANCECLIENT_REPO=${GIT_BASE}/openstack/python-glanceclient.git
 GLANCECLIENT_BRANCH=master
 
 # unified auth system (manages accounts/tokens)
@@ -83,7 +83,7 @@
 KEYSTONE_BRANCH=master
 
 # a websockets/html5 or flash powered VNC console for vm instances
-NOVNC_REPO=https://github.com/kanaka/noVNC.git
+NOVNC_REPO=${GIT_BASE}/kanaka/noVNC.git
 NOVNC_BRANCH=master
 
 # a websockets/html5 or flash powered SPICE console for vm instances
@@ -103,15 +103,15 @@
 OPENSTACKCLIENT_BRANCH=master
 
 # python keystone client library to nova that horizon uses
-KEYSTONECLIENT_REPO=${GIT_BASE}/openstack/python-keystoneclient
+KEYSTONECLIENT_REPO=${GIT_BASE}/openstack/python-keystoneclient.git
 KEYSTONECLIENT_BRANCH=master
 
 # quantum service
-QUANTUM_REPO=${GIT_BASE}/openstack/quantum
+QUANTUM_REPO=${GIT_BASE}/openstack/quantum.git
 QUANTUM_BRANCH=master
 
 # quantum client
-QUANTUMCLIENT_REPO=${GIT_BASE}/openstack/python-quantumclient
+QUANTUMCLIENT_REPO=${GIT_BASE}/openstack/python-quantumclient.git
 QUANTUMCLIENT_BRANCH=master
 
 # Tempest test suite
@@ -127,17 +127,17 @@
 HEATCLIENT_BRANCH=master
 
 # ryu service
-RYU_REPO=https://github.com/osrg/ryu.git
+RYU_REPO=${GIT_BASE}/osrg/ryu.git
 RYU_BRANCH=master
 
 # diskimage-builder
-BM_IMAGE_BUILD_REPO=https://github.com/stackforge/diskimage-builder.git
+BM_IMAGE_BUILD_REPO=${GIT_BASE}/stackforge/diskimage-builder.git
 BM_IMAGE_BUILD_BRANCH=master
 
 # bm_poseur
 # Used to simulate a hardware environment for baremetal
 # Only used if BM_USE_FAKE_ENV is set
-BM_POSEUR_REPO=https://github.com/tripleo/bm_poseur.git
+BM_POSEUR_REPO=${GIT_BASE}/tripleo/bm_poseur.git
 BM_POSEUR_BRANCH=master
 
 
diff --git a/tools/xen/devstackubuntupreseed.cfg b/tools/xen/devstackubuntupreseed.cfg
index d8caaee..c559b1e 100644
--- a/tools/xen/devstackubuntupreseed.cfg
+++ b/tools/xen/devstackubuntupreseed.cfg
@@ -257,7 +257,7 @@
 
 # The kernel image (meta) package to be installed; "none" can be used if no
 # kernel is to be installed.
-#d-i base-installer/kernel/image string linux-generic
+d-i base-installer/kernel/image string linux-virtual
 
 ### Account setup
 # Skip creation of a root account (normal user account will be able to
diff --git a/tools/xen/install_os_domU.sh b/tools/xen/install_os_domU.sh
index f0e057b..0c0e1e2 100755
--- a/tools/xen/install_os_domU.sh
+++ b/tools/xen/install_os_domU.sh
@@ -20,13 +20,13 @@
 fi
 
 # This directory
-TOP_DIR=$(cd $(dirname "$0") && pwd)
+THIS_DIR=$(cd $(dirname "$0") && pwd)
 
 # Source lower level functions
-. $TOP_DIR/../../functions
+. $THIS_DIR/../../functions
 
 # Include onexit commands
-. $TOP_DIR/scripts/on_exit.sh
+. $THIS_DIR/scripts/on_exit.sh
 
 
 #
@@ -49,7 +49,7 @@
 # including installing XenAPI plugins
 #
 
-cd $TOP_DIR
+cd $THIS_DIR
 if [ -f ./master ]
 then
     rm -rf ./master
@@ -271,7 +271,7 @@
             HTTP_SERVER_LOCATION="/var/www/html"
             mkdir -p $HTTP_SERVER_LOCATION
         fi
-        cp -f $TOP_DIR/devstackubuntupreseed.cfg $HTTP_SERVER_LOCATION
+        cp -f $THIS_DIR/devstackubuntupreseed.cfg $HTTP_SERVER_LOCATION
         MIRROR=${MIRROR:-""}
         if [ -n "$MIRROR" ]; then
             sed -e "s,d-i mirror/http/hostname string .*,d-i mirror/http/hostname string $MIRROR," \
@@ -280,11 +280,11 @@
     fi
 
     # Update the template
-    $TOP_DIR/scripts/install_ubuntu_template.sh $PRESEED_URL
+    $THIS_DIR/scripts/install_ubuntu_template.sh $PRESEED_URL
 
     # create a new VM with the given template
     # creating the correct VIFs and metadata
-    $TOP_DIR/scripts/install-os-vpx.sh -t "$UBUNTU_INST_TEMPLATE_NAME" -v $VM_BR -m $MGT_BR -p $PUB_BR -l $GUEST_NAME -r $OSDOMU_MEM_MB -k "flat_network_bridge=${VM_BR}"
+    $THIS_DIR/scripts/install-os-vpx.sh -t "$UBUNTU_INST_TEMPLATE_NAME" -v $VM_BR -m $MGT_BR -p $PUB_BR -l $GUEST_NAME -r $OSDOMU_MEM_MB -k "flat_network_bridge=${VM_BR}"
 
     # wait for install to finish
     wait_for_VM_to_halt
@@ -298,7 +298,7 @@
     #
 
     # Install XenServer tools, and other such things
-    $TOP_DIR/prepare_guest_template.sh "$GUEST_NAME"
+    $THIS_DIR/prepare_guest_template.sh "$GUEST_NAME"
 
     # start the VM to run the prepare steps
     xe vm-start vm="$GUEST_NAME"
@@ -320,7 +320,7 @@
 #
 # Inject DevStack inside VM disk
 #
-$TOP_DIR/build_xva.sh "$GUEST_NAME"
+$THIS_DIR/build_xva.sh "$GUEST_NAME"
 
 # create a snapshot before the first boot
 # to allow a quick re-run with the same settings
diff --git a/tools/xen/xenrc b/tools/xen/xenrc
index 1a5a2a9..e4d8ac9 100644
--- a/tools/xen/xenrc
+++ b/tools/xen/xenrc
@@ -32,10 +32,10 @@
 PUB_IP=${PUB_IP:-192.168.1.55}
 
 # Public network
-PUB_BR=${PUB_BR:-"xenbr0"}
-PUB_DEV=${PUB_DEV:-eth0}
-PUB_VLAN=${PUB_VLAN:--1}
 PUB_NETMASK=${PUB_NETMASK:-255.255.255.0}
+PUB_BR=${PUB_BR:-"xenbr0"}
+PUB_VLAN=${PUB_VLAN:--1}
+PUB_DEV=${PUB_DEV:-eth0}
 
 # VM network params
 VM_NETMASK=${VM_NETMASK:-255.255.255.0}