Ansible 中 Puppet exec 的所有者相当于什么?

Ansible 中 Puppet exec 的所有者相当于什么?

Ansible 版本

user@server:/home$ ansible --version
ansible 2.1.1.0

在 Puppet 中:

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

在 ansible 中使用,结果是:

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 中运行时结果相同?

答案1

我认为你需要设置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

答案2

你没有说你使用的是哪个版本的 Ansible。在 2.x 中你可以执行以下操作:

- name: run gulp
  remote_user: www-data
  command: /usr/local/lib/npm/bin/gulp

答案3

Henrik Pingel 对某些系统的局限性的暗示也是正确的,因为 www-data 在大多数系统上并不是一个完整用户。

但是如果 sudo 手动工作,您可以尝试在清单中主机的 ansible_become_method 变量中指定 ansible 应使用哪种方法成为另一个用户:

ansible_become_method=sudo

或者

ansible_become_method=su

也许这对您的特定系统来说已经足够了,而不需要 Henrik 评论中的链接中提到的一些更复杂的步骤。但是,如果不够,那么我看不出有任何解决方法,或者甚至可能创建另一个新用户并重新配置您的 Web 服务器/Web 脚本解释器以使用这个新的完整用户而不是 www-data,这就是我一直在做的事情,以便能够通过 ssh 登录并真正以与 Web 脚本相同的用户身份工作。

相关内容