new role podman
This commit is contained in:
0
host_vars/podman01.universe.local
Normal file
0
host_vars/podman01.universe.local
Normal file
4
hosts
4
hosts
@@ -141,6 +141,10 @@ endor.universe.local
|
|||||||
endorvm.universe.local
|
endorvm.universe.local
|
||||||
tuxedo-book-xp1511.universe.local
|
tuxedo-book-xp1511.universe.local
|
||||||
|
|
||||||
|
[podman_servers]
|
||||||
|
podman01.universe.local
|
||||||
|
podman02.universe.local
|
||||||
|
|
||||||
[printspooler]
|
[printspooler]
|
||||||
|
|
||||||
[proxyserver]
|
[proxyserver]
|
||||||
|
|||||||
@@ -144,6 +144,14 @@
|
|||||||
roles:
|
roles:
|
||||||
- docker
|
- docker
|
||||||
|
|
||||||
|
- hosts: podman_servers
|
||||||
|
tags: server,podman
|
||||||
|
become: true
|
||||||
|
handlers:
|
||||||
|
- import_tasks: global_handlers/global_handlers.yml
|
||||||
|
roles:
|
||||||
|
- podman
|
||||||
|
|
||||||
- hosts: drone
|
- hosts: drone
|
||||||
tags: server,docker,drone
|
tags: server,docker,drone
|
||||||
become: true
|
become: true
|
||||||
|
|||||||
60
roles/podman/README.md
Normal file
60
roles/podman/README.md
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
# Ansible Role: podman
|
||||||
|
|
||||||
|
Diese Rolle installiert Podman und Portainer auf Debian-basierten Systemen.
|
||||||
|
Zusätzlich wird ein NFS-Share von einem TrueNAS-System gemountet, um persistente Daten für Podman-Container, einschließlich Portainer, zu speichern.
|
||||||
|
|
||||||
|
## Anforderungen
|
||||||
|
|
||||||
|
Diese Rolle wurde für Debian-basierte Systeme entwickelt und getestet.
|
||||||
|
Es wird davon ausgegangen, dass ein NFS-Share auf einem TrueNAS-System bereits konfiguriert und exportiert ist.
|
||||||
|
|
||||||
|
## Rollenvariablen
|
||||||
|
|
||||||
|
Die folgenden Variablen können angepasst werden, um das Verhalten der Rolle zu steuern. Die Standardwerte sind in `defaults/main.yml` definiert.
|
||||||
|
|
||||||
|
| Variable | Standardwert | Beschreibung |
|
||||||
|
|---|---|---|
|
||||||
|
| `podman_nfs_server` | `"192.168.1.10"` | Die IP-Adresse des TrueNAS-Servers, der den NFS-Share bereitstellt. |
|
||||||
|
| `podman_nfs_share_path` | `"/mnt/pool/podman_data"` | Der Pfad zum NFS-Share auf dem TrueNAS-System. |
|
||||||
|
| `podman_data_mount_point` | `"/var/lib/podman_nfs"` | Der lokale Mount-Punkt auf dem Zielsystem für den NFS-Share. |
|
||||||
|
| `portainer_data_path` | `{{ podman_data_mount_point }}/portainer` | Der Pfad innerhalb des NFS-Mount-Punkts, wo Portainer seine persistenten Daten speichert. |
|
||||||
|
| `portainer_image` | `"portainer/portainer-ce:latest"` | Das Docker/Podman-Image für Portainer. |
|
||||||
|
| `portainer_name` | `"portainer"` | Der Name des Portainer-Containers. |
|
||||||
|
| `portainer_web_port` | `9443` | Der Port für die Portainer Web-Oberfläche (HTTPS). |
|
||||||
|
| `portainer_edge_agent_port` | `8000` | Der Port für den Portainer Edge Agent. |
|
||||||
|
| `portainer_legacy_port` | `9000` | Der alte Standard-Port für Portainer (HTTP), oft noch exponiert. |
|
||||||
|
|
||||||
|
## Abhängigkeiten
|
||||||
|
|
||||||
|
Diese Rolle hat keine Abhängigkeiten von anderen Ansible-Rollen.
|
||||||
|
|
||||||
|
## Beispiel-Playbook
|
||||||
|
|
||||||
|
So können Sie die Rolle in Ihr Playbook integrieren:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- hosts: podman_hosts
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- podman
|
||||||
|
```
|
||||||
|
|
||||||
|
Um spezifische Variablen zu überschreiben, können Sie dies im Playbook oder in Ihren `group_vars` tun:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- hosts: podman_hosts
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
podman_nfs_server: "10.0.0.50"
|
||||||
|
podman_nfs_share_path: "/mnt/mainpool/apps/podman"
|
||||||
|
roles:
|
||||||
|
- podman
|
||||||
|
```
|
||||||
|
|
||||||
|
## Lizenz
|
||||||
|
|
||||||
|
MIT
|
||||||
|
|
||||||
|
## Autor
|
||||||
|
|
||||||
|
Ihr Name
|
||||||
18
roles/podman/defaults/main.yml
Normal file
18
roles/podman/defaults/main.yml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
# defaults file for roles/podman
|
||||||
|
|
||||||
|
# NFS configuration for persistent Podman data
|
||||||
|
podman_nfs_server: "truenas.universe.local" # Ersetzen Sie dies durch die IP-Adresse Ihres TrueNAS-Servers
|
||||||
|
podman_nfs_share_path: "/mnt/data/podman" # Ersetzen Sie dies durch den Pfad Ihres NFS-Shares auf TrueNAS
|
||||||
|
podman_data_mount_point: "/opt/podman" # Lokaler Mount-Punkt für den NFS-Share
|
||||||
|
|
||||||
|
# Portainer configuration
|
||||||
|
portainer_data_path: "{{ podman_data_mount_point }}/portainer" # Pfad für Portainers persistente Daten
|
||||||
|
portainer_image: "portainer/portainer-ce:latest"
|
||||||
|
portainer_name: "portainer"
|
||||||
|
portainer_web_port: 9443 # Port für die Portainer Web-Oberfläche (HTTPS)
|
||||||
|
portainer_edge_agent_port: 8000 # Port für den Portainer Edge Agent
|
||||||
|
portainer_legacy_port: 9000 # Portainer's alter Standard-Port (HTTP), oft noch exponiert
|
||||||
|
|
||||||
|
# Hinweis: Stellen Sie sicher, dass der NFS-Share auf TrueNAS korrekt konfiguriert und exportiert ist
|
||||||
|
# und die entsprechenden Berechtigungen für den Zugriff vom Ansible-Zielsystem aus hat.
|
||||||
88
roles/podman/main.yml
Normal file
88
roles/podman/main.yml
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
---
|
||||||
|
# tasks file for roles/podman
|
||||||
|
|
||||||
|
- name: Ensure NFS client utilities are installed
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name: nfs-common
|
||||||
|
state: present
|
||||||
|
update_cache: yes
|
||||||
|
|
||||||
|
- name: Create local mount point for Podman NFS data
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ podman_data_mount_point }}"
|
||||||
|
state: directory
|
||||||
|
mode: '0755'
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
|
||||||
|
- name: Add NFS mount entry to /etc/fstab
|
||||||
|
ansible.posix.mount:
|
||||||
|
src: "{{ podman_nfs_server }}:{{ podman_nfs_share_path }}"
|
||||||
|
path: "{{ podman_data_mount_point }}"
|
||||||
|
fstype: nfs
|
||||||
|
opts: defaults,hard,intr,noatime,nofail # 'nofail' verhindert, dass der Bootvorgang stoppt, wenn der NFS-Server nicht erreichbar ist.
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Mount Podman NFS share
|
||||||
|
ansible.posix.mount:
|
||||||
|
path: "{{ podman_data_mount_point }}"
|
||||||
|
state: mounted
|
||||||
|
|
||||||
|
- name: Install Podman and related tools
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name:
|
||||||
|
- podman
|
||||||
|
- podman-docker # Bietet ein Docker-kompatibles CLI-Interface
|
||||||
|
- buildah # Tool zum Erstellen von OCI-Images
|
||||||
|
- skopeo # Tool zum Verschieben und Kopieren von Container-Images
|
||||||
|
- containers-common # Enthält allgemeine Konfigurationsdateien für Container
|
||||||
|
state: present
|
||||||
|
update_cache: yes
|
||||||
|
|
||||||
|
- name: Ensure Podman systemd socket is enabled and running
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: podman.socket
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
# Dies stellt sicher, dass der Podman-Socket für die Kommunikation verfügbar ist,
|
||||||
|
# insbesondere für Tools wie Portainer, die sich mit dem Socket verbinden.
|
||||||
|
|
||||||
|
- name: Create Portainer data directory on NFS share
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ portainer_data_path }}"
|
||||||
|
state: directory
|
||||||
|
mode: '0755'
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
|
||||||
|
- name: Run Portainer container with Podman
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: >
|
||||||
|
podman run -d
|
||||||
|
--name {{ portainer_name }}
|
||||||
|
--restart=always
|
||||||
|
-p {{ portainer_edge_agent_port }}:8000
|
||||||
|
-p {{ portainer_web_port }}:9443
|
||||||
|
-p {{ portainer_legacy_port }}:9000
|
||||||
|
-v /run/podman/podman.sock:/var/run/docker.sock # Map Podman socket to Docker socket path for Portainer compatibility
|
||||||
|
-v {{ portainer_data_path }}:/data
|
||||||
|
{{ portainer_image }}
|
||||||
|
creates: "{{ portainer_data_path }}/portainer.db" # Prüft, ob die Portainer-Datenbankdatei existiert, um Idempotenz zu gewährleisten
|
||||||
|
args:
|
||||||
|
warn: false # Unterdrückt die Warnung, dass das 'command'-Modul für idempotente Operationen verwendet wird
|
||||||
|
# Verbesserungsvorschlag: Für eine robustere Container-Verwaltung könnte das Modul
|
||||||
|
# `community.general.podman_container` verwendet werden, falls die `community.general`-Collection installiert ist.
|
||||||
|
# Beispiel:
|
||||||
|
# - name: Run Portainer container with Podman (using podman_container module)
|
||||||
|
# community.general.podman_container:
|
||||||
|
# name: "{{ portainer_name }}"
|
||||||
|
# image: "{{ portainer_image }}"
|
||||||
|
# state: started
|
||||||
|
# restart_policy: always
|
||||||
|
# ports:
|
||||||
|
# - "{{ portainer_edge_agent_port }}:8000"
|
||||||
|
# - "{{ portainer_web_port }}:9443"
|
||||||
|
# - "{{ portainer_legacy_port }}:9000"
|
||||||
|
# volume:
|
||||||
|
# - "/run/podman/podman.sock:/var/run/docker.sock"
|
||||||
|
# - "{{ portainer_data_path }}:/data"
|
||||||
Reference in New Issue
Block a user