runner

Ansible role that deployes services on my runner machine

4.7 KBYML
frigate.yml
4.7 KB128 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