365bb5177d
Nova services may reasonably expect cell databases to exist when they start. The current cell setup tasks in kolla run after the nova containers have started, meaning that cells may or may not exist in the database when they start, depending on timing. In particular, we are seeing issues in kolla CI currently with jobs timing out waiting for nova compute services to start. The following error is seen in the nova logs of these jobs, which may or may not be relevant: No cells are configured, unable to continue This change creates the cell0 and cell1 databases prior to starting nova services. In order to do this, we must create new containers in which to run the nova-manage commands, because the nova-api container may not yet exist. This required adding support to the kolla_docker module for specifying a command for the container to run that overrides the image's command. We also add the standard output and error to the module's result when a non-detached container is run. A secondary benefit of this is that the output of bootstrap containers is now displayed in the Ansible output if the bootstrapping command fails, which will help with debugging. Change-Id: I2c1e991064f9f588f398ccbabda94f69dc285e61 Closes-Bug: #1808575
52 lines
1.5 KiB
YAML
52 lines
1.5 KiB
YAML
---
|
|
- name: Create cell0 mappings
|
|
vars:
|
|
nova_api: "{{ nova_services['nova-api'] }}"
|
|
become: true
|
|
kolla_docker:
|
|
action: "start_container"
|
|
command: bash -c 'sudo -E kolla_set_configs && nova-manage cell_v2 map_cell0'
|
|
common_options: "{{ docker_common_options }}"
|
|
detach: False
|
|
image: "{{ nova_api.image }}"
|
|
labels:
|
|
BOOTSTRAP:
|
|
name: "create_cell0_nova"
|
|
restart_policy: "never"
|
|
volumes: "{{ nova_api.volumes|reject('equalto', '')|list }}"
|
|
register: map_cell0
|
|
changed_when:
|
|
- map_cell0 is success
|
|
- '"Cell0 is already setup" not in map_cell0.stdout'
|
|
failed_when:
|
|
- map_cell0.rc != 0
|
|
run_once: True
|
|
delegate_to: "{{ groups[nova_api.group][0] }}"
|
|
|
|
- include_tasks: bootstrap_service.yml
|
|
when: map_cell0.changed
|
|
|
|
- name: Create base cell for legacy instances
|
|
vars:
|
|
nova_api: "{{ nova_services['nova-api'] }}"
|
|
become: true
|
|
kolla_docker:
|
|
action: "start_container"
|
|
command: bash -c 'sudo -E kolla_set_configs && nova-manage cell_v2 create_cell'
|
|
common_options: "{{ docker_common_options }}"
|
|
detach: False
|
|
image: "{{ nova_api.image }}"
|
|
labels:
|
|
BOOTSTRAP:
|
|
name: "create_cell_nova"
|
|
restart_policy: "never"
|
|
volumes: "{{ nova_api.volumes|reject('equalto', '')|list }}"
|
|
register: base_cell
|
|
changed_when:
|
|
- base_cell is success
|
|
failed_when:
|
|
- base_cell.rc != 0
|
|
- '"already exists" not in base_cell.stdout'
|
|
run_once: True
|
|
delegate_to: "{{ groups[nova_api.group][0] }}"
|