/
/
/
Ansible role that provisions my storage server.
1---
2# Storage Services Role - Main Tasks
3
4- name: Check if storage role is enabled
5 fail:
6 msg: "Storage role is disabled. Set storage_enabled: true to enable."
7 when: not storage_enabled
8 tags: always
9
10- name: Display storage role start message
11 debug:
12 msg: "Starting Storage Services deployment with {{ ansible_play_hosts | length }} host(s)"
13 tags: always
14
15# Validate vault secrets before proceeding
16- name: Include vault variable validation
17 include_tasks: validate-vault.yml
18 tags: [always, validation]
19
20# Prerequisites and system setup
21- name: Include prerequisites tasks
22 include_tasks: prerequisites.yml
23 tags:
24 - storage
25 - prerequisites
26 - setup
27
28# Docker network setup
29- name: Include docker network tasks
30 include_tasks: docker-network.yml
31 tags:
32 - storage
33 - docker
34 - network
35
36# Service deployments
37- name: Include Jellyfin deployment
38 include_tasks: jellyfin.yml
39 when: jellyfin_enabled
40 tags:
41 - storage
42 - jellyfin
43 - media
44
45- name: Include Arr Stack deployment
46 include_tasks: arr-stack.yml
47 when: arr_stack_enabled
48 tags:
49 - storage
50 - arr-stack
51 - automation
52
53- name: Include Navidrome deployment
54 include_tasks: navidrome.yml
55 when: navidrome_enabled
56 tags:
57 - storage
58 - navidrome
59 - music
60
61# apply: makes `--tags gdu` reach the tasks inside; a plain include_tasks
62# only tags the include itself and then runs none of its children.
63- name: Include gdu disk usage analyzer deployment
64 include_tasks:
65 file: gdu.yml
66 apply:
67 tags:
68 - storage
69 - gdu
70 - monitoring
71 when: gdu_enabled
72 tags:
73 - storage
74 - gdu
75 - monitoring
76
77- name: Include Calibre Stack deployment
78 include_tasks: calibre-stack.yml
79 when: calibre_enabled
80 tags:
81 - storage
82 - calibre
83 - books
84
85- name: Include Nextcloud deployment
86 include_tasks: nextcloud.yml
87 when: nextcloud_enabled
88 tags:
89 - storage
90 - nextcloud
91 - cloud
92
93- name: Include Restic Backup Server deployment
94 include_tasks: restic-server.yml
95 when: restic_backup_server_enabled
96 tags:
97 - storage
98 - restic
99 - backup
100
101# Post-deployment validation
102- name: Include validation tasks
103 include_tasks: validation.yml
104 tags:
105 - storage
106 - validation
107 - health-check
108
109
110- name: Display storage deployment summary
111 debug:
112 msg: |
113 Storage Services Deployment Complete!
114
115 Services Status:
116 - Jellyfin (Media): {{ 'Enabled' if jellyfin_enabled else 'Disabled' }}
117 - Arr Stack (Automation): {{ 'Enabled' if arr_stack_enabled else 'Disabled' }}
118 - Navidrome: {{ 'Enabled' if navidrome_enabled else 'Disabled' }}
119 - gdu (Disk Usage): {{ 'Enabled' if gdu_enabled else 'Disabled' }}
120 - Calibre Stack (Books): {{ 'Enabled' if calibre_enabled else 'Disabled' }}
121 - Restic Backup: {{ 'Enabled' if restic_backup_server_enabled else 'Disabled' }}
122 - Nextcloud (Cloud): {{ 'Enabled' if nextcloud_enabled else 'Disabled' }}
123
124 Access Information:
125 {% if jellyfin_enabled %}
126 - Jellyfin: http://{{ ansible_default_ipv4.address }}:{{ jellyfin_host_port }}
127 {% endif %}
128 {% if arr_stack_enabled %}
129 - Sonarr (TV): http://{{ ansible_default_ipv4.address }}:{{ sonarr_host_port }}
130 - Radarr (Movies): http://{{ ansible_default_ipv4.address }}:{{ radarr_host_port }}
131 - Prowlarr (Indexers): http://{{ ansible_default_ipv4.address }}:{{ prowlarr_host_port }}
132 - LazyLibrarian (Books): http://{{ ansible_default_ipv4.address }}:{{ lazylibrarian_host_port }}
133 - Lidarr (Music): http://{{ ansible_default_ipv4.address }}:{{ lidarr_host_port }}
134 - Jellyseer (Requests): http://{{ ansible_default_ipv4.address }}:{{ jellyseer_host_port }}
135 - Flaresolverr (Cloudflare): http://{{ ansible_default_ipv4.address }}:{{ flaresolverr_host_port }}
136 {% endif %}
137 {% if navidrome_enabled %}
138 - Navidrome: http://{{ ansible_default_ipv4.address }}:{{ navidrome_host_port }}
139 {% endif %}
140 {% if gdu_enabled %}
141 - gdu (Disk Usage): http://{{ gdu_web_hostname }}:{{ gdu_host_port }}
142 {% endif %}
143 {% if calibre_enabled %}
144 - Calibre Server: http://{{ ansible_default_ipv4.address }}:{{ calibre_server_host_port }}
145 - Calibre-Web: http://{{ ansible_default_ipv4.address }}:{{ calibre_web_host_port }}
146 {% endif %}
147 {% if restic_backup_server_enabled %}
148 - Restic Backup: http://{{ ansible_default_ipv4.address }}:{{ restic_backup_host_port }}
149 {% endif %}
150 {% if nextcloud_enabled %}
151 - Nextcloud: http://{{ ansible_default_ipv4.address }}:{{ nextcloud_host_port }}
152 {% endif %}
153
154 Management Scripts: /usr/local/bin/storage-*
155
156 Service Directories:
157 - Jellyfin: {{ jellyfin_data_dir }}
158 - Arr Stack: {{ arr_config_dir }}
159 - Calibre: {{ calibre_config_dir }}
160 - gdu: {{ gdu_config_dir }}
161 - Restic: {{ restic_backup_config_dir }}
162 - Nextcloud: {{ nextcloud_config_dir }}
163
164 Media Paths: {{ storage_base_path }}
165 tags: always