
Estoy ejecutando un libro de estrategias de Ansible en un sistema Oracle Linux 8 nuevo. Incluye un paso en el que le pide a systemctl que active un socket Podman de usuario de esta manera:
- name: Enable podman socket
vars:
userid: ansible_facts.getent_passwd.{{ ansible_user_id }}[1]
ansible.builtin.systemd:
name: podman.socket
enabled: yes
state: started
scope: user
environment:
XDG_RUNTIME_DIR: "/run/user/{{ userid }}"
Este manual de Ansible se ejecuta como usuario (no como root) para habilitar e iniciar el socket Podman a nivel de usuario.
Sin embargo, al ejecutar el libro de jugadas me dio este error:
fatal: [127.0.0.1]: ¡FALLÓ! => {"changed": false, "cmd": "/bin/systemctl --user", "msg": "Error al conectarse al bus: no existe tal archivo o directorio", "rc": 1, "stderr" : "Error al conectarse al bus: no existe tal archivo o directorio\n", "stderr_lines": ["Error al conectarse al bus: no existe tal archivo o directorio"], "stdout": "", "stdout_lines": [] }
Si, en lugar de usar Ansible, ejecuto manualmente el siguiente comando systemctl, entonces el socket Podman del usuario se activa exitosamente:
systemctl --user enable podman.socket
¿Qué me falta en mi libro de jugadas y cómo lo soluciono? ¡Gracias!
Respuesta1
Me encontré con un problema similar, donde no podía hacer que el módulo ansible habilitara e iniciara podman.socket para el usuario no root, pero podía ejecutar el comando ( systemctl --user enable podman.socket
) cuando usaba ssh para iniciar sesión como usuario.
El mensaje de error que recibí fue:
fatal: [x]: ¡FALLÓ! => {"changed": false, "cmd": "/usr/bin/systemctl --user", "msg": "Error al conectarse al bus: operación no permitida", "rc": 1, "stderr" : "Error al conectarse al bus: Operación no permitida\n", "stderr_lines": ["Error al conectarse al bus: Operación no permitida"], "stdout": "", "stdout_lines": []}
Mi solución fue usar remote_user
en lugar de become
. También agregué el DOCKER_HOST
al bashrc del usuario.
Con las siguientes dos tareas podría habilitar e iniciar podman.socket sin raíz.
- name: Export podman.socket
become: '{{ user }}'
become: true
lineinfile:
dest: "/home/{{ user }}/.bashrc"
line: "export DOCKER_HOST=unix:$XDG_RUNTIME_DIR/podman/podman.sock"
insertafter: "EOF"
- name: Enable podman.socket for user
remote_user: '{{ user }}'
systemd:
name: "podman.socket"
enabled: yes
state: started
scope: user
Esto fue útil para que Docker-Compose funcione con Podman y Ansible.