--- - name: install required packages become: true ansible.builtin.apt: update_cache: true force_apt_get: true cache_valid_time: 3600 pkg: - curl - jq - name: find if binary is already installed ansible.builtin.file: path: '{{ helm_binary_path }}' register: helm_stat changed_when: false failed_when: false - name: find current installed version when: helm_stat.state != "absent" ansible.builtin.command: "{{ helm_binary_path }} version --template='{% raw %}{{.Version}}{% endraw %}'" changed_when: false register: helm_local_version_exec - name: find latest available version connection: local ansible.builtin.shell: |- curl -sSL https://api.github.com/repos/helm/helm/releases/latest | jq -r '.tag_name' register: latest_helm_version_exec when: helm_install_version is falsy or helm_install_version == "latest" changed_when: false - name: set helm facts ansible.builtin.set_fact: helm_latest_version_available: '{{ latest_helm_version_exec.get("stdout", "") if latest_helm_version_exec is defined }}' helm_local_version: '{{ helm_local_version_exec.get("stdout", "") if helm_local_version_exec is defined }}' helm_target_install_version: '{{ helm_install_version if helm_install_version != "latest" else latest_helm_version_exec.get("stdout", "") }}' - name: install binary become: true when: helm_stat.state == "absent" or (helm_local_version != helm_target_install_version and helm_install_version is not falsy) block: - name: create temporary directory ansible.builtin.tempfile: state: directory register: tmp_dir changed_when: false - name: retrieve archive ansible.builtin.unarchive: remote_src: true src: "https://get.helm.sh/helm-{{ helm_install_version if helm_install_version is not match('^$|^latest$') else helm_latest_version_available }}-linux-amd64.tar.gz" dest: '{{ tmp_dir.path }}' - name: install binary ansible.builtin.copy: remote_src: true src: '{{ tmp_dir.path }}/linux-amd64/helm' dest: '{{ helm_binary_path }}' owner: root group: root mode: '0755' - name: cleanup ansible.builtin.file: path: '{{ tmp_dir.path }}' state: absent