--- - name: Pending restart for Patroni block: - name: Wait for Patroni leader vars: _query: 'json.members[].role' ansible.builtin.uri: url: "{{ 'https://' if patroni_ssl else 'http://' }}{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:{{ patroni_restapi_listen_port }}/cluster" method: GET body_format: json status_code: - 200 - 503 register: patroni_role until: patroni_role | json_query(_query) | regex_findall('leader') | count > 0 retries: 100 delay: 10 - name: Get Patroni nodes roles ansible.builtin.uri: url: "{{ 'https://' if patroni_ssl else 'http://' }}{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:{{ patroni_restapi_listen_port }}" method: GET body_format: json status_code: - 200 - 503 register: patroni_role - name: Set fact about roles set_fact: role: "{{ patroni_role.json.role }}" - name: Restart if pending restart throttle: 1 ansible.builtin.uri: url: "{{ 'https://' if patroni_ssl else 'http://' }}{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:{{ patroni_restapi_listen_port }}/restart" user: "{{ patroni_restapi_username }}" password: "{{ patroni_restapi_password }}" method: POST body: '{ "restart_pending": true }' force_basic_auth: yes status_code: - 200 - 503 #when: # - "hostvars[inventory_hostname]['role'] == 'master'"