我试图自动将感知检查部署到主持人扮演的每个角色。
我目前有一个类似
的结构group_vars/
nginx
all
在每个group_vars文件中,我定义了以下内容:
sensu_checks:
- check_name
- check_other_name
例如,在group_vars /所有我都有:
sensu_checks:
- check_raid
- check_load
- check_disk
在group_vars / nginx中我有:
sensu_checks:
- check_pid
- check_http
我想知道的是,如果能够获得特定主机应安装的所有检查,例如:
- name: Print host sensu checks
command: echo {{item}}
with_flattened:
- {{ sensu_checks }}
这不起作用,因为它只给我定义了主机名的最后一组的group_vars。有没有办法让扁平列表检查主机附加到的所有组?
在上一个例子中,我期待
[ check_load, check_disk, check_raid, check_http, check_pid ]
但我得到
[ check_http, check_pid ]
对于nginx主机(属于'所有'以及' nginx'组)
答案 0 :(得分:2)
with_flattened
没有达到您的预期 - 您是variable scoping的受害者。
nginx
组是最具体的,因此可以使用该变量定义 - 这解释了为什么您只能在sensu_check
中定义nginx
。
您可以在两个位置之一重命名var(我推荐使用nginx var,因为那是最具体的一个),然后使用with_flattened
来组合这两个列表:
with_flattened:
- {{ sensu_checks }}
- {{ sensu_nginx_checks }}
答案 1 :(得分:0)
在您的问题中,对于group_vars / all
,YAML格式不正确应该看起来像:
sensu_checks:
- check_raid
- check_load
- check_disk
如果这是项目中的代码,您可能需要修复它,看看是否得到了您期望的结果。