Инициализация канона общих ролей с ролью eget
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
---
|
||||
# Bootstrap самого eget: скачать релиз с GitHub, распаковать, поставить бинарник.
|
||||
# Идемпотентность — по версии уже установленного eget; чужой eget нельзя обновить
|
||||
# им самим (chicken-and-egg), поэтому качаем архив релиза напрямую.
|
||||
|
||||
- name: "Check installed eget version"
|
||||
ansible.builtin.command:
|
||||
cmd: "{{ eget_install_path }} --version"
|
||||
register: eget_version_check
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
check_mode: false # read-only проба: нужна и в --check, чтобы gate ниже был честным
|
||||
|
||||
- name: "Install eget from GitHub release"
|
||||
when: >-
|
||||
eget_version_check.rc != 0
|
||||
or eget_version not in eget_version_check.stdout
|
||||
block:
|
||||
- name: "Download eget release archive"
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ eget_download_url }}"
|
||||
dest: "{{ eget_download_dest }}"
|
||||
checksum: "{{ eget_download_checksum or omit }}"
|
||||
mode: "0600"
|
||||
|
||||
- name: "Extract eget release archive"
|
||||
ansible.builtin.unarchive:
|
||||
src: "{{ eget_download_dest }}"
|
||||
dest: "/tmp"
|
||||
remote_src: true
|
||||
|
||||
- name: "Install eget binary"
|
||||
ansible.builtin.copy:
|
||||
src: '{{ (eget_unarchive_dest, "eget") | path_join }}'
|
||||
dest: "{{ eget_install_path }}"
|
||||
mode: "0755"
|
||||
remote_src: true
|
||||
|
||||
always:
|
||||
- name: "Remove eget bootstrap artifacts"
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: absent
|
||||
loop:
|
||||
- "{{ eget_download_dest }}"
|
||||
- "{{ eget_unarchive_dest }}"
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
# tasks file for eget
|
||||
|
||||
- name: "Validate eget_packages entries"
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- item.repo is defined and item.repo is string and item.repo | length > 0
|
||||
- item.tag is defined and item.tag is string and item.tag | length > 0
|
||||
- item.to is not defined or item.to is string
|
||||
- item.file is not defined or item.file is string
|
||||
- item.asset is not defined or item.asset is string
|
||||
- item.assets is not defined or (item.assets is sequence and item.assets is not string)
|
||||
fail_msg: >-
|
||||
Некорректный элемент eget_packages (repo/tag — непустые строки;
|
||||
asset/file/to — строки; assets — список строк): {{ item }}
|
||||
quiet: true
|
||||
loop: "{{ eget_packages }}"
|
||||
loop_control:
|
||||
label: "{{ item.repo | default('?') }}"
|
||||
|
||||
- name: "Ensure eget is installed"
|
||||
ansible.builtin.import_tasks: install_eget.yml
|
||||
|
||||
- name: "Install pinned binaries with eget"
|
||||
ansible.builtin.command:
|
||||
argv: "{{ _eget_argv }}"
|
||||
vars:
|
||||
_eget_to: "{{ item.to | default(eget_packages_to) }}"
|
||||
_eget_assets: >-
|
||||
{{ item.assets | default([item.asset] if item.asset is defined else []) }}
|
||||
_eget_argv: >-
|
||||
{{ [eget_install_path, item.repo, '--upgrade-only',
|
||||
'--to=' ~ _eget_to, '--tag=' ~ item.tag]
|
||||
+ (['--file=' ~ item.file] if item.file is defined else [])
|
||||
+ (['--asset'] | product(_eget_assets) | map('join', '=') | list) }}
|
||||
register: eget_install
|
||||
changed_when: eget_no_upgrade_marker not in eget_install.stderr
|
||||
loop: "{{ eget_packages }}"
|
||||
loop_control:
|
||||
label: "{{ item.repo }} {{ item.tag }}"
|
||||
Reference in New Issue
Block a user