added basic testing, fixes
This commit is contained in:
parent
75e9ac252c
commit
d2ab076b44
11
README.md
11
README.md
|
|
@ -10,7 +10,7 @@ Read into the [official documentation](https://zoneminder.readthedocs.io/en/stab
|
||||||
|
|
||||||
|
|
||||||
**Tested:**
|
**Tested:**
|
||||||
* None
|
* Debian 11
|
||||||
|
|
||||||
|
|
||||||
## Functionality
|
## Functionality
|
||||||
|
|
@ -36,14 +36,15 @@ Read into the [official documentation](https://zoneminder.readthedocs.io/en/stab
|
||||||
|
|
||||||
## Info
|
## Info
|
||||||
|
|
||||||
* **Warning:** THIS ROLE IS NOT YET IN A STABLE STATE!
|
|
||||||
|
|
||||||
|
|
||||||
* **Note:** this role currently only supports debian-based systems
|
* **Note:** this role currently only supports debian-based systems
|
||||||
|
|
||||||
|
|
||||||
* **Note:** Most of this functionality can be opted in or out using the main defaults file and variables!
|
* **Note:** Most of this functionality can be opted in or out using the main defaults file and variables!
|
||||||
|
|
||||||
|
|
||||||
|
* **Warning:** You should AT LEAST [set a login password after the installation finished](https://zoneminder.readthedocs.io/en/stable/userguide/gettingstarted.html#enabling-authentication).
|
||||||
|
|
||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
For this role to work - you must install its dependencies first:
|
For this role to work - you must install its dependencies first:
|
||||||
|
|
||||||
|
|
@ -101,5 +102,3 @@ ansible-playbook -K -D -i inventory/hosts.yml playbook.yml --ask-vault-pass
|
||||||
|
|
||||||
There are also some useful **tags** available:
|
There are also some useful **tags** available:
|
||||||
* config
|
* config
|
||||||
* install
|
|
||||||
* db
|
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,8 @@ ZM_HC:
|
||||||
tools: ['ncdu', 'iotop', 'iftop']
|
tools: ['ncdu', 'iotop', 'iftop']
|
||||||
base: ['zoneminder']
|
base: ['zoneminder']
|
||||||
|
|
||||||
repo_key: 'https://zmrepo.zoneminder.com/debian/archive-keyring.gpg'
|
repo_key: "https://zmrepo.zoneminder.com/{{ ansible_distribution | lower }}/archive-keyring.gpg"
|
||||||
repo: "deb https://zmrepo.zoneminder.com/debian/release {{ ansible_lsb.codename }}/"
|
repo: "deb https://zmrepo.zoneminder.com/{{ ansible_distribution | lower }}/release {{ ansible_lsb.codename | default('buster') }}/"
|
||||||
php_version: '7.4'
|
php_version: '7.4'
|
||||||
|
|
||||||
apache:
|
apache:
|
||||||
|
|
@ -23,6 +23,7 @@ ZM_HC:
|
||||||
default_zm:
|
default_zm:
|
||||||
tools: false # install admin-tools for disk-space & i/o troubleshooting
|
tools: false # install admin-tools for disk-space & i/o troubleshooting
|
||||||
timezone: ''
|
timezone: ''
|
||||||
|
add_repo: false # not needed on debian
|
||||||
|
|
||||||
manage:
|
manage:
|
||||||
db: true
|
db: true
|
||||||
|
|
@ -67,10 +68,7 @@ default_zm:
|
||||||
update_password: 'always' # or 'on_create'
|
update_password: 'always' # or 'on_create'
|
||||||
type: 'mysql'
|
type: 'mysql'
|
||||||
host: 'localhost'
|
host: 'localhost'
|
||||||
|
# port_socket:
|
||||||
release: "{{ zoneminder.release | default(ansible_lsb.codename) }}"
|
|
||||||
db_user: 'zoneminder'
|
|
||||||
store: '/var/local/zoneminder'
|
|
||||||
|
|
||||||
ZM_CONFIG: "{{ default_zm | combine(zoneminder, recursive=true) }}"
|
ZM_CONFIG: "{{ default_zm | combine(zoneminder, recursive=true) }}"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
# docker build -t mantest - < ./Dockerfile.j2
|
||||||
|
# docker run -it --privileged --name mantest mantest:latest /sbin/init --tmpfs /tmp --tmpfs /run --tmpfs /run/lock
|
||||||
|
|
||||||
|
FROM debian:11-slim
|
||||||
|
|
||||||
|
ENV container docker
|
||||||
|
ENV LC_ALL C
|
||||||
|
ENV DEBIAN_FRONTEND noninteractive
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y systemd systemd-sysv python3 sudo \
|
||||||
|
&& apt-get clean
|
||||||
|
|
||||||
|
CMD ["/sbin/init"]
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
# Usage
|
||||||
|
|
||||||
|
Check out the [Molecule Tutorial](https://github.com/ansibleguy/ansible_tutorial/blob/main/Molecule.md) on how to get started!
|
||||||
|
|
||||||
|
# Running
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd roles/ansibleguy.sw_zoneminder
|
||||||
|
molecule test
|
||||||
|
```
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
- name: Converge
|
||||||
|
hosts: grp_targets
|
||||||
|
strategy: free # speed-up; comment-out to gain clarity
|
||||||
|
vars:
|
||||||
|
no_prompts: true # mariadb prompts
|
||||||
|
|
||||||
|
zoneminder:
|
||||||
|
tools: true
|
||||||
|
timezone: 'Europe/Vienna'
|
||||||
|
|
||||||
|
manage:
|
||||||
|
db: true
|
||||||
|
webserver: true
|
||||||
|
|
||||||
|
apache:
|
||||||
|
domain: 'zoneminder.test.ansibleguy.net'
|
||||||
|
|
||||||
|
ssl:
|
||||||
|
mode: 'selfsigned'
|
||||||
|
cert:
|
||||||
|
cn: 'ZoneMinder'
|
||||||
|
org: 'AnsibleGuy Test'
|
||||||
|
email: 'webmaster@mail.test.ansibleguy.net'
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- ansibleguy.sw_zoneminder
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
references:
|
||||||
|
docker:
|
||||||
|
all: &docker_all
|
||||||
|
docker_host: 'tcp://molecule-docker.local:2375'
|
||||||
|
# docker_host: 'unix://var/run/docker.sock' # localhost
|
||||||
|
purge_networks: true
|
||||||
|
image: 'debian:11-slim'
|
||||||
|
# for docker systemd config see: https://serverfault.com/questions/1053187/systemd-fails-to-run-in-a-docker-container-when-using-cgroupv2-cgroupns-priva
|
||||||
|
dockerfile: 'Dockerfile_debian11_systemd.j2'
|
||||||
|
build_image: yes
|
||||||
|
tmpfs: ['/tmp', '/run', '/run/lock']
|
||||||
|
privileged: true
|
||||||
|
command: '/sbin/init'
|
||||||
|
|
||||||
|
dependency:
|
||||||
|
name: galaxy
|
||||||
|
driver:
|
||||||
|
name: docker
|
||||||
|
platforms:
|
||||||
|
- name: test-ag-zm-tester
|
||||||
|
docker_networks:
|
||||||
|
- name: 'test-ag-zm'
|
||||||
|
ipam_config:
|
||||||
|
- subnet: '192.168.0.0/24'
|
||||||
|
gateway: '192.168.0.254'
|
||||||
|
networks:
|
||||||
|
- name: 'test-ag-zm'
|
||||||
|
ipv4_address: '192.168.0.1'
|
||||||
|
groups: [grp_tester]
|
||||||
|
<<: *docker_all
|
||||||
|
|
||||||
|
- name: test-ag-zm-1
|
||||||
|
networks:
|
||||||
|
- name: 'test-ag-zm'
|
||||||
|
ipv4_address: '192.168.0.20'
|
||||||
|
groups: [grp_targets]
|
||||||
|
<<: *docker_all
|
||||||
|
|
||||||
|
provisioner:
|
||||||
|
name: ansible
|
||||||
|
# config_options:
|
||||||
|
# defaults:
|
||||||
|
# vault_password_file: '~/.vault_pwd_file'
|
||||||
|
verifier:
|
||||||
|
name: ansible
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
- name: Verify
|
||||||
|
hosts: grp_tester
|
||||||
|
gather_facts: false
|
||||||
|
tasks:
|
||||||
|
- name: Checking if zoneminder web-service is reachable
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: 'https://192.168.0.20'
|
||||||
|
validate_certs: false
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
become: yes
|
become: yes
|
||||||
gather_facts: yes
|
gather_facts: yes
|
||||||
vars:
|
vars:
|
||||||
zabbix:
|
zoneminder: {}
|
||||||
|
|
||||||
roles:
|
roles:
|
||||||
- ansibleguy.sw_zoneminder
|
- ansibleguy.sw_zoneminder
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@
|
||||||
mariadb:
|
mariadb:
|
||||||
instances:
|
instances:
|
||||||
zoneminder: "{{ ZM_MARIADB_INSTANCE }}"
|
zoneminder: "{{ ZM_MARIADB_INSTANCE }}"
|
||||||
tags: [config, db]
|
|
||||||
|
|
||||||
- name: ZoneMinder | Debian | DB | Checking if database is empty
|
- name: ZoneMinder | Debian | DB | Checking if database is empty
|
||||||
community.mysql.mysql_query:
|
community.mysql.mysql_query:
|
||||||
|
|
@ -36,7 +35,7 @@
|
||||||
use_shell: true # else it will fail
|
use_shell: true # else it will fail
|
||||||
target: "{{ ZM_HC.database.schema_file }}"
|
target: "{{ ZM_HC.database.schema_file }}"
|
||||||
login_unix_socket: "{{ ZM_MARIADB_INSTANCE.socket }}"
|
login_unix_socket: "{{ ZM_MARIADB_INSTANCE.socket }}"
|
||||||
login_user: "{{ ZM_CONFIG.database.pwd }}"
|
login_user: "{{ ZM_CONFIG.database.user }}"
|
||||||
login_password: "{{ ZM_CONFIG.database.pwd }}"
|
login_password: "{{ ZM_CONFIG.database.pwd }}"
|
||||||
when: not zm_db_empty['query_result'][0][0]['count(*)'] | bool
|
when: not zm_db_empty['query_result'][0][0]['count(*)'] | bool
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
name: "{{ ZM_HC.packages.dependencies }}"
|
name: "{{ ZM_HC.packages.dependencies }}"
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- name: ZoneMinder | Debian | Installing dependencies
|
- name: ZoneMinder | Debian | Installing admin-tools
|
||||||
ansible.builtin.apt:
|
ansible.builtin.apt:
|
||||||
name: "{{ ZM_HC.packages.tools }}"
|
name: "{{ ZM_HC.packages.tools }}"
|
||||||
state: present
|
state: present
|
||||||
|
|
@ -14,6 +14,7 @@
|
||||||
- name: ZoneMinder | Debian | Adding repo-key
|
- name: ZoneMinder | Debian | Adding repo-key
|
||||||
ansible.builtin.apt_key:
|
ansible.builtin.apt_key:
|
||||||
url: "{{ ZM_HC.repo_key }}"
|
url: "{{ ZM_HC.repo_key }}"
|
||||||
|
when: ZM_CONFIG.add_repo
|
||||||
|
|
||||||
- name: ZoneMinder | Debian | Adding package repository
|
- name: ZoneMinder | Debian | Adding package repository
|
||||||
ansible.builtin.apt_repository:
|
ansible.builtin.apt_repository:
|
||||||
|
|
@ -21,11 +22,36 @@
|
||||||
state: present
|
state: present
|
||||||
update_cache: yes
|
update_cache: yes
|
||||||
filename: 'zoneminder'
|
filename: 'zoneminder'
|
||||||
|
when: ZM_CONFIG.add_repo
|
||||||
|
|
||||||
|
- name: ZoneMinder | Debian | Installing ZoneMinder
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name: "{{ ZM_HC.packages.base }}"
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: ZoneMinder | Debian | Adding zoneminder config
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: 'templates/etc/zm/conf.d/custom.conf.j2'
|
||||||
|
dest: '/etc/zm/conf.d/custom.conf'
|
||||||
|
owner: 'root'
|
||||||
|
group: 'www-data'
|
||||||
|
mode: 0640
|
||||||
|
no_log: true
|
||||||
|
tags: [config]
|
||||||
|
register: zm_cnf
|
||||||
|
|
||||||
|
- name: ZoneMinder | Debian | Updating config-privileges
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: '/etc/zm/zm.conf'
|
||||||
|
state: file
|
||||||
|
owner: 'root'
|
||||||
|
group: 'www-data'
|
||||||
|
mode: 0640
|
||||||
|
tags: [config]
|
||||||
|
|
||||||
- name: ZoneMinder | Debian | Managing database
|
- name: ZoneMinder | Debian | Managing database
|
||||||
ansible.builtin.import_tasks: db.yml
|
ansible.builtin.import_tasks: db.yml
|
||||||
when: ZM_CONFIG.manage.db
|
when: ZM_CONFIG.manage.db
|
||||||
tags: [db]
|
|
||||||
|
|
||||||
- name: ZoneMinder | Debian | Unmanaged DB
|
- name: ZoneMinder | Debian | Unmanaged DB
|
||||||
ansible.builtin.pause:
|
ansible.builtin.pause:
|
||||||
|
|
@ -46,31 +72,15 @@
|
||||||
here: https://github.com/ZoneMinder/zoneminder/tree/master/misc"
|
here: https://github.com/ZoneMinder/zoneminder/tree/master/misc"
|
||||||
when: not ZM_CONFIG.manage.webserver
|
when: not ZM_CONFIG.manage.webserver
|
||||||
|
|
||||||
- name: ZoneMinder | Debian | Installing ZoneMinder
|
|
||||||
ansible.builtin.apt:
|
|
||||||
name: "{{ ZM_HC.packages.base }}"
|
|
||||||
state: present
|
|
||||||
|
|
||||||
- name: ZoneMinder | Debian | Adding zoneminder config
|
|
||||||
ansible.builtin.template:
|
|
||||||
src: 'templates/etc/zm/conf.d/custom.conf.j2'
|
|
||||||
dest: '/etc/zm/conf.d/custom.conf'
|
|
||||||
owner: 'root'
|
|
||||||
group: 'www-data'
|
|
||||||
mode: 0640
|
|
||||||
no_log: true
|
|
||||||
|
|
||||||
- name: ZoneMinder | Debian | Updating config-privileges
|
|
||||||
ansible.builtin.file:
|
|
||||||
path: '/etc/zm/zm.conf'
|
|
||||||
state: file
|
|
||||||
owner: 'root'
|
|
||||||
group: 'www-data'
|
|
||||||
mode: 0640
|
|
||||||
|
|
||||||
- name: ZoneMinder | Debian | Enabling/Starting service
|
- name: ZoneMinder | Debian | Enabling/Starting service
|
||||||
ansible.builtin.systemd:
|
ansible.builtin.systemd:
|
||||||
daemon_reload: yes
|
daemon_reload: yes
|
||||||
name: 'zoneminder.service'
|
name: 'zoneminder.service'
|
||||||
enabled: yes
|
enabled: yes
|
||||||
state: started
|
state: started
|
||||||
|
|
||||||
|
- name: ZoneMinder | Debian | Restarting service
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: 'zoneminder.service'
|
||||||
|
state: restarted
|
||||||
|
when: zm_cnf.changed
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,6 @@
|
||||||
when: ZM_CONFIG.timezone in NONE_VALUES
|
when: ZM_CONFIG.timezone in NONE_VALUES
|
||||||
|
|
||||||
- name: ZoneMinder | Debian | Webserver | Restarting webserver
|
- name: ZoneMinder | Debian | Webserver | Restarting webserver
|
||||||
ansible.builtin.systemd:
|
ansible.builtin.systemd:
|
||||||
name: 'apache2.service'
|
name: 'apache2.service'
|
||||||
state: restarted
|
state: restarted
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
# ansibleguy.sw_zoneminder
|
# ansibleguy.sw_zoneminder
|
||||||
# source: https://github.com/ZoneMinder/zoneminder/tree/master/misc
|
# source: https://github.com/ZoneMinder/zoneminder/tree/master/misc
|
||||||
|
|
||||||
|
RedirectMatch ^/$ /zm/
|
||||||
ScriptAlias /zm/cgi-bin "{{ ZM_CONFIG.path.cgi }}"
|
ScriptAlias /zm/cgi-bin "{{ ZM_CONFIG.path.cgi }}"
|
||||||
<Directory "{{ ZM_CONFIG.path.cgi }}">
|
<Directory "{{ ZM_CONFIG.path.cgi }}">
|
||||||
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
|
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
|
||||||
|
|
@ -9,7 +9,7 @@ ZM_PATH_WEB={{ ZM_CONFIG.path.web }}
|
||||||
ZM_PATH_CGI={{ ZM_CONFIG.path.cgi }}
|
ZM_PATH_CGI={{ ZM_CONFIG.path.cgi }}
|
||||||
|
|
||||||
ZM_DB_TYPE={{ ZM_CONFIG.database.type }}
|
ZM_DB_TYPE={{ ZM_CONFIG.database.type }}
|
||||||
ZM_DB_HOST={{ ZM_CONFIG.database.host }}
|
ZM_DB_HOST={{ ZM_CONFIG.database.host }}:{{ ZM_CONFIG.database.port_socket | default(ZM_MARIADB_INSTANCE.socket) }}
|
||||||
ZM_DB_NAME={{ ZM_CONFIG.database.name }}
|
ZM_DB_NAME={{ ZM_CONFIG.database.name }}
|
||||||
ZM_DB_USER={{ ZM_CONFIG.database.user }}
|
ZM_DB_USER={{ ZM_CONFIG.database.user }}
|
||||||
ZM_DB_PASS={{ ZM_CONFIG.database.pwd }}
|
ZM_DB_PASS={{ ZM_CONFIG.database.pwd }}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue