ansible/playbooks/home_media.yml
2021-10-07 10:39:20 -05:00

129 lines
4.3 KiB
YAML
Executable File

#!/usr/bin/env ansible-playbook
# vim:ft=ansible:
---
# Home media storage Pi
- hosts: pi-media-1.desu.ltd
module_defaults:
docker_container:
state: started
restart_policy: unless-stopped
pull: yes
tasks:
- name: assure mount directory
file: path=/data state=directory mode=0755
tags: [ pis, storage ]
- name: assure mount
mount: path=/data src=LABEL=mass state=mounted fstype=ext4
tags: [ pis, storage ]
- name: assure directories in mount
file: path=/data/{{ item }} state=directory mode=0755
with_items:
- nfs
- postgresql
tags: [ pis, storage ]
- name: assure symlinks to directories in mount
file: path={{ item.path }} src=/data/{{ item.src }} state=link
with_items:
- { path: /var/lib/postgresql, src: postgresql }
- { path: /srv/nfs, src: nfs }
tags: [ pis, storage ]
- name: ensure docker network
docker_network: name=web
tags: [ docker ]
- name: include tasks for apps
include_tasks: tasks/app/{{ task }}
with_items:
- redis.yml
loop_control:
loop_var: task
tags: [ always ]
- name: include tasks for web services
include_tasks: tasks/web/{{ task }}
with_items:
- transmission.yml
- jackett.yml
- sonarr.yml
- radarr.yml
loop_control:
loop_var: task
tags: [ always ]
roles:
- role: backup
vars:
backup_s3backup_list_extra:
- /data/transmisson
- /data/jackett
- /data/sonarr
backup_time: "Mon *-*-* 02:00:00"
tags: [ backup ]
- role: ingress
vars:
ingress_container_image: "nginx:latest"
ingress_container_ports:
- 80:80
ingress_container_config_mount: /etc/nginx/conf.d
ingress_container_persist_dir: /data/nginx
ingress_listen_args: 80
ingress_listen_tls: no
ingress_servers:
- name: transmission.local.desu.ltd
proxy_pass: http://transmission:9091
- name: jackett.local.desu.ltd
proxy_pass: http://jackett:9117
- name: sonarr.local.desu.ltd
proxy_pass: http://sonarr:8989
- name: radarr.local.desu.ltd
proxy_pass: http://radarr:7878
tags: [ ingress ]
- role: geerlingguy.postgresql
vars:
postgresql_global_config_options:
- option: listen_addresses
value: 192.168.103.1,172.23.103.1,127.0.0.1
postgresql_hba_entries:
- { type: local, database: all, user: postgres, auth_method: peer }
- { type: local, database: all, user: all, auth_method: md5 }
- { type: host, database: all, user: all, address: '127.0.0.0/8', auth_method: md5 }
- { type: host, database: all, user: all, address: '::1/128', auth_method: md5 }
# Used for internal access from other nodes
- { type: host, database: all, user: all, address: '192.168.0.0/16', auth_method: md5 }
# Allow hosts over zerotier
- { type: host, database: all, user: all, address: '172.23.0.0/16', auth_method: md5 }
postgresql_users:
- name: grafana
password: "{{ secret_grafana_local_db_pass }}"
- name: gulagbot
password: "{{ secret_gulagbot_local_db_pass }}"
- name: firefly
password: "{{ secret_firefly_db_pass }}"
- name: nagios
password: "{{ secret_postgresql_monitoring_password }}"
postgresql_databases:
- name: gulagbot
owner: gulagbot
- name: grafana
owner: grafana
- name: firefly
owner: firefly
tags: [ pis, storage, psql ]
- role: geerlingguy.nfs
vars:
nfs_exports:
- "/data/shared/media 192.168.0.0/16(ro,no_root_squash,sync) 172.23.0.0/16(ro,no_root_squash,sync)"
tags: [ pis, storage, nfs ]
- role: bertvv.samba
vars:
samba_users:
- name: salt
password: "{{ samba_user_salt_password }}"
samba_shares:
- name: media
browseable: yes
comment: 'Media downloaded by that one Pi'
group: 911
guest_ok: yes
owner: 911
public: yes
path: /data/shared/media
tags: [ pis, storage, samba, smb ]