feat(role): Add package-specific global config files
Packages can now have a global (i.e. system-wide) config defined and applied. If package is missing the config file is deleted. This is helpful for example for Git where we want to define helpful aliases for every logged in user and for tmux where every user should have access to the tmux-resurrect session manager etc.
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
# This file adds config blocks to files that are dependent on a single package
|
||||
# being present. If for example the 'git' package is present we want content in
|
||||
# Git's global '/etc/gitconfig' file. If the package is absent that file content
|
||||
# is removed. If after that the file is empty (i.e. has a size of 0 bytes) the
|
||||
# file is deleted.
|
||||
|
||||
- name: 'Add per-package config'
|
||||
when: 'pkg.name in ansible_facts.packages'
|
||||
loop_control:
|
||||
loop_var: 'pkg'
|
||||
label: 'If ''{{ pkg.name }}'' package is present set system-wide config in ''{{ pkg.global_config_file }}'''
|
||||
loop: '{{ package_config }}'
|
||||
ansible.builtin.blockinfile:
|
||||
marker: '# {mark} ANSIBLE MANAGED BLOCK - {{ pkg.name }} {{ pkg.marker }}'
|
||||
path: '{{ pkg.global_config_file }}'
|
||||
append_newline: true
|
||||
prepend_newline: true
|
||||
state: 'present'
|
||||
create: true
|
||||
block: '{{ pkg.global_config }}'
|
||||
|
||||
- name: 'Get stats of global config files'
|
||||
register: 'role_common_packages__global_config_file_stats'
|
||||
loop_control:
|
||||
loop_var: 'pkg'
|
||||
label: 'Get stats of ''{{ pkg.name }}'' system-wide config file ''{{ pkg.global_config_file }}'''
|
||||
loop: '{{ package_config }}'
|
||||
ansible.builtin.stat:
|
||||
path: '{{ pkg.global_config_file }}'
|
||||
|
||||
- name: 'Remove per-package config'
|
||||
when: 'stat_result.pkg.name not in ansible_facts.packages'
|
||||
loop_control:
|
||||
loop_var: 'stat_result'
|
||||
label: 'If ''{{ stat_result.pkg.name }}'' package is absent and system-wide config file ''{{ stat_result.pkg.global_config_file }}'' is present remove config file'
|
||||
loop: '{{ role_common_packages__global_config_file_stats.results }}'
|
||||
ansible.builtin.file:
|
||||
path: '{{ stat_result.pkg.global_config_file }}'
|
||||
state: 'absent'
|
31
tasks/base-package-auxiliary-settings-tmux.yml
Normal file
31
tasks/base-package-auxiliary-settings-tmux.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
- name: 'If Arch Linux and if ''tmux-resurrect'' and ''tmux'' packages are present auto-load tmux-resurrect on tmux start system-wide'
|
||||
when: '(ansible_facts[''os_family''] | lower == ''archlinux'') and (''tmux-resurrect'' in ansible_facts.packages) and (''tmux'' in ansible_facts.packages)'
|
||||
ansible.builtin.blockinfile:
|
||||
marker: '# {mark} ANSIBLE MANAGED BLOCK - tmux-resurrect'
|
||||
path: '{{ tmux_global_config_file }}'
|
||||
append_newline: true
|
||||
prepend_newline: true
|
||||
state: 'present'
|
||||
create: true
|
||||
block: '{{ tmux_global_config_resurrect }}'
|
||||
|
||||
- name: 'If Arch Linux and ''tmux-resurrect'' package is absent never auto-load tmux-resurrect on tmux start system-wide'
|
||||
when: '(ansible_facts[''os_family''] | lower == ''archlinux'') and (''tmux-resurrect'' not in ansible_facts.packages)'
|
||||
ansible.builtin.blockinfile:
|
||||
marker: '# {mark} ANSIBLE MANAGED BLOCK - tmux-resurrect'
|
||||
path: '{{ tmux_global_config_file }}'
|
||||
state: 'absent'
|
||||
block: '{{ tmux_global_config_resurrect }}'
|
||||
|
||||
- name: 'Get stats of ''{{ tmux_global_config_file }}'''
|
||||
ansible.builtin.stat:
|
||||
path: '{{ tmux_global_config_file }}'
|
||||
register: 'role_common_packages__tmux_global_config_file_stats'
|
||||
|
||||
- name: 'If ''{{ tmux_global_config_file }}'' is 0 bytes delete it'
|
||||
when: 'role_common_packages__tmux_global_config_file_stats.stat.size == 0'
|
||||
ansible.builtin.file:
|
||||
path: '{{ tmux_global_config_file }}'
|
||||
state: 'absent'
|
||||
|
3
tasks/base-package-auxiliary-settings.yml
Normal file
3
tasks/base-package-auxiliary-settings.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
- import_tasks: 'base-package-auxiliary-settings-tmux.yml'
|
||||
- import_tasks: 'base-package-auxiliary-settings-single-package-single-config.yml'
|
23
tasks/base-packages.yml
Normal file
23
tasks/base-packages.yml
Normal file
@@ -0,0 +1,23 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
- name: 'Gather package facts'
|
||||
ansible.builtin.package_facts:
|
||||
manager: 'auto'
|
||||
|
||||
- name: 'If OS is a Linux flavor install Linux-specific packages'
|
||||
when: 'ansible_facts[''system''] | lower == ''linux'''
|
||||
ansible.builtin.package:
|
||||
name: '{{ packages_linux_common_all_families }}'
|
||||
state: 'present'
|
||||
|
||||
- name: 'If ''os_family'' is ''{{ ansible_facts[''os_family''] | lower }}'' install {{ ansible_facts[''os_family''] | lower }}-specific packages'
|
||||
ansible.builtin.package:
|
||||
name: '{{ vars[''packages_linux_common_'' + ansible_facts[''os_family''] | lower] }}'
|
||||
state: 'present'
|
||||
|
||||
- name: 'If Arch Linux install Arch User Repository (AUR) packages'
|
||||
when: 'ansible_facts[''os_family''] | lower == ''archlinux'''
|
||||
kewlfft.aur.aur:
|
||||
name: '{{ packages_linux_paru_archlinux }}'
|
||||
state: 'present'
|
||||
become: 'yes'
|
||||
become_user: 'build'
|
@@ -1,25 +1,7 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
- name: 'If OS is a Linux flavor install Linux-specific packages'
|
||||
when: 'ansible_facts[''system''] | lower == ''linux'''
|
||||
ansible.builtin.package:
|
||||
name: '{{ packages_linux_common_all_families }}'
|
||||
state: 'present'
|
||||
|
||||
- name: 'If ''os_family'' is ''{{ ansible_facts[''os_family''] | lower }}'' install {{ ansible_facts[''os_family''] | lower }}-specific packages'
|
||||
ansible.builtin.package:
|
||||
name: '{{ vars[''packages_linux_common_'' + ansible_facts[''os_family''] | lower] }}'
|
||||
state: 'present'
|
||||
|
||||
- name: 'If Arch Linux install Arch User Repository (AUR) packages'
|
||||
when: 'ansible_facts[''os_family''] | lower == ''archlinux'''
|
||||
kewlfft.aur.aur:
|
||||
name: '{{ packages_linux_paru_archlinux }}'
|
||||
state: 'present'
|
||||
become: 'yes'
|
||||
become_user: 'build'
|
||||
|
||||
- import_tasks: 'base-packages.yml'
|
||||
- import_tasks: 'base-package-auxiliary-settings.yml'
|
||||
- import_tasks: 'arch-linux-local-aur-repo-chroot.yml'
|
||||
when: 'ansible_facts[''os_family''] | lower == ''archlinux'''
|
||||
|
||||
- import_tasks: 'maintenance-unattended-upgrades.yml'
|
||||
when: 'ansible_facts[''os_family''] | lower == ''debian'''
|
||||
|
Reference in New Issue
Block a user