gwerlas.podman
Podman
Installer et configurer Podman en mode sans root.
Projet GitLab : yoanncolin/ansible/roles/podman
Exigences
Un système Linux de base configuré avec :
- SSH
- Python (pour Ansible)
- Sudo
- Gestionnaire de paquets prêt à l'emploi
Le rôle gwerlas.system
peut vous aider :
ansible-galaxy install gwerlas.system
- name: Mon playbook
hosts: all
roles:
- role: gwerlas.system
- role: gwerlas.podman
Faits
Faits définis par ce rôle :
podman_version
podman_packages
Vous pouvez obtenir les faits uniquement, sans apporter de modifications à vos nœuds :
- name: Mon playbook
hosts: all
tasks:
- name: Obtenir des faits
ansible.builtin.import_role:
name: gwerlas.podman
tasks_from: facts
- name: Afficher
ansible.builtin.debug:
var: podman_packages
Tags
Vous pouvez filtrer certaines tâches spécifiques en utilisant ces tags :
provision
: Provisionner uniquement des ressources
Variables de rôle
Les variables disponibles sont listées ci-dessous, avec les valeurs par défaut (voir defaults/main.yml
) :
podman_compose_install: false
podman_toolbox_install: false
podman_mimic_docker: false
podman_create_missing_users: true
podman_users:
- name: "{{ ansible_user_id }}"
podman_wrappers: []
podman_wrappers_path: /usr/local/bin
Podman sans root
Pour permettre à certains utilisateurs d'utiliser Podman en mode sans root, podman_users
doit être une liste d'objets formée comme suit :
podman_users:
- name: jdoe # Nom de connexion Unix (requis)
home: /home/jdoe # Obtenu des entrées utilisateur si manquant
uid: 1000 # Utilisé uniquement pour les utilisateurs non encore créés au niveau du système
subuid_starts: 100000 # Généré à partir de l'identifiant utilisateur par défaut
subuid_length: 50000 # 65536 par défaut
subgid_starts: 100000 # Même que subuid_starts par défaut
subgid_length: 50000 # Même que subuid_length par défaut
Étant donné que Podman stocke ses données dans le répertoire personnel de l'utilisateur, nous allons le créer si c'est manquant.
Vous pouvez ajouter des utilisateurs rapidement en appelant la tâche rootless
seule :
---
- name: Ajouter un utilisateur pour l'utilisation de Podman sans root
hosts: all
vars:
podman_users:
- name: jdoe
uid: 300
tasks:
- name: Ajouter John Doe
ansible.builtin.import_role:
name: gwerlas.podman
tasks_from: rootless
Utilisateurs inexistants
Pour les utilisateurs qui n'existent pas encore, nous allons les créer pour vous grâce au rôle gwerlas.system
.
Pour désactiver la création d'utilisateurs manquants, mettez podman_create_missing_users
à false
.
Dans ce cas, vous devez définir la propriété uid
pour chaque utilisateur manquant.
Configuration de Podman
Par défaut, nous laissons les fichiers de configuration de la distribution inchangés.
Sauf pour les paramètres des conteneurs Debian 11 qui ne fonctionnent pas par défaut.
Pour utiliser une configuration personnalisée, utilisez les paramètres podman_*_config
.
Conteneurs
Utilisez le dictionnaire podman_containers_config
pour remplir le fichier /etc/containers/containers.conf
en suivant la même structure que celle décrite dans la page de manuel containers.conf
.
Par exemple :
podman_containers_config:
containers:
log_driver: journald
engine:
cgroup_manager: cgroupfs
Cela générera le fichier /etc/containers/containers.conf
ci-dessous :
[containers]
log_drivers = "journald"
[engine]
cgroup_manager = "cgroupfs"
Pour Debian 11 uniquement, nous remplaçons les paramètres par défaut de la distribution par la configuration ci-dessus.
Enregistrements
REMARQUE Nous ne prenons pas en charge le format version 1 obsolète.
Utilisez le dictionnaire podman_registries_config
pour remplir le fichier /etc/containers/registries.conf
en suivant la même structure que celle décrite dans la page de manuel registries.conf
.
Par exemple :
podman_registries_config:
unqualified-search-registries:
- docker.io
registry:
- location: my-insecure-registry:5000
insecure: true
Cela générera le fichier /etc/containers/registries.conf
ci-dessous :
unqualified-search-registries = ['docker.io']
[[registry]]
location = my-insecure-registry:5000
insecure = true
Stockage
Utilisez le dictionnaire podman_storage_config
pour remplir le fichier /etc/containers/storage.conf
en suivant la même structure que celle décrite dans la page de manuel storage.conf
.
Par exemple :
podman_storage_config:
storage:
driver: zfs
options:
zfs:
mountopt: "nodev"
Cela générera le fichier /etc/containers/storage.conf
ci-dessous :
[storage]
driver = "zfs"
[storage.options.zfs]
mountopt = "nodev"
Libpod
Utilisez le dictionnaire podman_libpod_config
pour remplir le fichier /etc/containers/libpod.conf
en suivant la même structure que celle décrite dans la page de manuel libpod.conf
.
Par exemple :
podman_libpod_config:
cgroup_manager: cgroupfs
Cela générera le fichier /etc/containers/libpod.conf
ci-dessous :
cgroup_manager = "cgroupfs"
Pour Debian 11 uniquement, nous remplaçons les paramètres par défaut de la distribution par la configuration ci-dessus.
Podman compose
Le paramètre podman_compose_install
défini à true
installera podman-compose
s'il est disponible
pour la distribution de l'hôte ciblé.
Podman toolbox
Le paramètre podman_toolbox_install
défini à true
installera podman-toolbox
s'il est disponible
pour la distribution de l'hôte ciblé.
Mimer Docker
Docker dans le $PATH
Vous pouvez mimer Docker grâce au paramètre podman_mimic_docker
défini à true
. Si le paquet
podman-docker
est disponible pour la distribution Linux cible, il sera installé, dans
le cas contraire, un lien symbolique sera créé.
Ainsi, les scripts appelant docker
utiliseront automatiquement podman
.
Socket de démon
Si la version installée de Podman est 3.0
ou supérieure, le service sera activé pour chaque
podman_users
et les variables d'environnement DOCKER_BUILDKIT
et DOCKER_HOST
seront
respectivement définies à 0
et $XDG_RUNTIME_DIR/podman/podman.sock
.
Vous pourrez donc exécuter Docker dans Podman.
Wrappers
Vous pouvez ajouter des wrappers pour appeler certaines commandes de manière transparente :
Par exemple, exécutez molecule sans l'installer (ni ses dépendances) sur votre système :
podman_wrappers:
- command: molecule
image: gwerlas/molecule
env:
CONTAINER_CONNECTION: docker
MOLECULE_CONTAINERS_BACKEND: podman
interactive: true
network: host
security_opt: label=disable
volume:
- $HOME/.cache/molecule:/root/.cache/molecule
- $HOME/.vagrant.d:/root/.vagrant.d
- /run/libvirt:/run/libvirt
- /var/lib/libvirt:/var/lib/libvirt
- /var/tmp:/var/tmp
wrapper_extras:
env_patterns:
- ANSIBLE_*
- MOLECULE_*
openstack_cli: true
podman_socket: true
same_pwd: true
ssh_auth_sock: true
La plupart des arguments sont les mêmes que les paramètres de podman run
, nous supportons presque
tous les arguments du module ansible podman_container tel quel
(sauf les alias et les fonctionnalités orientées services).
Vous pouvez ajouter (ou retirer) la liste de paramètres supportés en modifiant la
variable podman_wrappers_autofill
. Vous pouvez également modifier les valeurs par défaut
en modifiant la variable podman_wrappers_values
.
Dépendances
Le rôle gwerlas.system
pour la gestion des utilisateurs.
Assurez-vous d'avoir containers.podman
installé sur votre système, ou présent
dans votre requirements.yml
.
Exemple de playbook
Un exemple de la manière d'être le plus compatible avec Docker possible :
---
- name: Compatible Docker
hosts: all
roles:
- name: gwerlas.system
- name: gwerlas.podman
vars:
podman_mimic_docker: true
Licence
ansible-galaxy install gwerlas.podman