added basic testing, fixes

This commit is contained in:
AnsibleGuy 2022-05-12 14:26:04 +02:00
parent 75e9ac252c
commit d2ab076b44
13 changed files with 158 additions and 42 deletions

View File

@ -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

View File

@ -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) }}"

View File

@ -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"]

10
molecule/default/Usage.md Normal file
View File

@ -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
```

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 }}