/
/
/
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
57- name: Generate Frigate configuration file
58 template:
59 src: frigate-config.yml.j2
60 dest: "{{ frigate_config_dir }}/config/config.yml"
61 owner: "{{ runner_user }}"
62 group: "{{ runner_group }}"
63 mode: '0777'
64 backup: yes
65 notify: restart frigate
66
67# GPU configuration is handled directly in service templates - no need for separate config file
68
69- name: Check GPU availability and warn if configuration mismatch
70 debug:
71 msg: |
72 WARNING: Frigate hardware acceleration setting '{{ frigate_hardware_acceleration }}' may not be available.
73 {% if frigate_hardware_acceleration in ['nvdec', 'nvenc'] and not ansible_facts.get('gpu_info', {}).get('nvidia_gpu_detected', false) %}
74 NVIDIA GPU not detected. Falling back to CPU-only processing.
75 {% elif frigate_hardware_acceleration == 'qsv' and not ansible_facts.get('intel_gpu_detected', false) %}
76 Intel GPU not detected. Falling back to CPU-only processing.
77 {% elif frigate_hardware_acceleration == 'vaapi' and ansible_facts.get('vaapi_devices', []) | length == 0 %}
78 VAAPI devices not found. Falling back to CPU-only processing.
79 {% endif %}
80 Consider setting frigate_hardware_acceleration to "none" for CPU-only processing.
81 when: >
82 (frigate_hardware_acceleration in ['nvdec', 'nvenc'] and not ansible_facts.get('gpu_info', {}).get('nvidia_gpu_detected', false)) or
83 (frigate_hardware_acceleration == 'qsv' and not ansible_facts.get('intel_gpu_detected', false)) or
84 (frigate_hardware_acceleration == 'vaapi' and ansible_facts.get('vaapi_devices', []) | length == 0)
85
86- name: Create Frigate Dockerfile
87 template:
88 src: frigate-Dockerfile.j2
89 dest: "{{ frigate_config_dir }}/Dockerfile"
90 owner: "{{ runner_user }}"
91 group: "{{ runner_group }}"
92 mode: '0664'
93
94- name: Create Frigate Docker Compose file
95 template:
96 src: frigate-compose.yml.j2
97 dest: "{{ frigate_config_dir }}/docker-compose.yml"
98 owner: "{{ runner_user }}"
99 group: "{{ runner_group }}"
100 mode: '0664'
101 notify: restart frigate
102
103- name: Start Frigate service
104 community.docker.docker_compose_v2:
105 project_src: "{{ frigate_config_dir }}"
106 state: present
107 register: frigate_start_result
108
109- name: Wait for Frigate to be healthy
110 uri:
111 url: "http://localhost:{{ frigate_port }}/api/config"
112 method: GET
113 status_code: 200
114 register: frigate_health
115 until: frigate_health.status == 200
116 retries: 30
117 delay: 10
118 when: frigate_start_result is changed
119
120- name: Display Frigate deployment summary
121 debug:
122 msg: |
123 Frigate CCTV System Deployment:
124 - Status: {{ 'Started' if frigate_start_result is changed else 'Already running' }}
125 - Web UI: http://{{ ansible_default_ipv4.address }}:{{ frigate_port }}
126 - RTMP Stream: rtmp://{{ ansible_default_ipv4.address }}:{{ frigate_rtmp_port }}
127 - RTSP Re-stream: rtsp://{{ ansible_default_ipv4.address }}:{{ frigate_rtsp_port }}
128 - Configuration: {{ frigate_config_dir }}/config/config.yml
129 - Data Storage: {{ frigate_data_dir }}
130 - Cameras Configured: {{ frigate_cameras | length }}
131 - MQTT: {{ 'Enabled' if frigate_mqtt_enabled else 'Disabled' }}
132 - Hardware Acceleration: {{ frigate_hardware_acceleration }}
133 - 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' }}
134
135 Management Commands:
136 - frigate-logs.sh - View service logs
137 - frigate-restart.sh - Restart service
138 - frigate-status.sh - Check service status
139