Ansible群
我正在尝试将sensu检查自动部署到主机扮演的每个角色 我现在的结构是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
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,但我很难从主机的所有组中获取检查,而不仅仅是上一次定义的组