No description
Find a file
Mathieu Fruchet 78ce713148 Fix lint
2026-02-12 18:28:20 +01:00
defaults Fix lint 2026-02-12 18:28:20 +01:00
handlers Fix lint 2026-02-12 18:28:20 +01:00
meta Fix lint 2026-02-12 18:28:20 +01:00
tasks Fix lint 2026-02-12 18:28:20 +01:00
templates Initial commit 2026-01-12 12:27:50 +01:00
tests Initial commit 2026-01-12 12:27:50 +01:00
vars Fix lint 2026-02-12 18:28:20 +01:00
LICENCE.md Ajout de la licence 2026-01-12 12:34:34 +01:00
README.md Ajout de la licence 2026-01-12 12:34:34 +01:00

Rôle Ansible : Podman

Installation et configuration de Podman pour le déploiement de conteneurs rootless.

Responsabilités

Ce rôle s'occupe uniquement de la configuration système :

✅ Installation de Podman et dépendances ✅ Configuration des registries ✅ Configuration du storage driver ✅ Support rootless (subuid/subgid) ✅ Support IPv6 (si activé)

Ce que le rôle NE fait PAS

❌ Création d'utilisateurs (fait par les rôles applicatifs) ❌ Création de réseaux (fait par les rôles applicatifs) ❌ Déploiement de conteneurs (fait par les rôles applicatifs)

Prérequis

  • Debian 12+ ou Ubuntu 22.04+
  • Ansible 2.14+
  • Collection ansible.posix
ansible-galaxy collection install ansible.posix

Variables

Configuration de base

# Support IPv6 (default: true)
podman_enable_ipv6: true

# Storage driver (default: overlay)
podman_storage_driver: "overlay"

Registries

# Registries autorisées
podman_registries:
  - "docker.io"
  - "quay.io"
  - "ghcr.io"

# Registries pour les images non qualifiées
podman_unqualified_search_registries:
  - "docker.io"

# Registries bloquées (optionnel)
podman_blocked_registries:
  - "badregistry.com"

Packages

podman_packages:
  - podman
  - podman-compose
  - slirp4netns
  - fuse-overlayfs
  - uidmap

Configuration rootless

podman_max_user_namespaces: 28633
podman_subuid_range: 100000
podman_subuid_count: 65536
podman_subgid_range: 100000
podman_subgid_count: 65536

Utilisation

Playbook simple

- hosts: containers
  become: true
  roles:
    - podman

Avec rôles applicatifs

- hosts: traefik
  become: true
  roles:
    - podman        # Installe et configure Podman
    - traefik       # Déploie Traefik (crée user, réseau, conteneur)

- hosts: forgejo
  become: true
  roles:
    - podman        # Installe et configure Podman
    - forgejo       # Déploie Forgejo (crée user, réseau, conteneur)

Avec variables personnalisées

- hosts: containers
  become: true
  vars:
    podman_enable_ipv6: true
    podman_storage_driver: "overlay"
    podman_registries:
      - "docker.io"
      - "registry.gitlab.com"
      - "ghcr.io"
  roles:
    - podman

Vérification post-installation

# Version Podman
podman --version

# Info système
podman info

# Storage driver
podman info | grep -i "graphDriverName"

# Registries configurées
cat /etc/containers/registries.conf

Tags disponibles

# Installation uniquement
ansible-playbook playbook.yml --tags "install"

# Configuration registries uniquement
ansible-playbook playbook.yml --tags "registries"

# Configuration IPv6 uniquement
ansible-playbook playbook.yml --tags "ipv6"

# Vérifications uniquement
ansible-playbook playbook.yml --tags "verify"

Structure du rôle

roles/podman/
├── defaults/
│   └── main.yml           # Variables par défaut
├── tasks/
│   └── main.yml           # Tâches principales
├── templates/
│   ├── registries.conf.j2 # Configuration registries
│   └── storage.conf.j2    # Configuration storage
├── meta/
│   └── main.yml           # Métadonnées
└── README.md

Exemples d'intégration

Avec Traefik

# group_vars/traefik.yml
podman_enable_ipv6: true
podman_registries:
  - "docker.io"

# playbook.yml
- hosts: traefik
  roles:
    - podman
    - traefik  # Crée l'utilisateur "traefik" et déploie

Avec Forgejo

# group_vars/forgejo.yml
podman_enable_ipv6: true
podman_registries:
  - "docker.io"
  - "codeberg.org"

# playbook.yml
- hosts: forgejo
  roles:
    - podman
    - forgejo  # Crée l'utilisateur "forgejo" et déploie

Dépannage

Erreur : "cannot clone: Operation not permitted"

Vérifier les user namespaces :

sysctl kernel.unprivileged_userns_clone
# Doit retourner: kernel.unprivileged_userns_clone = 1

Erreur : "no such file or directory: /etc/subuid"

Le rôle crée automatiquement ces fichiers, mais vérifier :

ls -la /etc/subuid /etc/subgid

IPv6 ne fonctionne pas

Vérifier le forwarding :

sysctl net.ipv6.conf.all.forwarding
# Doit retourner: net.ipv6.conf.all.forwarding = 1

Licence

GPLv3 or later

Auteur

HuTaeh - HUTIT