/
/
/
Ansible role that deployes services on my runner machine
1---
2# Runner Services Role - Main Tasks
3
4- name: Check if runner role is enabled
5 fail:
6 msg: "Runner role is disabled. Set runner_enabled: true to enable."
7 when: not runner_enabled
8 tags: always
9
10- name: Display runner role start message
11 debug:
12 msg: "Starting Runner 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 - runner
25 - prerequisites
26 - setup
27
28# Performance tuning
29- name: Include performance tuning tasks
30 include_tasks: performance.yml
31 when: runner_performance_tuning_enabled
32 tags:
33 - runner
34 - performance
35 - tuning
36
37# NFS mount configuration
38- name: Include NFS mount tasks
39 include_tasks: nfs-mounts.yml
40 when: runner_nfs_enabled
41 tags:
42 - runner
43 - nfs
44 - mounts
45
46# Docker network setup
47- name: Include docker network tasks
48 include_tasks: docker-network.yml
49 tags:
50 - runner
51 - docker
52 - network
53
54# Service deployments
55- name: Include Frigate deployment
56 import_tasks: frigate.yml
57 when: frigate_enabled
58 tags:
59 - frigate
60
61- name: Include Immich deployment
62 import_tasks: immich.yml
63 when: immich_enabled
64 tags:
65 - immich
66
67- name: Include Forgejo deployment
68 import_tasks: forgejo.yml
69 when: forgejo_enabled
70 tags:
71 - forgejo
72
73- name: Include Web Tools deployment
74 import_tasks: web-tools.yml
75 when: web_tools_enabled
76 tags:
77 - web-tools
78
79- name: Include Tandoor deployment
80 import_tasks: tandoor.yml
81 when: tandoor_enabled
82 tags:
83 - tandoor
84
85- name: Include Ghost CMS deployment
86 import_tasks: ghost.yml
87 when: ghost_enabled
88 tags:
89 - ghost
90
91- name: Include CVAT deployment
92 import_tasks: cvat.yml
93 when: cvat_enabled
94 tags:
95 - cvat
96
97- name: Include Harbor deployment
98 import_tasks: harbor.yml
99 when: harbor_enabled
100 tags:
101 - harbor
102
103- name: Include LLM Stack deployment
104 import_tasks: llm-stack.yml
105 when: llm_stack_enabled
106 tags:
107 - llm-stack
108 - ollama
109 - openwebui
110 - litellm
111
112- name: Include D&D session agent deployment
113 import_tasks: dnd.yml
114 when: dnd_enabled
115 tags:
116 - dnd
117 - dnd-stt
118
119# After dnd.yml: the Chamberlain's environment references dnd_table_http_port and
120# it starts into the compose project that dnd.yml renders, so the configuration
121# has to be on disk first.
122- name: Include the Chamberlain deployment
123 import_tasks: chamberlain.yml
124 when: dnd_enabled
125 tags:
126 - dnd
127 - chamberlain
128 - thaumaturgeon
129
130- name: Include LiveKit deployment
131 import_tasks: livekit.yml
132 when: livekit_enabled
133 tags:
134 - livekit
135 - conferencing
136
137- name: Include Macro Checker deployment
138 import_tasks: macros.yml
139 when: macros_enabled
140 tags:
141 - macros
142
143# After the LLM stack: its AI providers are tested end to end through LiteLLM.
144- name: Include Mealie deployment
145 import_tasks: mealie.yml
146 when: mealie_enabled
147 tags:
148 - mealie
149 - recipes
150
151- name: Display runner deployment summary
152 debug:
153 msg: |
154 Runner Services deployment completed successfully!
155
156 Services Status:
157 - LLM Stack (AI): {{ 'Enabled' if llm_stack_enabled else 'Disabled' }}
158 - Frigate (CCTV): {{ 'Enabled' if frigate_enabled else 'Disabled' }}
159 - Immich (Photos): {{ 'Enabled' if immich_enabled else 'Disabled' }}
160 - Forgejo (Git): {{ 'Enabled' if forgejo_enabled else 'Disabled' }}
161 - Harbor (Registry): {{ 'Enabled' if harbor_enabled else 'Disabled' }}
162 - Web Tools: {{ 'Enabled' if web_tools_enabled else 'Disabled' }}
163 - Tandoor (Recipes): {{ 'Enabled' if tandoor_enabled else 'Disabled' }}
164 - Ghost CMS: {{ 'Enabled' if ghost_enabled else 'Disabled' }}
165 - CVAT: {{ 'Enabled' if cvat_enabled else 'Disabled' }}
166 - LiveKit (Conferencing): {{ 'Enabled' if livekit_enabled else 'Disabled' }}
167 - Macro Checker: {{ 'Enabled' if macros_enabled else 'Disabled' }}
168 - Mealie (Recipes): {{ 'Enabled' if mealie_enabled else 'Disabled' }}
169
170 Access Information:
171 {% if llm_stack_enabled %}
172 - Ollama: http://{{ ansible_default_ipv4.address }}:{{ llm_stack_ollama_port }}
173 - OpenWebUI: http://{{ ansible_default_ipv4.address }}:{{ llm_stack_openwebui_port }}
174 - LiteLLM: http://{{ ansible_default_ipv4.address }}:{{ llm_stack_litellm_port }}
175 {% endif %}
176 {% if frigate_enabled %}
177 - Frigate: http://{{ ansible_default_ipv4.address }}:{{ frigate_port }}
178 {% endif %}
179 {% if immich_enabled %}
180 - Immich: http://{{ ansible_default_ipv4.address }}:{{ immich_server_port }}
181 {% endif %}
182 {% if forgejo_enabled %}
183 - Forgejo: http://{{ ansible_default_ipv4.address }}:{{ forgejo_http_port }}
184 - Forgejo SSH: ssh://git@{{ ansible_default_ipv4.address }}:{{ forgejo_ssh_port }}
185 {% endif %}
186 {% if harbor_enabled %}
187 - Harbor Registry: http://{{ ansible_default_ipv4.address }}:{{ harbor_http_port | default(8080) }}
188 - Harbor Admin: admin/{{ harbor_admin_password | default('Harbor12345') }}
189 {% endif %}
190 {% if web_tools_enabled %}
191 - Stirling-PDF: http://{{ ansible_default_ipv4.address }}:{{ web_tools_stirling_port }}
192 - ConvertX: http://{{ ansible_default_ipv4.address }}:{{ web_tools_convertx_port }}
193 - CyberChef: http://{{ ansible_default_ipv4.address }}:{{ web_tools_cyberchef_port }}
194 - IT-Tools: http://{{ ansible_default_ipv4.address }}:{{ web_tools_it_tools_port }}
195 {% endif %}
196 {% if tandoor_enabled %}
197 - Tandoor: http://{{ ansible_default_ipv4.address }}:{{ tandoor_port }}
198 {% endif %}
199 {% if ghost_enabled %}
200 - Ghost CMS: http://{{ ansible_default_ipv4.address }}:{{ ghost_port }}
201 {% endif %}
202 {% if cvat_enabled %}
203 - CVAT: http://{{ cvat_domain }}
204 {% endif %}
205 {% if livekit_enabled %}
206 - LiveKit Meet: http://{{ ansible_default_ipv4.address }}:{{ livekit_meet_port }}
207 - LiveKit Signaling: {{ livekit_public_ws_url }}
208 {% endif %}
209 {% if macros_enabled %}
210 - Macro Checker: http://{{ ansible_default_ipv4.address }}:{{ macros_port }}
211 {% endif %}
212 {% if mealie_enabled %}
213 - Mealie: http://{{ ansible_default_ipv4.address }}:{{ mealie_port }}
214 {% endif %}
215
216 Management Scripts: /usr/local/bin/runner-*
217
218 Service Directories (Consolidated Structure):
219 - LLM Stack: {{ llm_stack_config_dir }}
220 - Ollama Data: {{ llm_stack_ollama_data_dir }}
221 - OpenWebUI Data: {{ llm_stack_openwebui_data_dir }}
222 - LiteLLM Data: {{ llm_stack_litellm_data_dir }}
223 - Frigate: {{ frigate_config_dir }}
224 - Immich: {{ immich_config_dir }}
225 - Forgejo: {{ forgejo_config_dir }}
226 - Harbor: {{ harbor_config_dir }}
227 - Web Tools: {{ web_tools_config_dir }}
228 - Tandoor: {{ tandoor_config_dir }}
229 - Ghost: {{ ghost_config_dir }}
230 - CVAT: {{ cvat_config_dir }}
231 - LiveKit: {{ livekit_config_dir }}
232 - Macro Checker: {{ macros_config_dir }}
233 - Mealie: {{ mealie_config_dir }}
234
235 NFS Mounts: {{ runner_nfs_mount_dir }}
236 tags: always
237