aboutsummaryrefslogtreecommitdiff
path: root/docker
diff options
context:
space:
mode:
Diffstat (limited to 'docker')
-rw-r--r--docker/rabbitmq/Dockerfile.j23
-rw-r--r--docker/rabbitmq/rabbitmq_get_gospel_node.py70
2 files changed, 72 insertions, 1 deletions
diff --git a/docker/rabbitmq/Dockerfile.j2 b/docker/rabbitmq/Dockerfile.j2
index b9c967b9a..155550011 100644
--- a/docker/rabbitmq/Dockerfile.j2
+++ b/docker/rabbitmq/Dockerfile.j2
@@ -28,7 +28,8 @@ RUN rm -rf /var/lib/rabbitmq/* \
COPY extend_start.sh /usr/local/bin/kolla_extend_start
COPY rabbitmq_sudoers /etc/sudoers.d/rabbitmq_sudoers
-RUN chmod 755 /usr/local/bin/kolla_extend_start \
+COPY rabbitmq_get_gospel_node.py /usr/local/bin/rabbitmq_get_gospel_node
+RUN chmod 755 /usr/local/bin/kolla_extend_start /usr/local/bin/rabbitmq_get_gospel_node \
&& chmod 750 /etc/sudoers.d \
&& chmod 440 /etc/sudoers.d/rabbitmq_sudoers \
&& usermod -a -G kolla rabbitmq
diff --git a/docker/rabbitmq/rabbitmq_get_gospel_node.py b/docker/rabbitmq/rabbitmq_get_gospel_node.py
new file mode 100644
index 000000000..3925f00dd
--- /dev/null
+++ b/docker/rabbitmq/rabbitmq_get_gospel_node.py
@@ -0,0 +1,70 @@
+#!/usr/bin/python
+
+# 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.
+
+import json
+import re
+import subprocess
+import traceback
+
+
+def convert_erlang_to_json(term):
+ term = re.sub('[\s+]', '', term)
+ term = re.sub('([<>].*?)}', r'"\1"}', term)
+ term = re.sub('{([a-z].*?),', r'{"\1":', term)
+ term = re.sub(':([a-z].*?)}', r':"\1"}', term)
+ return json.loads(term)
+
+
+def main():
+ try:
+ raw_status = subprocess.check_output(
+ "rabbitmqctl eval 'rabbit_clusterer:status().'",
+ shell=True, stderr=subprocess.STDOUT
+ )
+ if "Rabbit is running in cluster configuration" not in raw_status:
+ raise AttributeError
+ status = convert_erlang_to_json(
+ '\n'.join(raw_status.split('\n')[1:-3])
+ )
+
+ gospel_node = None
+ for msg in status:
+ if 'gospel' in msg:
+ gospel_node = msg['gospel']['node'].split('@')[1]
+ if gospel_node is None:
+ raise AttributeError
+ except AttributeError:
+ result = {
+ 'failed': True,
+ 'error': raw_status,
+ 'changed': True
+ }
+ except Exception:
+ result = {
+ 'failed': True,
+ 'error': traceback.format_exc(),
+ 'changed': True
+ }
+ else:
+ result = {
+ 'failed': False,
+ 'hostname': gospel_node,
+ 'changed': False
+ }
+
+ print(json.dumps(result))
+
+
+if __name__ == '__main__':
+ main()