Ansible - Ошибка «Нет такого файла» при активации пользовательского сокета systemctl Podman

Ansible - Ошибка «Нет такого файла» при активации пользовательского сокета systemctl Podman

Я запускаю 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.

Связанный контент