Fix various things when n-cell is enabled

1) Use the newer cell_type configuration option instead of overriding
the compute_api_class.

2) A nova-cells service is started for both the API cell (region) and
the compute cell (child).  The screen names were both 'n-cell' which
caused both services to log to the same log file.  The screen names have
been changed to n-cell-region and n-cell-child.

3) Security groups are not supported with cells.  Multiple exercises are
patched to use the 'default' security group instead of creating a new
one.  Additionally, if one uses the 'default' security group, do not try
to delete it, as one can never delete the default.

4) Disable the floating_ips and aggregates exercises when n-cell is
enabled, as they are not supported by cells.

5) Related to #4, disable the floating_ips tests within euca.sh

6) Update the README.md.  No services need to be disabled, and one only
needs to enable the n-cell service.

Change-Id: I9782d1e3cda3c9dd3daefa15c043f5b06473cb87
This commit is contained in:
Chris Behrens 2013-07-24 03:56:13 -07:00
parent c41a059864
commit c62c2b9b66
8 changed files with 99 additions and 66 deletions

View File

@ -188,15 +188,5 @@ Cells is a new scaling option with a full spec at http://wiki.openstack.org/blue
To setup a cells environment add the following to your `localrc`: To setup a cells environment add the following to your `localrc`:
enable_service n-cell enable_service n-cell
enable_service n-api-meta
MULTI_HOST=True
# The following have not been tested with cells, they may or may not work. Be aware that there are some features currently missing in cells, one notable one being security groups. The exercises have been patched to disable functionality not supported by cells.
disable_service n-obj
disable_service cinder
disable_service c-sch
disable_service c-api
disable_service c-vol
disable_service n-xvnc
Be aware that there are some features currently missing in cells, one notable one being security groups.

View File

@ -42,6 +42,8 @@ source $TOP_DIR/exerciserc
# Test as the admin user # Test as the admin user
. $TOP_DIR/openrc admin admin . $TOP_DIR/openrc admin admin
# Cells does not support aggregates.
is_service_enabled n-cell && exit 55
# Create an aggregate # Create an aggregate
# =================== # ===================

View File

@ -80,12 +80,18 @@ die_if_not_set $LINENO IMAGE "Failure getting image $DEFAULT_IMAGE_NAME"
# List security groups # List security groups
nova secgroup-list nova secgroup-list
# Create a secgroup if is_service_enabled n-cell; then
if ! nova secgroup-list | grep -q $SECGROUP; then # Cells does not support security groups, so force the use of "default"
nova secgroup-create $SECGROUP "$SECGROUP description" SECGROUP="default"
if ! timeout $ASSOCIATE_TIMEOUT sh -c "while ! nova secgroup-list | grep -q $SECGROUP; do sleep 1; done"; then echo "Using the default security group because of Cells."
echo "Security group not created" else
exit 1 # Create a secgroup
if ! nova secgroup-list | grep -q $SECGROUP; then
nova secgroup-create $SECGROUP "$SECGROUP description"
if ! timeout $ASSOCIATE_TIMEOUT sh -c "while ! nova secgroup-list | grep -q $SECGROUP; do sleep 1; done"; then
echo "Security group not created"
exit 1
fi
fi fi
fi fi
@ -200,8 +206,12 @@ fi
end_time=$(date +%s) end_time=$(date +%s)
echo "Completed cinder delete in $((end_time - start_time)) seconds" echo "Completed cinder delete in $((end_time - start_time)) seconds"
# Delete secgroup if [[ $SECGROUP = "default" ]] ; then
nova secgroup-delete $SECGROUP || die $LINENO "Failure deleting security group $SECGROUP" echo "Skipping deleting default security group"
else
# Delete secgroup
nova secgroup-delete $SECGROUP || die $LINENO "Failure deleting security group $SECGROUP"
fi
set +o xtrace set +o xtrace
echo "*********************************************************************" echo "*********************************************************************"

View File

