Merge "Put cinder rootwrap config in separate function"
diff --git a/files/rpms/cinder b/files/rpms/cinder
index c4edb68..623c13e 100644
--- a/files/rpms/cinder
+++ b/files/rpms/cinder
@@ -4,3 +4,4 @@
 python-devel
 postgresql-devel
 iscsi-initiator-utils
+python-lxml         #dist:f18,f19,f20
diff --git a/files/rpms/general b/files/rpms/general
index 2db31d1..40246ea 100644
--- a/files/rpms/general
+++ b/files/rpms/general
@@ -20,6 +20,7 @@
 tcpdump
 unzip
 wget
+which
 
 # [1] : some of installed tools have unversioned dependencies on this,
 # but others have versioned (<=0.7).  So if a later version (0.7.1)
diff --git a/files/rpms/glance b/files/rpms/glance
index dd66171..fffd9c8 100644
--- a/files/rpms/glance
+++ b/files/rpms/glance
@@ -1,6 +1,6 @@
 gcc
 libffi-devel        # testonly
-libxml2-devel
+libxml2-devel       # testonly
 libxslt-devel       # testonly
 mysql-devel         # testonly
 openssl-devel       # testonly
@@ -9,7 +9,8 @@
 python-devel
 python-eventlet
 python-greenlet
-python-paste-deploy #dist:f16,f17,f18,f19
+python-lxml         #dist:f18,f19,f20
+python-paste-deploy #dist:f18,f19,f20
 python-routes
 python-sqlalchemy
 python-wsgiref
diff --git a/files/rpms/horizon b/files/rpms/horizon
index aa27ab4..59503cc 100644
--- a/files/rpms/horizon
+++ b/files/rpms/horizon
@@ -16,8 +16,8 @@
 python-migrate
 python-mox
 python-nose
-python-paste        #dist:f16,f17,f18,f19
-python-paste-deploy #dist:f16,f17,f18,f19
+python-paste        #dist:f18,f19,f20
+python-paste-deploy #dist:f18,f19,f20
 python-routes
 python-sphinx
 python-sqlalchemy
diff --git a/files/rpms/keystone b/files/rpms/keystone
index 52dbf47..99e8524 100644
--- a/files/rpms/keystone
+++ b/files/rpms/keystone
@@ -1,11 +1,11 @@
 python-greenlet
-python-lxml         #dist:f16,f17,f18,f19
-python-paste        #dist:f16,f17,f18,f19
-python-paste-deploy #dist:f16,f17,f18,f19
-python-paste-script #dist:f16,f17,f18,f19
+libxslt-devel       # dist:f20
+python-lxml         #dist:f18,f19,f20
+python-paste        #dist:f18,f19,f20
+python-paste-deploy #dist:f18,f19,f20
+python-paste-script #dist:f18,f19,f20
 python-routes
 python-sqlalchemy
-python-sqlite2
 python-webob
 sqlite
 
diff --git a/files/rpms/neutron b/files/rpms/neutron
index a7700f7..67bf523 100644
--- a/files/rpms/neutron
+++ b/files/rpms/neutron
@@ -11,8 +11,8 @@
 python-iso8601
 python-kombu
 #rhel6 gets via pip
-python-paste        # dist:f16,f17,f18,f19
-python-paste-deploy # dist:f16,f17,f18,f19
+python-paste        # dist:f18,f19,f20
+python-paste-deploy # dist:f18,f19,f20
 python-qpid
 python-routes
 python-sqlalchemy
diff --git a/files/rpms/nova b/files/rpms/nova
index c99f3de..ac70ac5 100644
--- a/files/rpms/nova
+++ b/files/rpms/nova
@@ -28,11 +28,11 @@
 python-lockfile
 python-migrate
 python-mox
-python-paramiko # dist:f16,f17,f18,f19
+python-paramiko # dist:f18,f19,f20
 # ^ on RHEL, brings in python-crypto which conflicts with version from
 # pip we need
