220 lines
8.7 KiB
YAML
220 lines
8.7 KiB
YAML
#SPDX-License-Identifier: MIT-0
|
|
---
|
|
# tasks file for roles/init-vps
|
|
- name: Acquiring home of current user
|
|
when: ansible_facts["system"] == "Linux"
|
|
ansible.builtin.shell:
|
|
cmd: "echo ~{{ ansible_user }}"
|
|
register: ansible_user_home
|
|
- name: Acquiring current user
|
|
when: ansible_facts["system"] == "Linux"
|
|
ansible.builtin.shell:
|
|
cmd: "echo {{ ansible_user }}"
|
|
register: current_user
|
|
- name: Creating prerequisite directory tree for installation scripts
|
|
ansible.builtin.file:
|
|
path: "{{ ansible_user_home.stdout }}/.local/bin"
|
|
recurse: true
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
state: directory
|
|
- name: Creating prerequisite directory tree for unarchived archives
|
|
ansible.builtin.file:
|
|
path: "{{ ansible_user_home.stdout }}/downloads/archives/released"
|
|
recurse: true
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
state: directory
|
|
- name: Creating prerequisite directory tree for package installation executables
|
|
ansible.builtin.file:
|
|
path: "{{ ansible_user_home.stdout }}/.local_pkgs"
|
|
recurse: true
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
state: directory
|
|
- name: Creating prerequisite directory tree for git repos
|
|
ansible.builtin.file:
|
|
path: "{{ ansible_user_home.stdout }}/repos/.foreign"
|
|
recurse: true
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
state: directory
|
|
- name: Installing Linux software
|
|
when: ansible_facts["system"] == "Linux"
|
|
block:
|
|
- name: Installing software using Debian package manager
|
|
when: ansible_facts["os_family"] == "Debian"
|
|
become: true
|
|
block:
|
|
- name: Creating core OS repository sources for package manager
|
|
when: ansible_facts["os_family"] == "Debian"
|
|
ansible.builtin.deb822_repository:
|
|
name: "{{ item.name }}"
|
|
uris: "{{ item.sources }}"
|
|
types: "{{ item.types }}"
|
|
suites: "{{ item.suites }}"
|
|
components: "{{ item.comps }}"
|
|
signed_by: "{{ item.sigkey }}"
|
|
state: present
|
|
loop:
|
|
- name: debian-trixie
|
|
sources: "http://deb.debian.org/debian/"
|
|
sigkey: /usr/share/keyrings/debian-archive-keyring.gpg
|
|
types:
|
|
- deb-src
|
|
- deb
|
|
suites:
|
|
- trixie
|
|
- trixie-updates
|
|
comps:
|
|
- main
|
|
- non-free-firmware
|
|
- contrib
|
|
- name: debian-trixie-security
|
|
sources: "http://security.debian.org/debian-security"
|
|
sigkey: /usr/share/keyrings/debian-archive-keyring.gpg
|
|
types:
|
|
- deb-src
|
|
- deb
|
|
suites: trixie-security
|
|
comps:
|
|
- main
|
|
- non-free-firmware
|
|
- contrib
|
|
- name: Remove previous core OS repository sources for package manager
|
|
ansible.builtin.file:
|
|
path: /etc/apt/sources.list
|
|
state: absent
|
|
# @TODO uncomment below before continuing with testing previous task
|
|
# - name: Premature end of play
|
|
# ansible.builtin.meta: end_play
|
|
- name: Updating package cache
|
|
ansible.builtin.apt:
|
|
update_cache: true
|
|
- name: Updating package cache
|
|
ansible.builtin.apt:
|
|
upgrade: dist
|
|
autoremove: true
|
|
- name: Registering a package source
|
|
when: item.sources != None
|
|
ansible.builtin.deb822_repository:
|
|
name: "{{ item.name }}"
|
|
uris: "{{ item.sources }}"
|
|
types: "{{ item.types | default('deb') }}"
|
|
suites: "{{ item.suites | default('*') }}"
|
|
components: "{{ item.comps | default('*') }}"
|
|
signed_by: "{{ item.sigkey }}"
|
|
state: present
|
|
loop: "{{ (pkgs.mngr.userspace | default([])) }}"
|
|
- name: Updating package cache
|
|
ansible.builtin.apt:
|
|
update_cache: true
|
|
- name: Installing a local package in managed node
|
|
when: item.uri != None
|
|
ansible.builtin.apt:
|
|
deb: "{{ item.uri }}"
|
|
state: present
|
|
notify: "{{ item.handler | default('default') }}"
|
|
loop: "{{ (pkgs.mngr.userspace | default([])) | selectattr('uri', 'search', '\\.deb$') }}"
|
|
- name: Installing a package
|
|
when: item.name != None and item.uri == None
|
|
ansible.builtin.package:
|
|
name: "{{ item.name }}"
|
|
state: latest
|
|
notify: "{{ item.handler | default('default') }}" # @TODO create corresponding roles/init-vps handlers
|
|
loop: "{{ (pkgs.mngr.userspace | default([])) | rejectattr('uri', 'search', '\\.deb$') }}"
|
|
tags:
|
|
- get_mngr_pkgs
|
|
- name: Installing software by executing installation shell scripts
|
|
become: true
|
|
block:
|
|
- name: Acquiring installation shell script
|
|
become_user: "{{ current_user.stdout }}"
|
|
when: item.src != None and ((pkgs.script.userspace | default([])) | length) > 0
|
|
ansible.builtin.uri:
|
|
url: "{{ item.src }}"
|
|
dest: "{{ ansible_user_home.stdout }}/.local/bin/{{ item.name }}-install.sh"
|
|
follow_redirects: safe
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
force: true
|
|
mode: "744"
|
|
notify: "{{ (pkgs.script.userspace | default([]))[idx].handler | default('default') }}"
|
|
loop: "{{ (pkgs.script.userspace | default([])) }}"
|
|
loop_control:
|
|
index_var: idx
|
|
register: install_scripts
|
|
- name: Reboot machine for shell environment change
|
|
ansible.builtin.reboot:
|
|
msg: Rebooting machine
|
|
tags:
|
|
- get_script_pkgs
|
|
- name: Installing software by building it from source archives
|
|
block:
|
|
- name: Acquiring software source archive
|
|
become: true
|
|
become_user: "{{ current_user.stdout }}"
|
|
when: item.src != None
|
|
ansible.builtin.get_url:
|
|
url: "{{ item.src }}"
|
|
dest: "{{ ansible_user_home.stdout }}/downloads/archives/"
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
force: true
|
|
backup: true
|
|
mode: "644"
|
|
loop: "{{ (pkgs.archive.userspace | default([])) }}"
|
|
register: archived_builds
|
|
- name: Create subdirectories for unarchiving
|
|
ansible.builtin.file:
|
|
path: "{{ ansible_user_home.stdout }}/downloads/archives/released/{{ (pkgs.archive.userspace | default([]))[idx].name }}"
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
mode: "755"
|
|
state: directory
|
|
loop: "{{ archived_builds.results }}"
|
|
loop_control:
|
|
index_var: idx
|
|
- name: Unarchiving software build archive
|
|
become: true
|
|
become_user: "{{ current_user.stdout }}"
|
|
when: item.dest != None and ((pkgs.script.userspace | default([])) | length) > 0
|
|
ansible.builtin.unarchive:
|
|
src: "{{ item.dest }}"
|
|
remote_src: true
|
|
dest: "{{ ansible_user_home.stdout }}/downloads/archives/released/{{ (pkgs.archive.userspace | default([]))[idx].name }}/"
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
notify: "{{ (pkgs.archive.userspace | default([]))[idx].handler | default('default') }}"
|
|
loop: "{{ archived_builds.results }}"
|
|
loop_control:
|
|
index_var: idx
|
|
- name: Reboot machine for shell environment change
|
|
become: true
|
|
ansible.builtin.reboot:
|
|
msg: Rebooting machine
|
|
tags:
|
|
- get_archive_pkgs
|
|
- name: Installing software from source git repositories
|
|
block:
|
|
- name: Clone git bare repository
|
|
become: true
|
|
become_user: "{{ current_user.stdout }}"
|
|
when: item.src != None
|
|
ansible.builtin.git:
|
|
repo: "{{ item.src }}"
|
|
dest: "{{ ansible_user_home.stdout }}/repos/.foreign/{{ item.name }}"
|
|
version: "{{ item.branch }}"
|
|
clone: true
|
|
single_branch: true
|
|
notify: "{{ item.handler | default('default') }}"
|
|
loop: "{{ (pkgs.git_repos.userspace | default([])) }}"
|
|
register: installation_repos
|
|
- name: Reboot machine for shell environment change
|
|
become: true
|
|
ansible.builtin.reboot:
|
|
msg: Rebooting machine
|
|
tags:
|
|
- get_git_pkgs
|
|
# @TODO add a reboot either here or in any of the handlers potentially notified from here in
|
|
# order to update environment (unless found better solution) |