Merge "Modify RPM lists for RHEL6"
diff --git a/exercises/euca.sh b/exercises/euca.sh
index 50d4744..d704279 100755
--- a/exercises/euca.sh
+++ b/exercises/euca.sh
@@ -96,7 +96,7 @@
# Attach volume to an instance
euca-attach-volume -i $INSTANCE -d $ATTACH_DEVICE $VOLUME || \
die $LINENO "Failure attaching volume $VOLUME to $INSTANCE"
- if ! timeout $ACTIVE_TIMEOUT sh -c "while ! euca-describe-volumes $VOLUME | grep -q in-use; do sleep 1; done"; then
+ if ! timeout $ACTIVE_TIMEOUT sh -c "while ! euca-describe-volumes $VOLUME | grep -A 1 in-use | grep -q attach; do sleep 1; done"; then
die $LINENO "Could not attach $VOLUME to $INSTANCE"
fi
diff --git a/files/apache-horizon.template b/files/apache-horizon.template
index fb98471..af880c4 100644
--- a/files/apache-horizon.template
+++ b/files/apache-horizon.template
@@ -17,6 +17,7 @@
<Directory %HORIZON_DIR%/>
Options Indexes FollowSymLinks MultiViews
+ %HORIZON_REQUIRE%
AllowOverride None
Order allow,deny
allow from all
diff --git a/files/rpms-suse/nova b/files/rpms-suse/nova
index 04af7f3..a3fd479 100644
--- a/files/rpms-suse/nova
+++ b/files/rpms-suse/nova
@@ -15,6 +15,7 @@
libxml2-python
mysql-community-server # NOPRIME
parted
+polkit
python-M2Crypto
python-m2crypto # dist:sle11sp2
python-Paste
diff --git a/files/rpms/nova b/files/rpms/nova
index b8c8528..328e7d6 100644
--- a/files/rpms/nova
+++ b/files/rpms/nova
@@ -15,6 +15,7 @@
m2crypto
mysql-server # NOPRIME
parted
+polkit
python-boto
python-carrot
python-cheetah
diff --git a/functions b/functions
index 88e4a62..02c2b3a 100644
--- a/functions
+++ b/functions
@@ -887,9 +887,18 @@
SUDO_PIP="sudo"
CMD_PIP=$(get_pip_command)
fi
+
+ if [[ is_fedora && $DISTRO =~ (rhel6) ]]; then
+ # RHEL6 pip by default doesn't have this (was introduced
+ # around 0.8.1 or so)
+ PIP_USE_MIRRORS=${PIP_USE_MIRRORS:-False}
+ else
+ PIP_USE_MIRRORS=${PIP_USE_MIRRORS:-True}
+ fi
if [[ "$PIP_USE_MIRRORS" != "False" ]]; then
PIP_MIRROR_OPT="--use-mirrors"
fi
+
$SUDO_PIP PIP_DOWNLOAD_CACHE=${PIP_DOWNLOAD_CACHE:-/var/cache/pip} \
HTTP_PROXY=$http_proxy \
HTTPS_PROXY=$https_proxy \
diff --git a/lib/cinder b/lib/cinder
index 221108e..82e7454 100644
--- a/lib/cinder
+++ b/lib/cinder
@@ -234,6 +234,19 @@
)
elif [ "$CINDER_DRIVER" == "sheepdog" ]; then
iniset $CINDER_CONF DEFAULT volume_driver "cinder.volume.drivers.sheepdog.SheepdogDriver"
+ elif [ "$CINDER_DRIVER" == "glusterfs" ]; then
+ # To use glusterfs, set the following in localrc:
+ # CINDER_DRIVER=glusterfs
+ # CINDER_GLUSTERFS_SHARES="127.0.0.1:/vol1;127.0.0.1:/vol2"
+ # Shares are <host>:<volume> and separated by semicolons.
+
+ iniset $CINDER_CONF DEFAULT volume_driver "cinder.volume.drivers.glusterfs.GlusterfsDriver"
+ iniset $CINDER_CONF DEFAULT glusterfs_shares_config "$CINDER_CONF_DIR/glusterfs_shares"
+ touch $CINDER_CONF_DIR/glusterfs_shares
+ if [ ! -z "$CINDER_GLUSTERFS_SHARES" ]; then
+ CINDER_GLUSTERFS_SHARES=$(echo $CINDER_GLUSTERFS_SHARES | tr ";" "\n")
+ echo "$CINDER_GLUSTERFS_SHARES" > $CINDER_CONF_DIR/glusterfs_shares
+ fi
fi
}
diff --git a/lib/heat b/lib/heat
index 32c0182..c6e936f 100644
--- a/lib/heat
+++ b/lib/heat
@@ -29,6 +29,7 @@
# set up default directories
HEAT_DIR=$DEST/heat
HEATCLIENT_DIR=$DEST/python-heatclient
+HEAT_AUTH_CACHE_DIR=${HEAT_AUTH_CACHE_DIR:-/var/cache/heat}
# Functions
@@ -37,8 +38,7 @@
# cleanup_heat() - Remove residual data files, anything left over from previous
# runs that a clean run would need to clean up
function cleanup_heat() {
- # This function intentionally left blank
- :
+ sudo rm -rf $HEAT_AUTH_CACHE_DIR
}
# configure_heatclient() - Set config files, create data dirs, etc
@@ -73,18 +73,19 @@
iniset $HEAT_API_CFN_CONF DEFAULT use_syslog $SYSLOG
iniset $HEAT_API_CFN_CONF DEFAULT bind_host $HEAT_API_CFN_HOST
iniset $HEAT_API_CFN_CONF DEFAULT bind_port $HEAT_API_CFN_PORT
+ iniset $HEAT_API_CFN_CONF keystone_authtoken auth_host $KEYSTONE_AUTH_HOST
+ iniset $HEAT_API_CFN_CONF keystone_authtoken auth_port $KEYSTONE_AUTH_PORT
+ iniset $HEAT_API_CFN_CONF keystone_authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
+ iniset $HEAT_API_CFN_CONF keystone_authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
+ iniset $HEAT_API_CFN_CONF keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME
+ iniset $HEAT_API_CFN_CONF keystone_authtoken admin_user heat
+ iniset $HEAT_API_CFN_CONF keystone_authtoken admin_password $SERVICE_PASSWORD
+ iniset $HEAT_API_CFN_CONF keystone_authtoken signing_dir $HEAT_AUTH_CACHE_DIR/api-cfn
iniset_rpc_backend heat $HEAT_API_CFN_CONF DEFAULT
HEAT_API_CFN_PASTE_INI=$HEAT_CONF_DIR/heat-api-cfn-paste.ini
cp $HEAT_DIR/etc/heat/heat-api-cfn-paste.ini $HEAT_API_CFN_PASTE_INI
- iniset $HEAT_API_CFN_PASTE_INI filter:authtoken auth_host $KEYSTONE_AUTH_HOST
- iniset $HEAT_API_CFN_PASTE_INI filter:authtoken auth_port $KEYSTONE_AUTH_PORT
- iniset $HEAT_API_CFN_PASTE_INI filter:authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
- iniset $HEAT_API_CFN_PASTE_INI filter:authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
- iniset $HEAT_API_CFN_PASTE_INI filter:authtoken admin_tenant_name $SERVICE_TENANT_NAME
- iniset $HEAT_API_CFN_PASTE_INI filter:authtoken admin_user heat
- iniset $HEAT_API_CFN_PASTE_INI filter:authtoken admin_password $SERVICE_PASSWORD
iniset $HEAT_API_CFN_PASTE_INI filter:ec2authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
iniset $HEAT_API_CFN_PASTE_INI filter:ec2authtoken keystone_ec2_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0/ec2tokens
@@ -96,18 +97,19 @@
iniset $HEAT_API_CONF DEFAULT use_syslog $SYSLOG
iniset $HEAT_API_CONF DEFAULT bind_host $HEAT_API_HOST
iniset $HEAT_API_CONF DEFAULT bind_port $HEAT_API_PORT
+ iniset $HEAT_API_CONF keystone_authtoken auth_host $KEYSTONE_AUTH_HOST
+ iniset $HEAT_API_CONF keystone_authtoken auth_port $KEYSTONE_AUTH_PORT
+ iniset $HEAT_API_CONF keystone_authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
+ iniset $HEAT_API_CONF keystone_authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
+ iniset $HEAT_API_CONF keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME
+ iniset $HEAT_API_CONF keystone_authtoken admin_user heat
+ iniset $HEAT_API_CONF keystone_authtoken admin_password $SERVICE_PASSWORD
+ iniset $HEAT_API_CONF keystone_authtoken signing_dir $HEAT_AUTH_CACHE_DIR/api
iniset_rpc_backend heat $HEAT_API_CONF DEFAULT
HEAT_API_PASTE_INI=$HEAT_CONF_DIR/heat-api-paste.ini
cp $HEAT_DIR/etc/heat/heat-api-paste.ini $HEAT_API_PASTE_INI
- iniset $HEAT_API_PASTE_INI filter:authtoken auth_host $KEYSTONE_AUTH_HOST
- iniset $HEAT_API_PASTE_INI filter:authtoken auth_port $KEYSTONE_AUTH_PORT
- iniset $HEAT_API_PASTE_INI filter:authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
- iniset $HEAT_API_PASTE_INI filter:authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
- iniset $HEAT_API_PASTE_INI filter:authtoken admin_tenant_name $SERVICE_TENANT_NAME
- iniset $HEAT_API_PASTE_INI filter:authtoken admin_user heat
- iniset $HEAT_API_PASTE_INI filter:authtoken admin_password $SERVICE_PASSWORD
iniset $HEAT_API_PASTE_INI filter:ec2authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
iniset $HEAT_API_PASTE_INI filter:ec2authtoken keystone_ec2_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0/ec2tokens
@@ -135,18 +137,19 @@
iniset $HEAT_API_CW_CONF DEFAULT use_syslog $SYSLOG
iniset $HEAT_API_CW_CONF DEFAULT bind_host $HEAT_API_CW_HOST
iniset $HEAT_API_CW_CONF DEFAULT bind_port $HEAT_API_CW_PORT
+ iniset $HEAT_API_CW_CONF keystone_authtoken auth_host $KEYSTONE_AUTH_HOST
+ iniset $HEAT_API_CW_CONF keystone_authtoken auth_port $KEYSTONE_AUTH_PORT
+ iniset $HEAT_API_CW_CONF keystone_authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
+ iniset $HEAT_API_CW_CONF keystone_authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
+ iniset $HEAT_API_CW_CONF keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME
+ iniset $HEAT_API_CW_CONF keystone_authtoken admin_user heat
+ iniset $HEAT_API_CW_CONF keystone_authtoken admin_password $SERVICE_PASSWORD
+ iniset $HEAT_API_CW_CONF keystone_authtoken signing_dir $HEAT_AUTH_CACHE_DIR/api-cloudwatch
iniset_rpc_backend heat $HEAT_API_CW_CONF DEFAULT
HEAT_API_CW_PASTE_INI=$HEAT_CONF_DIR/heat-api-cloudwatch-paste.ini
cp $HEAT_DIR/etc/heat/heat-api-cloudwatch-paste.ini $HEAT_API_CW_PASTE_INI
- iniset $HEAT_API_CW_PASTE_INI filter:authtoken auth_host $KEYSTONE_AUTH_HOST
- iniset $HEAT_API_CW_PASTE_INI filter:authtoken auth_port $KEYSTONE_AUTH_PORT
- iniset $HEAT_API_CW_PASTE_INI filter:authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
- iniset $HEAT_API_CW_PASTE_INI filter:authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
- iniset $HEAT_API_CW_PASTE_INI filter:authtoken admin_tenant_name $SERVICE_TENANT_NAME
- iniset $HEAT_API_CW_PASTE_INI filter:authtoken admin_user heat
- iniset $HEAT_API_CW_PASTE_INI filter:authtoken admin_password $SERVICE_PASSWORD
iniset $HEAT_API_CW_PASTE_INI filter:ec2authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
iniset $HEAT_API_CW_PASTE_INI filter:ec2authtoken keystone_ec2_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0/ec2tokens
}
@@ -159,6 +162,18 @@
$HEAT_DIR/bin/heat-db-setup $os_PACKAGE -r $DATABASE_PASSWORD
$HEAT_DIR/tools/nova_create_flavors.sh
+ create_heat_cache_dir
+}
+
+# create_heat_cache_dir() - Part of the init_heat() process
+function create_heat_cache_dir() {
+ # Create cache dirs
+ sudo mkdir -p $HEAT_AUTH_CACHE_DIR/api
+ sudo chown $STACK_USER $HEAT_AUTH_CACHE_DIR/api
+ sudo mkdir -p $HEAT_AUTH_CACHE_DIR/api-cfn
+ sudo chown $STACK_USER $HEAT_AUTH_CACHE_DIR/api-cfn
+ sudo mkdir -p $HEAT_AUTH_CACHE_DIR/api-cloudwatch
+ sudo chown $STACK_USER $HEAT_AUTH_CACHE_DIR/api-cloudwatch
}
# install_heatclient() - Collect source and prepare
diff --git a/lib/horizon b/lib/horizon
index 94aac5c..05bf6d3 100644
--- a/lib/horizon
+++ b/lib/horizon
@@ -102,6 +102,7 @@
sudo mkdir -p $HORIZON_DIR/.blackhole
+ HORIZON_REQUIRE=''
if is_ubuntu; then
APACHE_NAME=apache2
APACHE_CONF=sites-available/horizon
@@ -115,6 +116,12 @@
elif is_fedora; then
APACHE_NAME=httpd
APACHE_CONF=conf.d/horizon.conf
+
+ if [[ "$os_RELEASE" -ge "18" ]]; then
+ # fedora 18 has Require all denied in its httpd.conf
+ # and requires explicit Require all granted
+ HORIZON_REQUIRE='Require all granted'
+ fi
sudo sed '/^Listen/s/^.*$/Listen 0.0.0.0:80/' -i /etc/httpd/conf/httpd.conf
elif is_suse; then
APACHE_NAME=apache2
@@ -132,6 +139,7 @@
s,%HORIZON_DIR%,$HORIZON_DIR,g;
s,%APACHE_NAME%,$APACHE_NAME,g;
s,%DEST%,$DEST,g;
+ s,%HORIZON_REQUIRE%,$HORIZON_REQUIRE,g;
\" $FILES/apache-horizon.template >/etc/$APACHE_NAME/$APACHE_CONF"
}
@@ -156,6 +164,9 @@
if [[ ! -e "/usr/bin/node" ]]; then
install_package nodejs-legacy
fi
+ elif is_fedora && [[ "$os_RELEASE" -ge "18" ]]; then
+ # fedora 18 and higher gets nodejs
+ install_package nodejs
fi
git_clone $HORIZON_REPO $HORIZON_DIR $HORIZON_BRANCH $HORIZON_TAG
diff --git a/lib/quantum b/lib/quantum
index 34d51f8..96ccf20 100644
--- a/lib/quantum
+++ b/lib/quantum
@@ -539,6 +539,8 @@
# 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"
+ iniset $QUANTUM_CONF DEFAULT verbose True
+ iniset $QUANTUM_CONF DEFAULT debug True
# Configure agent for plugin
quantum_plugin_configure_plugin_agent
diff --git a/lib/quantum_plugins/plumgrid b/lib/quantum_plugins/plumgrid
index b49aa92..912aa7e 100644
--- a/lib/quantum_plugins/plumgrid
+++ b/lib/quantum_plugins/plumgrid
@@ -25,8 +25,10 @@
}
function quantum_plugin_configure_service() {
- iniset /$Q_PLUGIN_CONF_FILE PLUMgridNOS nos_server localhost
- iniset /$Q_PLUGIN_CONF_FILE PLUMgridNOS nos_server_port 7766
+ PLUMGRID_NOS_IP=${PLUMGRID_NOS_IP:-localhost}
+ PLUMGRID_NOS_PORT=${PLUMGRID_NOS_PORT:-7766}
+ iniset /$Q_PLUGIN_CONF_FILE PLUMgridNOS nos_server $PLUMGRID_NOS_IP
+ iniset /$Q_PLUGIN_CONF_FILE PLUMgridNOS nos_server_port $PLUMGRID_NOS_PORT
}
function quantum_plugin_configure_debug_command() {
diff --git a/stack.sh b/stack.sh
index 497e8a1..f248b6e 100755
--- a/stack.sh
+++ b/stack.sh
@@ -105,7 +105,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|f16|f17|f18|opensuse-12.2) ]]; then
+if [[ ! ${DISTRO} =~ (oneiric|precise|quantal|raring|f16|f17|f18|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"
@@ -538,6 +538,12 @@
install_rpc_backend
+# a place for distro-specific post-prereq workarounds
+if [[ -f $TOP_DIR/tools/${DISTRO}/post-prereq.sh ]]; then
+ echo_summary "Running ${DISTRO} extra prereq tasks"
+ source $TOP_DIR/tools/${DISTRO}/post-prereq.sh
+fi
+
if is_service_enabled $DATABASE_BACKENDS; then
install_database
fi
@@ -589,8 +595,10 @@
install_swift
configure_swift
+ # swift3 middleware to provide S3 emulation to Swift
if is_service_enabled swift3; then
- # swift3 middleware to provide S3 emulation to Swift
+ # replace the nova-objectstore port by the swift port
+ S3_SERVICE_PORT=8080
git_clone $SWIFT3_REPO $SWIFT3_DIR $SWIFT3_BRANCH
setup_develop $SWIFT3_DIR
fi
@@ -643,6 +651,7 @@
if is_service_enabled heat; then
install_heat
install_heatclient
+ cleanup_heat
configure_heat
configure_heatclient
fi
@@ -929,6 +938,25 @@
iniset $NOVA_CONF baremetal ${I/=/ }
done
+ # PowerVM
+ # -------
+
+ elif [ "$VIRT_DRIVER" = 'powervm' ]; then
+ echo_summary "Using PowerVM driver"
+ POWERVM_MGR_TYPE=${POWERVM_MGR_TYPE:-"ivm"}
+ POWERVM_MGR_HOST=${POWERVM_MGR_HOST:-"powervm.host"}
+ POWERVM_MGR_USER=${POWERVM_MGR_USER:-"padmin"}
+ POWERVM_MGR_PASSWD=${POWERVM_MGR_PASSWD:-"password"}
+ POWERVM_IMG_REMOTE_PATH=${POWERVM_IMG_REMOTE_PATH:-"/tmp"}
+ POWERVM_IMG_LOCAL_PATH=${POWERVM_IMG_LOCAL_PATH:-"/tmp"}
+ iniset $NOVA_CONF DEFAULT compute_driver nova.virt.powervm.PowerVMDriver
+ iniset $NOVA_CONF DEFAULT powervm_mgr_type $POWERVM_MGR_TYPE
+ iniset $NOVA_CONF DEFAULT powervm_mgr $POWERVM_MGR_HOST
+ iniset $NOVA_CONF DEFAULT powervm_mgr_user $POWERVM_MGR_USER
+ iniset $NOVA_CONF DEFAULT powervm_mgr_passwd $POWERVM_MGR_PASSWD
+ iniset $NOVA_CONF DEFAULT powervm_img_remote_path $POWERVM_IMG_REMOTE_PATH
+ iniset $NOVA_CONF DEFAULT powervm_img_local_path $POWERVM_IMG_LOCAL_PATH
+
# Default
# -------