-python-paste        # dist:f16,f17,f18,f19
-python-paste-deploy # dist:f16,f17,f18,f19
+python-paste        # dist:f18,f19,f20
+python-paste-deploy # dist:f18,f19,f20
 python-qpid
 python-routes
 python-sqlalchemy
diff --git a/files/rpms/swift b/files/rpms/swift
index b137f30..32432bc 100644
--- a/files/rpms/swift
+++ b/files/rpms/swift
@@ -9,7 +9,7 @@
 python-greenlet
 python-netifaces
 python-nose
-python-paste-deploy # dist:f16,f17,f18,f19
+python-paste-deploy # dist:f18,f19,f20
 python-simplejson
 python-webob
 pyxattr
diff --git a/files/rpms/tempest b/files/rpms/tempest
index de32b81..e7bbd43 100644
--- a/files/rpms/tempest
+++ b/files/rpms/tempest
@@ -1 +1 @@
-libxslt-dev
\ No newline at end of file
+libxslt-devel
diff --git a/files/rpms/trove b/files/rpms/trove
index 09dcee8..c5cbdea 100644
--- a/files/rpms/trove
+++ b/files/rpms/trove
@@ -1 +1 @@
-libxslt1-dev   # testonly
+libxslt-devel   # testonly
diff --git a/functions b/functions
index e79e1d5..6f09685 100644
--- a/functions
+++ b/functions
@@ -1364,11 +1364,11 @@
     if [[ $image_url != file* ]]; then
         # Downloads the image (uec ami+aki style), then extracts it.
         if [[ ! -f $FILES/$IMAGE_FNAME || "$(stat -c "%s" $FILES/$IMAGE_FNAME)" = "0" ]]; then
-             wget -c $image_url -O $FILES/$IMAGE_FNAME
-             if [[ $? -ne 0 ]]; then
-                 echo "Not found: $image_url"
-                 return
-             fi
+            wget -c $image_url -O $FILES/$IMAGE_FNAME
+            if [[ $? -ne 0 ]]; then
+                echo "Not found: $image_url"
+                return
+            fi
         fi
         IMAGE="$FILES/${IMAGE_FNAME}"
     else
