Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于EC2标记组合的Ansible选择主机_Ansible_Ansible Inventory - Fatal编程技术网

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

基于EC2标记组合的Ansible选择主机,ansible,ansible-inventory,Ansible,Ansible Inventory,我有2个VPC,每个VPC都有一个VPN实例,我想分享它的配置。两个实例都有一个class标记,其值现在是vpn\u dev,但是,它们应该因environment标记而有所不同-一个实例有environment:default,另一个实例有environment:london 我也有2个剧本,每个VPC一个。我想根据类和环境标记的组合,在其中一个实例上运行我的vpn角色,即选择具有类:vpn\u dev和环境:伦敦的实例。例如 -名称:在AWS中部署开发者VPN 主持人: -tag_class

我有2个VPC,每个VPC都有一个VPN实例,我想分享它的配置。两个实例都有一个
class
标记,其值现在是
vpn\u dev
,但是,它们应该因
environment
标记而有所不同-一个实例有
environment:default
,另一个实例有
environment:london

我也有2个剧本,每个VPC一个。我想根据
环境
标记的组合,在其中一个实例上运行我的
vpn
角色,即选择具有
类:vpn\u dev
环境:伦敦
的实例。例如

-名称:在AWS中部署开发者VPN
主持人:
-tag_class_vpn_dev
-tag_环境_伦敦
角色:
-虚拟专用网
但是,这当然会在所有具有
class:vpn\u dev
(不考虑
environment
)、的实例(不考虑
class
)上安装角色


有没有办法做到这一点?目前看来,唯一的方法是使用一个标记来唯一地标识实例。

默认情况下,playbook中的主机列表是OR操作。您可以使用以下语法使用和切换到主机组:

- hosts:
    - tag_class_vpn_dev:&tag_environment_london

关于主机模式的更多信息

对于每个标记组合,可以对一个主机应用一些ansible角色,尽管我不推荐这样做,因为这种方法不是幂等的

此场景可能存在的风险之一是,当您重新运行此playbook时,为某些标记组合选择的主机可能与以前的运行不同,因此每个唯一的标记组合组将有两个实例


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

像hosts这样的模板化变量:{{VAR1}{{{VAR2}}