我们可以使用单个ad-hoc命令在ansible中运行多个模块吗?

时间:2017-06-06 15:56:01

标签: ansible ansible-ad-hoc

我知道可以为每个模块一个接一个地运行多个adhoc命令并使用playbook。

剧本:

- hosts: webservers
  tasks:
   - name: create .ssh dir
     file: path ~/.ssh state=directory
   - name: copy pub key
     copy: src:~/.ssh/id.rsa_pub dest=~/.ssh/authorized_keys

我希望以上内容在一行中使用adhoc执行。是否可以这样做?

3 个答案:

答案 0 :(得分:3)

不,这是不可能的。

ansible命令仅接受单个模块及其参数的一组参数。

  

-m MODULE_NAME, --module-name=MODULE_NAME
  要执行的模块名称(默认= command

答案 1 :(得分:0)

改为使用ansible-console和heredoc:

ansible-console <<<"cd webservers"$'\n'"setup"$'\n'"file path=~/.ssh state=directory"$'\n'"copy src=~/.ssh/id.rsa_pub dest=~/.ssh/authorized_keys"

从技术上讲,这是一行的黑客,但没有错误处理。 而且非常不可读。

ansible-console最终可以解决问题。这是一个非常简洁的工具。

答案 2 :(得分:0)

我们实际上可以通过Ansible模块和Linux命令使用以下单个ad-hoc命令:

ansible clientvm -m shell -a "mkdir ~/.ssh" && scp ~/.ssh/id_rsa.pub root@clientvm:~/.ssh/authorized_keys

在上面的命令中,clientvm是我们在其中创建目录并将文件从Ansible控制器节点按照上述要求复制到其中的主机名。