--- # 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 # ── Snap packages ── - name: Install Overseerr via snap community.general.snap: name: overseerr channel: latest/beta state: present - name: Ensure Overseerr snap service is running ansible.builtin.command: snap start overseerr changed_when: false failed_when: false # ── APT-managed services ── - name: Install Syncthing ansible.builtin.apt: name: syncthing state: present - name: Enable and start Syncthing for pez user ansible.builtin.systemd: name: syncthing@pez state: started enabled: true # ── 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