From b30c7bc87ba4d87a974ef25b2c6585b6b4fda9a3 Mon Sep 17 00:00:00 2001 From: Michal Nasiadka Date: Fri, 21 Oct 2022 12:00:09 +0200 Subject: [PATCH] rabbitmq: Do not stop containers on upgrade Since RMQ 3.8 we can use rolling upgrade [1]. Depends-On: https://review.opendev.org/c/openstack/kolla/+/872393 [1]: https://www.rabbitmq.com/upgrade.html#rolling-upgrades Change-Id: If6a7c6c12d9226a2406728108b3c87b3485ac55f --- ansible/roles/rabbitmq/defaults/main.yml | 7 ++++ ansible/roles/rabbitmq/tasks/deploy.yml | 2 + .../roles/rabbitmq/tasks/feature-flags.yml | 10 +++++ ansible/roles/rabbitmq/tasks/upgrade.yml | 39 +------------------ ...itmq-upgrade-no-stop-5f41197623de3794.yaml | 5 +++ 5 files changed, 26 insertions(+), 37 deletions(-) create mode 100644 ansible/roles/rabbitmq/tasks/feature-flags.yml create mode 100644 releasenotes/notes/rabbitmq-upgrade-no-stop-5f41197623de3794.yaml diff --git a/ansible/roles/rabbitmq/defaults/main.yml b/ansible/roles/rabbitmq/defaults/main.yml index dc807ef590..32368ae0ee 100644 --- a/ansible/roles/rabbitmq/defaults/main.yml +++ b/ansible/roles/rabbitmq/defaults/main.yml @@ -118,3 +118,10 @@ rabbitmq_plugins: enabled: "{{ rabbitmq_enable_prometheus_plugin | bool }}" rabbitmq_enabled_plugins: "{{ rabbitmq_plugins | selectattr('enabled', 'equalto', true) | list }}" + +rabbitmq_feature_flags: + - "quorum_queue" + - "implicit_default_bindings" + - "virtual_host_metadata" + - "maintenance_mode_status" + - "user_limits" diff --git a/ansible/roles/rabbitmq/tasks/deploy.yml b/ansible/roles/rabbitmq/tasks/deploy.yml index d0b36cb78b..6357f9a88c 100644 --- a/ansible/roles/rabbitmq/tasks/deploy.yml +++ b/ansible/roles/rabbitmq/tasks/deploy.yml @@ -7,3 +7,5 @@ - name: Flush handlers meta: flush_handlers + +- import_tasks: feature-flags.yml diff --git a/ansible/roles/rabbitmq/tasks/feature-flags.yml b/ansible/roles/rabbitmq/tasks/feature-flags.yml new file mode 100644 index 0000000000..f889086a73 --- /dev/null +++ b/ansible/roles/rabbitmq/tasks/feature-flags.yml @@ -0,0 +1,10 @@ +--- +- name: Enable feature flags + kolla_toolbox: + container_engine: "{{ kolla_container_engine }}" + module_name: "community.rabbitmq.rabbitmq_feature_flag" + module_args: + name: "{{ item }}" + user: root + become: true + loop: "{{ rabbitmq_feature_flags }}" diff --git a/ansible/roles/rabbitmq/tasks/upgrade.yml b/ansible/roles/rabbitmq/tasks/upgrade.yml index d51da2f33f..82632c5ace 100644 --- a/ansible/roles/rabbitmq/tasks/upgrade.yml +++ b/ansible/roles/rabbitmq/tasks/upgrade.yml @@ -1,44 +1,9 @@ --- -# NOTE(pbourke): These tasks perform a 'full stop upgrade', which is necessary when moving between -# major releases. In future kolla-ansible releases we may be able to change this to a rolling -# restart. For info on this process see https://www.rabbitmq.com/upgrade.html -- name: Checking if rabbitmq container needs upgrading - vars: - service_name: "rabbitmq" - service: "{{ rabbitmq_services[service_name] }}" - become: true - kolla_docker: - action: "compare_image" - common_options: "{{ docker_common_options }}" - name: "{{ project_name }}" - image: "{{ rabbitmq_image_full }}" - environment: "{{ service.environment }}" - when: inventory_hostname in groups[role_rabbitmq_groups] - register: rabbitmq_differs - - import_tasks: config.yml +- import_tasks: feature-flags.yml + - import_tasks: check-containers.yml -- name: Stopping all rabbitmq instances but the first node - become: true - kolla_docker: - action: "stop_container" - common_options: "{{ docker_common_options }}" - name: "{{ project_name }}" - when: - - inventory_hostname != groups[role_rabbitmq_groups] | first - - rabbitmq_differs['result'] - -- name: Stopping rabbitmq on the first node - become: true - kolla_docker: - action: "stop_container" - common_options: "{{ docker_common_options }}" - name: "{{ project_name }}" - when: - - inventory_hostname == groups[role_rabbitmq_groups] | first - - rabbitmq_differs['result'] - - name: Flush handlers meta: flush_handlers diff --git a/releasenotes/notes/rabbitmq-upgrade-no-stop-5f41197623de3794.yaml b/releasenotes/notes/rabbitmq-upgrade-no-stop-5f41197623de3794.yaml new file mode 100644 index 0000000000..17dc9659b8 --- /dev/null +++ b/releasenotes/notes/rabbitmq-upgrade-no-stop-5f41197623de3794.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + Changes ``rabbitmq`` upgrade procedure from full stop of a cluster to + a rolling upgrade that is supported since RabbitMQ 3.8.