Amazon ec2 Ansible——在动态清单中使用Ec2标记中的条件
我使用的是ec2动态库存 我的所有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",
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
对象 等等。不推荐使用动态库存??还没有。但我打赌他们不会待太久。