通过切换到ansible

时间:2017-06-01 19:41:39

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

我正在使用Ansible playbook来执行我的一些任务。在我的一个任务中,我需要切换到特定目录,然后使用sudo执行命令,但我需要先切换到root用户来执行所有这些操作,否则它将无法正常工作。所以一般来说这就是我没有安心的事情:

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

2 个答案:

答案 0 :(得分:1)

您需要become directive

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

apples=3

while apples > 0:
    print("You have {} apples left".format(apples))
    action=input('Action:')
    if action.strip() == "eat":  # here is the strip that removes all leading and trailing whitespaces
        apples=apples-1
    else:
        print("invalid")

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

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

对于您的情况,它将是:

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

答案 1 :(得分:1)

来自你的评论:

  

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

SELECT B.Name FROM Business as B WHERE NOT EXISTS ( SELECT 1 FROM Payments P Where P.TaxYear = 2016 AND P.BusinessId = B.Id ) 模块可能正在用于其他命令,但在此示例中,您使用shell语法(command)来执行多个命令。此语法在&&模块中不起作用(因为此模块直接从Python运行命令,不支持组合命令)。

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

shell