--- - name: Install lego tags: - lego block: - name: Check if lego is already installed stat: path: /usr/local/bin/lego register: lego check_mode: no - name: Check local version installed shell: set -o pipefail && /usr/local/bin/lego --version | sed 's|lego version \([^ ,+]*\).*|\1|' register: lego_locver changed_when: false check_mode: no when: - lego.stat.exists - name: Check online version # shell: set -o pipefail && curl -si {{ lego_base_url }}/releases/latest | grep -oP location:\ \\K.\* | sed 's|.*/tag/v\(.*\)|\1|' shell: set -o pipefail && curl -w "%{redirect_url}" -o /dev/null -s {{ lego_base_url }}/releases/latest | sed 's|.*/tag/v\(.*\)|\1|' register: lego_ver changed_when: false check_mode: no - name: Download lego block: - name: Make lego temporary directory file: path: /tmp/lego_install state: directory - name: Retreive lego archive file and extract it to temporary directory ansible.builtin.unarchive: src: "{{ lego_dl_url }}/v{{ lego_ver.stdout }}/{{ lego_file }}" dest: /tmp/lego_install remote_src: yes - name: Install lego binary from temporary directory ansible.builtin.copy: src: /tmp/lego_install/lego dest: /usr/local/bin/lego owner: root group: root mode: u=rwx,g=rx,o=rx remote_src: yes - name: Remove lego temporary directory file: path: /tmp/lego_install state: absent when: - not lego.stat.exists or ( lego_locver.stdout != lego_ver.stdout )