在Ansible中,Puppet高pipe的所有者是什么?

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相同的用户。