我正在使用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
答案 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