6

我知道可以为每个模块一个接一个地运行多个临时命令并使用剧本。

剧本:


- 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 执行上述操作。有可能这样做吗?

4

3 回答 3

9

不,这是不可能的。

ansiblecommand 仅接受单个模块及其参数的一组参数。

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

于 2017-06-07T02:09:33.703 回答
2

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

于 2020-06-24T19:50:40.067 回答
-2

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

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

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

于 2020-06-28T19:48:11.847 回答