gwerlas.podman
Podman
Instala y configura Podman en modo sin root (rootless).
Proyecto de GitLab : yoanncolin/ansible/roles/podman
Requisitos
El sistema base Linux debe estar configurado con:
- SSH
- Python (para Ansible)
- Sudo
- Gestor de paquetes listo para usar
El rol gwerlas.system
puede ayudarte:
ansible-galaxy install gwerlas.system
- name: Mi playbook
hosts: all
roles:
- role: gwerlas.system
- role: gwerlas.podman
Hechos
Hechos definidos de este rol:
podman_version
podman_packages
Puedes obtener los hechos solamente, sin hacer cambios en tus nodos:
- name: Mi playbook
hosts: all
tasks:
- name: Obtener hechos
ansible.builtin.import_role:
name: gwerlas.podman
tasks_from: facts
- name: Mostrar
ansible.builtin.debug:
var: podman_packages
Etiquetas
Puedes filtrar tareas específicas usando estas etiquetas:
provision
: Solo provisionar recursos
Variables del rol
Las variables disponibles se enumeran a continuación, junto con los valores predeterminados (ver 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 sin root
Para permitir que algunos usuarios usen Podman en modo sin root, podman_users
debe ser
una lista de objetos formada así:
podman_users:
- name: jdoe # Nombre de usuario Unix (requerido)
home: /home/jdoe # Se obtiene de las entradas de usuario si falta
uid: 1000 # Se usa solo para usuarios que no se han creado a nivel del sistema
subuid_starts: 100000 # Generado del id de usuario por defecto
subuid_length: 50000 # 65536 por defecto
subgid_starts: 100000 # Igual que subuid_starts por defecto
subgid_length: 50000 # Igual que subuid_length por defecto
Como Podman almacena sus datos en el directorio home del usuario, lo crearemos si falta.
Puedes agregar usuarios rápidamente llamando a la tarea rootless
sola:
---
- name: Agregar un usuario para el uso sin root de Podman
hosts: all
vars:
podman_users:
- name: jdoe
uid: 300
tasks:
- name: Agregar a John Doe
ansible.builtin.import_role:
name: gwerlas.podman
tasks_from: rootless
Usuarios no existentes
Para los usuarios que no existen aún, los crearemos a través del
rol gwerlas.system
.
Para deshabilitar la creación de usuarios faltantes, establece podman_create_missing_users
en false
.
En este caso, debes establecer la propiedad uid
para cada usuario faltante.
Configuración de Podman
Por defecto, dejamos los archivos de configuración de la distribución sin cambios.
Excepto por la configuración de los contenedores de Debian 11 que no funciona de forma predeterminada.
Para usar una configuración personalizada, utiliza los ajustes podman_*_config
.
Contenedores
Usa el diccionario podman_containers_config
para llenar el archivo /etc/containers/containers.conf
siguiendo la misma estructura que el toml descrito en la página del manual de containers.conf
.
Por ejemplo:
podman_containers_config:
containers:
log_driver: journald
engine:
cgroup_manager: cgroupfs
Generará lo siguiente en /etc/containers/containers.conf
:
[containers]
log_drivers = "journald"
[engine]
cgroup_manager = "cgroupfs"
Solo para Debian 11, sobreescribimos los valores predeterminados de la distribución con la configuración anterior.
Registros
NOTA No soportamos la versión 1 de formato obsoleto.
Usa el diccionario podman_registries_config
para llenar el archivo /etc/containers/registries.conf
siguiendo la misma estructura que el toml descrito en la página del manual de registries.conf
.
Por ejemplo:
podman_registries_config:
unqualified-search-registries:
- docker.io
registry:
- location: my-insecure-registry:5000
insecure: true
Generará lo siguiente en /etc/containers/registries.conf
:
unqualified-search-registries = ['docker.io']
[[registry]]
location = my-insecure-registry:5000
insecure = true
Almacenamiento
Usa el diccionario podman_storage_config
para llenar el archivo /etc/containers/storage.conf
siguiendo la misma estructura que el toml descrito en la página del manual de storage.conf
.
Por ejemplo:
podman_storage_config:
storage:
driver: zfs
options:
zfs:
mountopt: "nodev"
Generará lo siguiente en /etc/containers/storage.conf
:
[storage]
driver = "zfs"
[storage.options.zfs]
mountopt = "nodev"
Libpod
Usa el diccionario podman_libpod_config
para llenar el archivo /etc/containers/libpod.conf
siguiendo la misma estructura que el toml descrito en la página del manual de libpod.conf
.
Por ejemplo:
podman_libpod_config:
cgroup_manager: cgroupfs
Generará lo siguiente en /etc/containers/libpod.conf
:
cgroup_manager = "cgroupfs"
Solo para Debian 11, sobreescribimos los valores predeterminados de la distribución con la configuración anterior.
Instalación de Podman Compose
El podman_compose_install
establecido en true
instalará podman-compose
si está disponible
para la distribución del host objetivo.
Instalación de Podman Toolbox
El podman_toolbox_install
establecido en true
instalará podman-toolbox
si está disponible
para la distribución del host objetivo.
Imitar Docker
Docker en el $PATH
Puedes imitar Docker a través del parámetro podman_mimic_docker
establecido en true
. Si el paquete
podman-docker
está disponible para la distribución Linux objetivo, se instalará, en
los otros casos se creará un symlink.
Entonces, los scripts que llaman docker
usarán podman
en su lugar de manera transparente.
Socket del daemon
Si la versión instalada de Podman es 3.0
o superior, el servicio se habilitará para cada
podman_users
y las variables de entorno DOCKER_BUILDKIT
y DOCKER_HOST
se establecerán respectivamente en 0
y $XDG_RUNTIME_DIR/podman/podman.sock
.
Así podrás ejecutar Docker en Podman.
Envoltorios
Puedes agregar algunos envoltorios para llamar a algunos comandos de manera transparente:
Por ejemplo, ejecutar molecule sin instalarlo (y sus dependencias) en tu sistema:
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 mayoría de los argumentos son los mismos que los parámetros de podman run
, soportamos casi todos
los argumentos del módulo ansible podman_container como están
(excepto alias y funciones orientadas a servicios).
Puedes agregar (o eliminar) la lista de parámetros soportados editando la
variable podman_wrappers_autofill
. También puedes editar los valores predeterminados
editando la variable podman_wrappers_values
.
Dependencias
El rol gwerlas.system
para la gestión de usuarios.
Asegúrate de tener containers.podman
instalado en tu sistema, o presente
en tu requirements.yml
.
Ejemplo de Playbook
Un ejemplo de la forma de ser lo más compatible con Docker posible:
---
- name: Compatible con Docker
hosts: all
roles:
- name: gwerlas.system
- name: gwerlas.podman
vars:
podman_mimic_docker: true
Licencia
ansible-galaxy install gwerlas.podman