Ansible 使用名称启动EC2实例

Ansible 使用名称启动EC2实例,ansible,Ansible,我有一个可以启动n个EC2实例的剧本。启动时,它会用Env:{{{Env}}和ManagedBy:Ansible标记它们,但我还想添加一个具有某种意义的名称。对我来说,这通常是一种类似-的格式(例如dev-web02或prd-db01) 如果可能的话,我真的很想为我做这件事 目前,我已经构建了我的playbook,以便使用ec2模块验证{{{exact\u count}}}实例是否存在。然后,使用ec2_标签模块为创建的实例提供一个名称标签: - name: Instances | Tag ea

我有一个可以启动n个EC2实例的剧本。启动时,它会用
Env:{{{Env}}
ManagedBy:Ansible
标记它们,但我还想添加一个具有某种意义的名称。对我来说,这通常是一种类似
-
的格式(例如
dev-web02
prd-db01

如果可能的话,我真的很想为我做这件事

目前,我已经构建了我的playbook,以便使用
ec2
模块验证
{{{exact\u count}}}
实例是否存在。然后,使用
ec2_标签
模块为创建的实例提供一个名称标签:

- name: Instances | Tag each new instance with a name
  ec2_tag:
    aws_access_key: "{{ awscli.access_key }}"
    aws_secret_key: "{{ awscli.secret_key }}"
    region: "{{ aws.region }}"
    resource: "{{ item.1.id }}"
    state: present
    tags:
      Name: "{{ env_short }}-{{ 'ws%02d' | format(item.0) }}"
  with_indexed_items: webservers.instances
这是它第一次运行,效果非常好。问题是,它并不是在我的所有实例中迭代,而是只在运行playbook期间创建的那些实例中迭代

有没有更好的方法来做到这一点,使新实例能够检测序列并继续它,以便在第二次运行时,例如,在我将
{{exact_count}}
从1更改为2后,通过第二次运行创建的服务器将获得
Name
dev-ws02


对Ansible的要求可能很多,我没有找到答案可能有一个很好的理由,但有时你会感到惊喜,所以我想我会问。

根据经验,我发现使用
标记的\u实例
属性似乎是可行的。该值似乎包含与标记匹配的每个服务器,而不仅仅是刚刚创建的任何服务器。目前,我不记得
ec2_标签
模块是否仅仅不会覆盖一个已经存在的标签,或者是否更新了现有的标签,但最终结果似乎是按照我希望的方式进行的

以下是我更新的任务:

- name: Instances | Tag each new instance with a name
  ec2_tag:
    aws_access_key: "{{ awscli.access_key }}"
    aws_secret_key: "{{ awscli.secret_key }}"
    region: "{{ aws.region }}"
    resource: "{{ item.1.id }}"
    state: present
    tags:
      # e.g. dev-web03, prd-anz01
      Name: "{{ env_short }}-{{ server_type_abbrev }}{{ '%02d' | format(item.0) }}"
  with_indexed_items: ec2.tagged_instances