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