migrate to docker container
This commit is contained in:
parent
b9150ed19b
commit
7c5d9a4bd2
@ -1,17 +1,67 @@
|
||||
---
|
||||
zigbee2mqtt_version: 1.5.1
|
||||
zigbee2mqtt_version: latest
|
||||
zigbee2mqtt_image: "koenkk/zigbee2mqtt:{{ zigbee2mqtt_version }}"
|
||||
|
||||
zigbee2mqtt_user: zigbee2mqtt
|
||||
zigbee2mqtt_group: zigbee2mqtt
|
||||
zigbee2mqtt_secondary_groups:
|
||||
- tty
|
||||
- dialout
|
||||
zigbee2mqtt_service_directory: /var/lib/docker/services/zigbee2mqtt
|
||||
zigbee2mqtt_container_name: zigbee2mqtt
|
||||
zigbee2mqtt_restart_policy: always
|
||||
zigbee2mqtt_service_stopped: False
|
||||
# @var zigbee2mqtt_networks:example: >
|
||||
# zigbee2mqtt_networks:
|
||||
# - name: default
|
||||
# # optional network driver, defaults to 'bride'
|
||||
# driver: host
|
||||
# @end
|
||||
zigbee2mqtt_networks:
|
||||
- name: default
|
||||
|
||||
zigbee2mqtt_service_state: started
|
||||
zigbee2mqtt_service_restart_state: restarted
|
||||
zigbee2mqtt_networks_applied:
|
||||
- default
|
||||
|
||||
# @var zigbee2mqtt_volumes:description: Define required docker volumes.
|
||||
# @var zigbee2mqtt_volumes:example: >
|
||||
# zigbee2mqtt_volumes:
|
||||
# # Instead of the name you could specify a path on the container host system,
|
||||
# # but you also have to enable bind mount for this volume
|
||||
# - name: data
|
||||
# # target location inside the container
|
||||
# dest: /var/www/app/data
|
||||
# # enable bind mount, if false volume will be configured as named volume
|
||||
# # keep in mind you MUST set bind in any case
|
||||
# bind: True
|
||||
# # Options for bind mounts
|
||||
# bind_opt: "ro,z"
|
||||
# @end
|
||||
zigbee2mqtt_volumes:
|
||||
- name: "{{ zigbee2mqtt_data_volume }}"
|
||||
dest: /app/data
|
||||
bind: True
|
||||
|
||||
# @var zigbee2mqtt_devices:description: Define required devices e.g. `/dev/ttyACM0`.
|
||||
# @var zigbee2mqtt_devices:example: >
|
||||
# zigbee2mqtt_devices:
|
||||
# - src: "{{ zigbee2mqtt_serial_port }}"
|
||||
# dest: "{{ zigbee2mqtt_serial_port }}"
|
||||
# opt: z
|
||||
# @end
|
||||
|
||||
zigbee2mqtt_data_volume: "/opt/zigbee2mqtt/data"
|
||||
|
||||
zigbee2mqtt_exposed_ports: []
|
||||
zigbee2mqtt_extra_hosts: []
|
||||
|
||||
# @var zigbee2mqtt_memory_limit: $ "_unset_"
|
||||
# @var zigbee2mqtt_memory_limit:example: $ "512m"
|
||||
# @var zigbee2mqtt_memory_reservation: $ "_unset_"
|
||||
# @var zigbee2mqtt_memory_reservation:example: $ "256m"
|
||||
# @var zigbee2mqtt_cpu_shares: $ "_unset_"
|
||||
# @var zigbee2mqtt_cpu_shares:example: $ "1024"
|
||||
|
||||
zigbee2mqtt_cap_add: []
|
||||
zigbee2mqtt_cap_drop: []
|
||||
zigbee2mqtt_security_opt: []
|
||||
# @var zigbee2mqtt_pids_limit: $ "_unset_"
|
||||
|
||||
zigbee2mqtt_base_dir: /opt/zigbee2mqtt
|
||||
zigbee2mqtt_log_dir: "{{ zigbee2mqtt_base_dir }}/log"
|
||||
zigbee2mqtt_log_level: info
|
||||
|
||||
zigbee2mqtt_homeassistant_enabled: False
|
||||
@ -26,7 +76,7 @@ zigbee2mqtt_mqtt_reject_unauthorized: False
|
||||
zigbee2mqtt_mqtt_include_device_information: False
|
||||
|
||||
# @var zigbee2mqtt_serial_port: $ "_unset_"
|
||||
# @var zigbee2mqtt_serial_port:example: $ "/dev/ttyACM0"
|
||||
# @var zigbee2mqtt_serial_port:example: $ ""
|
||||
zigbee2mqtt_serial_disable_led: False
|
||||
|
||||
zigbee2mqtt_pan_id: "0x1a62"
|
||||
@ -45,3 +95,5 @@ zigbee2mqtt_homeassistant_status_topic: "hass/status"
|
||||
|
||||
zigbee2mqtt_devices_ban: []
|
||||
zigbee2mqtt_devices_whitelist: []
|
||||
|
||||
zigbee2mqtt_timezone: Europe/Berlin
|
||||
|
@ -1,9 +1,11 @@
|
||||
---
|
||||
- name: Restart zigbee2mqtt service
|
||||
systemd:
|
||||
state: "{{ zigbee2mqtt_service_restart_state }}"
|
||||
daemon_reload: yes
|
||||
name: zigbee2mqtt
|
||||
docker_compose:
|
||||
project_src: "{{ zigbee2mqtt_service_directory }}"
|
||||
pull: yes
|
||||
remove_orphans: yes
|
||||
stopped: "{{ zigbee2mqtt_service_stopped }}"
|
||||
restarted: "{{ not zigbee2mqtt_service_stopped }}"
|
||||
listen: __zigbee2mqtt_restart
|
||||
become: True
|
||||
become_user: root
|
||||
|
@ -1,14 +1,23 @@
|
||||
---
|
||||
- name: Converge
|
||||
- name: Converge (Stage 1)
|
||||
hosts: all
|
||||
vars:
|
||||
mosquitto_packages_extra:
|
||||
dockerengine_packages_extra:
|
||||
- epel-release
|
||||
- python-pip
|
||||
- python-virtualenv
|
||||
|
||||
roles:
|
||||
- role: xoxys.docker_engine
|
||||
|
||||
- name: Converge (Stage 2)
|
||||
hosts: all
|
||||
environment:
|
||||
PYTHONPATH: /opt/python2/ansible-deps/lib/python2.7/site-packages
|
||||
vars:
|
||||
mosquitto_bind_address: "127.0.0.1"
|
||||
zigbee2mqtt_service_state: stopped
|
||||
zigbee2mqtt_service_restart_state: stopped
|
||||
zigbee2mqtt_service_stopped: True
|
||||
|
||||
roles:
|
||||
- role: xoxys.mosquitto
|
||||
- role: xoxys.nodejs
|
||||
- role: xoxys.zigbee2mqtt
|
||||
- role: xoxys.zigbee2mqtt_docker
|
||||
|
@ -15,8 +15,3 @@ def test_hosts_file(host):
|
||||
f = host.file('/etc/hosts')
|
||||
|
||||
assert f.exists
|
||||
|
||||
# def test_zigbee2mqtt_running_and_enabled(host):
|
||||
# zigbee2mqtt = host.service("zigbee2mqtt")
|
||||
# assert zigbee2mqtt.is_running
|
||||
# assert zigbee2mqtt.is_enabled
|
||||
|
@ -4,12 +4,12 @@ collections:
|
||||
- name: community.general
|
||||
|
||||
roles:
|
||||
- src: https://gitea.rknet.org/ansible/xoxys.docker_engine.git
|
||||
name: xoxys.docker_engine
|
||||
scm: git
|
||||
version: master
|
||||
|
||||
- src: https://gitea.rknet.org/ansible/xoxys.mosquitto.git
|
||||
name: xoxys.mosquitto
|
||||
scm: git
|
||||
version: master
|
||||
|
||||
- src: https://gitea.rknet.org/ansible/xoxys.nodejs.git
|
||||
name: xoxys.nodejs
|
||||
scm: git
|
||||
version: master
|
||||
|
@ -1,76 +0,0 @@
|
||||
---
|
||||
- name: Create directories
|
||||
file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
owner: "{{ zigbee2mqtt_user }}"
|
||||
group: "{{ zigbee2mqtt_group }}"
|
||||
mode: 0750
|
||||
loop:
|
||||
- "{{ zigbee2mqtt_base_dir }}"
|
||||
- "{{ zigbee2mqtt_base_dir }}/data"
|
||||
- "{{ zigbee2mqtt_log_dir }}"
|
||||
become: True
|
||||
become_user: root
|
||||
|
||||
- block:
|
||||
- name: Download release 'v{{ zigbee2mqtt_version }}'
|
||||
unarchive:
|
||||
src: "https://github.com/Koenkk/zigbee2mqtt/archive/{{ zigbee2mqtt_version }}.tar.gz"
|
||||
dest: "{{ zigbee2mqtt_base_dir }}"
|
||||
remote_src: yes
|
||||
exclude: "{{ __zigbee2mqtt_release_exclude }}"
|
||||
extra_opts:
|
||||
- --strip-components=1
|
||||
|
||||
- name: Delete existing node_modules folder
|
||||
file:
|
||||
path: "{{ zigbee2mqtt_base_dir }}/node_modules"
|
||||
state: absent
|
||||
|
||||
- name: Install nodejs dependencies
|
||||
npm:
|
||||
path: "{{ zigbee2mqtt_base_dir }}"
|
||||
environment:
|
||||
PATH: "{{ __zigbee2mqtt_npm_executable | dirname }}:{{ ansible_env.PATH }}"
|
||||
notify: __zigbee2mqtt_restart
|
||||
when: zigbee2mqtt_version is version(zigbee2mqtt_current_version, ">")
|
||||
become: True
|
||||
become_user: "{{ zigbee2mqtt_user }}"
|
||||
|
||||
- block:
|
||||
- name: Deploy configuration file
|
||||
template:
|
||||
src: "zigbee2mqtt/data/configuration.yaml.j2"
|
||||
dest: "{{ zigbee2mqtt_base_dir }}/data/configuration.yaml"
|
||||
mode: 0600
|
||||
notify: __zigbee2mqtt_restart
|
||||
|
||||
- name: Ensure device files exists
|
||||
file:
|
||||
path: "{{ item }}"
|
||||
state: touch
|
||||
access_time: preserve
|
||||
modification_time: preserve
|
||||
loop:
|
||||
- "{{ zigbee2mqtt_base_dir }}/data/devices.yaml"
|
||||
- "{{ zigbee2mqtt_base_dir }}/data/groups.yaml"
|
||||
become: True
|
||||
become_user: "{{ zigbee2mqtt_user }}"
|
||||
|
||||
- block:
|
||||
- name: Create systemd unit files
|
||||
template:
|
||||
src: "etc/systemd/system/zigbee2mqtt.service.j2"
|
||||
dest: "/etc/systemd/system/zigbee2mqtt.service"
|
||||
mode: 0644
|
||||
notify: __zigbee2mqtt_restart
|
||||
|
||||
- name: Set current version to custom fact
|
||||
template:
|
||||
src: etc/ansible/facts.d/zigbee2mqtt.fact.j2
|
||||
dest: /etc/ansible/facts.d/zigbee2mqtt.fact
|
||||
mode: 0644
|
||||
when: zigbee2mqtt_version is version(zigbee2mqtt_current_version, ">") or zigbee2mqtt_current_version is version('0.0.0', "=")
|
||||
become: True
|
||||
become_user: root
|
@ -1,4 +1,2 @@
|
||||
---
|
||||
- import_tasks: prepare.yml
|
||||
- import_tasks: install.yml
|
||||
- import_tasks: post_tasks.yml
|
||||
- include_tasks: setup.yml
|
||||
|
@ -1,9 +0,0 @@
|
||||
---
|
||||
- name: Ensure zigbee2mqtt service is up and running
|
||||
systemd:
|
||||
state: "{{ zigbee2mqtt_service_state }}"
|
||||
daemon_reload: yes
|
||||
enabled: yes
|
||||
name: zigbee2mqtt
|
||||
become: True
|
||||
become_user: root
|
@ -1,26 +0,0 @@
|
||||
---
|
||||
- block:
|
||||
- name: Create local facts dir
|
||||
file:
|
||||
path: /etc/ansible/facts.d
|
||||
state: directory
|
||||
|
||||
- name: Set current zigbee2mqtt version
|
||||
set_fact:
|
||||
zigbee2mqtt_current_version: "{{ (ansible_local.zigbee2mqtt | default (dict(version='0.0.0')))['version'] }}"
|
||||
|
||||
- debug:
|
||||
msg: Current version is '{{ zigbee2mqtt_current_version }}'
|
||||
|
||||
- name: Create group '{{ zigbee2mqtt_group }}'
|
||||
group:
|
||||
name: "{{ zigbee2mqtt_group }}"
|
||||
state: present
|
||||
|
||||
- name: Create user '{{ zigbee2mqtt_user }}'
|
||||
user:
|
||||
name: "{{ zigbee2mqtt_user }}"
|
||||
group: "{{ zigbee2mqtt_group }}"
|
||||
groups: "{{ zigbee2mqtt_secondary_groups }}"
|
||||
become: True
|
||||
become_user: root
|
52
tasks/setup.yml
Normal file
52
tasks/setup.yml
Normal file
@ -0,0 +1,52 @@
|
||||
---
|
||||
- block:
|
||||
- name: Ensure service directory exists
|
||||
file:
|
||||
path: "{{ zigbee2mqtt_service_directory }}"
|
||||
state: directory
|
||||
mode: 0755
|
||||
|
||||
- name: Create bind mount source directory
|
||||
file:
|
||||
path: "{{ item.name }}"
|
||||
state: directory
|
||||
loop: "{{ zigbee2mqtt_volumes }}"
|
||||
loop_control:
|
||||
label: "{{ item.name }}"
|
||||
when: item.bind | bool
|
||||
|
||||
- name: Deploy compose file to '{{ zigbee2mqtt_service_directory }}'
|
||||
template:
|
||||
src: "services/zigbee2mqtt_compose.yml.j2"
|
||||
dest: "{{ zigbee2mqtt_service_directory }}/docker-compose.yml"
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0640
|
||||
validate: "docker-compose -f %s config -q"
|
||||
|
||||
- name: Deploy configuration file
|
||||
template:
|
||||
src: "zigbee2mqtt/data/configuration.yaml.j2"
|
||||
dest: "{{ zigbee2mqtt_data_volume }}/configuration.yaml"
|
||||
mode: 0600
|
||||
notify: __zigbee2mqtt_restart
|
||||
|
||||
- name: Ensure device files exists
|
||||
file:
|
||||
path: "{{ item }}"
|
||||
state: touch
|
||||
access_time: preserve
|
||||
modification_time: preserve
|
||||
loop:
|
||||
- "{{ zigbee2mqtt_data_volume }}/devices.yaml"
|
||||
- "{{ zigbee2mqtt_data_volume }}/groups.yaml"
|
||||
|
||||
- name: Ensure service is up and running
|
||||
docker_compose:
|
||||
project_src: "{{ zigbee2mqtt_service_directory }}"
|
||||
pull: yes
|
||||
remove_orphans: yes
|
||||
stopped: "{{ zigbee2mqtt_service_stopped }}"
|
||||
state: present
|
||||
become: True
|
||||
become_user: root
|
@ -1,4 +0,0 @@
|
||||
{
|
||||
"comment" : "{{ ansible_managed }}",
|
||||
"version" : "{{ zigbee2mqtt_version }}"
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
#jinja2:lstrip_blocks: True
|
||||
{{ ansible_managed | comment }}
|
||||
|
||||
[Unit]
|
||||
Description=zigbee2mqtt
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/local/bin/npm start
|
||||
WorkingDirectory={{ zigbee2mqtt_base_dir }}
|
||||
StandardError=inherit
|
||||
Restart=always
|
||||
User={{ zigbee2mqtt_user }}
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
86
templates/services/zigbee2mqtt_compose.yml.j2
Normal file
86
templates/services/zigbee2mqtt_compose.yml.j2
Normal file
@ -0,0 +1,86 @@
|
||||
#jinja2:lstrip_blocks: True
|
||||
{{ ansible_managed | comment }}
|
||||
version: "2.4"
|
||||
|
||||
services:
|
||||
zigbee2mqtt:
|
||||
container_name: {{ zigbee2mqtt_container_name }}
|
||||
image: {{ zigbee2mqtt_image }}
|
||||
restart: {{ zigbee2mqtt_restart_policy }}
|
||||
{% if zigbee2mqtt_exposed_ports | default([]) %}
|
||||
ports:
|
||||
{% for port in zigbee2mqtt_exposed_ports %}
|
||||
- {{ port | quote }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if zigbee2mqtt_volumes | default([]) %}
|
||||
volumes:
|
||||
{% for volume in zigbee2mqtt_volumes %}
|
||||
- "{{ volume.name }}:{{ volume.dest }}{% if volume.bind_opt is defined %}:{{ volume.bind_opt }}{% endif %}"
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if zigbee2mqtt_devices | default([]) %}
|
||||
devices:
|
||||
{% for device in zigbee2mqtt_devices %}
|
||||
- "{{ device.src }}:{{ device.dest }}{% if device.opt is defined %}:{{ device.opt }}{% endif %}"
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if zigbee2mqtt_networks_applied | default([]) %}
|
||||
networks:
|
||||
{% for network in zigbee2mqtt_networks_applied %}
|
||||
- {{ network }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if zigbee2mqtt_extra_hosts | default([]) %}
|
||||
extra_hosts:
|
||||
{% for host in zigbee2mqtt_extra_hosts %}
|
||||
- {{ host | quote }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
environment:
|
||||
- TZ={{ zigbee2mqtt_timezone }}
|
||||
{% if zigbee2mqtt_memory_limit is defined %}
|
||||
mem_limit: {{ zigbee2mqtt_memory_limit }}
|
||||
{% endif %}
|
||||
{% if zigbee2mqtt_memory_reservation is defined %}
|
||||
mem_reservation: {{ zigbee2mqtt_memory_reservation }}
|
||||
{% endif %}
|
||||
{% if zigbee2mqtt_cpu_shares is defined %}
|
||||
cpu_shares: {{ zigbee2mqtt_cpu_shares }}
|
||||
{% endif %}
|
||||
{% if not zigbee2mqtt_cap_add | length == 0 %}
|
||||
cap_add:
|
||||
{% for item in zigbee2mqtt_cap_add %}
|
||||
- {{ item }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if not zigbee2mqtt_cap_drop | length == 0 %}
|
||||
cap_drop:
|
||||
{% for item in zigbee2mqtt_cap_drop %}
|
||||
- {{ item }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if not zigbee2mqtt_security_opt | length == 0 %}
|
||||
security_opt:
|
||||
{% for item in zigbee2mqtt_security_opt %}
|
||||
- {{ item }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if zigbee2mqtt_pids_limit is defined %}
|
||||
pids_limit: {{ zigbee2mqtt_pids_limit }}
|
||||
{% endif %}
|
||||
{% if zigbee2mqtt_volumes | default([]) | rejectattr("bind") | list | length > 0 %}
|
||||
|
||||
volumes:
|
||||
{% for volume in zigbee2mqtt_volumes | rejectattr("bind") %}
|
||||
{{ volume.name }}:
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if zigbee2mqtt_networks | default([]) | length > 0 %}
|
||||
|
||||
networks:
|
||||
{% for network in zigbee2mqtt_networks %}
|
||||
{{ network.name }}:
|
||||
driver: {{ network.backend | default("bridge") }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
@ -43,7 +43,6 @@ advanced:
|
||||
channel: {{ zigbee2mqtt_channel }}
|
||||
cache_state: {{ zigbee2mqtt_cache_state }}
|
||||
log_level: "{{ zigbee2mqtt_log_level }}"
|
||||
log_directory: "{{ zigbee2mqtt_log_dir }}"
|
||||
{% if zigbee2mqtt_network_key is defined and zigbee2mqtt_network_key %}
|
||||
network_key: {{ zigbee2mqtt_network_key }}
|
||||
{% endif %}
|
||||
|
Loading…
Reference in New Issue
Block a user