From 48e96de3fe2ed8c63ae3a5ab477dac5799fbfd35 Mon Sep 17 00:00:00 2001 From: Andrew Melton Date: Thu, 13 Nov 2014 17:07:24 -0500 Subject: [PATCH] WIP: Multi Host Cells --- lib/nova | 72 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 51 insertions(+), 21 deletions(-) diff --git a/lib/nova b/lib/nova index d5f11928e5..c0bdfbeeef 100644 --- a/lib/nova +++ b/lib/nova @@ -43,6 +43,7 @@ NOVA_CONF=$NOVA_CONF_DIR/nova.conf NOVA_CELLS_CONF=$NOVA_CONF_DIR/nova-cells.conf NOVA_FAKE_CONF=$NOVA_CONF_DIR/nova-fake.conf NOVA_CELLS_DB=${NOVA_CELLS_DB:-nova_cell} +NOVA_DB=${NOVA_DB:-nova} NOVA_API_PASTE_INI=${NOVA_API_PASTE_INI:-$NOVA_CONF_DIR/api-paste.ini} @@ -430,7 +431,7 @@ function create_nova_conf { iniset $NOVA_CONF DEFAULT s3_host "$SERVICE_HOST" iniset $NOVA_CONF DEFAULT s3_port "$S3_SERVICE_PORT" iniset $NOVA_CONF DEFAULT my_ip "$HOST_IP" - iniset $NOVA_CONF DEFAULT sql_connection `database_connection_url nova` + iniset $NOVA_CONF DEFAULT sql_connection `database_connection_url $NOVA_DB` iniset $NOVA_CONF DEFAULT instance_name_template "${INSTANCE_NAME_PREFIX}%08x" iniset $NOVA_CONF osapi_v3 enabled "True" @@ -559,27 +560,51 @@ function create_nova_conf { function init_nova_cells { if is_service_enabled n-cell; then - cp $NOVA_CONF $NOVA_CELLS_CONF - iniset $NOVA_CELLS_CONF DEFAULT sql_connection `database_connection_url $NOVA_CELLS_DB` - iniset $NOVA_CELLS_CONF DEFAULT rabbit_virtual_host child_cell - iniset $NOVA_CELLS_CONF DEFAULT dhcpbridge_flagfile $NOVA_CELLS_CONF - iniset $NOVA_CELLS_CONF cells enable True - iniset $NOVA_CELLS_CONF cells cell_type compute - iniset $NOVA_CELLS_CONF cells name child - - iniset $NOVA_CONF cells enable True - iniset $NOVA_CONF cells cell_type api - iniset $NOVA_CONF cells name region + if [ "$MULTI_HOST" != "False" ]; then + cp $NOVA_CONF $NOVA_CELLS_CONF + if [ "$NOVA_CELL_TYPE" == "compute" ]; then + NOVA_CELL_NAME=${NOVA_CELL_NAME:-child} + NOVA_CELL_PARENT_NAME=${NOVA_CELL_PARENT_NAME:-region} + iniset $NOVA_CELLS_CONF DEFAULT sql_connection `database_connection_url $NOVA_CELLS_DB` + iniset $NOVA_CELLS_CONF DEFAULT rabbit_virtual_host ${NOVA_CELL_NAME}_cell + iniset $NOVA_CELLS_CONF DEFAULT dhcpbridge_flagfile $NOVA_CELLS_CONF + iniset $NOVA_CELLS_CONF cells enable True + iniset $NOVA_CELLS_CONF cells cell_type $NOVA_CELL_TYPE + iniset $NOVA_CELLS_CONF cells name $NOVA_CELL_NAME + + $NOVA_BIN_DIR/nova-manage --config-file $NOVA_CELLS_CONF db sync + $NOVA_BIN_DIR/nova-manage --config-file $NOVA_CELLS_CONF cell create --name=$NOVA_CELL_PARENT_NAME --cell_type=parent --username=guest --hostname=$RABBIT_HOST --port=5672 --password=$RABBIT_PASSWORD --virtual_host=/ --woffset=0 --wscale=1 + $NOVA_BIN_DIR/nova-manage cell create --name=${NOVA_CELL_NAME} --cell_type=child --username=guest --hostname=$RABBIT_HOST --port=5672 --password=$RABBIT_PASSWORD --virtual_host=${NOVA_CELL_NAME}_cell --woffset=0 --wscale=1 + else + NOVA_CELL_NAME=${NOVA_CELL_NAME:-region} + iniset $NOVA_CONF cells enable True + iniset $NOVA_CONF cells cell_type $NOVA_CELL_TYPE + iniset $NOVA_CONF cells name $NOVA_CELL_NAME + fi + else + cp $NOVA_CONF $NOVA_CELLS_CONF + iniset $NOVA_CELLS_CONF DEFAULT sql_connection `database_connection_url $NOVA_CELLS_DB` + iniset $NOVA_CELLS_CONF DEFAULT rabbit_virtual_host child_cell + iniset $NOVA_CELLS_CONF DEFAULT dhcpbridge_flagfile $NOVA_CELLS_CONF + iniset $NOVA_CELLS_CONF cells enable True + iniset $NOVA_CELLS_CONF cells cell_type compute + iniset $NOVA_CELLS_CONF cells name child + + iniset $NOVA_CONF cells enable True + iniset $NOVA_CONF cells cell_type api + iniset $NOVA_CONF cells name region + + if is_service_enabled n-api-meta; then + NOVA_ENABLED_APIS=$(echo $NOVA_ENABLED_APIS | sed "s/,metadata//") + iniset $NOVA_CONF DEFAULT enabled_apis $NOVA_ENABLED_APIS + iniset $NOVA_CELLS_CONF DEFAULT enabled_apis metadata + fi - if is_service_enabled n-api-meta; then - NOVA_ENABLED_APIS=$(echo $NOVA_ENABLED_APIS | sed "s/,metadata//") - iniset $NOVA_CONF DEFAULT enabled_apis $NOVA_ENABLED_APIS - iniset $NOVA_CELLS_CONF DEFAULT enabled_apis metadata + $NOVA_BIN_DIR/nova-manage --config-file $NOVA_CELLS_CONF db sync + $NOVA_BIN_DIR/nova-manage --config-file $NOVA_CELLS_CONF cell create --name=region --cell_type=parent --username=guest --hostname=$RABBIT_HOST --port=5672 --password=$RABBIT_PASSWORD --virtual_host=/ --woffset=0 --wscale=1 + $NOVA_BIN_DIR/nova-manage cell create --name=child --cell_type=child --username=guest --hostname=$RABBIT_HOST --port=5672 --password=$RABBIT_PASSWORD --virtual_host=child_cell --woffset=0 --wscale=1 fi - $NOVA_BIN_DIR/nova-manage --config-file $NOVA_CELLS_CONF db sync - $NOVA_BIN_DIR/nova-manage --config-file $NOVA_CELLS_CONF cell create --name=region --cell_type=parent --username=guest --hostname=$RABBIT_HOST --port=5672 --password=$RABBIT_PASSWORD --virtual_host=/ --woffset=0 --wscale=1 - $NOVA_BIN_DIR/nova-manage cell create --name=child --cell_type=child --username=guest --hostname=$RABBIT_HOST --port=5672 --password=$RABBIT_PASSWORD --virtual_host=child_cell --woffset=0 --wscale=1 fi } @@ -746,8 +771,13 @@ function start_nova_rest { # ``run_process`` checks ``is_service_enabled``, it is not needed here run_process n-cond "$NOVA_BIN_DIR/nova-conductor --config-file $compute_cell_conf" - run_process n-cell-region "$NOVA_BIN_DIR/nova-cells --config-file $api_cell_conf" - run_process n-cell-child "$NOVA_BIN_DIR/nova-cells --config-file $compute_cell_conf" + + if [ "$MULTI_HOST" == "False" -o "$NOVA_CELL_TYPE" == "api" ]; then + run_process n-cell-region "$NOVA_BIN_DIR/nova-cells --config-file $api_cell_conf" + fi + if [ "$MULTI_HOST" == "False" -o "$NOVA_CELL_TYPE" == "compute" ]; then + run_process n-cell-child "$NOVA_BIN_DIR/nova-cells --config-file $compute_cell_conf" + fi run_process n-crt "$NOVA_BIN_DIR/nova-cert --config-file $api_cell_conf" run_process n-net "$NOVA_BIN_DIR/nova-network --config-file $compute_cell_conf"