@ -58,11 +58,17 @@ SECGROUP=${SECGROUP:-euca_secgroup}
IMAGE=`euca-describe-images | grep machine | grep ${DEFAULT_IMAGE_NAME} | cut -f2 | head -n1` IMAGE=`euca-describe-images | grep machine | grep ${DEFAULT_IMAGE_NAME} | cut -f2 | head -n1`
die_if_not_set $LINENO IMAGE "Failure getting image $DEFAULT_IMAGE_NAME" die_if_not_set $LINENO IMAGE "Failure getting image $DEFAULT_IMAGE_NAME"
# Add a secgroup if is_service_enabled n-cell; then
if ! euca-describe-groups | grep -q $SECGROUP; then # Cells does not support security groups, so force the use of "default"
euca-add-group -d "$SECGROUP description" $SECGROUP SECGROUP="default"
if ! timeout $ASSOCIATE_TIMEOUT sh -c "while ! euca-describe-groups | grep -q $SECGROUP; do sleep 1; done"; then echo "Using the default security group because of Cells."
die $LINENO "Security group not created" else
# Add a secgroup
if ! euca-describe-groups | grep -q $SECGROUP; then
euca-add-group -d "$SECGROUP description" $SECGROUP
if ! timeout $ASSOCIATE_TIMEOUT sh -c "while ! euca-describe-groups | grep -q $SECGROUP; do sleep 1; done"; then
die $LINENO "Security group not created"
fi
fi fi
fi fi
@ -77,7 +83,7 @@ fi
# Volumes # Volumes
# ------- # -------
if [[ "$ENABLED_SERVICES" =~ "c-vol" ]]; then if is_service_enabled c-vol && ! is_service_enabled n-cell; then
VOLUME_ZONE=`euca-describe-availability-zones | head -n1 | cut -f2` VOLUME_ZONE=`euca-describe-availability-zones | head -n1 | cut -f2`
die_if_not_set $LINENO VOLUME_ZONE "Failure to find zone for volume" die_if_not_set $LINENO VOLUME_ZONE "Failure to find zone for volume"
@ -117,41 +123,45 @@ else
echo "Volume Tests Skipped" echo "Volume Tests Skipped"
fi fi
# Allocate floating address if is_service_enabled n-cell; then
FLOATING_IP=`euca-allocate-address | cut -f2` echo "Floating IP Tests Skipped because of Cells."
die_if_not_set $LINENO FLOATING_IP "Failure allocating floating IP" else
# Allocate floating address
FLOATING_IP=`euca-allocate-address | cut -f2`
die_if_not_set $LINENO FLOATING_IP "Failure allocating floating IP"
# Associate floating address # Associate floating address
euca-associate-address -i $INSTANCE $FLOATING_IP || \ euca-associate-address -i $INSTANCE $FLOATING_IP || \
die $LINENO "Failure associating address $FLOATING_IP to $INSTANCE" die $LINENO "Failure associating address $FLOATING_IP to $INSTANCE"
# Authorize pinging # Authorize pinging
euca-authorize -P icmp -s 0.0.0.0/0 -t -1:-1 $SECGROUP || \ euca-authorize -P icmp -s 0.0.0.0/0 -t -1:-1 $SECGROUP || \
die $LINENO "Failure authorizing rule in $SECGROUP" die $LINENO "Failure authorizing rule in $SECGROUP"
# Test we can ping our floating ip within ASSOCIATE_TIMEOUT seconds # Test we can ping our floating ip within ASSOCIATE_TIMEOUT seconds
ping_check "$PUBLIC_NETWORK_NAME" $FLOATING_IP $ASSOCIATE_TIMEOUT ping_check "$PUBLIC_NETWORK_NAME" $FLOATING_IP $ASSOCIATE_TIMEOUT
# Revoke pinging # Revoke pinging
euca-revoke -P icmp -s 0.0.0.0/0 -t -1:-1 $SECGROUP || \ euca-revoke -P icmp -s 0.0.0.0/0 -t -1:-1 $SECGROUP || \
die $LINENO "Failure revoking rule in $SECGROUP" die $LINENO "Failure revoking rule in $SECGROUP"
# Release floating address # Release floating address
euca-disassociate-address $FLOATING_IP || \ euca-disassociate-address $FLOATING_IP || \
die $LINENO "Failure disassociating address $FLOATING_IP" die $LINENO "Failure disassociating address $FLOATING_IP"
# Wait just a tick for everything above to complete so release doesn't fail # Wait just a tick for everything above to complete so release doesn't fail
if ! timeout $ASSOCIATE_TIMEOUT sh -c "while euca-describe-addresses | grep $INSTANCE | grep -q $FLOATING_IP; do sleep 1; done"; then if ! timeout $ASSOCIATE_TIMEOUT sh -c "while euca-describe-addresses | grep $INSTANCE | grep -q $FLOATING_IP; do sleep 1; done"; then
die $LINENO "Floating ip $FLOATING_IP not disassociated within $ASSOCIATE_TIMEOUT seconds" die $LINENO "Floating ip $FLOATING_IP not disassociated within $ASSOCIATE_TIMEOUT seconds"
fi fi
# Release floating address # Release floating address
euca-release-address $FLOATING_IP || \ euca-release-address $FLOATING_IP || \
die $LINENO "Failure releasing address $FLOATING_IP" die $LINENO "Failure releasing address $FLOATING_IP"
# Wait just a tick for everything above to complete so terminate doesn't fail # Wait just a tick for everything above to complete so terminate doesn't fail
if ! timeout $ASSOCIATE_TIMEOUT sh -c "while euca-describe-addresses | grep -q $FLOATING_IP; do sleep 1; done"; then if ! timeout $ASSOCIATE_TIMEOUT sh -c "while euca-describe-addresses | grep -q $FLOATING_IP; do sleep 1; done"; then
die $LINENO "Floating ip $FLOATING_IP not released within $ASSOCIATE_TIMEOUT seconds" die $LINENO "Floating ip $FLOATING_IP not released within $ASSOCIATE_TIMEOUT seconds"
fi
fi fi
# Terminate instance # Terminate instance
@ -166,8 +176,12 @@ if ! timeout $TERMINATE_TIMEOUT sh -c "while euca-describe-instances $INSTANCE |
die $LINENO "server didn't terminate within $TERMINATE_TIMEOUT seconds" die $LINENO "server didn't terminate within $TERMINATE_TIMEOUT seconds"
fi fi
# Delete secgroup if [[ "$SECGROUP" = "default" ]] ; then
euca-delete-group $SECGROUP || die $LINENO "Failure deleting security group $SECGROUP" echo "Skipping deleting default security group"
else
# Delete secgroup
euca-delete-group $SECGROUP || die $LINENO "Failure deleting security group $SECGROUP"
fi
set +o xtrace set +o xtrace
echo "*********************************************************************" echo "*********************************************************************"

