diff --git a/ansible/rabbitmq-reset-state.yml b/ansible/rabbitmq-reset-state.yml new file mode 100644 index 0000000000..c9d77915db --- /dev/null +++ b/ansible/rabbitmq-reset-state.yml @@ -0,0 +1,10 @@ +--- +- name: Reset RabbitMQ state + hosts: rabbitmq + tasks: + - name: Include RabbitMQ reset-state tasks + include_role: + name: rabbitmq + tasks_from: reset-state + when: + - enable_rabbitmq | bool diff --git a/ansible/roles/rabbitmq/tasks/reset-state.yml b/ansible/roles/rabbitmq/tasks/reset-state.yml new file mode 100644 index 0000000000..ac9984467f --- /dev/null +++ b/ansible/roles/rabbitmq/tasks/reset-state.yml @@ -0,0 +1,16 @@ +--- +- name: Stop the RabbitMQ application + become: true + command: "{{ kolla_container_engine }} exec rabbitmq rabbitmqctl stop_app" + +- name: Reset the state of RabbitMQ + become: true + command: "{{ kolla_container_engine }} exec rabbitmq rabbitmqctl force_reset" + +- name: Start the RabbitMQ application + become: true + command: "{{ kolla_container_engine }} exec rabbitmq rabbitmqctl start_app" + +- name: Wait for all RabbitMQ nodes to join the cluster + become: true + command: "{{ kolla_container_engine }} exec rabbitmq rabbitmqctl await_online_nodes {{ groups['rabbitmq'] | length }}" diff --git a/doc/source/reference/message-queues/rabbitmq.rst b/doc/source/reference/message-queues/rabbitmq.rst index 75c7bac15d..eaa17e2ba8 100644 --- a/doc/source/reference/message-queues/rabbitmq.rst +++ b/doc/source/reference/message-queues/rabbitmq.rst @@ -125,22 +125,32 @@ needed to migrate from transient to durable queues. 1. Stop all OpenStack services which use RabbitMQ, so that they will not attempt to recreate any queues yet. -2. Reconfigure RabbitMQ to enable classic queue mirroring. + .. code-block:: console + + kolla-ansible stop --tags + +2. Generate the new config for all services. .. code-block:: console - kolla-ansible reconfigure --tags rabbitmq --skip-tags rabbitmq-ha-precheck + kolla-ansible genconfig -3. Reset the state on each RabbitMQ node with the following commands. Each - command must be run on all RabbitMQ nodes before moving on to the next - command. This will remove all queues. +3. Reconfigure RabbitMQ. .. code-block:: console - rabbitmqctl stop_app - rabbitmqctl force_reset - rabbitmqctl start_app + kolla-ansible reconfigure --tags rabbitmq -4. Reconfigure the OpenStack services using ``kolla-ansible reconfigure``, at - which point they will start again and recreate the appropriate queues as - durable. +4. Reset the state on each RabbitMQ, to remove the old transient queues and + exchanges. + + .. code-block:: console + + kolla-ansible rabbitmq-reset-state + +5. Start the OpenStack services again, at which point they will recreate the + appropriate queues as durable. + + .. code-block:: console + + kolla-ansible deploy --tags diff --git a/releasenotes/notes/command-to-force-reset-rabbitmq-state-7ec4414fd2a63d16.yaml b/releasenotes/notes/command-to-force-reset-rabbitmq-state-7ec4414fd2a63d16.yaml new file mode 100644 index 0000000000..e3b4678bee --- /dev/null +++ b/releasenotes/notes/command-to-force-reset-rabbitmq-state-7ec4414fd2a63d16.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + The new command ``kolla-ansible rabbitmq-reset-state`` has been added. It + force-resets the state of RabbitMQ. This is primarily designed to be used + when enabling HA queues, see docs: + https://docs.openstack.org/kolla-ansible/latest/reference/message-queues/rabbitmq.html#high-availability diff --git a/tools/kolla-ansible b/tools/kolla-ansible index 1bf6d8fbd6..6331b85f8a 100755 --- a/tools/kolla-ansible +++ b/tools/kolla-ansible @@ -193,6 +193,7 @@ Commands: gather-facts Gather Ansible facts post-deploy Do post deploy on deploy node pull Pull all images for containers (only pulls, no running container changes) + rabbitmq-reset-state Force reset the state of RabbitMQ reconfigure Reconfigure OpenStack service stop Stop Kolla containers certificates Generate self-signed certificate for TLS *For Development Only* @@ -241,6 +242,7 @@ deploy-servers gather-facts post-deploy pull +rabbitmq-reset-state reconfigure stop certificates @@ -567,6 +569,10 @@ EOF ACTION="Cleanup disabled nova_libvirt containers" PLAYBOOK="${BASEDIR}/ansible/nova-libvirt-cleanup.yml" ;; +(rabbitmq-reset-state) + ACTION="Force reset the state of RabbitMQ" + PLAYBOOK="${BASEDIR}/ansible/rabbitmq-reset-state.yml" + ;; (bash-completion) bash_completion exit 0