Назад | Перейти на главную страницу

Что эквивалентно владельцу Puppet exec в Ansible?

Версия 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 и действительно работайте как тот же пользователь, что и веб-скрипты.