View File

@ -56,6 +56,8 @@ TEST_FLOATING_POOL=${TEST_FLOATING_POOL:-test}
# Instance name # Instance name
VM_NAME="ex-float" VM_NAME="ex-float"
# Cells does not support floating ips API calls
is_service_enabled n-cell && exit 55
# Launching a server # Launching a server
# ================== # ==================

View File

@ -78,12 +78,18 @@ die_if_not_set $LINENO IMAGE "Failure getting image $DEFAULT_IMAGE_NAME"
# List security groups # List security groups
nova secgroup-list nova secgroup-list
# Create a secgroup if is_service_enabled n-cell; then
if ! nova secgroup-list | grep -q $SECGROUP; then # Cells does not support security groups, so force the use of "default"
nova secgroup-create $SECGROUP "$SECGROUP description" SECGROUP="default"
if ! timeout $ASSOCIATE_TIMEOUT sh -c "while ! nova secgroup-list | grep -q $SECGROUP; do sleep 1; done"; then echo "Using the default security group because of Cells."
echo "Security group not created" else
exit 1 # Create a secgroup
if ! nova secgroup-list | grep -q $SECGROUP; then
nova secgroup-create $SECGROUP "$SECGROUP description"
if ! timeout $ASSOCIATE_TIMEOUT sh -c "while ! nova secgroup-list | grep -q $SECGROUP; do sleep 1; done"; then
echo "Security group not created"
exit 1
fi
fi fi
fi fi
@ -201,8 +207,12 @@ if ! timeout $TERMINATE_TIMEOUT sh -c "while nova list | grep -q $VM_UUID; do sl
die $LINENO "Server $VM_NAME not deleted" die $LINENO "Server $VM_NAME not deleted"
fi fi
# Delete secgroup if [[ $SECGROUP = "default" ]] ; then
nova secgroup-delete $SECGROUP || die $LINENO "Failure deleting security group $SECGROUP" echo "Skipping deleting default security group"
else
# Delete secgroup
nova secgroup-delete $SECGROUP || die $LINENO "Failure deleting security group $SECGROUP"
fi
set +o xtrace set +o xtrace
echo "*********************************************************************" echo "*********************************************************************"

View File

