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方式运行。
题
如何在Ansible中将sudo -u www-data /usr/local/lib/npm/bin/gulp gulp翻译成它在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
Henrik Pingel对于某些系统的限制也是正确的,因为www-data在大多数系统上并不是完整的用户。
但是,如果sudo手动工作,您可以尝试在清单中的ansible_become_methodvariables中指定一个主机应该使用哪个方法成为另一个用户:
ansible_become_method=sudo
要么
ansible_become_method=su
也许这可能足够你的具体系统,而不是从Henrik的评论链接中引用一些更复杂的spteps。 如果不是,那么我没有看到任何方式,或者甚至可能创build另一个新用户,并重新configuration您的Web服务器/ Web脚本解释器使用这个新的完整用户,而不是万维网数据,这是我一直在做的,以便能够通过sshlogin,并真正作为webscripts相同的用户。