【问题标题】:execute a command by switching to root user in ansible在ansible中切换到root用户执行命令
【发布时间】:2017-06-01 19:41:38
【问题描述】:

我正在编写 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

【问题讨论】:

  • 我不确定 1.5.4 但在 Ansible 2.x 中,当你想执行任意 shell 表达式时,你应该使用 shell 模块而不是 command。还有为什么要在root账号下使用sudo,你已经拥有最大权限了?
  • 是的,如果我已经切换到 root,则使用 sudo 是正确的。如果我已经切换到 root 用户,我可以将该部分更改为不再使用 sudo。
  • 我知道命令模块工作正常,因为我验证了其他任务并且它们工作正常。不知何故,这个任务的问题是我需要切换到 root 用户,然后只执行该命令。而且我不确定如何使用 ansible 来做到这一点。

标签: linux ubuntu unix ansible ansible-1.x


【解决方案1】:

您需要become directive

例如,以 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

【讨论】:

  • 我相信在 ansible 1.5.4 中没有变成?对?我无法升级看起来像
【解决方案2】:

来自您的评论:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-07-07
    • 2023-04-05
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    相关资源
    最近更新 更多