netz39-infra-ansible/host-radon.yml
Alexander Dahl 605eca4c38 🚚 roles: dehydrated_cron: Use namespaced name
Removes the redundant words "ansible" and "role" from the role name
originating from the Git repo name, and uses the author's name as
namespace instead.  This makes it easier to recognize as external role.

Note: the host-wittgenstein recipe already used that new name, but we
did not set it up in requirements, yet.  (How did that ever work?)

Link: https://docs.ansible.com/ansible/latest/galaxy/user_guide.html#installing-multiple-roles-from-a-file
Fixes: f4db6fa395 ("Add Ansible setup for wittgenstein")
2024-12-28 12:16:21 +01:00

233 lines
6.7 KiB
YAML

---
- hosts: radon.n39.eu
become: true
vars:
ansible_python_interpreter: /usr/bin/python3
data_dir: "/srv/data"
mosquitto_image: eclipse-mosquitto:2.0.20
mosquitto_data: "{{ data_dir }}/mosquitto"
nodered_image: nodered/node-red:3.0.1-1-18
nodered_data: "{{ data_dir }}/nodered"
rabbitmq_image: bitnami/rabbitmq:4.0.5
rabbitmq_data: "{{ data_dir }}/rabbitmq"
pwr_meter_pulse_gw_image: netz39/power-meter-pulse-gateway:0.3.0
brotherql_host_port: 9004
roles:
# role 'docker_setup' applied through group 'docker_host'
- role: apache
- role: apache_letsencrypt # Uses configuration from dehydrated setup
- role: 24367dfa.dehydrated
vars:
dehydrated_contact_email: "{{ server_admin }}"
dehydrated_domains:
- name: nodered.n39.eu
- name: rabbitmq.n39.eu
- name: pwr-meter-pulse-gw-19i.svc.n39.eu
- name: labelprinter.n39.eu
- role: penguineer.dehydrated_cron
tasks:
- name: Ensure the mosquitto directories exist
file:
path: "{{ item }}"
mode: 0755
state: directory
with_items:
- "{{ mosquitto_data }}/config"
- "{{ mosquitto_data }}/data"
- "{{ mosquitto_data }}/log"
tags:
- mosquitto
- name: Make sure mosquitto config is there
template:
src: "templates/mosquitto.conf.j2"
dest: "{{ mosquitto_data }}/config/mosquitto.conf"
mode: 0644
notify: restart mosquitto
tags:
- mosquitto
- name: Ensure mosquitto is running
docker_container:
name: mosquitto
image: "{{ mosquitto_image }}"
pull: true
state: started
ports:
- 1883:1883
- 9001:9001
volumes:
- "{{ mosquitto_data }}/config:/mosquitto/config"
- "{{ mosquitto_data }}/data:/mosquitto/data"
- "{{ mosquitto_data }}/log:/mosquitto/log"
detach: yes
keep_volumes: yes
restart_policy: unless-stopped
env:
TZ: "{{ timezone }}"
tags:
- mosquitto
- name: Check if nodered data dir exists
ansible.builtin.stat:
path: "{{ data_dir }}/nodered"
register: nodered_dir
- name: Fail if nodered data dir does not exist
ansible.builtin.fail:
msg: "Nodered data dir is missing, please restore from the backup!"
when: not nodered_dir.stat.exists
- name: Ensure nodered is running
docker_container:
name: nodered
image: "{{ nodered_image }}"
pull: true
state: started
env:
TZ: "{{ timezone }}"
NODE_RED_ENABLE_PROJECTS: "true"
ports:
- 127.0.0.1:9002:1880
volumes:
- "{{ nodered_data }}/data:/data"
# Mount the .ssh/known_hosts, otherwise the host must be confirmed
# (via docker exec) every time the container is updated.
- "{{ nodered_data }}/known_hosts:/usr/src/node-red/.ssh/known_hosts:rw"
detach: yes
keep_volumes: yes
restart_policy: unless-stopped
- name: Setup proxy site nodered.n39.eu
include_role:
name: setup_http_site_proxy
vars:
site_name: "nodered.n39.eu"
proxy_port: 9002
- name: Check if rabbitmq data dir exists
ansible.builtin.stat:
path: "{{ rabbitmq_data }}"
register: rabbitmq_dir
tags:
- rabbitmq
- name: Fail if rabbitmq data dir does not exist
ansible.builtin.fail:
msg: "RabbitMQ data dir is missing, please restore from the backup!"
when: not rabbitmq_dir.stat.exists
tags:
- rabbitmq
- name: Ensure rabbitmq docker container is running
docker_container:
name: rabbitmq
image: "{{ rabbitmq_image }}"
ports:
- 4369:4369
- 5551:5551
- 5552:5552
- 5672:5672
- 25672:25672
- 127.0.0.1:15672:15672
env:
TZ: "{{ timezone }}"
RABBITMQ_SECURE_PASSWORD: "yes"
volumes:
- "{{ rabbitmq_data }}/bitnami:/bitnami:rw"
- "{{ rabbitmq_data }}/etc_rabbitmq:/etc/rabbitmq:rw"
restart_policy: unless-stopped
tags:
- rabbitmq
- name: Setup proxy site rabbitmq.n39.eu
include_role:
name: setup_http_site_proxy
vars:
site_name: "rabbitmq.n39.eu"
proxy_port: 15672
tags:
- rabbitmq
- name: Ensure Power Meter Pulse Gateway for 19i room is running
docker_container:
name: pwr-meter-pulse-gw-19i
image: "{{ pwr_meter_pulse_gw_image }}"
ports:
# Wait for https://redmine.n39.eu/issues/755
# - 127.0.0.1:9003:8080
- 9003:8080
env:
TZ: "{{ timezone }}"
AMQP_HOST: "rabbitmq.n39.eu"
AMQP_USER: "{{ pwr_meter_amqp_user }}"
AMQP_PASS: "{{ pwr_meter_amqp_pass }}"
AMQP_VHOST: "/iot"
PULSE_BINDING: "pwr-meter-pulse-19i"
API_TOKEN: "{{ pwr_meter_api_token }}"
restart_policy: unless-stopped
- name: Setup proxy site pwr-meter-pulse-gw-19i.svc.n39.eu
include_role:
name: setup_http_site_proxy
vars:
site_name: "pwr-meter-pulse-gw-19i.svc.n39.eu"
proxy_port: 9003
- name: Setup docker container for BrotherQL Web UI printer
docker_container:
name: brotherql-web
image: dersimn/brother_ql_web:2.1.9-alpine
pull: true
restart_policy: unless-stopped
state: started
ports:
- "127.0.0.1:{{ brotherql_host_port }}:8013"
command: "--default-label-size 62 --model QL-720NW tcp://{{ brotherql_printer_host }}"
detach: yes
env:
TZ: "{{ timezone }}"
tags:
- labelprinter
- name: Setup proxy site labelprinter.n39.eu
include_role:
name: setup_http_site_proxy
vars:
site_name: labelprinter.n39.eu
proxy_port: "{{ brotherql_host_port }}"
tags:
- labelprinter
- name: Setup docker container for Grafana Screenshots
docker_container:
name: grafana-screenshot
image: mrtux/grafana-screenshot:0.1.1
pull: true
restart_policy: unless-stopped
detach: yes
env:
MQTT_BROKER_URL: "{{ kiosk_mqtt_host }}"
MQTT_TOPIC: "{{ kiosk_mqtt_topic }}"
GRAFANA_DASHBOARD_URL: "{{ kiosk_grafana_url }}"
GRAFANA_USERNAME: "{{ kiosk_grafana_user }}"
GRAFANA_PASSWORD: "{{ kiosk_grafana_pass }}"
tags:
- grafana-screenshot
handlers:
- name: restart mosquitto
docker_container:
name: mosquitto
state: started
restart: yes