3

我正在编写 Ansible 剧本来执行我的一些任务。在我的一项任务中,我需要切换到特定目录,然后使用 sudo 执行命令,但我需要先切换到 root 用户来完成所有这些事情,否则它将无法工作。所以总的来说,这就是我在没有 ansible 的情况下所做的:

david@machineA:/tmp/parallel-20140422$ sudo su
root@machineA:/tmp/parallel-20140422# sudo ./configure && make && make install

完成上述步骤后,我看到 GNU 并行库已正确安装在我的系统中。但是通过使用 Ansible 的以下步骤,我根本没有看到我的 GNU 库被安装。

- name: install gnu parallel
  command: chdir=/tmp/parallel-20140422 sudo ./configure && make && make install

现在我的问题是如何切换到 root 用户并执行特定命令。我正在运行 Ansible 1.5.4,看起来我无法升级。我什至尝试了以下方法,但仍然无法正常工作:

- name: install gnu parallel
  command: chdir=/tmp/parallel-20140422 sudo ./configure && make && make install
  sudo: true
  sudo_user: root

我正在使用以下命令运行我的剧本:

ansible-playbook -e 'host_key_checking=False' setup.yml -u david --ask-pass --sudo -U root --ask-sudo-pass
4

2 回答 2

3

你需要become指令

例如,以 root 身份启动服务:

- name: Ensure the httpd service is running
  service:
    name: httpd
    state: started
  become: true

你也可以成为另一个用户,比如apache用户:

- name: Run a command as the apache user
  command: somecommand
  become: true
  become_user: apache

对于您的情况,它将是:

- name: install gnu parallel
  command: chdir=/tmp/parallel-20140422 sudo ./configure && make && make install
  become: true
于 2017-06-07T20:34:01.557 回答
1

从您的评论中:

我知道命令模块工作正常,因为我验证了其他任务并且它们工作正常。

command模块可能适用于其他命令,但在此示例中,您使用 shell 语法 ( &&) 来执行多个命令。此语法在模块中不起作用command(因为此模块直接从 Python 运行命令并且不支持组合命令)。

在这种情况下,您需要使用该shell模块。

- name: install gnu parallel 
  shell: ./configure && make && make install
  args:
    chdir=/tmp/parallel-20140422
  sudo: true
  sudo_user: root
于 2017-06-08T00:48:24.857 回答