Ansible select 基于 EC2 标签组合的主机

Ansible select host based on combination of EC2 tags

我有2个VPC,每个VPC都有一个VPN实例,我想分享一下它的配置。两个实例都有一个 class 标签,其值现在是 vpn_dev,但是,它们应该因 environment 标签而不同——一个是 environment: default,另一个是 [=16] =].

我还有 2 个剧本,每个 VPC 一个。我想根据 classenvironment 标签的组合 运行 我的 vpn 角色恰好在其中一个实例上,即 select 实例有 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(不考虑 class)。

有办法实现吗?目前看来,唯一的方法是使用 单个 标记 唯一地 标识一个实例。

playbook中的主机列表默认是OR操作。您可以通过以下语法使用 AND 来主持群组:

- hosts:
    - tag_class_vpn_dev:&tag_environment_london

有关主机模式的更多信息here

可以为每个标签组合将一些 ansible 角色应用到一台主机,但我不推荐这样做,因为恕我直言,这种方法不是幂等的。

这种情况的一个可能风险是,当您重新 运行 这个剧本时,为某些标签组合选择的主机可能与以前的 运行 不同,因此您最终会每个此唯一标签组合组有两个实例。

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