Я пытаюсь реализовать в Ansible (v1.9.1) следующий сценарий:
su
стать root
.git add ...
.git commit ...
и соответствующее сообщение фиксации.Теперь (1) полностью поддерживается, так как v1.9.0.1 и (2) очень легко сделать с помощью модуль выборки - по умолчанию он даже хранит файлы в подкаталоге, зависящем от хоста.
Однако мне не удалось выяснить (3) и (4). В идеале я бы хотел, чтобы Ansible просто выполнял локальную команду от имени пользователя, который ее запустил. я мог создайте сценарий оболочки оболочки для этого, но это кажется совершенно противоположным способу работы Ansible.
В большинстве сообщений в Интернете предлагается использовать local_action
модуль. local_action
Однако, похоже, для моей цели это совершенно излишне - он пытается получить доступ к хосту с надлежащим повышением привилегий. В результате не получается:
фатальный: [host00 -> 127.0.0.1] => Внутренняя ошибка: этот модуль не поддерживает выполнение команд через su
Вот как сейчас выглядит мой обработчик:
- name: stage-archive-file
become: false
su: false
local_action: command git -C {{ playbook_dir }} add storage/archive
notify: commit-archive-file
local_action
похоже, полностью игнорирует мои попытки сделать это не использовать su
, хотя я не уверен, связано ли это с этим конкретным модулем или с su
метод в целом.
Есть ли более простой способ просто выполнить команду из доступного процесса? Как вариант можно как-то получить local_action
работать?
Кажется, есть связанная проблема с Ansible это может мешать local_action
от правильной работы в этом случае. По-видимому local_action
и delegate_to
сохранить некоторые настройки подключения из «родительской» задачи, даже если они полностью недопустимы для делегированного хоста.
Хотя я ожидаю, что основная причина Эта проблема будет исправлена в будущей версии Ansible, я выкатил собственное решение. По сути, я модифицировал / взломал урезанный плагин подключения для Ansible, который просто выполняет команду на хосте. Процесс был следующим:
В каталоге playbook создайте подкаталог с именем connection_plugins
.
Скопируйте local.py
подключаемый модуль из установки Ansible (например, /usr/lib/python2.7/site-packages/ansible/runner/connection_plugins/local.py
) во вновь созданный подкаталог с другим именем, например execute.py
.
редактировать connection_plugins/execute.py
и удалите разделы кода, относящиеся к методам повышения привилегий.
Добавить запись для localhost
в файле инвентаря с параметром ansible_connection=execute
.
Последний шаг нужно будет изменить, если local_action
действительно, следует использовать метод повышения привилегий для некоторых задач. В этом случае можно оставить запись на localhost
(если есть) без изменений, определите другой псевдоним с execute
тип подключения, а затем используйте delegate_to:
вместо того local_action:
в определениях задач.