252 lines
7.3 KiB
YAML
252 lines
7.3 KiB
YAML
---
|
||
# 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 Unix–TCP 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 Unix–TCP 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
|