Ansible: no existe tal error de archivo al activar el socket de usuario systemctl Podman

Ansible: no existe tal error de archivo al activar el socket de usuario systemctl Podman

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_useren lugar de become. También agregué el DOCKER_HOSTal 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.

información relacionada