
Я запускаю Ansible playbook на новой системе Oracle Linux 8. Он включает шаг, на котором 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 запускается от имени пользователя (не root) для включения и запуска сокета Podman на уровне пользователя.
Однако при запуске сценария у меня возникла следующая ошибка:
fatal: [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 включить и запустить podman.socket для пользователя без прав root, но я смог выполнить команду ( systemctl --user enable podman.socket
) при использовании ssh для входа в систему как пользователь.
Я получил следующее сообщение об ошибке:
fatal: [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 без прав 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
Это помогло заставить docker-compose работать с podman и ansible.