@installdoc/ansible-gas-station
Version:
An Ansible playbook that provisions your network with software from GitHub Awesome lists, developed with disaster recovery in mind ⛽🔥🤤
176 lines (159 loc) • 6.83 kB
YAML
- name: Ensure ~/Applications directory exists
become_user: "{{ user.username }}"
file:
mode: 0700
path: ~/Applications
state: directory
when: "'AppImage' in archive_name.stdout"
- name: "Ensure {{ binary_name }}'s AppImage is copied"
become_user: "{{ user.username }}"
copy:
src: "/usr/local/src/{{ binary_name }}/{{ archive_name.stdout | replace('NO_EXTN','') }}"
dest: ~/Applications
mode: 0700
remote_src: true
when: "'AppImage' in archive_name.stdout"
- name: "Ensure {{ binary_name }} is installed to user folder (sudoless)"
block:
- name: Ensure Megabyte Labs configuration directory exists
become_user: "{{ user.username }}"
file:
mode: 0700
path: ~/.config/megabytelabs
state: directory
- name: Ensure Megabyte Labs configuration directory exists
become_user: "{{ user.username }}"
file:
mode: 0700
path: "{{ item }}"
state: directory
loop:
- ~/.local/src/{{ binary_name }}
- ~/.local/bin/
- name: "Check if {{ binary_name }} has configuration stored in ~/.config/megabytelabs/{{ binary_name }}"
become_user: "{{ user.username }}"
stat:
path: "~/.config/megabytelabs/{{ binary_name }}"
register: binary_local_config
- name: "Detect previously installed {{ binary_name }} version"
become_user: "{{ user.username }}"
command: cat {{ binary_name }}
args:
chdir: ~/.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_binary_locally: "{{ (current_binary_local_version.skipped | default(false)) or \
((not current_binary_local_version.skipped | default(false)) and \
(current_binary_local_version.stdout != gh_binary_latest_release_tag.json.tag_name | replace('v',''))) }}"
- name: "Acquire {{ binary_name }}'s latest installer"
become_user: "{{ user.username }}"
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: "~/.local/src/{{ binary_name }}/{{ archive_name.stdout | replace('NO_EXTN','') }}"
checksum: "{{ 'sha256:' + archive_checksum.stdout if (archive_checksum.stdout is defined and archive_checksum.stdout | length > 0) else omit }}"
when:
- install_binary_locally
- archive_name.stdout | length > 0
- archive_name.stdout | regex_search('(?i)(tar|zip|NO_EXTN)')
- name: Find the files contained in the archive
become_user: "{{ user.username }}"
unarchive:
src: "~/.local/src/{{ binary_name }}/{{ archive_name.stdout }}"
dest: /tmp
remote_src: true
list_files: true
register: list_archive_files
when:
- user_local_install
- install_binary_locally
- archive_name.stdout | length > 0
- archive_name.stdout | regex_search('(?i)(tar|zip)')
- name: "Ensure {{ binary_name }} is installed (Archive)"
become_user: "{{ user.username }}"
unarchive:
src: "~/.local/src/{{ binary_name }}/{{ archive_name.stdout }}"
dest: "{{ '~/.local/src/' + binary_name if ((list_archive_files.files | join(',') | regex_search('(?i)(pak|so|tpl|\\.1)')) or \
('zip' in archive_name.stdout and list_archive_files.files | length > 1)) else '~/.local/bin' }}"
remote_src: true
extra_opts: "{{ '--strip-components=1' if ('/' in list_archive_files.files | join(',') and 'tar' in archive_name.stdout) else omit }}"
exclude:
- README*
- LICENSE*
- CHANGELOG*
when:
- user_local_install
- install_binary_locally
- archive_name.stdout | length > 0
- archive_name.stdout | regex_search('(?i)(tar|zip)')
- name: "Find executable name for {{ binary_name }} to link (Archive installation)"
become_user: "{{ user.username }}"
find:
paths: "~/.local/src/{{ binary_name }}"
depth: 2
file_type: file
use_regex: true
patterns: "{{ '^(?i)' + (binary_name.split('-'))[0] + '$' }}"
recurse: true
register: executable_link
when:
- user_local_install
- install_binary_locally
- list_archive_files.files is defined and ((list_archive_files.files | join(',') | regex_search('(?i)(pak|so|tpl|\\.1)')) or
('zip' in archive_name.stdout and list_archive_files.files | length > 1))
- name: "Ensure {{ binary_name }} is linked (Archive installation)"
become_user: "{{ user.username }}"
file:
src: "{{ executable_link.files[0].path }}"
dest: "~/.local/bin/{{ (executable_link.files[0].path).split('/')[-1] }}"
state: link
when:
- user_local_install
- install_binary_locally
- executable_link.files is defined and executable_link.files | length > 0
- name: "Ensure {{ binary_name }} is installed (Binary)"
become_user: "{{ user.username }}"
copy:
src: "~/.local/src/{{ binary_name }}/{{ archive_name.stdout | replace('NO_EXTN','') }}"
dest: ~/.local/bin/{{ (binary_name.split('-'))[0] }}
remote_src: true
mode: 0700
when:
- user_local_install
- install_binary_locally
- archive_name.stdout | length > 0
- "'NO_EXTN' in archive_name.stdout"
- name: "Save meta information about the version of {{ binary_name }} that was installed"
become_user: "{{ user.username }}"
copy:
dest: ~/.config/megabytelabs/{{ binary_name }}
mode: 0600
content: |
{{ gh_binary_latest_release_tag.json.tag_name | replace('v','') }}
when: install_binary_locally
- name: "Ensure {{ binary_name }} installer is removed"
become_user: "{{ user.username }}"
file:
path: "~/.local/src/{{ binary_name }}/{{ archive_name.stdout | replace('NO_EXTN','') }}"
state: absent
when:
- install_binary_locally
- archive_name.stdout | length > 0
- name: Ensure PATH is updated for the user
become_user: "{{ user.username }}"
lineinfile:
path: ~/.bashrc
regexp: 'export PATH=$PATH:$HOME/.local/bin'
line: 'export PATH=$PATH:$HOME/.local/bin'
when: "'AppImage' not in archive_name.stdout"
always:
- name: Reset variables
set_fact:
current_binary_local_version: ""
binary_local_config: ""
install_binary_locally: ""