Ansible Rollen testen mit molecule
Wie im letzten Artikel beschrieben verwende ich die manuelle Installation von Home Assistant. Um ein System schnell wieder herstellen zu können kann Ansible verwendet werden. Dazu habe ich eine Rolle erstellt. Diese ist als Github Repository verfügbar. Im gleichen Repository finden sich (in naher Zukunft) noch andere Rollen die für eine Home Assistant Installation sinnvoll sein können. Eine Beschreibung der Variablen befindet sich in der README.
- pip installieren
sudo easy_install pip
- virtuelle Umgebung erstellen
cd
cd Projekte/python/
virtualenv esphome
- virtuelle Umgebung aktivieren
source ~/Projekte/python/esphome/bin/activate
- esphome installieren
pip install esphome
- esphome aktualisieren
source ~/Projekte/python/esphome/bin/activate
pip install -U esphome
Pakete für virtual environment (Beschreibung für MacOS und Linux):
- ansible
- ansible-lint
- yamllint
- molecule
- molecule-docker
- molecule-goss
neue Rolle erstellen: molecule init role joepublic.webserver –driver-name docker –verifier-name goss
Beispiel Rolle:
---
- name: install apache
apt:
name: apache2
state: present
- meta/main.yml anpassen
- molecule/default/molecule.yml anpassen:
- lint
- platforms
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: debian11
image: debian:stable
provisioner:
name: ansible
verifier:
name: goss
lint: |
set -e
yamllint .
ansible-lint .
- Tests definieren in molecule/default/tests/test_default.yml
- Beispiel für Rolle webserver:
# Molecule managed
---
package:
apache2:
installed: true
port:
tcp:80:
listening: true
-
Dokumentation: https://github.com/aelsabbahy/goss/blob/master/docs/manual.md#package
-
vermutlich wird systemd benötigt => vorbereitetes Image in dem auch schon python installiert ist: joepublic/molecule-debian:11 (https://github.com/Joe-Public/molecule-docker-systemd)
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: debian11
image: joepublic/molecule-debian:11
pre_build_image: true
command: /lib/systemd/systemd
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:rw
provisioner:
name: ansible
verifier:
name: goss
lint: |
set -e
yamllint .
ansible-lint .
- seit Docker 20.10 default cgroup namespace mode = private (https://docs.docker.com/config/containers/runmetrics/#running-docker-on-cgroup-v2)
- für systemd im Container muss “host” verwendet werden
- Konfiguration für Linux über /etc/docker/daemon.json:
{
"default-cgroupns-mode": "host"
}
- Konfiguration für MacOS ….