@ -745,12 +745,17 @@ function is_running() {
# For backward compatibility if we have **swift** in ENABLED_SERVICES all the # For backward compatibility if we have **swift** in ENABLED_SERVICES all the
# **s-** services will be enabled. This will be deprecated in the future. # **s-** services will be enabled. This will be deprecated in the future.
# #
# Cells within nova is enabled if **n-cell** is in ``ENABLED_SERVICES``.
# We also need to make sure to treat **n-cell-region** and **n-cell-child**
# as enabled in this case.
#
# Uses global ``ENABLED_SERVICES`` # Uses global ``ENABLED_SERVICES``
# is_service_enabled service [service ...] # is_service_enabled service [service ...]
function is_service_enabled() { function is_service_enabled() {
services=$@ services=$@
for service in ${services}; do for service in ${services}; do
[[ ,${ENABLED_SERVICES}, =~ ,${service}, ]] && return 0 [[ ,${ENABLED_SERVICES}, =~ ,${service}, ]] && return 0
[[ ${service} == n-cell-* && ${ENABLED_SERVICES} =~ "n-cell" ]] && return 0
[[ ${service} == "nova" && ${ENABLED_SERVICES} =~ "n-" ]] && return 0 [[ ${service} == "nova" && ${ENABLED_SERVICES} =~ "n-" ]] && return 0
[[ ${service} == "cinder" && ${ENABLED_SERVICES} =~ "c-" ]] && return 0 [[ ${service} == "cinder" && ${ENABLED_SERVICES} =~ "c-" ]] && return 0
[[ ${service} == "ceilometer" && ${ENABLED_SERVICES} =~ "ceilometer-" ]] && return 0 [[ ${service} == "ceilometer" && ${ENABLED_SERVICES} =~ "ceilometer-" ]] && return 0

View File

@ -568,11 +568,11 @@ function init_nova_cells() {
iniset $NOVA_CELLS_CONF DEFAULT rabbit_virtual_host child_cell iniset $NOVA_CELLS_CONF DEFAULT rabbit_virtual_host child_cell
iniset $NOVA_CELLS_CONF DEFAULT dhcpbridge_flagfile $NOVA_CELLS_CONF iniset $NOVA_CELLS_CONF DEFAULT dhcpbridge_flagfile $NOVA_CELLS_CONF
iniset $NOVA_CELLS_CONF cells enable True iniset $NOVA_CELLS_CONF cells enable True
iniset $NOVA_CELLS_CONF cells cell_type compute
iniset $NOVA_CELLS_CONF cells name child iniset $NOVA_CELLS_CONF cells name child
iniset $NOVA_CONF DEFAULT scheduler_topic cells
iniset $NOVA_CONF DEFAULT compute_api_class nova.compute.cells_api.ComputeCellsAPI
iniset $NOVA_CONF cells enable True iniset $NOVA_CONF cells enable True
iniset $NOVA_CONF cells cell_type api
iniset $NOVA_CONF cells name region iniset $NOVA_CONF cells name region
if is_service_enabled n-api-meta; then if is_service_enabled n-api-meta; then
@ -714,8 +714,8 @@ function start_nova() {
if is_service_enabled n-cell; then if is_service_enabled n-cell; then
NOVA_CONF_BOTTOM=$NOVA_CELLS_CONF NOVA_CONF_BOTTOM=$NOVA_CELLS_CONF
screen_it n-cond "cd $NOVA_DIR && $NOVA_BIN_DIR/nova-conductor --config-file $NOVA_CELLS_CONF" screen_it n-cond "cd $NOVA_DIR && $NOVA_BIN_DIR/nova-conductor --config-file $NOVA_CELLS_CONF"
screen_it n-cell "cd $NOVA_DIR && $NOVA_BIN_DIR/nova-cells --config-file $NOVA_CONF" screen_it n-cell-region "cd $NOVA_DIR && $NOVA_BIN_DIR/nova-cells --config-file $NOVA_CONF"
screen_it n-cell "cd $NOVA_DIR && $NOVA_BIN_DIR/nova-cells --config-file $NOVA_CELLS_CONF" screen_it n-cell-child "cd $NOVA_DIR && $NOVA_BIN_DIR/nova-cells --config-file $NOVA_CELLS_CONF"
fi fi
if [[ "$VIRT_DRIVER" = 'libvirt' ]]; then if [[ "$VIRT_DRIVER" = 'libvirt' ]]; then