Ansible group_vars

时间:2016-02-08 01:00:40

标签: ansible ansible-playbook

我试图自动将感知检查部署到主持人扮演的每个角色。

我目前有一个类似

的结构
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'组)

2 个答案:

答案 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

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