根据主机变量值定位 Playbook 主机

问题描述 投票:0回答:1

我有一个 Ansible 清单

inventory.ini
,结构如下(示例中缩写):

[prod:children]
prod_first_plateform

[prod_first_plateform:children]
database_prod_first_plateform
embedded_prod_first_plateform
ldap_prod_first_plateform
proxy_prod_first_plateform

[database_prod_first_plateform]
serverA team=developer
serverZ team=integrator

[embedded_prod_first_plateform]
serverB team=integrator
serverY team=integrator

[ldap_prod_first_plateform]
serverC team=developer
serverX team=integrator

[proxy_prod_first_plateform]
serverD team=developer
serverW team=developer

要求如下:

我想在不同的环境中使用这个库存:

  • 针对我的所有服务器(使用
    hosts: all
  • 针对特定平台(在本例中使用
    hosts: prod_first_plateform
  • 定位属于特定团队的计算机(取决于
    team
    主机变量,同时遵守此清单语法,而不添加新的主机组。

我的问题在于第三点。

我的想法是使用在我的剧本中适用的语法,例如

hosts: all[team=developer]

我知道这种语法不起作用,但我尝试找到一种正确的方法来实现这一目标。

目前这个库存可以实现吗?

ansible ansible-inventory
1个回答
0
投票

您可以在初步游戏中使用

group_by
模块,以便根据变量创建自己的组。

鉴于:

- hosts: all
  gather_facts: false

  tasks:
    - group_by:
        key: "hosts_of_team_{{ team }}"
      when: team is defined

- hosts: hosts_of_team_developer
  gather_facts: false

  tasks:
    - debug:
        var: ansible_play_hosts
      run_once: true

在你的库存上运行它,第二次玩会产生:

ok: [serverA] => 
  ansible_play_hosts:
  - serverA
  - serverC
  - serverD
  - serverW

正如预期的那样,因为当变量

team
通过
developer
等于
hosts: hosts_of_team_developer
时,我们就以主机为目标。

© www.soinside.com 2019 - 2024. All rights reserved.