diff --git a/releasenotes/notes/feature-flags-9faf32a3d49af4fc.yaml b/releasenotes/notes/feature-flags-9faf32a3d49af4fc.yaml new file mode 100644 index 00000000..cda81f7e --- /dev/null +++ b/releasenotes/notes/feature-flags-9faf32a3d49af4fc.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - | + Support is added to enable all stable RabbitMQ feature flags by default. + This happens automatically post upgrade, and avoids compatibility issues + which could occur when installing a new version of RabbitMQ. diff --git a/tasks/main.yml b/tasks/main.yml index d886800b..eae18ec2 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -81,3 +81,7 @@ - name: Flush handlers meta: flush_handlers + +- name: Importing rabbitmq_feature_flags tasks + import_tasks: rabbitmq_feature_flags.yml + when: _rabbitmq_is_last_play_host diff --git a/tasks/rabbitmq_feature_flags.yml b/tasks/rabbitmq_feature_flags.yml new file mode 100644 index 00000000..33b047a0 --- /dev/null +++ b/tasks/rabbitmq_feature_flags.yml @@ -0,0 +1,45 @@ +--- +# Copyright 2024, BBC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: "Gather cluster status" + command: "rabbitmqctl cluster_status --formatter json" + register: _cluster_status + changed_when: False + tags: + - rabbitmq-upgrade + +- name: "Only enable feature flags if all cluster members are up and stable" + block: + - name: "Check for disabled RabbitMQ feature flags" + shell: "rabbitmqctl list_feature_flags | grep disabled" + args: + executable: /bin/bash + register: _feature_flags + changed_when: False + failed_when: False + + # NOTE: changed_when required despite the above check because 'unstable' + # feature flags will remain disabled each time this runs + - name: "Enable all RabbitMQ feature flags" + command: "rabbitmqctl enable_feature_flag all" + changed_when: False + when: + - (_feature_flags.stdout_lines | length) > 0 + when: + - ((_cluster_status.stdout | from_json)['running_nodes'] | length) == (groups[rabbitmq_host_group] | length) + - ((_cluster_status.stdout | from_json)['alarms'] | length) == 0 + - ((_cluster_status.stdout | from_json)['partitions'] | length) == 0 + tags: + - rabbitmq-upgrade diff --git a/vars/main.yml b/vars/main.yml new file mode 100644 index 00000000..4adb9ce3 --- /dev/null +++ b/vars/main.yml @@ -0,0 +1,19 @@ +--- +# Copyright 2024, BBC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +_rabbitmq_is_last_play_host: >- + {{ + (inventory_hostname == (groups[rabbitmq_host_group] | intersect(ansible_play_hosts)) | last) | bool + }}