我们可以 运行 使用单个 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 控制器节点的上述要求。
我知道可以 运行 为每个模块一个接一个地执行多个临时命令并使用 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 控制器节点的上述要求。