Ansible 在导入的任务中的不同主机上运行任务

Ansible 在导入的任务中的不同主机上运行任务,ansible,Ansible,呼叫剧本包括: - hosts: ssh_servers tasks: - import_tasks: create_files.yml 然后,在create_files.yml中,我想在ssh_服务器以外的主机上运行一些任务,例如: - Hosts: other_servers tasks: - file: 我得到:错误!冲突的操作语句:主机、任务 这是因为我试图运行的主机从未包含在调用任务中吗? 除了在呼叫手册中,是否有其他方法可以实现这一点: - hosts:

呼叫剧本包括:

- hosts: ssh_servers
  tasks:
  - import_tasks: create_files.yml
然后,在create_files.yml中,我想在ssh_服务器以外的主机上运行一些任务,例如:

- Hosts: other_servers
  tasks:
  - file:
我得到:错误!冲突的操作语句:主机、任务

这是因为我试图运行的主机从未包含在调用任务中吗? 除了在呼叫手册中,是否有其他方法可以实现这一点:

- hosts: 
   - ssh_servers
   - other_servers
  tasks:
  - import_tasks: create_files.yml
多谢各位

这是因为我试图运行的主机从未包含在调用任务中吗?除了在呼叫手册中,还有其他方法可以实现这一点吗

我相信答案是肯定的,尽管这会很奇怪,并且可能会导致后来与你的剧本互动的人产生一些困惑

假设
create_files.yml
为:

-name:create/tmp/hello\u主机上的世界“启动时未知”
文件:
路径:/tmp/hello\u world
国家:现在
委托给:“{{item}”
有以下项:“{groups[“not_known_at_launch_time”]}”
然后把它们连接起来所需要的胶水就是

-主机:ssh\u主机
任务:
-添加\u主机:
组:启动时未知
名称:secret-host-0
ansible#u主机:192.168.1.1#或其他
# ... 这里的其他旅舍。。。
-包括任务:创建文件.yml
可以通过一些共享的
vars:
create_files.yml
中的那些文件组合在一起,这些vars:说明应将哪个主机和ip添加到魔法组名,这也有利于将魔法组名本地化到使用它的文件中

请注意,我确实测试了这个,但没有进行广泛的测试,因此可能会有一些奇怪的事情,比如需要在它们上运行一次
:是的
,以防止任务被运行
组。ssh\u主机| length
次或类似的东西

正如弗拉基米尔正确指出的那样,你真正想要的是使这种关系正式化:

-主机:ssh\u主机
任务:
... 不管你以前有什么任务
-添加\u主机:。。。和以前一样。。。
-主持人:匿名组名在这里
任务:
-包括任务:创建文件.yml
-主机:ssh\u主机
任务:
-调试:
msg:现在你又回到ssh_主机上,来了解当你停止发布时他们应该做什么

无法嵌套。用例是什么?我担心这是真的,我想当时Ansible的要求太多了。当我把它当作自己的剧本运行时,我开始怀疑。。递归将使复杂性呈指数级。谢谢,这是有意义的。我同意这通常不是一个好主意,我宁愿尝试其他风险较小的解决方案。这更像是对我这一方的绝望尝试,我可能应该避免这样做。