--- - name: Configure caddy hosts: hostnode vars: become: false pre_tasks: - name: Load variables ansible.builtin.include_vars: '{{ item }}' with_first_found: - "vars/default.yml" tasks: - name: set up reverse proxy include_tasks: caddyinstall.ansible.yml when: INSTALL_CADDY - name: copy existing Caddyfile to make sure there is a backup ansible.builtin.copy: src: "{{ CADDYFILE_LOC }}" remote_src: true dest: "{{ CADDYFILE_LOC }}.bak" owner: root group: root mode: '0644' - name: Insert/Update configuration using a local file and validate it ansible.builtin.blockinfile: block: "{{ lookup('ansible.builtin.file', './caddyfile/Caddyfile') }}" path: "{{ CADDYFILE_LOC }}" insertafter: "####" - name: restart Caddy ansible.builtin.systemd_service: name: caddy state: restarted daemon_reload: true - name: Pause play until a URL is reachable from this host ansible.builtin.uri: url: "https://localhost" follow_redirects: none method: GET validate_certs: false register: _result until: _result.status == 200 retries: 6 # 6 * 5 seconds = 30sec delay: 5 # Every 5 seconds ignore_errors: true - name: if _result.status != 200 revert file ansible.builtin.copy: src: /Caddyfile.bak remote_src: true dest: /Caddyfile owner: root group: root mode: '0644' when: _result.status != 200 - name: restart Caddy ansible.builtin.systemd_service: name: caddy state: restarted daemon_reload: true when: _result.status != 200 - name: if _result.status != 200, fail ansible.builtin.fail: msg: you messed up your config doofus when: _result.status != 200