From f7b7ba30d9680af3058afbd81290243f81bd3998 Mon Sep 17 00:00:00 2001 From: Guillaume Abrioux Date: Fri, 18 Mar 2022 13:41:17 +0100 Subject: [PATCH] upgrade: block upgrade when rgw multisite is active With this commit, upgrading a cluster from Nautilus to Pacific with active rgw multisite replication will be blocked. This is because a lot of bugs are currently present in Pacific regarding RGW multisite. Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2063702 Signed-off-by: Guillaume Abrioux (cherry picked from commit 51bc8cb63642b5b1ca460e79adf4649d92773aa4) --- infrastructure-playbooks/rolling_update.yml | 51 +++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/infrastructure-playbooks/rolling_update.yml b/infrastructure-playbooks/rolling_update.yml index 7783ce4ef..f95989a69 100644 --- a/infrastructure-playbooks/rolling_update.yml +++ b/infrastructure-playbooks/rolling_update.yml @@ -98,6 +98,57 @@ - import_role: name: ceph-facts + - name: block upgrade when rgw-multisite is active + when: groups.get(rgw_group_name, []) | length > 0 + block: + - name: set_fact radosgw_cmd + set_fact: + radosgw_cmd: "{{ container_binary + ' run --rm --net=host -v /etc/ceph:/etc/ceph:z -v /var/lib/ceph:/var/lib/ceph:z -v /var/run/ceph:/var/run/ceph:z --entrypoint=radosgw-admin ' + ceph_docker_registry + '/' + ceph_docker_image + ':' + ceph_docker_image_tag if containerized_deployment | bool else 'radosgw-admin' }}" + + - name: get list of realms + command: "{{ radosgw_cmd }} --cluster {{ cluster }} realm list" + register: period_output + changed_when: false + run_once: true + delegate_to: "{{ groups[mon_group_name][0] }}" + + - name: set_fact realms + set_fact: + realms: "{{ (period_output.stdout | default('{}') | from_json)['realms'] }}" + run_once: true + + - name: get the periods + command: "{{ radosgw_cmd }} --cluster {{ cluster }} --rgw-realm={{ item }} period get" + register: period_list + changed_when: false + run_once: true + delegate_to: "{{ groups[mon_group_name][0] }}" + loop: "{{ realms }}" + + - name: set_fact periods + set_fact: + periods: "{{ periods | default([]) | union([(item.stdout | default('{}') | from_json)['period_map']['zonegroups']]) }}" + loop: "{{ period_list.results }}" + run_once: true + + - name: fail if there is more than 1 zonegroup per realm (rgw multisite) + fail: + msg: "This release of Ceph doesn't allow upgrading with rgw multisite." + when: + - periods is defined + - periods | map(attribute='name') | length != periods | length + run_once: true + + - name: fail if at least 1 zonegroup has more than 1 zone (rgw multisite) + fail: + msg: "This release of Ceph doesn't allow upgrading with rgw multisite." + loop: "{{ periods }}" + run_once: true + when: + - periods is defined + - periods | map(attribute='name') | length == periods | length + - item[0]['zones'] | length > 1 + - import_role: name: ceph-infra