Как аутентифицировать пользователя для определенных задач с помощью Ansible?

Как аутентифицировать пользователя для определенных задач с помощью Ansible?

Я получаю сообщение «сообщение: Не удалось заблокировать apt для монопольной работы» при попытке установить некоторые зависимости в плейбуке с помощью apt с пользователем vagrant. Я подозреваю, что он сообщает мне об этом, потому что не может аутентифицировать пользователя vagrant во время выполнения задачи.

Это декларация роли, которую я использую.

- name: ruby installer
  hosts: all
  sudo: True
  sudo_user: vagrant
  roles:
  - ruby

И вот эта задача не удалась:

    - name: Install ruby building dependencies
      apt: name={{ item }} 
           state=installed 
           update_cache=yes

      with_items:
      - dependency

При удалении «update_cache=yes» и повторном запуске сценария я получаю: E: Не удалось заблокировать каталог администрирования (/var/lib/dpkg/). Вы являетесь пользователем root?

Очевидно, что при запуске с правами root все работает отлично, но мне нужно запустить его под другим пользователем, отличным от root, из-за некоторых задач Ruby (специфичных для rvm, rbenv).

Как мне правильно аутентифицировать пользователя vagrant при запуске моего playbook? Может кто-нибудь указать мне правильное направление?

решение1

В итоге я пришел к такому заявлению о роли:

- name: ruby installer
  hosts: all
  sudo: True
  user: vagrant
  roles:
  - ruby

И эта задача по установке зависимостей:

- name: Install ruby building dependencies
  apt: name={{ item }} 
       state=installed 
       update_cache=yes
  sudo_user: root

  with_items:
  -dependency

Теперь он использует root для задачи apt и vagrant для других задач ruby ​​в плейбуке.

решение2

aptустанавливает пакеты системного уровня, поэтому для использования apt требуются привилегии, эквивалентные правам root.

Если вам необходимо выполнить дополнительные шаги по развертыванию приложения от имени другого пользователя, вам придется вынести эти шаги из процесса установки deb-пакета.

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