Ansible群

Ansible群,ansible,ansible-playbook,Ansible,Ansible Playbook,我正在尝试将sensu检查自动部署到主机扮演的每个角色 我现在的结构是 group_vars/ nginx all 在每个group_vars文件中,我定义了以下内容: sensu_checks: - check_name - check_other_name 例如,在组_vars/我所有的: sensu_checks: - check_raid - check_load - check_disk sensu_checks: - check_pid - ch

我正在尝试将sensu检查自动部署到主机扮演的每个角色

我现在的结构是

group_vars/
  nginx
  all
在每个group_vars文件中,我定义了以下内容:

sensu_checks:
  - check_name
  - check_other_name
例如,在组_vars/我所有的:

sensu_checks:
  - check_raid
  - check_load
  - check_disk
sensu_checks:
 - check_pid
 - check_http
在组_vars/nginx中,我有:

sensu_checks:
  - check_raid
  - check_load
  - check_disk
sensu_checks:
 - check_pid
 - check_http
我想知道的是,是否可能获得特定主机应安装的所有检查,例如:

- name: Print host sensu checks
  command: echo {{item}}
  with_flattened:
   - {{ sensu_checks }}
但这不起作用,因为它只给我定义主机名的最后一个组的组变量。是否有一种方法可以获得一个扁平列表,其中包含主机所连接的所有组的检查

在前面的示例中,我希望

 [ check_load, check_disk, check_raid, check_http, check_pid ] 
但是相反,我得到了

[ check_http, check_pid ]

对于nginx主机(同时属于'all'和'nginx'组)

在您的问题中,组变量/all的YAML格式不正确

它应该是这样的:

sensu_checks:
  - check_raid
  - check_load
  - check_disk

如果这是您项目中的代码,您可能需要修复它,并查看是否得到了预期的结果。

与_flatted
在这种情况下并没有达到预期的效果-您是问题的受害者

nginx
组是最具体的,因此ansible使用该变量定义-这解释了为什么您只得到
nginx
中定义的
sensu\u检查

您可以在两个位置中的一个位置重命名变量(我建议使用nginx变量,因为这是最具体的一个),然后使用
和\u flatten
组合两个列表:

将_展平:
-{{sensu_checks}}
-{{sensu_nginx_checks}

我的错,YAML的分数是正确的,我编辑了这篇文章。如果我从nginx组中删除特定主机,那么我确实会从所有主机中获取vars,但我很难从主机的所有组中获取检查,而不仅仅是上一次定义的组