pez-infra/ansible/roles/media_stack/tasks/main.yml
Rasmus Wejlgaard 522f0b2b84 Capture london-b media stack and systemd services
Add the full media automation stack (sonarr, radarr, prowlarr, lidarr,
readarr, whisparr), media servers (jellyfin, plex), and supporting
services (transmission, samba, ollama, promtail, cloudflared, vsftpd)
to the repo as a media_stack Ansible role.

Includes:
- Custom systemd unit files for non-package-managed services
- Config files for promtail, samba, transmission, vsftpd
- Cron jobs for movie-rename-fix, sonarr/radarr midnight restarts
- Updated deploy.yml to wire the role into london-b's stage
- Updated london-b docs with full service inventory

Backup script (backup.sh) already covered by the existing backup role.
Node/systemd exporters already covered by existing monitoring roles.

Closes PESO-92
2026-03-29 15:39:05 +00:00

128 lines
3.1 KiB
YAML

---
# media_stack role — deploys the full media stack on london-b
# Manages: *arr suite, jellyfin, plex, transmission, samba,
# ollama, promtail, cloudflared, vsftpd, and cron jobs.
# ── Systemd service units (custom, not package-managed) ──
- name: Deploy custom systemd unit files
ansible.builtin.copy:
src: "{{ playbook_dir }}/services/{{ item }}/{{ item }}.service"
dest: "/etc/systemd/system/{{ item }}.service"
mode: '0644'
loop:
- radarr
- prowlarr
- lidarr
- readarr
- whisparr
- ollama
- promtail
notify: Reload systemd daemon
- name: Enable and start custom systemd services
ansible.builtin.systemd:
name: "{{ item }}"
state: started
enabled: true
loop:
- radarr
- prowlarr
- lidarr
- readarr
- ollama
- promtail
# Whisparr is installed but disabled (kept as-is)
- name: Ensure whisparr unit is present but disabled
ansible.builtin.systemd:
name: whisparr
enabled: false
# ── Package-managed services (ensure enabled) ──
- name: Ensure package-managed services are enabled
ansible.builtin.systemd:
name: "{{ item }}"
state: started
enabled: true
loop:
- sonarr
- jellyfin
- plexmediaserver
- transmission-daemon
- smbd
- vsftpd
- cloudflared
# ── Configuration files ──
- name: Deploy promtail config
ansible.builtin.copy:
src: "{{ playbook_dir }}/services/promtail/config/london-b.yml"
dest: /etc/promtail/config.yml
mode: '0644'
notify: Restart promtail
- name: Deploy samba config
ansible.builtin.copy:
src: "{{ playbook_dir }}/services/samba/config/london-b.conf"
dest: /etc/samba/smb.conf
mode: '0644'
backup: true
notify: Restart smbd
- name: Deploy transmission settings
ansible.builtin.copy:
src: "{{ playbook_dir }}/services/transmission/config/settings.json"
dest: /etc/transmission-daemon/settings.json
owner: debian-transmission
group: debian-transmission
mode: '0600'
notify: Restart transmission
- name: Deploy vsftpd config
ansible.builtin.copy:
src: "{{ playbook_dir }}/services/vsftpd/config/london-b.conf"
dest: /etc/vsftpd.conf
mode: '0644'
notify: Restart vsftpd
# ── Scripts ──
- name: Ensure scripts directory exists
ansible.builtin.file:
path: /root/scripts
state: directory
mode: '0755'
- name: Deploy movie-rename-fix script
ansible.builtin.copy:
src: "{{ playbook_dir }}/scripts/movie-rename-fix.fish"
dest: /root/scripts/movie-rename-fix.fish
mode: '0755'
# ── Cron jobs ──
- name: Movie rename fix (hourly)
ansible.builtin.cron:
name: "Movie rename fix"
minute: "0"
job: "/root/scripts/movie-rename-fix.fish"
user: root
- name: Restart radarr at midnight
ansible.builtin.cron:
name: "Restart radarr"
minute: "0"
hour: "0"
job: "systemctl restart radarr"
user: root
- name: Restart sonarr at midnight
ansible.builtin.cron:
name: "Restart sonarr"
minute: "0"
hour: "0"
job: "systemctl restart sonarr"
user: root