Amazon ec2 Ansible——在动态清单中使用Ec2标记中的条件

Amazon ec2 Ansible——在动态清单中使用Ec2标记中的条件,amazon-ec2,ansible,ansible-inventory,Amazon Ec2,Ansible,Ansible Inventory,我使用的是ec2动态库存 我的所有ec2实例都使用它们的环境进行标记。例如tag:env=prod或tag:env=test 因此我的动态库存变量设置正确…. "ec2": [ "ip_10_1_1_1_ec2_internal", "ip_10_1_1_2_ec2_internal", "ip_10_1_1_3_ec2_internal", "ip_10_1_1_4_ec2_internal", "ip_10_1_1_5_ec2_internal",

我使用的是ec2动态库存

我的所有ec2实例都使用它们的环境进行标记。例如
tag:env=prod
tag:env=test

因此我的动态库存变量设置正确….

  "ec2": [
    "ip_10_1_1_1_ec2_internal",
    "ip_10_1_1_2_ec2_internal",
    "ip_10_1_1_3_ec2_internal",
    "ip_10_1_1_4_ec2_internal",
    "ip_10_1_1_5_ec2_internal",
    "ip_10_1_1_6_ec2_internal",
    "ip_10_1_1_7_ec2_internal"
  ],

...

  "tag_env_mgmt": [
    "ip_10_1_1_7_ec2_internal",
    "ip_10_1_1_6_c2_internal",
    "ip_10_1_1_5_ec2_internal"
  ],
  "tag_env_prod": [
    "ip_10_1_1_2_ec2_internal",
    "ip_10_1_1_1_ec2_internal"
  ],
  "tag_env_stage": [
    "ip_10_1_1_3_ec2_internal",
    "ip_10_1_1_4_ec2_internal"
  ],
现在我想基于某些标记设置条件这里是我想要使用的剧本条件类型,仅当标记为“stage”时才添加用户:

---
- hosts: ec2
  vars:
    users:
    - user1
    - user2
  tasks:
  - name: "Create user accounts and add users to groups"
    user:
      name: "{{ item }}"
      groups: "sudo"
    with_items: "{{ users }}"
    when: tag_env_stage is defined
我也这样试过:

  - name: "Create user accounts and add users to groups"
    user:
      name: "{{ item }}"
      groups: "sudo"
    with_items: "{{ users }}"
    when: tag_env_stage
这是:

  - name: "Create user accounts and add users to groups"
    user:
      name: "{{ item }}"
      groups: "sudo"
    with_items: "{{ users }}"
    when: tag_env == stage
这出戏没有上演。我得到的错误大致如下:

计算条件(标记环境阶段)时出错:

我检查了文件,没有看到任何东西突出在我面前

()


()

tag_env_prod
tag_env_stage
是示例中的组名

您可以使用:

when: ('tag_env_stage' in group_names)
when: tags['env'] == 'stage'
但这有点难看。我建议使用支持清单插件的现代Ansible版本(而不是传统的动态清单)。如果您的清单是使用
aws_ec2
插件生成的,则您可以直接访问
标签
变量。因此,您可以使用:

when: ('tag_env_stage' in group_names)
when: tags['env'] == 'stage'

设法使其使用以下语法

when:hostvars[inventory\u hostname].ec2\u tag\u env==“stage”


正如另一个答案所提到的,我试图使用
group\u名称
,它们实际上不是实例本身的标识符@Konstantin的回答提供了如何处理
组名
,因此我需要使用动态资源清册中的
hostvars
对象

等等。不推荐使用动态库存??还没有。但我打赌他们不会待太久。