home-server/roles/motion_back/tasks/main.yml

252 lines
7.3 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
# The home-server project produces a multi-purpose setup using Ansible.
# Copyright © 2018 Y. Gablin, under the GPL-3.0-or-later license.
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
### UPSTREAM BEGIN ⇒ ###
- name: pull prerequisites from upstream
include_role: name=etckeeper.inc allow_duplicates=true tasks_from=upstream.yml
vars:
msg: motion
### ⇐ UPSTREAM BEGIN ###
- name: install software
package:
name: "{{item}}"
state: present
with_items:
- curl
- motion
- 's-nail'
- socat
### UPSTREAM END ⇒ ###
- name: merge upstream
include_role: name=etckeeper.inc allow_duplicates=true tasks_from=merge.yml
vars:
msg: motion
### ⇐ UPSTREAM END ###
- name: send the script for Motion to send emails
template:
src: templates/email.sh.j2
dest: /etc/motion/email.sh
owner: root
group: motion
mode: 0750
notify:
- restart motion.service
- name: send the script for Motion to upload files
template:
src: templates/upload.sh.j2
dest: /etc/motion/upload.sh
owner: root
group: motion
mode: 0750
notify:
- restart motion.service
- name: send main Motion configuration
copy:
content: |
target_dir {{motion_data}}
on_event_end /etc/motion/email.sh %$ %v %Y-%m-%d %H:%M:%S
on_picture_save /etc/motion/upload.sh "%f"
minimum_motion_frames 5
event_gap 10
picture_output on
picture_quality 50
picture_filename %$-%v-%Y%m%d%H%M%S-%q@%K_%L
movie_output off
webcontrol_port 1080
webcontrol_localhost on
webcontrol_interface 1
webcontrol_parms 1
stream_port 1081
stream_localhost on
stream_preview_method 4
stream_quality 20
camera_dir /etc/motion/camera.d
dest: /etc/motion/motion.conf
owner: root
group: motion
mode: 0640
notify:
- restart motion.service
- name: create the directory for Motion cameras
file:
name: /etc/motion/camera.d
state: directory
owner: root
group: motion
mode: 0750
- name: send mask-files for Motion cameras
copy:
src: files/{{item.mask_file}}
dest: /etc/motion/camera.d/{{item.mask_file}}
owner: root
group: motion
mode: 0640
with_items: "{{motion_cameras}}"
when:
- (item.mask_file != None)
notify:
- restart motion.service
- name: send Motion cameras configuration
copy:
content: |
camera_id {{item.id}}
camera_name {{item.name}}
netcam_url {{item.url}}
{{ ('mask_file /etc/motion/camera.d/' + item.mask_file) if item.mask_file != None else '' }}
width {{item.width}}
height {{item.height}}
framerate {{item.framerate}}
text_right %q (%ix%J+%K+%L)
auto_brightness 0
noise_tune on
lightswitch_percent 40
lightswitch_frames 15
dest: /etc/motion/camera.d/camera_{{item.id}}.conf
owner: root
group: motion
mode: 0640
with_items: "{{motion_cameras}}"
notify:
- restart motion.service
- name: identify all Motion cameras configured on the server
find:
paths: [ '/etc/motion/camera.d' ]
patterns: [ 'camera_*.conf' ]
register: existing_cameras
changed_when: false
- name: only keep basenames of configured Motion cameras
set_fact:
existing_cameras: "{{ existing_cameras.files | map(attribute='path') | map('basename') | list }}"
changed_when: false
- name: filter out up-to-date Motion cameras
set_fact:
existing_cameras: "{{ existing_cameras | reject('contains', 'camera_' + (item.id | string) + '.conf') | list }}"
with_items: "{{ motion_cameras }}"
changed_when: false
- name: delete old Motion cameras
file:
path: /etc/motion/camera.d/{{item}}
state: absent
with_items: "{{ existing_cameras }}"
notify:
- restart motion.service
- name: ensure ownership of the Motion data directory
file:
path: "{{motion_data}}"
state: directory
owner: motion
recurse: true
- name: prepare override of Motion launch parameters
file:
name: /etc/systemd/system/motion.service.d
state: directory
- name: override Motion launch parameters
copy:
content: |
[Unit]
Description=Motion daemon, paused
[Service]
ExecStart=
ExecStart=/usr/bin/motion -n -m
dest: /etc/systemd/system/motion.service.d/paused-mode.conf
mode: 0644
notify:
- restart motion.service
- name: create a generic service for socat-based port-forwarding
copy:
content: |
[Unit]
Description=socat-based Unix domain socket to IPv4/TCP forwarding
After=network-online.target
Wants=network-online.target
[Service]
ExecStartPre=/usr/bin/sh -c 'rm -f "$${0%%%%:*}"' "%I"
ExecStart=/usr/bin/sh -c 'exec /usr/bin/socat -d UNIX-LISTEN:"$${0%%%%:*}",fork,mode=0666 TCP4:$${0#*:}' "%I"
PrivateDevices=yes
ProtectSystem=full
NoNewPrivileges=yes
ReadWritePaths=/run /tmp
dest: /etc/systemd/system/socat-unix-to-tcp4@.service
mode: 0644
notify:
- restart socat-unix-to-tcp4@-run-shared_sockets-motion_control.socket\x3alocalhost\x3a1080.service
- restart socat-unix-to-tcp4@-run-shared_sockets-motion_stream.socket\x3alocalhost\x3a1081.service
- name: prepare instanciation of socat-based port-forwarding for Motion control
file:
name: /etc/systemd/system/socat-unix-to-tcp4@-run-shared_sockets-motion_control.socket\x3alocalhost\x3a1080.service.d
state: directory
- name: instanciate socat-based port-forwarding for Motion control
copy:
content: |
[Unit]
Description=socat-based UnixTCP forwarding of Motion control
After=motion.service
Wants=motion.service
dest: /etc/systemd/system/socat-unix-to-tcp4@-run-shared_sockets-motion_control.socket\x3alocalhost\x3a1080.service.d/dependency.conf
mode: 0644
notify:
- restart socat-unix-to-tcp4@-run-shared_sockets-motion_control.socket\x3alocalhost\x3a1080.service
- name: prepare instanciation of socat-based port-forwarding for Motion stream
file:
name: /etc/systemd/system/socat-unix-to-tcp4@-run-shared_sockets-motion_stream.socket\x3alocalhost\x3a1081.service.d
state: directory
- name: instanciate socat-based port-forwarding for Motion stream
copy:
content: |
[Unit]
Description=socat-based UnixTCP forwarding of Motion stream
After=motion.service
Wants=motion.service
dest: /etc/systemd/system/socat-unix-to-tcp4@-run-shared_sockets-motion_stream.socket\x3alocalhost\x3a1081.service.d/dependency.conf
mode: 0644
notify:
- restart socat-unix-to-tcp4@-run-shared_sockets-motion_stream.socket\x3alocalhost\x3a1081.service
- name: enable Motion
systemd:
daemon_reload: true
name: motion.service
enabled: true
- name: enable unix-to-tcp forwarding for Motion control
systemd:
daemon_reload: true
name: socat-unix-to-tcp4@-run-shared_sockets-motion_control.socket\x3alocalhost\x3a1080.service
enabled: true
- name: enable unix-to-tcp forwarding for Motion stream
systemd:
daemon_reload: true
name: socat-unix-to-tcp4@-run-shared_sockets-motion_stream.socket\x3alocalhost\x3a1081.service
enabled: true
### LOCAL COMMIT ⇒ ###
- name: commit local changes
include_role: name=etckeeper.inc allow_duplicates=true tasks_from=local.yml
vars:
msg: motion
### ⇐ LOCAL COMMIT ###
- meta: flush_handlers