Files
homelab-optimized/ansible/playbooks/tailscale_update.yml
Gitea Mirror Bot 75d4f4e02b
Some checks failed
Documentation / Build Docusaurus (push) Failing after 5m0s
Documentation / Deploy to GitHub Pages (push) Has been skipped
Sanitized mirror from private repository - 2026-03-29 13:33:25 UTC
2026-03-29 13:33:25 +00:00

112 lines
3.9 KiB
YAML

---
# Tailscale Update Playbook
#
# Updates Tailscale across all managed hosts using the appropriate method
# for each host type.
#
# Usage:
# ansible-playbook -i inventory.yml playbooks/tailscale_update.yml
# ansible-playbook -i inventory.yml playbooks/tailscale_update.yml --tags check
# ansible-playbook -i inventory.yml playbooks/tailscale_update.yml --tags update
# ansible-playbook -i inventory.yml playbooks/tailscale_update.yml --limit "pi-5,homelab"
#
# Host types and update methods:
# apt_tailscale: apt update && apt install tailscale (Debian/Ubuntu)
# synology: Manual via DSM Package Center (report only)
# truenas-scale: Manual via TrueNAS Apps UI (Docker container, report only)
# routers: Manual via vendor UI (report only)
- name: Tailscale Update — Check Versions
hosts: tailscale_hosts
gather_facts: false
tags: [check, update]
tasks:
- name: Get current Tailscale version (apt hosts)
shell: tailscale version 2>/dev/null | head -1 || echo "NOT_INSTALLED"
register: ts_version
changed_when: false
when: "'apt_tailscale' in group_names"
- name: Get current Tailscale version (Synology)
shell: |
for p in /var/packages/Tailscale/target/bin/tailscale /usr/local/bin/tailscale /var/packages/WireGuard/target/bin/tailscale; do
[ -x "$p" ] && $p version 2>/dev/null | head -1 && exit 0
done
synopkg version Tailscale 2>/dev/null || echo "UNKNOWN"
register: ts_version_synology
changed_when: false
when: "'synology' in group_names"
- name: Get current Tailscale version (TrueNAS Docker)
shell: docker ps --filter "name=tailscale" --format "{{ '{{' }}.Image{{ '}}' }}" 2>/dev/null | head -1 || echo "UNKNOWN"
register: ts_version_truenas
changed_when: false
become: true
when: inventory_hostname == 'truenas-scale'
- name: Get current Tailscale version (OpenWrt)
shell: tailscale version 2>/dev/null | head -1 || opkg info tailscale 2>/dev/null | grep Version | awk '{print $2}' || echo "UNKNOWN"
register: ts_version_router
changed_when: false
when: "'routers' in group_names"
- name: Set unified version fact
set_fact:
tailscale_current: >-
{{ ts_version.stdout | default(
ts_version_synology.stdout | default(
ts_version_truenas.stdout | default(
ts_version_router.stdout | default('UNKNOWN')))) | trim }}
- name: Display current versions
debug:
msg: "{{ inventory_hostname }}: {{ tailscale_current }}"
- name: Tailscale Update — APT Hosts
hosts: apt_tailscale
gather_facts: false
become: true
tags: [update]
tasks:
- name: Check for available update
shell: apt list --upgradable 2>/dev/null | grep tailscale || echo "UP_TO_DATE"
register: apt_check
changed_when: false
- name: Update Tailscale via apt
apt:
name: tailscale
state: latest
update_cache: true
cache_valid_time: 300
register: apt_update
when: "'UP_TO_DATE' not in apt_check.stdout"
- name: Get new version after update
shell: tailscale version | head -1
register: ts_new_version
changed_when: false
when: apt_update is changed
- name: Report update result
debug:
msg: >-
{{ inventory_hostname }}:
{{ 'Updated to ' + ts_new_version.stdout if apt_update is changed
else 'Already up to date' }}
- name: Tailscale Update — Manual Hosts Report
hosts: tailscale_manual
gather_facts: false
tags: [update]
tasks:
- name: Report manual update required
debug:
msg: >-
{{ inventory_hostname }} ({{ tailscale_update_method | default('unknown') }}):
Current version {{ tailscale_current | default('unknown') }}.
Update manually via {{ tailscale_update_instructions | default('vendor UI') }}.