gwerlas.podman

Podman

estado del pipeline

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

Licencia BSD de 3 cláusulas.

Acerca del proyecto

Install and configure podman

Instalar
ansible-galaxy install gwerlas.podman
Licencia
bsd-3-clause
Descargas
5.4k
Propietario
DevOps Engineer