
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_user
em vez de become
. Eu também adicionei DOCKER_HOST
ao 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.