Ansible - Nenhum erro de arquivo ao ativar o soquete do usuário systemctl Podman

Ansible - Nenhum erro de arquivo ao ativar o soquete do usuário systemctl Podman

Estou executando um manual do Ansible em um novo sistema Oracle Linux 8. Inclui uma etapa em que pede ao systemctl para ativar um soquete Podman do usuário da seguinte forma:

- 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 playbook Ansible está sendo executado como usuário (não root) para habilitar e iniciar o soquete Podman em nível de usuário.

No entanto, executar o manual me deu este erro:

fatal: [127.0.0.1]: FALHOU! => {"changed": false, "cmd": "/bin/systemctl --user", "msg": "Falha ao conectar ao barramento: arquivo ou diretório inexistente", "rc": 1, "stderr" : "Falha ao conectar ao barramento: arquivo ou diretório inexistente\n", "stderr_lines": ["Falha ao conectar ao barramento: arquivo ou diretório inexistente"], "stdout": "", "stdout_lines": [] }

Se, em vez de usar Ansible, eu executar manualmente o seguinte comando systemctl, o soquete do usuário Podman será ativado com sucesso:

systemctl --user enable podman.socket

O que estou faltando em meu manual e como posso corrigir isso? Obrigado!

Responder1

Encontrei um problema semelhante, em que não consegui fazer com que o módulo ansible habilitasse e iniciasse podman.socket para o usuário não root, mas consegui executar o comando ( systemctl --user enable podman.socket) ao usar ssh para fazer login como usuário.

A mensagem de erro que recebi foi:

fatal: [x]: FALHOU! => {"changed": false, "cmd": "/usr/bin/systemctl --user", "msg": "Falha ao conectar ao barramento: operação não permitida", "rc": 1, "stderr" : "Falha ao conectar ao barramento: Operação não permitida\n", "stderr_lines": ["Falha ao conectar ao barramento: Operação não permitida"], "stdout": "", "stdout_lines": []}

Minha solução foi usar remote_userem vez de become. Eu também adicionei DOCKER_HOSTao bashrc do usuário.

Com as duas tarefas a seguir eu poderia ativar e iniciar podman.socket sem root.

- 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

Isso foi útil para fazer com que o docker-compose funcionasse com podman e ansible.

informação relacionada