SHA256
1
0

Migrate to new apps role

This commit is contained in:
2026-02-02 01:33:38 -05:00
parent 10e0d7ad9c
commit 6aefc82163
41 changed files with 616 additions and 905 deletions

View File

@@ -0,0 +1,5 @@
- name: Install cargo packages
community.general.cargo:
name: "{{ item }}"
state: present
loop: "{{ apps_cargo | default([]) + (cargo_install | default([])) }}"

View File

@@ -0,0 +1,31 @@
- name: Create app directories
ansible.builtin.file:
path: "{{ item.dest }}"
state: directory
mode: "0755"
owner: "{{ item.owner | default(omit) }}"
group: "{{ item.group | default(omit) }}"
loop: "{{ apps_directories }}"
become: "{{ item.owner is defined and item.owner == 'root' }}"
when: apps_directories is defined and apps_directories | length > 0
- name: Create parent directories for config files
ansible.builtin.file:
path: "{{ item.dest | dirname }}"
state: directory
mode: '0755'
loop: "{{ apps_configs }}"
become: "{{ item.owner is defined and item.owner == 'root' }}"
when: apps_configs is defined and apps_configs | length > 0
- name: Deploy configuration templates
ansible.builtin.copy:
content: "{{ item.content }}"
dest: "{{ item.dest }}"
mode: "{{ item.mode | default('0644') }}"
owner: "{{ item.owner | default(omit) }}"
group: "{{ item.group | default(omit) }}"
backup: "{{ item.backup | default(false) }}"
loop: "{{ apps_configs }}"
become: "{{ item.owner is defined and item.owner == 'root' }}"
when: apps_configs is defined and apps_configs | length > 0

69
roles/apps/tasks/dnf.yml Normal file
View File

@@ -0,0 +1,69 @@
---
- name: Enable COPR repositories
community.general.copr:
name: "{{ item.repo | default(item) }}"
state: enabled
loop: "{{ (copr_install | default([])) + (apps_copr | default([])) }}"
become: true
- name: Add DNF repositories
ansible.builtin.yum_repository:
name: "{{ item.name }}"
description: "{{ item.description | default(omit) }}"
baseurl: "{{ item.baseurl | default(omit) }}"
metalink: "{{ item.metalink | default(omit) }}"
enabled: "{{ item.enabled | default(true) }}"
metadata_expire: "{{ item.metadata_expire | default(omit) }}"
gpgcheck: "{{ item.gpgcheck | default(true) }}"
repo_gpgcheck: "{{ item.repo_gpgcheck | default(omit) }}"
gpgkey: "{{ item.gpgkey | default(omit) }}"
loop: "{{ (dnf_repos_add | default([])) + (apps_dnf_repos_add | default([])) }}"
become: true
- name: Add DNF repository files
ansible.builtin.get_url:
url: "{{ item.url | default(item) }}"
dest: "/etc/yum.repos.d/{{ (item.url | default(item)) | basename }}"
owner: root
group: root
mode: '0644'
loop: "{{ (dnf_repofiles_add | default([])) + (apps_dnf_repofiles_add | default([])) }}"
become: true
- name: Remove DNF repositories
ansible.builtin.yum_repository:
name: "{{ item }}"
state: absent
loop: "{{ dnf_repos_remove | default([]) }}"
become: true
- name: Install remote RPM packages (from URLs)
ansible.builtin.dnf:
name: "{{ (dnf_install_remote | default([])) + (apps_dnf_install_remote | default([])) + (apps_packages_remote | default([])) }}"
state: present
disable_gpg_check: true
become: true
when: ((dnf_install_remote | default([])) + (apps_dnf_install_remote | default([])) + (apps_packages_remote | default([]))) | length > 0
- name: Remove unwanted packages
ansible.builtin.dnf:
name: "{{ item }}"
state: absent
autoremove: true
loop: "{{ dnf_remove | default([]) }}"
failed_when: false
become: true
- name: Install packages
ansible.builtin.dnf:
name: "{{ apps_all_packages }}"
state: present
skip_broken: true
become: true
- name: Update all packages
ansible.builtin.dnf:
name: "*"
state: latest # noqa package-latest
skip_broken: true
become: true

10
roles/apps/tasks/git.yml Normal file
View File

@@ -0,0 +1,10 @@
- name: Clone git repositories
ansible.builtin.git:
repo: "{{ item.repo }}"
dest: "{{ item.dest }}"
version: "{{ item.version }}"
update: true
depth: 1
accept_hostkey: true
loop: "{{ (git | default([])) + (apps_git | default([])) }}"
when: ((git | default([])) + (apps_git | default([]))) | length > 0

View File

