【发布时间】: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