
我正在新的 Oracle Linux 8 系統上執行 Ansible playbook。它包括一個要求 systemctl 啟動用戶 Podman 套接字的步驟,如下所示:
- 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 }}"
此 Ansible playbook 以使用者(而非 root)身分執行,以啟用和啟動使用者等級 Podman 套接字。
但是,運行劇本給了我這個錯誤:
致命:[127.0.0.1]:失敗! => {“changed”:false,“cmd”:“/bin/systemctl --user”,“msg”:“無法連接到總線:沒有這樣的檔案或目錄”,“rc”:1,“stderr” : "無法連線到匯流排:沒有這樣的檔案或目錄\n", "stderr_lines": ["無法連線到匯流排:沒有這樣的檔案或目錄"], "stdout": "", "stdout_lines": [] }
如果我不使用 Ansible,而是手動執行以下 systemctl 命令,則使用者 Podman 套接字將成功啟動:
systemctl --user enable podman.socket
我的劇本中缺少什麼以及如何解決?謝謝!
答案1
我遇到了類似的問題,我無法讓 ansible 模組為非 root 使用者啟用和啟動 podman.socket,但systemctl --user enable podman.socket
在使用 ssh 以使用者身分登入時可以執行命令 ( )。
我收到的錯誤訊息是:
致命:[x]:失敗! => {“changed”:false,“cmd”:“/usr/bin/systemctl --user”,“msg”:“無法連接到總線:不允許操作”,“rc”:1,“stderr” : "無法連接到匯流排:不允許操作\n", "stderr_lines": ["無法連接到匯流排:不允許操作"], "stdout": "", "stdout_lines": []}
我的解決方案是使用remote_user
而不是become
.我還將其添加DOCKER_HOST
到用戶的 bashrc 中。
透過以下兩個任務,我可以無根啟用並啟動 podman.socket。
- 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
這對於讓 docker-compose 與 podman 和 ansible 一起工作很有幫助。