Ansible:为所有主机运行某些yaml任务文件

Ansible:为所有主机运行某些yaml任务文件,ansible,Ansible,我尝试为所有主机运行某些yaml任务文件,如下所示(main.yml): node.yml: - block: - name: Task 1... ... - name: Task 100... delegate_to: "{{ node }}" 但是,我遇到了以下错误:包含任务的选项无效:节点。我想它以前是这样工作的。无论如何,我尝试将循环从main.yml移动到node.yml(就在委托_到之后)。我还尝试跳过node=“{{item}

我尝试为所有主机运行某些yaml任务文件,如下所示(main.yml):

node.yml:

- block:
    - name: Task 1...

    ...

    - name: Task 100...

  delegate_to: "{{ node }}"
但是,我遇到了以下错误:
包含任务的选项无效:节点
。我想它以前是这样工作的。无论如何,我尝试将
循环
从main.yml移动到node.yml(就在
委托_到
之后)。我还尝试跳过
node=“{{item}}”
part。但我总是犯错误


将任务文件应用于角色中的多个主机的正确方法是什么?

在指定的主机上运行一个播放。当时,可以使用
在节点子集上运行某些任务

但是你可以在一个剧本中有多个剧本。因此,您需要指定一个播放
hosts:all
的游戏,在其中运行要在任何地方运行的任务,另一个游戏运行其余任务。
您的剧本可能如下所示:

---
#这是一部戏剧
-名称:在所有服务器上运行
主持人:全部
变量:
somevar:“测试”
任务:
-名称:准备节点
包含_任务:node.yml
#这是另一出戏
-名称:运行组
主持人:主机组
变量:
somevar:“示例”
任务:
-调试:
msg:'这在主机组中的所有主机上运行'
#两个剧本都在同一本剧本中

如果将
节点
变量放在
vars
下,然后循环,它应该可以工作

- name: include tasks
  include_tasks: node.yml
  vars:
    node: '{{ item }}'
  loop: "{{ groups['all'] }}" 

以上代码正在运行。

谢谢!我需要这包括成为某个角色的一部分,而不是一个单独的角色。。。这就是为什么我有一个main.yml和node.yml…我不会那样做。如果其他人使用您的角色,该人不会期望它在比他们实际期望的更多的主机上运行。这可能会导致以后的混乱和错误。@toydarian:说得好。我会在角色描述中提到这个事实。在这种特殊情况下,它是一个“监视”角色,应该监视所有可用的节点。但在一般情况下,你是正确的。
- name: include tasks
  include_tasks: node.yml
  vars:
    node: '{{ item }}'
  loop: "{{ groups['all'] }}"