Weekly Shaarli
Week 08 (February 19, 2024)
WireHole is a combination of WireGuard, Pi-hole, and Unbound in a docker-compose project with the intent of enabling users to quickly and easily create a personally managed full or split-tunnel WireGuard VPN with ad blocking capabilities thanks to Pi-hole, and DNS caching, additional privacy options, and upstream providers via Unbound.
Interesting... Via Awesome Wireguard.
With frequent changes to my Ansible roles it often becomes tricky to keep track of which version of a particular role was executed for a particular play.
This is not thoroughly tested yet, but my approach is simple: each role contains a task that writes its git repo state (a git log formatted one-liner containing last commit hash, date, author, etc.).
These tasks are set to write to a log-file per inventory host, which is for two reasons: to avoid drowning in the default log file defined by log_path
in ansible.cfg
, and because log_path
cannot be overridden by a play or role.
This results in a log-file (one per inventory host) looking something like this:
Started playbook execution at 2024-02-22 12:34:32.327042
Role 'locales' last commit caa6355 2024-02-21 23:38:31 +0100 by solarchemist
Role 'digikam' last commit 16f0643 2024-02-21 22:50:49 +0100 by solarchemist
Playbook 'workstation' last commit 4775cf7 2024-02-20 22:53:56 +0100 by solarchemist
Ended playbook execution at 2024-02-22 12:34:55.913856
My implementation illustrated in code below.
In a role:
- name: Log the last commit and git repo status to playbook log-file
local_action: >
shell git -C {{ role_path }} log
--pretty="Role '{{ role_name }}' last commit %h %ci by %cn" -1 >>
logbook-{{ inventory_hostname }}.log
args: { chdir: "{{ playbook_dir }}" }
become: true
become_user: "{{ local_user }}"
In the playbook:
vars:
local_user: "{{ lookup('env', 'USER') }}"
pre_tasks:
- name: Write a start message to the playbook log
ansible.builtin.shell: >
printf "\nStarted playbook execution at {{ now() }}\n" >> logbook-{{ inventory_hostname }}.log
run_once: true
delegate_to: localhost
args: { chdir: "{{ playbook_dir }}" }
become: true
become_user: "{{ local_user }}"
changed_when: true
tags: always
tasks: [...]
post_tasks:
- name: Log the current commit of this playbook
local_action: >
shell git log
--pretty="Playbook '{{ playbook_dir | basename }}' last commit %h %ci by %cn" -1
>> logbook-{{ inventory_hostname }}.log
args: { chdir: "{{ playbook_dir }}" }
become: true
become_user: "{{ local_user }}"
tags: always
- name: Write an end message to the playbook log
ansible.builtin.shell: >
echo "Ended playbook execution at {{ now() }}" >> logbook-{{ inventory_hostname }}.log
run_once: true
delegate_to: localhost
args: { chdir: "{{ playbook_dir }}" }
become: true
become_user: "{{ local_user }}"
changed_when: true
tags: always