aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ansible/rabbitmq-reset-state.yml10
-rw-r--r--ansible/roles/rabbitmq/tasks/reset-state.yml16
-rw-r--r--doc/source/reference/message-queues/rabbitmq.rst32
-rw-r--r--releasenotes/notes/command-to-force-reset-rabbitmq-state-7ec4414fd2a63d16.yaml7
-rwxr-xr-xtools/kolla-ansible6
5 files changed, 60 insertions, 11 deletions
diff --git a/ansible/rabbitmq-reset-state.yml b/ansible/rabbitmq-reset-state.yml
new file mode 100644
index 000000000..c9d77915d
--- /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 000000000..ac9984467
--- /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 75c7bac15..eaa17e2ba 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 <service-tags>
+
+2. Generate the new config for all services.
+
+ .. code-block:: console
+
+ kolla-ansible genconfig
+
+3. Reconfigure RabbitMQ.
.. code-block:: console
- kolla-ansible reconfigure --tags rabbitmq --skip-tags rabbitmq-ha-precheck
+ kolla-ansible reconfigure --tags rabbitmq
-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.
+4. Reset the state on each RabbitMQ, to remove the old transient queues and
+ exchanges.
.. code-block:: console
- rabbitmqctl stop_app
- rabbitmqctl force_reset
- rabbitmqctl start_app
+ 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
-4. Reconfigure the OpenStack services using ``kolla-ansible reconfigure``, at
- which point they will start again and recreate the appropriate queues as
- durable.
+ kolla-ansible deploy --tags <service-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 000000000..e3b4678be
--- /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 1bf6d8fbd..6331b85f8 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