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 一个。我想根据 class
和 environment
标签的组合 运行 我的 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 角色仅应用于此标签标记的主机。
我有2个VPC,每个VPC都有一个VPN实例,我想分享一下它的配置。两个实例都有一个 class
标签,其值现在是 vpn_dev
,但是,它们应该因 environment
标签而不同——一个是 environment: default
,另一个是 [=16] =].
我还有 2 个剧本,每个 VPC 一个。我想根据 class
和 environment
标签的组合 运行 我的 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 角色仅应用于此标签标记的主机。