112 lines
3.9 KiB
YAML
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') }}.
|