diff --git a/ansible/roles/nova-cell/defaults/main.yml b/ansible/roles/nova-cell/defaults/main.yml index 4e07db6e89..975487dce7 100644 --- a/ansible/roles/nova-cell/defaults/main.yml +++ b/ansible/roles/nova-cell/defaults/main.yml @@ -453,6 +453,7 @@ nova_compute_extra_volumes: "{{ nova_extra_volumes }}" nova_compute_ironic_extra_volumes: "{{ nova_extra_volumes }}" # Used by bootstrapping containers. nova_cell_bootstrap_extra_volumes: "{{ nova_extra_volumes }}" +nova_cell_get_settings_volumes: "{{ nova_cell_bootstrap_default_volumes + nova_cell_bootstrap_extra_volumes }}" nova_libvirt_volume: "{{ 'libvirtd' if enable_nova_libvirt_container | bool else '/var/lib/libvirt' }}" diff --git a/ansible/roles/nova-cell/tasks/get_cell_settings.yml b/ansible/roles/nova-cell/tasks/get_cell_settings.yml index b5b8083999..d98f30cdbb 100644 --- a/ansible/roles/nova-cell/tasks/get_cell_settings.yml +++ b/ansible/roles/nova-cell/tasks/get_cell_settings.yml @@ -13,7 +13,7 @@ BOOTSTRAP: name: "nova_list_cells" restart_policy: oneshot - volumes: "{{ nova_cell_bootstrap_default_volumes + nova_cell_bootstrap_extra_volumes }}" + volumes: "{{ nova_cell_get_settings_volumes }}" register: existing_cells_list changed_when: false failed_when: diff --git a/ansible/roles/nova/tasks/map_cell0.yml b/ansible/roles/nova/tasks/map_cell0.yml index 3fcee26a0e..d77553f18e 100644 --- a/ansible/roles/nova/tasks/map_cell0.yml +++ b/ansible/roles/nova/tasks/map_cell0.yml @@ -1,24 +1,65 @@ --- -- name: Create cell0 mappings - vars: - nova_api: "{{ nova_services['nova-api'] }}" - nova_cell0_connection: "mysql+pymysql://{{ nova_cell0_database_user }}:{{ nova_cell0_database_password }}@{{ nova_cell0_database_address }}/{{ nova_cell0_database_name }}" # noqa 204 - become: true - kolla_container: - action: "start_container" - command: bash -c 'sudo -E kolla_set_configs && nova-manage cell_v2 map_cell0 --database_connection {{ nova_cell0_connection }}' - common_options: "{{ docker_common_options }}" - detach: False - image: "{{ nova_api.image }}" - labels: - BOOTSTRAP: - name: "nova_api_map_cell0" - restart_policy: oneshot - volumes: "{{ nova_api_bootstrap_default_volumes + nova_api_bootstrap_extra_volumes }}" - register: map_cell0 - changed_when: - - map_cell0 is success - - '"Cell0 is already setup" not in map_cell0.stdout' +- block: + - name: Create cell0 mappings + vars: + nova_api: "{{ nova_services['nova-api'] }}" + nova_cell0_connection: "mysql+pymysql://{{ nova_cell0_database_user }}:{{ nova_cell0_database_password }}@{{ nova_cell0_database_address }}/{{ nova_cell0_database_name }}" # noqa 204 + become: true + kolla_container: + action: "start_container" + command: bash -c 'sudo -E kolla_set_configs && nova-manage cell_v2 map_cell0 --database_connection {{ nova_cell0_connection }}' + common_options: "{{ docker_common_options }}" + detach: False + image: "{{ nova_api.image }}" + labels: + BOOTSTRAP: + name: "nova_api_map_cell0" + restart_policy: oneshot + volumes: "{{ nova_api_bootstrap_default_volumes + nova_api_bootstrap_extra_volumes }}" + register: map_cell0 + changed_when: + - map_cell0 is success + - '"Cell0 is already setup" not in map_cell0.stdout' + + - import_role: + name: nova-cell + tasks_from: get_cell_settings.yml + vars: + nova_cell_name: "cell0" + nova_api: "{{ nova_services['nova-api'] }}" + nova_cell_get_settings_volumes: "{{ nova_api_bootstrap_default_volumes + nova_api_bootstrap_extra_volumes }}" + + - name: Update cell0 mappings + vars: + nova_cell0_uuid: "00000000-0000-0000-0000-000000000000" + nova_cell0_transport_url: "none:/" + nova_cell0_connection: "mysql+pymysql://{{ nova_cell0_database_user }}:{{ nova_cell0_database_password }}@{{ nova_cell0_database_address }}/{{ nova_cell0_database_name }}" # noqa 204 + nova_api: "{{ nova_services['nova-api'] }}" + become: true + kolla_container: + action: "start_container" + command: > + bash -c 'sudo -E kolla_set_configs && + nova-manage cell_v2 update_cell + --cell_uuid {{ nova_cell0_uuid }} + --database_connection {{ nova_cell0_connection }} + --transport-url {{ nova_cell0_transport_url }}' + common_options: "{{ docker_common_options }}" + detach: False + image: "{{ nova_api.image }}" + labels: + BOOTSTRAP: + name: "nova_api_map_cell0" + restart_policy: oneshot + volumes: "{{ nova_api_bootstrap_default_volumes + nova_api_bootstrap_extra_volumes }}" + register: nova_cell0_updated + changed_when: + - nova_cell0_updated is success + failed_when: + - nova_cell0_updated.rc != 0 + when: + - nova_cell_settings | length > 0 + - nova_cell_settings.cell_database != nova_cell0_connection run_once: True delegate_to: "{{ groups[nova_api.group][0] }}" diff --git a/kolla_ansible/nova_filters.py b/kolla_ansible/nova_filters.py index 3a613cf3ea..4bb5cbdf66 100644 --- a/kolla_ansible/nova_filters.py +++ b/kolla_ansible/nova_filters.py @@ -36,8 +36,7 @@ def extract_cell(list_cells_cli_output, cell_name): # NOTE(priteau): regexp doesn't support passwords containing spaces p = re.compile( r'\| +(?P[^ ]+)? +' - r'\| +(?!00000000-0000-0000-0000-000000000000)' - r'(?P[0-9a-f\-]+) +' + r'\| +(?P[0-9a-f\-]+) +' r'\| +(?P[^ ]+) +' r'\| +(?P[^ ]+) +' r'\| +(?P[^ ]+) +' diff --git a/releasenotes/notes/bug-1915302-a668b00dddaff476.yaml b/releasenotes/notes/bug-1915302-a668b00dddaff476.yaml new file mode 100644 index 0000000000..14cade7d1e --- /dev/null +++ b/releasenotes/notes/bug-1915302-a668b00dddaff476.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixes nova-cell not updating the cell0 database address when VIP changes. + `LP#1915302 `__