netz39-infra-ansible/host-wittgenstein.yml
Alexander Dahl b22c86758e 🚚 Migrate docker_host role to external project
We used a similar local role here, in the Freifunk Magdeburg project,
and in personal playbooks.  That was moved to an external project,
unified, and reworked, so the external role can act as replacement for
the distributed, redundant copies.

Link: https://github.com/netz39/ansible-role-host-docker
2025-02-23 19:18:21 +01:00

172 lines
5.4 KiB
YAML

---
- hosts: wittgenstein.n39.eu
become: true
roles:
- role: netz39.host_docker
vars:
docker_data_root: "/srv/docker"
- role: apache
- role: apache_letsencrypt # Uses configuration from dehydrated setup
- role: 24367dfa.dehydrated
vars:
dehydrated_contact_email: "{{ server_admin }}"
- role: penguineer.dehydrated_cron
tasks:
- name: Install packages needed for the system
# This is a list of all packages,
# unless they are installed by a specific role
ansible.builtin.apt:
state: present
name:
# This is needed for the user-executed tasks
- acl
# Regular packages
- tmux
- git-core
- cmake
- build-essential
- libmosquitto-dev
- libconfig-dev
- mosquitto-clients
- python3-paho-mqtt
- i2c-tools
- name: Set MAC address for proper DHCP recognition
# Uses mac variable from inventory
ansible.builtin.template:
src: templates/network-interfaces-dhcp-mac.j2
dest: /etc/network/interfaces.d/wittgenstein-mac
owner: root
group: root
mode: '0644'
- name: Disable IPv6
# Because it is not working....
ansible.builtin.copy:
src: files/sysctl-no-ipv6.conf
dest: /etc/sysctl.d/99-systcl-no-ipv6.conf
owner: root
group: root
mode: '0644'
### Gatekeeper user (pi for now)
#
# All the gatekeeping / door control stuff is here!
- name: Ensure gatekeeper user is there
ansible.builtin.user:
name: "{{ gatekeeper_user }}"
groups: dialout,audio,plugdev,input,netdev,i2c,gpio
append: yes
- name: Copy management scripts
ansible.builtin.copy:
src: "files/wittgenstein/{{ item }}"
dest: "/home/{{ gatekeeper_user }}/{{ item }}"
owner: "{{ gatekeeper_user }}"
group: "{{ gatekeeper_user }}"
mode: "0750"
loop:
- reboot.sh
- unstuck.sh
- switch-on.sh
- switch-off.sh
- name: Install start-up cron
ansible.builtin.cron:
name: Start the gatekeeper services
job: "/home/{{ gatekeeper_user }}/reboot.sh"
user: "{{ gatekeeper_user }}"
special_time: reboot
- name: Download wiringPi library
# WiringPi needs to be installed, but that library seems to be
# obsolete. We download something and hope it works...
ansible.builtin.get_url:
url: https://project-downloads.drogon.net/wiringpi-latest.deb
dest: "/home/{{ gatekeeper_user }}/wiringpi-latest.deb"
mode: "0644"
force: no
register: wiringPi_download
- name: Install wiringPi library # noqa: no-handler
ansible.builtin.apt:
state: present
deb: "/home/{{ gatekeeper_user }}/wiringpi-latest.deb"
when: wiringPi_download.changed
### Ampelsteuerung
- name: Clone netz39_space_notification initial checkout
# Do this as the gatekeeper user!
become: yes
become_user: "{{ gatekeeper_user }}"
ansible.builtin.git:
repo: https://github.com/netz39/space_notification.git
dest: "/home/{{ gatekeeper_user }}/netz39_space_notification"
clone: yes
update: no
- name: Compile ledcontrol agent
# Do this as the gatekeeper user!
become: yes
become_user: "{{ gatekeeper_user }}"
ansible.builtin.shell:
chdir: "/home/{{ gatekeeper_user }}/netz39_space_notification/raspberry/ledcontrol"
cmd: make
creates: "/home/{{ gatekeeper_user }}/netz39_space_notification/raspberry/ledcontrol/ledcontrol"
- name: Compile statusswitch agent
# Do this as the gatekeeper user!
become: yes
become_user: "{{ gatekeeper_user }}"
ansible.builtin.shell:
chdir: "/home/{{ gatekeeper_user }}/netz39_space_notification/raspberry/statusswitch"
cmd: make
creates: "/home/{{ gatekeeper_user }}/netz39_space_notification/raspberry/statusswitch/statusswitch"
### Space API
- name: Setup the SpaceAPI Docker container
docker_container:
name: spaceapi
image: "{{ spaceapi_image }}"
pull: true
state: started
detach: yes
restart_policy: unless-stopped
ports:
- "0.0.0.0:{{ spaceapi_host_port }}:8080" # Must be reached by pottwal
# - "127.0.0.1:{{ spaceapi_host_port }}:8080"
env:
TZ: "{{ timezone }}"
MQTT_BROKER: "platon.n39.eu"
MQTT_TOPIC_STATUS: "{{ spaceapi_topic_status }}"
MQTT_TOPIC_LASTCHANGE: "{{ spaceapi_topic_lastchange }}"
tags:
- spaceapi
- name: Setup the Ampel Controller Docker container
docker_container:
name: ampelcontroller
image: "{{ ampelcontroller_image }}"
pull: true
state: started
detach: yes
restart_policy: unless-stopped
env:
TZ: "{{ timezone }}"
MQTT_BROKER: "platon.n39.eu"
MQTT_LEVER_STATE_TOPIC: "{{ topic_lever_state }}"
MQTT_DOOR_EVENTS_TOPIC: "{{ topic_door_events }}"
MQTT_SPACESTATUS_ISOPEN_TOPIC: "{{ spaceapi_topic_status }}"
MQTT_SPACESTATUS_LASTCHANGE_TOPIC: "{{ spaceapi_topic_lastchange }}"
MQTT_TRAFFIC_LIGHT_TOPIC: "{{ topic_traffic_light }}"
tags:
- spaceapi
handlers: