chasinglogic.podman
Ansible-Rolle für Podman
Verwalten Sie Dienste und Container mit Podman
Verwendung
Standardmäßig installiert diese Rolle einfach Podman, wie in den Podman-Dokumenten beschrieben, und führt alle anderen erforderlichen Einstellungen durch, um die Installation auf den unterstützten Plattformen funktionsfähig zu machen.
Wichtiger Hinweis: Dies bedeutet, dass auf Ubuntu- / Debian-Systemen ein apt upgrade
gemäß der Dokumentation durchgeführt wird, nachdem das Repository hinzugefügt wurde. Dieses Upgrade wird nur ausgeführt, wenn das Repository hinzugefügt oder geändert wird und nicht bei weiteren Ausführungen.
Darüber hinaus kann es Podman-Container als SystemD-Dienste bereitstellen und konfigurieren.
Beispiel-Playbook
- hosts: all
roles:
- role: podman
Automatische Bereitstellung von Diensten
Podman-Container, die als Dienste laufen sollen, sind relativ homogen. Aus diesem Grund bietet diese Rolle eine Variable, die verwendet werden kann, um Container als SystemD-Dienste bereitzustellen und zu konfigurieren. Komplexere Anwendungsfälle, wie das Konfigurieren mehrerer Container als Pod, werden derzeit noch nicht unterstützt. Um diese Funktion für Ihren Host zu nutzen, definieren Sie eine Variable podman_services
, die eine Liste von Maps mit der folgenden Struktur ist:
podman_services:
## Podman-Variablen
#
# Erforderlich: Der Name des herunterzuladenden Images
- image_name: nginx
# Optional: Der Tag, der heruntergeladen werden soll. Dies entspricht oft
# der Version und ist standardmäßig 'latest'
image_tag: mainline
# Optional: Beschreibung, die zur SystemD-Dienstdatei hinzugefügt wird
description: Web-Host
# Optional: Liste der zu veröffentlichenden Ports. Entspricht der gleichen Form wie die
# Podman-CLI, d.h. host-port:container-port. Dies wird
# direkt an das '--publish'-Flag weitergeleitet, sodass IP-Bindings auch funktionieren
# (z.B. '127.0.0.1:8080:80'). Standardmäßig none.
publish:
- '80:80'
# Optional: Stringname des Netzwerks, das als --network-Flag übergeben wird.
# Wenn das Netzwerk nicht existiert, wird es erstellt. Dies kann verwendet werden, um
# mehreren Diensten die Vernetzung zu ermöglichen. Siehe Vernetzung für Einschränkungen
network: somenetwork
# Optional: Liste der zu mountenden Volumes. Entspricht der gleichen Form wie die
# Podman-CLI host-verzeichnis:container-verzeichnis, und wie unten gezeigt
# sind Mount-Optionen erlaubt.
volumes:
- '/tmp:/usr/share/nginx/html:ro'
# Optional: Definieren Sie einen Hostnamen für das Hostnamen-Flag von Podman. Setzt
# den Hostnamen der Container, Standard ist none.
hostname: chasinglogic.io
# Optional: Eine Liste von Geheimnissen, die gemountet werden sollen. Geheimnisse werden nicht automatisch erstellt.
# Das einzige erforderliche Feld, wenn verwendet, ist der Name. Die anderen
# Werte haben Standardwerte, wie sie in der Podman-Dokumentation angegeben sind
# https://docs.podman.io/en/v4.6.0/markdown/options/secret.html
secrets:
- name: secret
type: mount
target: /run/secrets/secret
uid: 0
gid: 0
mode: 0
# Optional: Eine Liste von Umgebungsvariablen, die zum
# Container hinzugefügt werden sollen. Standard ist none.
env_vars:
- SOME_VAR=SOME_VALUE
# Optional: Eine Liste beliebiger Argumente als Strings, die vor dem Image-Namen hinzugefügt werden.
flags:
- '--cap-add=NET_ADMIN'
## SystemD-Variablen
#
# Optional: Definieren Sie die Neustartpolitik für diesen Dienst. Standard ist immer
restart: always
# Optional: Definieren Sie die Zeit, die zwischen Neustarts dieses Dienstes in Sekunden gewartet wird. Standard ist 30
restart_sec: 30
# Optional: Definieren Sie den tatsächlichen Namen, der für den SystemD
# Dienst verwendet wird. {{ Standardmäßig image_name + '-podman' }}
service_name: nginx
# Optional: Definieren Sie die Ziel-/Dienste, nach denen dieser SystemD-Dienst
# gestartet werden muss. Dies ist eine YAML-Liste und kein String.
after:
- network.target
# Optional: Definieren Sie das Timeout zum Starten dieses SystemD
# Dienstes. Für gültige Werte siehe 'man systemd.service'. Standardmäßig
# 5 Minuten.
timeout_start_sec: 5m
# Optional: Definieren Sie einen Installationsabschnitt für den SystemD
# Dienst. Momentan wird nur wanted_by unterstützt. Siehe 'man
# systemd.unit' für eine Beschreibung dieses Abschnitts. Standard ist none
# und den meisten Benutzern wird dies nicht benötigt.
install:
wanted_by:
- multi-user.target
# Optional: Definieren Sie den Benutzer und die Gruppe für die Dienst
# datei. Standard ist Weglassung, was den meisten
# Systemen root entspricht.
user: root
group: root
Vernetzung
Derzeit bietet Ansible kein Podman-Netzwerkmodul, das mit docker_network
vergleichbar ist. Wenn Sie die Netzwerkoption für Ihren Container verwenden, müssen Sie sicherstellen, dass das Netzwerk existiert, bevor diese Rolle ausgeführt wird. In Zukunft, wenn die Unterstützung für Podman-Netzwerke zu Ansible hinzugefügt wird, wird diese Rolle sicherstellen, dass es erstellt wird.
Entwicklung
Bei der Entwicklung ist es am besten, die Phasen "converge" und "verify" wie folgt zu verwenden:
make converge verify
Lizenz
ansible-galaxy install chasinglogic.podman