fix(rabbitmq): stop/warn if spec is changed
diff --git a/galaxy.yml b/galaxy.yml
index 82b4ded..cf6dd31 100644
--- a/galaxy.yml
+++ b/galaxy.yml
@@ -10,6 +10,7 @@
dependencies:
ansible.netcommon: 1.2.0
ansible.posix: 1.3.0
+ ansible.utils: 2.9.0
community.crypto: 2.2.3
community.general: 4.5.0
kubernetes.core: 2.3.2
diff --git a/roles/rabbitmq/defaults/main.yml b/roles/rabbitmq/defaults/main.yml
new file mode 100644
index 0000000..c630933
--- /dev/null
+++ b/roles/rabbitmq/defaults/main.yml
@@ -0,0 +1,18 @@
+# Copyright (c) 2022 VEXXHOST, Inc.
+#
+# 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.
+
+# Skip printing a diff of the RabbitMQ cluster spec and accept all changes.
+rabbitmq_skip_spec_diff: false
+
+rabbitmq_spec: {}
diff --git a/roles/rabbitmq/tasks/main.yml b/roles/rabbitmq/tasks/main.yml
index 2cc5468..6e0872d 100644
--- a/roles/rabbitmq/tasks/main.yml
+++ b/roles/rabbitmq/tasks/main.yml
@@ -12,6 +12,30 @@
# License for the specific language governing permissions and limitations
# under the License.
+- name: Verify state of current RabbitMQ cluster
+ kubernetes.core.k8s_info:
+ api_version: rabbitmq.com/v1beta1
+ kind: RabbitmqCluster
+ name: "rabbitmq-{{ rabbitmq_cluster_name }}"
+ namespace: openstack
+ register: _rabbitmq_cluster
+
+- name: Wait for confirmation if RabbitMQ cluster spec doesn't match
+ when:
+ - not rabbitmq_skip_spec_diff | bool
+ - _rabbitmq_cluster.resources | length > 0
+ - _rabbitmq_cluster.resources[0].spec != _rabbitmq_merged_spec
+ vars:
+ _rabbitmq_merged_spec: "{{ _rabbitmq_spec | combine(rabbitmq_spec, recursive=True) }}"
+ block:
+ - name: Print diff of RabbitMQ cluster spec
+ ansible.utils.fact_diff:
+ before: "{{ _rabbitmq_cluster.resources[0].spec }}"
+ after: "{{ _rabbitmq_merged_spec }}"
+
+ - name: Wait for confirmation of RabbitMQ cluster spec
+ ansible.builtin.pause:
+
- name: Deploy cluster
kubernetes.core.k8s:
state: present
@@ -21,28 +45,7 @@
metadata:
name: "rabbitmq-{{ rabbitmq_cluster_name }}"
namespace: openstack
- spec:
- image: "{{ atmosphere_images['rabbitmq_server'] | vexxhost.atmosphere.docker_image('ref') }}"
- affinity:
- nodeAffinity:
- requiredDuringSchedulingIgnoredDuringExecution:
- nodeSelectorTerms:
- - matchExpressions:
- - key: openstack-control-plane
- operator: In
- values:
- - enabled
- rabbitmq:
- additionalConfig: |
- vm_memory_high_watermark.relative = 0.9
- resources:
- limits:
- cpu: "1"
- memory: 2Gi
- requests:
- cpu: 500m
- memory: 1Gi
- terminationGracePeriodSeconds: 15
+ spec: "{{ _rabbitmq_spec | combine(rabbitmq_spec, recursive=True) }}"
wait: true
wait_timeout: 600
wait_condition:
diff --git a/roles/rabbitmq/vars/main.yml b/roles/rabbitmq/vars/main.yml
new file mode 100644
index 0000000..616d069
--- /dev/null
+++ b/roles/rabbitmq/vars/main.yml
@@ -0,0 +1,44 @@
+# Copyright (c) 2022 VEXXHOST, Inc.
+#
+# 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_spec:
+ image: "{{ atmosphere_images['rabbitmq_server'] | vexxhost.atmosphere.docker_image('ref') }}"
+ affinity:
+ nodeAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ nodeSelectorTerms:
+ - matchExpressions:
+ - key: openstack-control-plane
+ operator: In
+ values:
+ - enabled
+ override: {}
+ persistence:
+ storage: 10Gi
+ rabbitmq:
+ additionalConfig: |
+ vm_memory_high_watermark.relative = 0.9
+ replicas: 1
+ resources:
+ limits:
+ cpu: "1"
+ memory: 2Gi
+ requests:
+ cpu: 500m
+ memory: 1Gi
+ secretBackend: {}
+ service:
+ type: ClusterIP
+ terminationGracePeriodSeconds: 15
+ tls: {}