如何使用ansible脚本创建带有序号的Count标签名称

时间:2017-10-21 16:07:34

标签: amazon-web-services amazon-ec2

我使用 exact_count 标记为2创建2个Windows aws 计算机。

它创建具有相同名称的2台AWS机器。

例如:

1)itg-Web-windows

2)itg-web-windows

我想将机器名称创建为 instance_tags

1)itg-windows-web-1

2)ITG-Windows的Web-2

以下是我的代码:

name: ensure instances are running
        ec2:
          region: "{{ region }}"
          image: "{{ image_id }}"
          group_id: sg-1234
          vpc_subnet_id: subnet-5678
          instance_tags:
             Name: "itg-windows-web"
          exact_count: 2
          count_tag:
             Name: "itg-windows-web"`
          register: ec2_result

2 个答案:

答案 0 :(得分:2)

这将创建名称为web_server_1,web_server_3和web_server_5的服务器:

- name: create instances
  ec2:
    - image: <your_ami>
      instance_type: t2.micro
      key_name: <your_ssh_key>
      region: us-east-1
      vpc_subnet_id: <your_subnet_id>
      count_tag:
        Name: "web_server_{{ item }}"
      exact_count: 1
      instance_tags: 
        Name: "web_server_{{ item }}"
  with_items: ['1', '3', '5']

答案 1 :(得分:1)

使用以下ansible模板:

---
- name: A sample template
  hosts: local
  connection: local
  gather_facts: False
  tasks:
    - name: create instance
      ec2:
        keypair: test-ssh-key
        instance_type: t2.micro
        image: ami-abcd1234
        wait: yes
        instance_tags:
            ec2type: web
        exact_count: "{{ count }}"
        count_tag:
            ec2type: web
        region: us-east-1
        vpc_subnet_id: subnet-1234abcd
      register: ec2

    - name: generate sequence id for tagging
      debug: msg="{{ item }}"
      no_log: true
      with_sequence: start="{{ startindex }}" end="{{ count }}" format=%02d
      register: sequence

    - name: tag instances
      no_log: true
      ec2_tag:
        region: us-east-1
        resource: "{{ item.0.id }}"
        tags:
            Name: "itg-windows-web-{{ item.1.msg }}"
      with_together:
        - "{{ ec2.instances }}"
        - "{{ sequence.results }}"

<强>命令:

  

ansible-playbook -i ./hosts ec2-basic.yml --extra-vars&#34; startindex = 1   数= 2&#34;

调用-1:

ansible-playbook -i ./hosts ec2-basic.yml --extra-vars "startindex=1  count=2"

这将创建2个实例并将名称标记itg-windows-web-01itg-windows-web-02附加到其中。

调用2:

ansible-playbook -i ./hosts ec2-basic.yml --extra-vars "startindex=3  count=4"

这将添加另外两个实例,并为其添加名称标记itg-windows-web-03itg-windows-web-04

所有这些实例都按ec2type标记分组。

工作原理:

为属性Name使用count_tag标记以外的自定义标记。如果使用Name标记,则为所有创建的实例分配相同的标记值(这会使您的目的失效)。在上面的脚本中,我使用ec2type: web作为我的 instance_tags count_tag 。因此,ansible将使用此标记来确定应根据特定标记条件运行多少个节点。

您传递的count值已分配给模板中的exact_count。您还可以通过传递控制序列开始的startindex来进一步控制。

with_sequence 根据您的输入生成序列。 Click here了解更多信息。

with_together 循环并行数据集。 Click here了解更多信息。

使用上面的ansible循环,我们将01,02 ...等附加到itg-windows-web文本,并将其添加到实例Name标记中。