我知道可以为每个模块一个接一个地运行多个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执行。是否可以这样做?
答案 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控制器节点按照上述要求复制到其中的主机名。