#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)