@@ -1,137 +1,39 @@
---
- name: Load per-app configuration files
ansible.builtin.include_vars:
file: "{{ role_path }}/{{ item }}.yml"
name: "app_{{ item }}"
loop: "{{ ((apps | default([])) + (apps_group | default([]))) | select | list }}"
failed_when: false
- name: Merge app configuration
# Merge all apps dicts (apps + apps_group)
- name: Merge apps configurations
ansible.builtin.set_fact:
apps_copr: "{{ apps_copr | default([]) + (lookup('vars', 'app_' + item, default={}).copr | default([])) }}"
apps_repos: "{{ apps_repos | default([]) + (lookup('vars', 'app_' + item, default={}).repos | default([])) }}"
apps_repofiles: "{{ apps_repofiles | default([]) + (lookup('vars', 'app_' + item, default={}).repofiles | default([])) }}"
apps_packages: "{{ apps_packages | default([]) + (lookup('vars', 'app_' + item, default={}).packages | default([])) }}"
apps_cargo: "{{ apps_cargo | default([]) + (lookup('vars', 'app_' + item, default={}).cargo | default([])) }}"
apps_system_services: "{{ apps_system_services | default([]) + (lookup('vars', 'app_' + item, default={}).system_services | default([])) }}"
apps_user_services: "{{ apps_user_services | default([]) + (lookup('vars', 'app_' + item, default={}).user_services | default([])) }}"
loop: "{{ ((apps | default([])) + (apps_group | default([]))) | select | list }}"
apps_all_apps: "{{ apps | default({}) | combine(apps_group | default({}), recursive=True) }}"
- name: Enable COPR repositories
community.general.copr:
name: "{{ item.repo | default(item) }}"
state: enabled
loop: "{{ apps_copr | default([]) }}"
become: true
# Extract various lists from merged apps
- name: Build package and config lists
ansible.builtin.set_fact:
apps_packages: "{{ apps_all_apps | dict2items | selectattr('value.packages', 'defined') | map(attribute='value.packages') | flatten }}"
apps_packages_remote: "{{ apps_all_apps | dict2items | selectattr('value.packages_remote', 'defined') | map(attribute='value.packages_remote') | flatten }}"
apps_cargo: "{{ apps_all_apps | dict2items | selectattr('value.cargo', 'defined') | map(attribute='value.cargo') | flatten }}"
apps_copr: "{{ apps_all_apps | dict2items | selectattr('value.copr', 'defined') | map(attribute='value.copr') | flatten }}"
apps_git: "{{ apps_all_apps | dict2items | selectattr('value.git', 'defined') | map(attribute='value.git') | flatten }}"
apps_configs: "{{ apps_all_apps | dict2items | selectattr('value.configs', 'defined') | map(attribute='value.configs') | flatten }}"
apps_directories: "{{ apps_all_apps | dict2items | selectattr('value.directories', 'defined') | map(attribute='value.directories') | flatten }}"
apps_dnf_repos_add: "{{ apps_all_apps | dict2items | selectattr('value.dnf_repos_add', 'defined') | map(attribute='value.dnf_repos_add') | flatten }}"
apps_dnf_repofiles_add: "{{ apps_all_apps | dict2items | selectattr('value.dnf_repofiles_add', 'defined') | map(attribute='value.dnf_repofiles_add') | flatten }}"
apps_dnf_install_remote: "{{ apps_all_apps | dict2items | selectattr('value.dnf_install_remote', 'defined') | map(attribute='value.dnf_install_remote') | flatten }}"
apps_services_system_enabled: "{{ apps_all_apps | dict2items | selectattr('value.services_system_enabled', 'defined') | map(attribute='value.services_system_enabled') | flatten }}"
apps_services_system_disabled: "{{ apps_all_apps | dict2items | selectattr('value.services_system_disabled', 'defined') | map(attribute='value.services_system_disabled') | flatten }}"
apps_services_user_enabled: "{{ apps_all_apps | dict2items | selectattr('value.services_user_enabled', 'defined') | map(attribute='value.services_user_enabled') | flatten }}"
apps_services_user_disabled: "{{ apps_all_apps | dict2items | selectattr('value.services_user_disabled', 'defined') | map(attribute='value.services_user_disabled') | flatten }}"
apps_all_packages: "{{ (apps_packages | default([])) + (dnf_install | default([])) }}"
- name: Add DNF repositories
ansible.builtin.yum_repository:
name: "{{ item.name }}"
description: "{{ item.description | default(omit) }}"
baseurl: "{{ item.baseurl | default(omit) }}"
metalink: "{{ item.metalink | default(omit) }}"
enabled: "{{ item.enabled | default(true) }}"
metadata_expire: "{{ item.metadata_expire | default(omit) }}"
gpgcheck: "{{ item.gpgcheck | default(true) }}"
repo_gpgcheck: "{{ item.repo_gpgcheck | default(omit) }}"
gpgkey: "{{ item.gpgkey | default(omit) }}"
loop: "{{ (dnf_add_repos | default([])) + (apps_repos | default([])) }}"
become: true
- name: Add DNF repository files
ansible.builtin.get_url:
url: "{{ item.url }}"
dest: "/etc/yum.repos.d/{{ item.url | basename }}"
owner: root
group: root
mode: '0644'
loop: "{{ apps_repofiles | default([]) }}"
become: true
- name: Remove DNF repositories
ansible.builtin.yum_repository:
name: "{{ item }}"
state: absent
loop: "{{ (dnf_remove_repos | default([])) + (dnf_remove_repos_group | default([])) }}"
become: true
- name: Remove unwanted packages
ansible.builtin.dnf:
name: "{{ item }}"
state: absent
autoremove: true
loop: "{{ (dnf_remove | default([])) + (dnf_remove_group | default([])) }}"
become: true
failed_when: false
- name: Install remote RPM packages (from URLs)
ansible.builtin.dnf:
name: "{{ apps_packages | default([]) | select('match', '^https?://') | list }}"
state: present
disable_gpg_check: true
become: true
when: (apps_packages | default([]) | select('match', '^https?://') | list) | length > 0
- name: Install DNF packages
ansible.builtin.dnf:
name: "{{ ((apps | default([])) + (apps_group | default([])) + (apps_packages | default([]) | reject('match', '^https?://') | list)) | select | list }}"
state: present
skip_broken: true
become: true
- name: Update all DNF packages
ansible.builtin.dnf:
name: "*"
state: latest # noqa package-latest
skip_broken: true
become: true
- name: Install cargo packages
ansible.builtin.command:
cmd: "cargo install {{ item }}"
loop: "{{ apps_cargo | default([]) }}"
register: apps_cargo_install_result
changed_when: "'Installing' in apps_cargo_install_result.stderr or 'Compiling' in apps_cargo_install_result.stderr"
failed_when: apps_cargo_install_result.rc != 0 and 'already exists' not in apps_cargo_install_result.stderr
- name: Deploy repositorioes and packages
ansible.builtin.include_tasks: dnf.yml
- name: Clone git repositories
ansible.builtin.git:
repo: "{{ item.repo }}"
dest: "{{ item.dest }}"
version: "{{ item.version }}"
update: true
loop: "{{ (git_add_repos | default([])) + (git_add_repos_group | default([])) }}"
ansible.builtin.include_tasks: git.yml
- name: Enable and start system services
ansible.builtin.systemd:
name: "{{ item }}"
enabled: true
state: started
scope: system
loop: "{{ (services_system_enabled | default([])) + (services_system_enabled_group | default([])) + (apps_system_services | default([])) }}"
become: true
- name: Install cargo packages
ansible.builtin.include_tasks: cargo.yml
- name: Disable and stop system services
ansible.builtin.systemd:
name: "{{ item }}"
enabled: false
state: stopped
scope: system
loop: "{{ (services_system_disabled | default([])) + (services_system_disabled_group | default([])) }}"
become: true
- name: Deploy app configs
ansible.builtin.include_tasks: configs.yml
- name: Enable and start user services
ansible.builtin.systemd:
name: "{{ item }}"
enabled: true
state: started
scope: user
loop: "{{ (services_user_enabled | default([])) + (services_user_enabled_group | default([])) + (apps_user_services | default([])) }}"
- name: Disable and stop user services
ansible.builtin.systemd:
name: "{{ item }}"
enabled: false
state: stopped
scope: user
loop: "{{ (services_user_disabled | default([])) + (services_user_disabled_group | default([])) }}"
- name: Enable and start/stop system and user services
ansible.builtin.include_tasks: services.yml

View File

@@ -0,0 +1,37 @@
- name: Enable and start system services
ansible.builtin.systemd:
name: "{{ item }}"
enabled: true
state: started
scope: system
loop: "{{ ((services_system_enabled | default([])) + (apps_services_system_enabled | default([]))) | unique }}"
become: true
failed_when: false
- name: Disable and stop system services
ansible.builtin.systemd:
name: "{{ item }}"
enabled: false
state: stopped
scope: system
loop: "{{ ((services_system_disabled | default([])) + (apps_services_system_disabled | default([]))) | unique }}"
become: true
failed_when: false
- name: Enable and start user services
ansible.builtin.systemd:
name: "{{ item }}"
enabled: true
state: started
scope: user
loop: "{{ ((services_user_enabled | default([])) + (apps_services_user_enabled | default([]))) | unique }}"
failed_when: false
- name: Disable and stop user services
ansible.builtin.systemd:
name: "{{ item }}"
enabled: false
state: stopped
scope: user
loop: "{{ ((services_user_disabled | default([])) + (apps_services_user_disabled | default([]))) | unique }}"
failed_when: false