@installdoc/ansible-gas-station
Version:
An Ansible playbook that provisions your network with software from GitHub Awesome lists, developed with disaster recovery in mind ⛽🔥🤤
96 lines (86 loc) • 4.28 kB
YAML
- name: "Ensure {{ binary_name }} is installed to user folder"
block:
- name: Ensure Megabyte Labs configuration directory exists
become_user: "{{ user.username }}"
ansible.windows.win_file:
path: '%USERPROFILE%\.config\megabytelabs'
state: directory
- name: "Ensure installation folder for {{ binary_name }} exists"
become_user: "{{ user.username }}"
ansible.windows.win_file:
path: "C:/Users/{{ user.username }}/.local/{{ binary_name }}"
state: directory
- name: "Check if {{ binary_name }} has configuration stored in '%USERPROFILE%/.config/megabytelabs/{{ binary_name }}'"
become_user: "{{ user.username }}"
ansible.windows.win_stat:
path: "C:/Users/{{ user.username }}/.config/megabytelabs/{{ binary_name }}"
register: binary_local_config
- name: "Detect previously installed {{ binary_name }} version"
become_user: "{{ user.username }}"
ansible.windows.win_shell: type {{ binary_name }}
args:
chdir: '%USERPROFILE%\.config\megabytelabs'
changed_when: false
register: current_binary_local_version
when: binary_local_config.stat.exists
- name: "Determine whether or not the latest version of {{ binary_name }} is already installed"
become_user: "{{ user.username }}"
set_fact:
install_local_binary: "{{ (current_binary_local_version.skipped | default(false)) or \
((not current_binary_local_version.skipped | default(false)) and \
(current_binary_local_version.stdout | trim != gh_binary_latest_release_tag.json.tag_name | replace('v',''))) }}"
- name: "Acquire {{ binary_name }}'s latest installer"
become_user: "{{ user.username }}"
ansible.windows.win_get_url:
url: "https://github.com/{{ repo_user }}/{{ binary_name }}/releases/download/{{ gh_binary_latest_release_tag.json.tag_name }}/\
{{ archive_name.stdout | replace('NO_EXTN','') }}"
dest: "C:/Users/{{ user.username }}/.local/{{ binary_name }}/{{ archive_name.stdout | replace('NO_EXTN','') }}"
checksum: "{{ (archive_checksum.stdout | length > 0) | ternary(archive_checksum.stdout,omit) }}"
checksum_algorithm: sha256
when:
- install_local_binary
- archive_name.stdout | length > 0
- name: "Ensure {{ binary_name }} is installed"
become_user: "{{ user.username }}"
community.windows.win_unzip:
src: "C:/Users/{{ user.username }}/.local/{{ binary_name }}/{{ archive_name.stdout }}"
dest: "C:/Users/{{ user.username }}/.local/{{ binary_name }}"
delete_archive: true
when:
- install_local_binary
- archive_name.stdout | length > 0
- "'NO_EXTN' not in archive_name.stdout"
- not (archive_name.stdout | regex_search('(?i)(setup|installer)'))
- name: "Ensure {{ binary_name }} is installed"
become_user: "{{ user.username }}"
ansible.windows.win_copy:
src: "C:/Users/{{ user.username }}/.local/{{ binary_name }}/{{ archive_name.stdout | replace('NO_EXTN','') }}"
dest: "C:/Users/{{ user.username }}/.local/{{ binary_name }}/{{ binary_name }}"
remote_src: true
when:
- install_local_binary
- archive_name.stdout | length > 0
- "'NO_EXTN' in archive_name.stdout"
- not (archive_name.stdout | regex_search('(?i)(setup|installer)'))
- name: "Add 'C:/Users/{{ user.username }}/.local/{{ binary_name }}' to PATH"
become_user: "{{ user.username }}"
ansible.windows.win_path:
elements: "C:/Users/{{ user.username }}/.local/{{ binary_name }}"
state: present
scope: user
- name: "Save meta information about the version of {{ binary_name }} that was installed"
become_user: "{{ user.username }}"
ansible.windows.win_copy:
dest: '%USERPROFILE%\.config\megabytelabs\{{ binary_name }}'
content: |
{{ gh_binary_latest_release_tag.json.tag_name | replace('v','') }}
when:
- install_local_binary
- archive_name.stdout | length > 0
always:
- name: Reset variables
set_fact:
current_binary_local_version: ""
binary_local_config: ""
install_local_binary: ""