diff --git a/deployment/nova/nova-api-container-puppet.yaml b/deployment/nova/nova-api-container-puppet.yaml index b32fd1a2d4..09355685c1 100644 --- a/deployment/nova/nova-api-container-puppet.yaml +++ b/deployment/nova/nova-api-container-puppet.yaml @@ -534,28 +534,7 @@ outputs: config_files: *nova_api_db_sync permissions: *nova_api_permissions /var/lib/kolla/config_files/nova_api_map_cell0.json: - command: - str_replace: - template: "/usr/bin/bootstrap_host_exec nova_api su nova -s /bin/bash -c '/usr/bin/nova-manage cell_v2 map_cell0 --database_connection=\"CELL0DB\"'" - params: - CELL0DB: - list_join: - - '' - - - '{scheme}' - - '://' - - '{username}' - - ':' - - '{password}' - - '@' - - - if: - - mysql_ipv6_use_ip_address - - '[{hostname}]' - - '{hostname}' - - '/' - - 'nova_cell0' - - '?' - - '{query}' + command: "/usr/bin/bootstrap_host_exec nova_api /nova_api_map_cell0.sh" config_files: *nova_api_db_sync permissions: *nova_api_permissions /var/lib/kolla/config_files/nova_api_ensure_default_cell.json: @@ -628,6 +607,47 @@ outputs: - '/' - '?' - '{query}' + nova_api_map_cell0.sh: + mode: "0700" + content: + str_replace: + template: | + #!/bin/bash + CLIST=$(su nova -s /bin/bash -c "nova-manage cell_v2 list_cells") + CELLID=$(printf "$CLIST" | sed -e '1,3d' -e '$d' | awk -F ' *| *' '$2 == "cell0" {print $4}') + CELLDBC=$(printf "$CLIST" | sed -e '1,3d' -e '$d' | awk -F ' *| *' '$2 == "cell0" {print $8}') + if [ "$CELLID" ]; then + if [ ! "$CELLDBC" = "CELL0DB" ]; then + # NOTE(bogdando): cached data must be updated w/ SIGHUP + # for all the scheduler, conductor, API service workers. + # For now that's achieved as the containers get recreated + echo "(cellv2) Updating cell0 cell_v2 cell $CELLID" + su nova -s /bin/bash -c "/usr/bin/nova-manage cell_v2 update_cell --cell_uuid $CELLID --name=cell0 --database_connection='CELL0DB'" + fi + else + echo "(cellv2) Creating cell0 cell_v2 cell" + su nova -s /bin/bash -c "/usr/bin/nova-manage cell_v2 map_cell0 --database_connection='CELL0DB'" + fi + # skip DB sync as the conductor container executes it later + params: + CELL0DB: + list_join: + - '' + - - '{scheme}' + - '://' + - '{username}' + - ':' + - '{password}' + - '@' + - + if: + - mysql_ipv6_use_ip_address + - '[{hostname}]' + - '{hostname}' + - '/' + - 'nova_cell0' + - '?' + - '{query}' docker_config: step_2: get_attr: [NovaApiLogging, docker_config, step_2] @@ -659,6 +679,7 @@ outputs: - {get_attr: [NovaApiLogging, volumes]} - - /var/lib/kolla/config_files/nova_api_map_cell0.json:/var/lib/kolla/config_files/config.json:ro - /var/lib/config-data/puppet-generated/nova:/var/lib/kolla/config_files/src:ro + - /var/lib/container-config-scripts/nova_api_map_cell0.sh:/nova_api_map_cell0.sh:ro environment: KOLLA_CONFIG_STRATEGY: COPY_ALWAYS nova_api_ensure_default_cell: