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

Can we run multiple modules in ansible using single ad-hoc command?

我知道可以 运行 为每个模块一个接一个地执行多个临时命令并使用 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 执行上述操作。可以这样做吗?

不,不可能。

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

-m MODULE_NAME, --module-name=MODULE_NAME
module name to execute (default=command)

改用 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 一个人最终可以做到这一点。这是一个非常简洁的工具。

我们实际上可以通过 Ansible 模块和 Linux 命令使用下面的单个临时命令:

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

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