832989d0a6
We run some nova tasks once per cell, using a condition to match a single host in the cell. In other similar tasks, we use run_once, which will fail all hosts if the task fails. Typically these tasks are critical, and that is desirable. However, with the approach used in nova-cell to support multiple cells, if a once-per-cell task fails, then other hosts will continue to execute, which could lead to unexpected results. This change adds any_errors_fatal to the plays or blocks that run these tasks. Closes-Bug: #1948694 Change-Id: I2a5871ccd4e8198171ef3239ce95f475f3e4b051
273 lines
6.9 KiB
YAML
273 lines
6.9 KiB
YAML
---
|
|
# This playbook is for nova services. Due to support for deployment of cells,
|
|
# nova is separated into two roles - nova and nova-cell. This makes it more
|
|
# complicated than other services, as we may execute each role several times
|
|
# for a given operation.
|
|
#
|
|
# The nova role now deploys the global services:
|
|
#
|
|
# * nova-api
|
|
# * nova-scheduler
|
|
# * nova-super-conductor (if enable_cells is true)
|
|
#
|
|
# The nova-cell role handles services specific to a cell:
|
|
#
|
|
# * nova-compute
|
|
# * nova-compute-ironic
|
|
# * nova-conductor
|
|
# * nova-libvirt
|
|
# * nova-novncproxy
|
|
# * nova-serialproxy
|
|
# * nova-spicehtml5proxy
|
|
# * nova-ssh
|
|
|
|
# We need to perform database bootstrapping before deploying or upgrading any
|
|
# containers, to ensure all database schema migrations have been performed,
|
|
# both in the API and cell databases. Note that this should not be disruptive
|
|
# to the Nova services, which will continue to run against the new schema.
|
|
|
|
- name: Bootstrap nova API databases
|
|
gather_facts: false
|
|
hosts:
|
|
- nova-api
|
|
- '&enable_nova_True'
|
|
tags:
|
|
- nova
|
|
- nova-bootstrap
|
|
- nova-api
|
|
- nova-api-bootstrap
|
|
serial: '{{ kolla_serial|default("0") }}'
|
|
tasks:
|
|
# * Create nova API & cell0 DBs & users
|
|
# * API DB schema migrations
|
|
# * Map cell0
|
|
# * Cell0 DB schema migrations
|
|
- name: Bootstrap deploy
|
|
include_role:
|
|
name: nova
|
|
tasks_from: bootstrap
|
|
when:
|
|
- enable_nova | bool
|
|
- kolla_action in ['deploy', 'reconfigure']
|
|
|
|
# * API DB schema migrations
|
|
# * Cell0 DB schema migrations
|
|
- name: Bootstrap upgrade
|
|
include_role:
|
|
name: nova
|
|
tasks_from: bootstrap_upgrade
|
|
when:
|
|
- enable_nova | bool
|
|
- kolla_action == 'upgrade'
|
|
|
|
- name: Bootstrap nova cell databases
|
|
gather_facts: false
|
|
hosts:
|
|
- nova-conductor
|
|
- '&enable_nova_True'
|
|
tags:
|
|
- nova
|
|
- nova-bootstrap
|
|
- nova-cell
|
|
- nova-cell-bootstrap
|
|
serial: '{{ kolla_serial|default("0") }}'
|
|
# Fail all hosts if any of these once-per-cell tasks fails.
|
|
any_errors_fatal: true
|
|
tasks:
|
|
# * Create nova cell DBs & users
|
|
# * Create RabbitMQ vhost & user
|
|
# * Cell DB schema migrations
|
|
# * Create cell mappings
|
|
- name: Bootstrap deploy
|
|
include_role:
|
|
name: nova-cell
|
|
tasks_from: bootstrap
|
|
when:
|
|
- enable_nova | bool
|
|
- kolla_action in ['deploy', 'reconfigure']
|
|
|
|
# * Cell DB schema migrations
|
|
- name: Bootstrap upgrade
|
|
include_role:
|
|
name: nova-cell
|
|
tasks_from: bootstrap_upgrade
|
|
when:
|
|
- enable_nova | bool
|
|
- kolla_action == 'upgrade'
|
|
|
|
# Standard {{ kolla_action }}.yml for nova role.
|
|
- name: Apply role nova
|
|
gather_facts: false
|
|
hosts:
|
|
- nova-api
|
|
- nova-scheduler
|
|
- nova-super-conductor
|
|
- '&enable_nova_True'
|
|
tags:
|
|
- nova
|
|
- nova-api
|
|
- nova-api-deploy
|
|
- nova-api-upgrade
|
|
serial: '{{ kolla_serial|default("0") }}'
|
|
roles:
|
|
- role: nova
|
|
when: enable_nova | bool
|
|
|
|
# Standard {{ kolla_action }}.yml for nova-cell role.
|
|
- name: Apply role nova-cell
|
|
gather_facts: false
|
|
hosts:
|
|
- compute
|
|
- nova-compute-ironic
|
|
- nova-conductor
|
|
- nova-novncproxy
|
|
- nova-serialproxy
|
|
- nova-spicehtml5proxy
|
|
- '&enable_nova_True'
|
|
tags:
|
|
- nova
|
|
- nova-cell
|
|
- nova-cell-deploy
|
|
- nova-cell-upgrade
|
|
serial: '{{ kolla_serial|default("0") }}'
|
|
roles:
|
|
- role: nova-cell
|
|
when: enable_nova | bool
|
|
|
|
# Reload nova scheduler to pick up new cells.
|
|
# TODO(mgoddard): Ideally we'd only do this when one or more cells have been
|
|
# created or updated.
|
|
- name: Refresh nova scheduler cell cache
|
|
gather_facts: false
|
|
hosts:
|
|
- nova-scheduler
|
|
- '&enable_nova_True'
|
|
tags:
|
|
- nova
|
|
- nova-api
|
|
- nova-refresh-scheduler-cell-cache
|
|
serial: '{{ kolla_serial|default("0") }}'
|
|
tasks:
|
|
- import_role:
|
|
name: nova
|
|
tasks_from: refresh_scheduler_cell_cache
|
|
when:
|
|
- enable_nova | bool
|
|
- kolla_action in ['deploy', 'reconfigure']
|
|
|
|
# Following an upgrade, Nova services must be restarted once all compute
|
|
# services have registered themselves, to remove the RPC version pin.
|
|
# Also, when nova_safety_upgrade is true, this starts services which were
|
|
# stopped during the upgrade. Nova upgrade documentation recommends starting
|
|
# conductors first and API last.
|
|
|
|
- name: Reload global Nova super conductor services
|
|
gather_facts: false
|
|
hosts:
|
|
- nova-super-conductor
|
|
- '&enable_nova_True'
|
|
tags:
|
|
- nova
|
|
- nova-reload
|
|
- nova-api
|
|
- nova-api-reload
|
|
serial: '{{ kolla_serial|default("0") }}'
|
|
tasks:
|
|
- import_role:
|
|
name: nova
|
|
tasks_from: reload_super_conductor
|
|
when:
|
|
- enable_nova | bool
|
|
- kolla_action == 'upgrade'
|
|
|
|
- name: Reload Nova cell services
|
|
gather_facts: false
|
|
hosts:
|
|
- compute
|
|
- nova-compute-ironic
|
|
- nova-conductor
|
|
- nova-novncproxy
|
|
- nova-serialproxy
|
|
- nova-spicehtml5proxy
|
|
- '&enable_nova_True'
|
|
tags:
|
|
- nova
|
|
- nova-reload
|
|
- nova-cell
|
|
- nova-cell-reload
|
|
serial: '{{ kolla_serial|default("0") }}'
|
|
tasks:
|
|
- import_role:
|
|
name: nova-cell
|
|
tasks_from: reload
|
|
when:
|
|
- enable_nova | bool
|
|
- kolla_action == 'upgrade'
|
|
|
|
- name: Reload global Nova API services
|
|
gather_facts: false
|
|
hosts:
|
|
- nova-api
|
|
- nova-scheduler
|
|
- '&enable_nova_True'
|
|
tags:
|
|
- nova
|
|
- nova-reload
|
|
- nova-api
|
|
- nova-api-reload
|
|
serial: '{{ kolla_serial|default("0") }}'
|
|
tasks:
|
|
- import_role:
|
|
name: nova
|
|
tasks_from: reload_api
|
|
when:
|
|
- enable_nova | bool
|
|
- kolla_action == 'upgrade'
|
|
|
|
# Following an upgrade, data migrations should be performed for the API
|
|
# database. This should be done once all cells have been upgraded.
|
|
|
|
- name: Run Nova API online data migrations
|
|
gather_facts: false
|
|
hosts:
|
|
- nova-api
|
|
- '&enable_nova_True'
|
|
tags:
|
|
- nova
|
|
- nova-api
|
|
- nova-online-data-migrations
|
|
- nova-api-online-data-migrations
|
|
serial: '{{ kolla_serial|default("0") }}'
|
|
tasks:
|
|
- import_role:
|
|
name: nova
|
|
tasks_from: online_data_migrations
|
|
when:
|
|
- enable_nova | bool
|
|
- kolla_action == 'upgrade'
|
|
|
|
# Following an upgrade, data migrations should be performed for each cell
|
|
# database. This should be done once all hosts in the cell have been upgraded,
|
|
# and ideally once all hosts in the cloud have been upgraded.
|
|
|
|
- name: Run Nova cell online data migrations
|
|
gather_facts: false
|
|
hosts:
|
|
- nova-conductor
|
|
- '&enable_nova_True'
|
|
tags:
|
|
- nova
|
|
- nova-cell
|
|
- nova-online-data-migrations
|
|
- nova-cell-online-data-migrations
|
|
serial: '{{ kolla_serial|default("0") }}'
|
|
# Fail all hosts if any of these once-per-cell tasks fails.
|
|
any_errors_fatal: true
|
|
tasks:
|
|
- import_role:
|
|
name: nova-cell
|
|
tasks_from: online_data_migrations
|
|
when:
|
|
- enable_nova | bool
|
|
- kolla_action == 'upgrade'
|