Версия Ansible
user@server:/home$ ansible --version
ansible 2.1.1.0
В марионетке:
exec { 'run gulp as www-data':
command => '/usr/local/lib/npm/bin/gulp'
cwd => '/var/www'
user => 'www-data'
}
и это тоже работает:
sudo -u www-data /usr/local/lib/npm/bin/gulp
но когда
- command: /usr/local/lib/npm/bin/gulp
args:
chdir: "{{ project_dir }}"
become: www-data
используется в анзибле, это приводит к:
FAILED! => {"changed": true, "cmd": ["/usr/local/lib/npm/bin/gulp"],
"delta": "0:00:00.631959", "end": "2016-09-15 09:57:41.167507", ...
Если
- command: /usr/local/lib/npm/bin/gulp
args:
chdir: "{{ project_dir }}"
запускается команда gulp выполняется от имени пользователя root, в то время как она должна запускаться как www-data
.
Вопрос
Как должен sudo -u www-data /usr/local/lib/npm/bin/gulp
быть переведенным в Ansible, чтобы результат был одинаковым при запуске в Puppet и в Bash?
Я думаю тебе нужно установить become_user
:
- name: run gulp
command: /usr/local/lib/npm/bin/gulp
args:
chdir: "{{ project_dir }}"
become: True
become_user: www-data
Взгляните на пример в документация:
- name: Run a command as the apache user
command: somecommand
become: true
become_user: apache
вы не сказали, какую версию Ansible используете. В 2.x вы можете:
- name: run gulp
remote_user: www-data
command: /usr/local/lib/npm/bin/gulp
Хенрик Пингель также прав, намекнув на ограничения некоторых систем, поскольку www-data не является полноценным пользователем в большинстве систем.
Но если sudo работает вручную, вы можете попробовать указать в переменной ansible_become_method для хоста в инвентаре, какой метод должен использовать ansible, чтобы стать другим пользователем:
ansible_become_method=sudo
или
ansible_become_method=su
Возможно, этого может быть достаточно для вашей конкретной системы, вместо некоторых более сложных шагов, упомянутых в ссылке из комментария Хенрика. Однако, если нет, то я не вижу никакого способа обойти это или, возможно, даже создать других новых пользователей и перенастроить ваш веб-сервер / интерпретатор веб-скриптов для использования этого нового полного пользователя вместо www-данных, это то, что я делал, чтобы иметь возможность войдите через ssh и действительно работайте как тот же пользователь, что и веб-скрипты.