@@ -1420,7 +1420,7 @@
         vmdk_create_type="${vmdk_create_type%?}"
 
         descriptor_data_pair_msg="Monolithic flat and VMFS disks "`
-                                 `"should use a descriptor-data pair."
+                                    `"should use a descriptor-data pair."
         if [[ "$vmdk_create_type" = "monolithicSparse" ]]; then
             vmdk_disktype="sparse"
         elif [[ "$vmdk_create_type" = "monolithicFlat" || \
@@ -1435,7 +1435,7 @@
             path_len=`expr ${#image_url} - ${#IMAGE_FNAME}`
             flat_url="${image_url:0:$path_len}$flat_fname"
             warn $LINENO "$descriptor_data_pair_msg"`
-                         `" Attempt to retrieve the *-flat.vmdk: $flat_url"
+                            `" Attempt to retrieve the *-flat.vmdk: $flat_url"
             if [[ $flat_url != file* ]]; then
                 if [[ ! -f $FILES/$flat_fname || \
                 "$(stat -c "%s" $FILES/$flat_fname)" = "0" ]]; then
@@ -1474,7 +1474,7 @@
                 flat_path="${image_url:0:$path_len}"
                 descriptor_url=$flat_path$descriptor_fname
                 warn $LINENO "$descriptor_data_pair_msg"`
-                             `" Attempt to retrieve the descriptor *.vmdk: $descriptor_url"
+                                `" Attempt to retrieve the descriptor *.vmdk: $descriptor_url"
                 if [[ $flat_path != file* ]]; then
                     if [[ ! -f $FILES/$descriptor_fname || \
                     "$(stat -c "%s" $FILES/$descriptor_fname)" = "0" ]]; then
@@ -1489,8 +1489,8 @@
                     descriptor_url=$(echo $descriptor_url | sed "s/^file:\/\///g")
                     if [[ ! -f $descriptor_url || \
                     "$(stat -c "%s" $descriptor_url)" == "0" ]]; then
-                         warn $LINENO "Descriptor not found $descriptor_url"
-                         descriptor_found=false
+                        warn $LINENO "Descriptor not found $descriptor_url"
+                        descriptor_found=false
                     fi
                 fi
                 if $descriptor_found; then
@@ -1498,10 +1498,10 @@
                     `"grep -a -F -m 1 'ddb.adapterType =' $descriptor_url)"
                     vmdk_adapter_type="${vmdk_adapter_type#*\"}"
                     vmdk_adapter_type="${vmdk_adapter_type%?}"
-                 fi
-             fi
-             #TODO(alegendre): handle streamOptimized once supported by the VMware driver.
-             vmdk_disktype="preallocated"
+                fi
+            fi
+            #TODO(alegendre): handle streamOptimized once supported by the VMware driver.
+            vmdk_disktype="preallocated"
         else
             #TODO(alegendre): handle streamOptimized once supported by the VMware driver.
             vmdk_disktype="preallocated"
diff --git a/lib/cinder b/lib/cinder
index 6f5fb18..1c5c36b 100644
--- a/lib/cinder
+++ b/lib/cinder
@@ -346,7 +346,7 @@
             -e 's/snapshot_autoextend_percent =.*/snapshot_autoextend_percent = 20/' \
             /etc/lvm/lvm.conf
     fi
-    iniset $CINDER_CONF keystone_authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT
+    configure_API_version $CINDER_CONF $IDENTITY_API_VERSION
     iniset $CINDER_CONF keystone_authtoken admin_user cinder
     iniset $CINDER_CONF keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME
     iniset $CINDER_CONF keystone_authtoken admin_password $SERVICE_PASSWORD
@@ -370,7 +370,7 @@
         CINDER_USER=$(keystone user-create \
             --name=cinder \
             --pass="$SERVICE_PASSWORD" \
-            --tenant_id $SERVICE_TENANT \
+            --tenant-id $SERVICE_TENANT \
             --email=cinder@example.com \
             | grep " id " | get_field 2)
         keystone user-role-add \
diff --git a/lib/glance b/lib/glance
index 135136d..321174e 100644
--- a/lib/glance
+++ b/lib/glance
@@ -83,7 +83,7 @@
     iniset $GLANCE_REGISTRY_CONF keystone_authtoken auth_port $KEYSTONE_AUTH_PORT
     iniset $GLANCE_REGISTRY_CONF keystone_authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
     iniset $GLANCE_REGISTRY_CONF keystone_authtoken cafile $KEYSTONE_SSL_CA
-    iniset $GLANCE_REGISTRY_CONF keystone_authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/
+    configure_API_version $GLANCE_REGISTRY_CONF $IDENTITY_API_VERSION
     iniset $GLANCE_REGISTRY_CONF keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME
     iniset $GLANCE_REGISTRY_CONF keystone_authtoken admin_user glance
     iniset $GLANCE_REGISTRY_CONF keystone_authtoken admin_password $SERVICE_PASSWORD
@@ -101,7 +101,7 @@
     iniset $GLANCE_API_CONF keystone_authtoken auth_port $KEYSTONE_AUTH_PORT
     iniset $GLANCE_API_CONF keystone_authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
     iniset $GLANCE_API_CONF keystone_authtoken cafile $KEYSTONE_SSL_CA
-    iniset $GLANCE_API_CONF keystone_authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/
+    configure_API_version $GLANCE_API_CONF $IDENTITY_API_VERSION
     iniset $GLANCE_API_CONF keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME
     iniset $GLANCE_API_CONF keystone_authtoken admin_user glance
     iniset $GLANCE_API_CONF keystone_authtoken admin_password $SERVICE_PASSWORD
diff --git a/lib/heat b/lib/heat
index e44a618..59fd3d7 100644
--- a/lib/heat
+++ b/lib/heat
@@ -95,7 +95,7 @@
     iniset $HEAT_CONF keystone_authtoken auth_host $KEYSTONE_AUTH_HOST
     iniset $HEAT_CONF keystone_authtoken auth_port $KEYSTONE_AUTH_PORT
     iniset $HEAT_CONF keystone_authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
-    iniset $HEAT_CONF keystone_authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
+    configure_API_version $HEAT_CONF $IDENTITY_API_VERSION
     iniset $HEAT_CONF keystone_authtoken cafile $KEYSTONE_SSL_CA
     iniset $HEAT_CONF keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME
     iniset $HEAT_CONF keystone_authtoken admin_user heat
diff --git a/lib/ironic b/lib/ironic
index 099746a..1ff3c81 100644
--- a/lib/ironic
+++ b/lib/ironic
@@ -149,11 +149,11 @@
         IRONIC_USER=$(keystone user-create \
             --name=ironic \
             --pass="$SERVICE_PASSWORD" \
-            --tenant_id $SERVICE_TENANT \
+            --tenant-id $SERVICE_TENANT \
             --email=ironic@example.com \
             | grep " id " | get_field 2)
         keystone user-role-add \
-            --tenant_id $SERVICE_TENANT \
+            --tenant-id $SERVICE_TENANT \
             --user_id $IRONIC_USER \
             --role_id $ADMIN_ROLE
         if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then
diff --git a/lib/keystone b/lib/keystone
index 29b9604..79f1fd9 100644
--- a/lib/keystone
+++ b/lib/keystone
@@ -335,6 +335,14 @@
     fi
 }
 
+# Configure the API version for the OpenStack projects.
+# configure_API_version conf_file 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() {
     if is_service_enabled ldap; then
diff --git a/lib/marconi b/lib/marconi
index 742f866..6b9ffdc 100644
--- a/lib/marconi
+++ b/lib/marconi
@@ -142,7 +142,7 @@
 
     MARCONI_USER=$(get_id keystone user-create --name=marconi \
                                                 --pass="$SERVICE_PASSWORD" \
-                                                --tenant_id $SERVICE_TENANT \
+                                                --tenant-id $SERVICE_TENANT \
                                                 --email=marconi@example.com)
     keystone user-role-add --tenant-id $SERVICE_TENANT \
                             --user-id $MARCONI_USER \
diff --git a/lib/neutron b/lib/neutron
index a7519ad..43f43f9 100644
--- a/lib/neutron
+++ b/lib/neutron
@@ -328,7 +328,7 @@
         NEUTRON_USER=$(keystone user-create \
             --name=neutron \
             --pass="$SERVICE_PASSWORD" \
-            --tenant_id $SERVICE_TENANT \
+            --tenant-id $SERVICE_TENANT \
             --email=neutron@example.com \
             | grep " id " | get_field 2)
         keystone user-role-add \
@@ -357,7 +357,7 @@
 
     # Create a small network
     # Since neutron command is executed in admin context at this point,
-    # ``--tenant_id`` needs to be specified.
+    # ``--tenant-id`` needs to be specified.
     if is_baremetal; then
         if [[ "$PUBLIC_INTERFACE" == '' || "$OVS_PHYSICAL_BRIDGE" == '' ]]; then
             die $LINENO "Neutron settings for baremetal not set.. exiting"
@@ -367,16 +367,16 @@
             sudo ip addr del $IP dev $PUBLIC_INTERFACE
             sudo ip addr add $IP dev $OVS_PHYSICAL_BRIDGE
         done
-        NET_ID=$(neutron net-create $PHYSICAL_NETWORK --tenant_id $TENANT_ID --provider:network_type flat --provider:physical_network "$PHYSICAL_NETWORK" | grep ' id ' | get_field 2)
+        NET_ID=$(neutron net-create $PHYSICAL_NETWORK --tenant-id $TENANT_ID --provider:network_type flat --provider:physical_network "$PHYSICAL_NETWORK" | grep ' id ' | get_field 2)
         die_if_not_set $LINENO NET_ID "Failure creating NET_ID for $PHYSICAL_NETWORK $TENANT_ID"
-        SUBNET_ID=$(neutron subnet-create --tenant_id $TENANT_ID --ip_version 4 ${ALLOCATION_POOL:+--allocation-pool $ALLOCATION_POOL} --gateway $NETWORK_GATEWAY --name $PRIVATE_SUBNET_NAME $NET_ID $FIXED_RANGE | grep ' id ' | get_field 2)
+        SUBNET_ID=$(neutron subnet-create --tenant-id $TENANT_ID --ip_version 4 ${ALLOCATION_POOL:+--allocation-pool $ALLOCATION_POOL} --gateway $NETWORK_GATEWAY --name $PRIVATE_SUBNET_NAME $NET_ID $FIXED_RANGE | grep ' id ' | get_field 2)
         die_if_not_set $LINENO SUBNET_ID "Failure creating SUBNET_ID for $TENANT_ID"
         sudo ifconfig $OVS_PHYSICAL_BRIDGE up
         sudo route add default gw $NETWORK_GATEWAY dev $OVS_PHYSICAL_BRIDGE
     else
-        NET_ID=$(neutron net-create --tenant_id $TENANT_ID "$PRIVATE_NETWORK_NAME" | grep ' id ' | get_field 2)
+        NET_ID=$(neutron net-create --tenant-id $TENANT_ID "$PRIVATE_NETWORK_NAME" | grep ' id ' | get_field 2)
         die_if_not_set $LINENO NET_ID "Failure creating NET_ID for $PHYSICAL_NETWORK $TENANT_ID"
-        SUBNET_ID=$(neutron subnet-create --tenant_id $TENANT_ID --ip_version 4 --gateway $NETWORK_GATEWAY --name $PRIVATE_SUBNET_NAME $NET_ID $FIXED_RANGE | grep ' id ' | get_field 2)
+        SUBNET_ID=$(neutron subnet-create --tenant-id $TENANT_ID --ip_version 4 --gateway $NETWORK_GATEWAY --name $PRIVATE_SUBNET_NAME $NET_ID $FIXED_RANGE | grep ' id ' | get_field 2)
         die_if_not_set $LINENO SUBNET_ID "Failure creating SUBNET_ID for $TENANT_ID"
     fi
 
@@ -384,7 +384,7 @@
         # Create a router, and add the private subnet as one of its interfaces
         if [[ "$Q_L3_ROUTER_PER_TENANT" == "True" ]]; then
             # create a tenant-owned router.
-            ROUTER_ID=$(neutron router-create --tenant_id $TENANT_ID $Q_ROUTER_NAME | grep ' id ' | get_field 2)
+            ROUTER_ID=$(neutron router-create --tenant-id $TENANT_ID $Q_ROUTER_NAME | grep ' id ' | get_field 2)
             die_if_not_set $LINENO ROUTER_ID "Failure creating ROUTER_ID for $TENANT_ID $Q_ROUTER_NAME"
         else
             # Plugin only supports creating a single router, which should be admin owned.
diff --git a/lib/nova b/lib/nova
index e754341..88f9be7 100644
--- a/lib/nova
+++ b/lib/nova
@@ -318,7 +318,7 @@
         NOVA_USER=$(keystone user-create \
             --name=nova \
             --pass="$SERVICE_PASSWORD" \
-            --tenant_id $SERVICE_TENANT \
+            --tenant-id $SERVICE_TENANT \
             --email=nova@example.com \
             | grep " id " | get_field 2)
         keystone user-role-add \
@@ -377,6 +377,7 @@
     iniset $NOVA_CONF DEFAULT osapi_compute_workers "4"
     iniset $NOVA_CONF DEFAULT ec2_workers "4"
     iniset $NOVA_CONF DEFAULT metadata_workers "4"
+    iniset $NOVA_CONF conductor workers "4"
     iniset $NOVA_CONF DEFAULT sql_connection `database_connection_url nova`
     iniset $NOVA_CONF DEFAULT fatal_deprecations "True"
     iniset $NOVA_CONF DEFAULT instance_name_template "${INSTANCE_NAME_PREFIX}%08x"
diff --git a/lib/savanna b/lib/savanna
index 6794e36..bb4dfe6 100644
--- a/lib/savanna
+++ b/lib/savanna
@@ -56,7 +56,7 @@
     SAVANNA_USER=$(keystone user-create \
         --name=savanna \
         --pass="$SERVICE_PASSWORD" \
-        --tenant_id $SERVICE_TENANT \
+        --tenant-id $SERVICE_TENANT \
         --email=savanna@example.com \
         | grep " id " | get_field 2)
     keystone user-role-add \
diff --git a/lib/swift b/lib/swift
index 96929db..44c230b 100644
--- a/lib/swift
+++ b/lib/swift
@@ -514,7 +514,7 @@
     ADMIN_ROLE=$(keystone role-list | awk "/ admin / { print \$2 }")
 
     SWIFT_USER=$(keystone user-create --name=swift --pass="$SERVICE_PASSWORD" \
-        --tenant_id $SERVICE_TENANT --email=swift@example.com | grep " id " | get_field 2)
+        --tenant-id $SERVICE_TENANT --email=swift@example.com | grep " id " | get_field 2)
     keystone user-role-add --tenant-id $SERVICE_TENANT --user-id $SWIFT_USER --role-id $ADMIN_ROLE
 
     if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then
diff --git a/lib/tempest b/lib/tempest
index 95b300c..08c0553 100644
--- a/lib/tempest
+++ b/lib/tempest
@@ -329,7 +329,7 @@
     iniset $TEMPEST_CONF network-feature-enabled api_extensions "${NETWORK_API_EXTENSIONS:-all}"
 
     # service_available
-    for service in nova cinder glance neutron swift heat horizon ceilometer ironic savanna; do
+    for service in nova cinder glance neutron swift heat horizon ceilometer ironic savanna trove; do
         if is_service_enabled $service ; then
             iniset $TEMPEST_CONF service_available $service "True"
         else
diff --git a/lib/trove b/lib/trove
index f8e3edd..4efdb5d 100644
--- a/lib/trove
+++ b/lib/trove
@@ -64,7 +64,7 @@
         TROVE_USER=$(keystone user-create \
             --name=trove \
             --pass="$SERVICE_PASSWORD" \
-            --tenant_id $SERVICE_TENANT \
+            --tenant-id $SERVICE_TENANT \
             --email=trove@example.com \
             | grep " id " | get_field 2)
         keystone user-role-add --tenant-id $SERVICE_TENANT \
diff --git a/stack.sh b/stack.sh
index 2438f9f..7c06571 100755
--- a/stack.sh
+++ b/stack.sh
@@ -12,7 +12,7 @@
 # developer install.
 
 # To keep this script simple we assume you are running on a recent **Ubuntu**
-# (12.04 Precise or newer) or **Fedora** (F16 or newer) machine.  (It may work
+# (12.04 Precise or newer) or **Fedora** (F18 or newer) machine.  (It may work
 # on other platforms but support for those platforms is left to those who added
 # them to DevStack.)  It should work in a VM or physical server.  Additionally
 # we maintain a list of ``apt`` and ``rpm`` dependencies and other configuration
@@ -131,7 +131,7 @@
 
 # Warn users who aren't on an explicitly supported distro, but allow them to
 # override check and attempt installation with ``FORCE=yes ./stack``
-if [[ ! ${DISTRO} =~ (oneiric|precise|quantal|raring|saucy|trusty|7.0|wheezy|sid|testing|jessie|f16|f17|f18|f19|opensuse-12.2|rhel6) ]]; then
+if [[ ! ${DISTRO} =~ (oneiric|precise|quantal|raring|saucy|trusty|7.0|wheezy|sid|testing|jessie|f18|f19|f20|opensuse-12.2|rhel6) ]]; then
     echo "WARNING: this script has not been tested on $DISTRO"
     if [[ "$FORCE" != "yes" ]]; then
         die $LINENO "If you wish to run this script anyway run with FORCE=yes"