/
/
/
Ansible role that deployes services on my runner machine
1---
2# Runner Services Role - Handlers
3
4- name: reload systemd
5 systemd:
6 daemon_reload: yes
7 become: yes
8
9- name: restart docker
10 systemd:
11 name: docker
12 state: restarted
13 become: yes
14
15- name: restart nfs mounts
16 systemd:
17 name: "{{ item.local_path | replace('/', '-') | regex_replace('^-', '') }}.mount"
18 state: restarted
19 loop: "{{ runner_nfs_mounts }}"
20 become: yes
21
22- name: restart frigate
23 community.docker.docker_compose_v2:
24 project_src: "{{ frigate_config_dir }}"
25 state: present
26 recreate: "always"
27 when: frigate_enabled
28
29- name: restart immich
30 community.docker.docker_compose_v2:
31 project_src: "{{ immich_config_dir }}"
32 state: present
33 recreate: "always"
34 when: immich_enabled
35
36- name: restart forgejo
37 community.docker.docker_compose_v2:
38 project_src: "{{ forgejo_config_dir }}"
39 state: present
40 recreate: "always"
41 when: forgejo_enabled
42
43# Restarted on its own rather than through `restart forgejo`, which recreates
44# every service in the project: the host runners are building legacy
45# repositories and a config change that concerns only this runner should not
46# interrupt them. The runner reads its config at startup, so a restart is what
47# makes a change take effect.
48- name: restart forgejo docker runner
49 community.docker.docker_compose_v2:
50 project_src: "{{ forgejo_config_dir }}"
51 services: [forgejo-docker-runner]
52 state: restarted
53 when: forgejo_enabled and (forgejo_docker_runner_enabled | default(false))
54
55- name: restart web-tools
56 community.docker.docker_compose_v2:
57 project_src: "{{ web_tools_config_dir }}"
58 state: present
59 recreate: "always"
60 when: web_tools_enabled
61
62- name: restart tandoor
63 community.docker.docker_compose_v2:
64 project_src: "{{ tandoor_config_dir }}"
65 state: present
66 recreate: "always"
67 when: tandoor_enabled
68
69- name: restart ghost
70 community.docker.docker_compose_v2:
71 project_src: "{{ ghost_config_dir }}"
72 state: present
73 recreate: "always"
74 when: ghost_enabled
75
76- name: restart cvat
77 community.docker.docker_compose_v2:
78 project_src: "{{ cvat_config_dir }}"
79 state: present
80 recreate: "always"
81 when: cvat_enabled
82
83- name: restart llm-stack
84 community.docker.docker_compose_v2:
85 project_src: "{{ llm_stack_config_dir }}"
86 state: present
87 recreate: "always"
88 when: llm_stack_enabled
89
90- name: restart livekit
91 community.docker.docker_compose_v2:
92 project_src: "{{ livekit_config_dir }}"
93 state: present
94 recreate: "always"
95 when: livekit_enabled
96
97- name: restart dnd
98 community.docker.docker_compose_v2:
99 project_src: "{{ dnd_config_dir }}"
100 services: [dnd-stt]
101 state: present
102 recreate: "always"
103 when: dnd_enabled
104
105# Separate from `restart dnd` so a change to the agent's environment does not
106# bounce the orchestrator, and vice versa.
107#
108# Restarting the Chamberlain mid-session is safe: it reconciles the manifests
109# against what is actually running at startup, so a live session is adopted
110# rather than lost. The agent has no runtime dependency on it either -- the
111# recording and the transcript continue regardless.
112- name: restart dnd chamberlain
113 community.docker.docker_compose_v2:
114 project_src: "{{ dnd_config_dir }}"
115 services: [dnd-chamberlain]
116 state: present
117 recreate: "always"
118 when: dnd_enabled
119
120- name: restart runner services
121 include_tasks: restart-all-services.yml
122
123- name: validate runner deployment
124 include_tasks: health-checks.yml
125 tags: validation
126
127- name: restart macros
128 community.docker.docker_compose_v2:
129 project_src: "{{ macros_config_dir }}"
130 state: present
131 recreate: "always"
132 when: macros_enabled
133
134- name: restart mealie
135 community.docker.docker_compose_v2:
136 project_src: "{{ mealie_config_dir }}"
137 state: present
138 recreate: "always"
139 when: mealie_enabled
140