
Ich führe ein Ansible-Playbook auf einem neuen Oracle Linux 8-System aus. Es enthält einen Schritt, in dem systemctl aufgefordert wird, einen Benutzer-Podman-Socket wie folgt zu aktivieren:
- 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 }}"
Dieses Ansible-Playbook wird als Benutzer (nicht als Root) ausgeführt, um den Podman-Socket auf Benutzerebene zu aktivieren und zu starten.
Beim Ausführen des Playbooks trat jedoch dieser Fehler auf:
fatal: [127.0.0.1]: FEHLGESCHLAGEN! => {"changed": false, "cmd": "/bin/systemctl --user", "msg": "Verbindung zum Bus fehlgeschlagen: Keine solche Datei oder kein solches Verzeichnis", "rc": 1, "stderr": "Verbindung zum Bus fehlgeschlagen: Keine solche Datei oder kein solches Verzeichnis\n", "stderr_lines": ["Verbindung zum Bus fehlgeschlagen: Keine solche Datei oder kein solches Verzeichnis"], "stdout": "", "stdout_lines": []}
Wenn ich statt Ansible den folgenden systemctl-Befehl manuell ausführe, wird der Benutzer-Podman-Socket erfolgreich aktiviert:
systemctl --user enable podman.socket
Was fehlt mir in meinem Playbook und wie behebe ich das? Danke!
Antwort1
Ich bin auf ein ähnliches Problem gestoßen: Ich konnte das Ansible-Modul nicht dazu bringen, podman.socket für den Nicht-Root-Benutzer zu aktivieren und zu starten, aber ich konnte den Befehl ( systemctl --user enable podman.socket
) ausführen, wenn ich mich per SSH als dieser Benutzer anmeldete.
Die Fehlermeldung, die ich bekam, war:
fatal: [x]: FEHLGESCHLAGEN! => {"changed": false, "cmd": "/usr/bin/systemctl --user", "msg": "Verbindung zum Bus fehlgeschlagen: Vorgang nicht zulässig", "rc": 1, "stderr": "Verbindung zum Bus fehlgeschlagen: Vorgang nicht zulässig\n", "stderr_lines": ["Verbindung zum Bus fehlgeschlagen: Vorgang nicht zulässig"], "stdout": "", "stdout_lines": []}
remote_user
Meine Lösung bestand darin, anstelle von zu verwenden become
. Außerdem habe ich DOCKER_HOST
zur bashrc des Benutzers hinzugefügt.
Mit den folgenden beiden Aufgaben konnte ich podman.socket rootless aktivieren und starten.
- 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
Dies war hilfreich, um Docker-Compose mit Podman und Ansible zum Laufen zu bringen.