- name: Get list of current Swift storage node IPs ansible.builtin.shell: | {{ oc_header }} oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get > /dev/null 2>&1 ; swift-ring-builder object.builder search _ | tail -n +2 | awk "{print \$4}" | sort -u' register: swift_node_list_result - name: setup nameserver on standalone node ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} CONTROLLER1_SSH="{{ controller1_ssh }}" echo "nameserver $(oc get service dnsmasq-dns -o jsonpath='{.status.loadBalancer.ingress[0].ip}')" | $CONTROLLER1_SSH tee /etc/resolv.conf - name: run swift-dispersion-populate ansible.builtin.shell: | {{ oc_header }} oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-dispersion-populate' - name: start swift-storage instances ansible.builtin.shell: | {{ oc_header }} oc patch openstackcontrolplane openstack --type=merge -p='{"spec":{"swift":{"template":{"swiftStorage":{"replicas": 3}}}}}' - name: wait until all pods are ready ansible.builtin.shell: | {{ oc_header }} oc wait pods --for condition=Ready --timeout=60s -l component=swift-storage register: swift_storage_ready_result until: swift_storage_ready_result is success retries: 60 delay: "{{ swift_migration_delay }}" - name: wait until ring configmap includes new pv devices ansible.builtin.shell: | {{ oc_header }} oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c "swift-ring-tool get && swift-ring-builder object.builder search --device pv" register: result until: result.rc == 0 and 'No matching devices found' not in result.stdout retries: 15 delay: 60 - name: set standalone node weight to 0 in swift rings ansible.builtin.shell: | {{ oc_header }} oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c ' swift-ring-tool get while read -r node; do swift-ring-tool drain ${node} done <<< "{{ swift_node_list_result.stdout }}" swift-ring-tool push' - name: "rebalance rings and wait until replication finished - iteration {{ item }}" ansible.builtin.include_tasks: rebalance_and_wait.yaml loop: [1, 2, 3] - name: wait until /srv/node on standalone is drained ansible.builtin.shell: | {{ shell_header }} CONTROLLER1_SSH="{{ controller1_ssh }}" $CONTROLLER1_SSH "timeout 900s bash -c 'while \$(find /srv/node/ -ignore_readdir_race -type f -name \"*.db\" -o -name \"*.data\" | grep -q \".\"); do sleep 5; done'" - name: remove standalone node from rings ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} CONTROLLER1_SSH="{{ controller1_ssh }}" oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c ' swift-ring-tool get while read -r node; do swift-ring-tool drain ${node} done <<< "{{ swift_node_list_result.stdout }}" swift-ring-tool rebalance swift-ring-tool push'