Skip to content
Snippets Groups Projects
Commit 23e7f6c2 authored by Michal (inc0) Jastrzebski's avatar Michal (inc0) Jastrzebski Committed by SamYaple
Browse files

Playbook for rabbitmq upgrade


Main issue with rabbitmq clusterer setup is to shut down gospel node
as last one, which is bulk of this change

Co-Authored-By: default avatarSam Yaple <sam@yaple.net>
Change-Id: I88e566a19ed813b0e3eef65ef7139ccfaa0c2700
Implements: blueprint upgrade-rabbitmq
Partially-implements: blueprint upgrade-kolla
parent f096cdcb
No related branches found
No related tags found
No related merge requests found
...@@ -14,3 +14,4 @@ rabbitmq_image_full: "{{ rabbitmq_image }}:{{ rabbitmq_tag }}" ...@@ -14,3 +14,4 @@ rabbitmq_image_full: "{{ rabbitmq_image }}:{{ rabbitmq_tag }}"
#################### ####################
rabbitmq_user: "openstack" rabbitmq_user: "openstack"
rabbitmq_cluster_name: "openstack" rabbitmq_cluster_name: "openstack"
rabbitmq_hostname: "{{ ansible_hostname }}"
--- ---
- include: config.yml
- name: Find gospel node
command: docker exec -t rabbitmq /usr/local/bin/rabbitmq_get_gospel_node
changed_when: "{{ (gospel_node.stdout | from_json).changed }}"
failed_when: "{{ (gospel_node.stdout | from_json).failed }}"
register: gospel_node
run_once: True
- name: Stopping non-gospel nodes
kolla_docker:
action: "stop_container"
common_options: "{{ docker_common_options }}"
name: "rabbitmq"
when: rabbitmq_hostname != (gospel_node.stdout | from_json).hostname
- include: start.yml
when: rabbitmq_hostname == (gospel_node.stdout | from_json).hostname
- include: start.yml
when: rabbitmq_hostname != (gospel_node.stdout | from_json).hostname
...@@ -28,7 +28,8 @@ RUN rm -rf /var/lib/rabbitmq/* \ ...@@ -28,7 +28,8 @@ RUN rm -rf /var/lib/rabbitmq/* \
COPY extend_start.sh /usr/local/bin/kolla_extend_start COPY extend_start.sh /usr/local/bin/kolla_extend_start
COPY rabbitmq_sudoers /etc/sudoers.d/rabbitmq_sudoers 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 750 /etc/sudoers.d \
&& chmod 440 /etc/sudoers.d/rabbitmq_sudoers \ && chmod 440 /etc/sudoers.d/rabbitmq_sudoers \
&& usermod -a -G kolla rabbitmq && usermod -a -G kolla rabbitmq
......
#!/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()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment