/
/
/
Ansible role that deployes services on my runner machine
1---
2# Runner Services - Frigate CCTV System
3
4- name: Create Frigate configuration directory structure
5 file:
6 path: "{{ item }}"
7 state: directory
8 owner: "{{ runner_user }}"
9 group: "{{ runner_group }}"
10 mode: '0775'
11 loop:
12 - "{{ frigate_config_dir }}"
13 - "{{ frigate_config_dir }}/config"
14 - "{{ frigate_config_dir }}/config/models"
15 - "{{ frigate_config_dir }}/snapshot-data"
16
17- name: Set group sticky bit on Frigate directories for permission inheritance
18 file:
19 path: "{{ item }}"
20 state: directory
21 mode: "g+s"
22 loop:
23 - "{{ frigate_config_dir }}"
24 - "{{ frigate_config_dir }}/config"
25 - "{{ frigate_config_dir }}/config/models"
26
27- name: Copy coco labels
28 ansible.builtin.copy:
29 src: coco_labels.txt
30 dest: "{{ frigate_config_dir }}/config/models/coco_labels.txt"
31 owner: "{{ runner_user }}"
32 group: "{{ runner_group }}"
33 mode: '0664'
34 when: frigate_hardware_acceleration == 'nvenc'
35
36- name: Copy snapshot script
37 ansible.builtin.copy:
38 src: snapshot.sh
39 dest: "{{ frigate_config_dir }}/snapshot-data/snapshot.sh"
40 owner: "{{ runner_user }}"
41 group: "{{ runner_group }}"
42 mode: '0664'
43
44- name: Download yolov5s.onnx model for GPU acceleration
45 get_url:
46 url: https://huggingface.co/amd/yolov5s/resolve/main/yolov5s.onnx
47 dest: "{{ frigate_config_dir }}/config/models/yolov5s.onnx"
48 owner: "{{ runner_user }}"
49 group: "{{ runner_group }}"
50 mode: '0664'
51 timeout: 300
52 when: frigate_hardware_acceleration == 'nvenc'
53 register: model_download
54 retries: 3
55 delay: 10
56 check_mode: no
57
58- name: Generate Frigate configuration file
59 template:
60 src: frigate-config.yml.j2
61 dest: "{{ frigate_config_dir }}/config/config.yml"
62 owner: "{{ runner_user }}"
63 group: "{{ runner_group }}"
64 mode: '0777'
65 backup: yes
66 notify: restart frigate
67
68# GPU configuration is handled directly in service templates - no need for separate config file
69
70- name: Check GPU availability and warn if configuration mismatch
71 debug:
72 msg: |
73 WARNING: Frigate hardware acceleration setting '{{ frigate_hardware_acceleration }}' may not be available.
74 {% if frigate_hardware_acceleration in ['nvdec', 'nvenc'] and not ansible_facts.get('gpu_info', {}).get('nvidia_gpu_detected', false) %}
75 NVIDIA GPU not detected. Falling back to CPU-only processing.
76 {% elif frigate_hardware_acceleration == 'qsv' and not ansible_facts.get('intel_gpu_detected', false) %}
77 Intel GPU not detected. Falling back to CPU-only processing.
78 {% elif frigate_hardware_acceleration == 'vaapi' and ansible_facts.get('vaapi_devices', []) | length == 0 %}
79 VAAPI devices not found. Falling back to CPU-only processing.
80 {% endif %}
81 Consider setting frigate_hardware_acceleration to "none" for CPU-only processing.
82 when: >
83 (frigate_hardware_acceleration in ['nvdec', 'nvenc'] and not ansible_facts.get('gpu_info', {}).get('nvidia_gpu_detected', false)) or
84 (frigate_hardware_acceleration == 'qsv' and not ansible_facts.get('intel_gpu_detected', false)) or
85 (frigate_hardware_acceleration == 'vaapi' and ansible_facts.get('vaapi_devices', []) | length == 0)
86
87- name: Create Frigate Dockerfile
88 template:
89 src: frigate-Dockerfile.j2
90 dest: "{{ frigate_config_dir }}/Dockerfile"
91 owner: "{{ runner_user }}"
92 group: "{{ runner_group }}"
93 mode: '0664'
94
95- name: Create Frigate Docker Compose file
96 template:
97 src: frigate-compose.yml.j2
98 dest: "{{ frigate_config_dir }}/docker-compose.yml"
99 owner: "{{ runner_user }}"
100 group: "{{ runner_group }}"
101 mode: '0664'
102 notify: restart frigate
103
104- name: Start Frigate service
105 community.docker.docker_compose_v2:
106 project_src: "{{ frigate_config_dir }}"
107 state: present
108 register: frigate_start_result
109 check_mode: no
110
111- name: Wait for Frigate to be healthy
112 uri:
113 url: "http://localhost:{{ frigate_port }}/api/config"
114 method: GET
115 status_code: 200
116 register: frigate_health
117 until: frigate_health.status == 200
118 retries: 30
119 delay: 10
120 when: frigate_start_result is changed
121 check_mode: no
122
123- name: Display Frigate deployment summary
124 debug:
125 msg: |
126 Frigate CCTV System Deployment:
127 - Status: {{ 'Started' if frigate_start_result is changed else 'Already running' }}
128 - Web UI: http://{{ ansible_default_ipv4.address }}:{{ frigate_port }}
129 - RTMP Stream: rtmp://{{ ansible_default_ipv4.address }}:{{ frigate_rtmp_port }}
130 - RTSP Re-stream: rtsp://{{ ansible_default_ipv4.address }}:{{ frigate_rtsp_port }}
131 - Configuration: {{ frigate_config_dir }}/config/config.yml
132 - Data Storage: {{ frigate_data_dir }}
133 - Cameras Configured: {{ frigate_cameras | length }}
134 - MQTT: {{ 'Enabled' if frigate_mqtt_enabled else 'Disabled' }}
135 - Hardware Acceleration: {{ frigate_hardware_acceleration }}
136 - GPU Detection: {{ 'Available' if ansible_facts.get('gpu_info', {}).get('nvidia_gpu_detected', false) or ansible_facts.get('intel_gpu_detected', false) or ansible_facts.get('vaapi_devices', []) | length > 0 else 'No GPU detected' }}
137
138 Management Commands:
139 - frigate-logs.sh - View service logs
140 - frigate-restart.sh - Restart service
141 - frigate-status.sh - Check service status
142