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