基于EC2标签组合的Ansible选择主机

时间:2018-07-19 08:57:10

标签: ansible ansible-inventory

我有2个VPC,每个VPC都有一个VPN实例,我想共享其配置。这两个实例都有一个class标记,其值现在为vpn_dev,但是,它们之间的区别应该是environment标记-一个标记为environment: default,另一个标记为{{1 }}。

我还有2本剧本,每个VPC都有1本。我想根据environment: londonvpn标签的组合,在其中一个实例上完全运行class角色,即选择具有environment class: vpn_dev。例如

environment: london

但是,这当然会在所有具有- name: Deploy developer VPN in AWS hosts: - tag_class_vpn_dev - tag_environment_london roles: - vpn 的实例(无论class: vpn_dev)上安装角色,在所有具有environment的实例上 (与environment: london无关)。

有没有办法做到这一点?目前看来,唯一的方法似乎是拥有一个唯一标记,以唯一标识一个实例。

2 个答案:

答案 0 :(得分:0)

默认情况下,剧本中的主机列表是“或”操作。您可以使用AND来通过以下语法托管组:

- hosts:
    - tag_class_vpn_dev:&tag_environment_london

有关主机模式here

的更多信息

答案 1 :(得分:0)

虽然我不建议这样做,但是可以为每个标签组合在主机上应用一些烦人的角色,因为恕我直言,这种方法不是幂等的。

此方案可能带来的风险之一是,当您重新运行此剧本时,为某些标签组合选择的主机可能与之前的运行不同,因此,此唯一标签组合组最终将有两个实例。

我推荐的方法是使用一些标记来标记应该用作VPN角色目标的主机,然后使用ansible仅将VPN角色应用于此标记所标记的主机。