首页 > 解决方案 > 当计数大于 1 时如何使用 ansible 提取 ec2 实例启动的单个 ip

问题描述

我正在使用 count:2 使用 ansible 启动 aws ec2 2 实例,请查看下面的剧本

- name: Create an EC2 instance
  ec2:
    aws_access_key: "{{ access_key }}"
    aws_secret_key: "{{ key }}"
    key_name: "{{ keypair }}"
    region: "{{ region }}"
    group: "{{ security_group }}"
    instance_type: "{{ instance_type }}"
    image: "{{ image }}"
    wait: yes
    count: 2
    vpc_subnet_id: "{{ vpc_subnet_id }}"
    assign_public_ip: "{{ assign_public_ip }}"
  register: ec2

- name: Add the newly created 1 EC2 instance(s) to webserver group
  lineinfile: dest=inventory
              insertafter='^\[webserver\]$'
              line="{{ item.private_ip }} {{hoststring}}"
              state=present
  with_items: "{{ ec2.instances }}"

- name: add newly created remaining ec2 instance to db group
  lineinfile: dest=inventory
              insertafter='^\[db-server\]$'
              line="{{ item.private_ip }} {{hoststring}}"
              state=present
  with_items: "{{ ec2.instances }}"

在这里,我想将一个 ip 添加到 webserver 主机组并剩余到 db 主机组,但它不能与上面的 playbook 一起使用,请帮我实现同样的目标?

我不想在这里使用 add_host。

标签: amazon-ec2ansible

解决方案


由于您使用的是 AWS,您是否考虑过使用aws_ec2插件进行动态清单?

只要您正确标记了您的实例,并且您设置了 yaml 文件,它就会按照您的意愿行事。

否则,你register: ec2有两个元素。您循环的方式(如果有效)ec2会将两者都添加到每个组中。您需要添加一个when条件来匹配标签/子网/cidr 之类的内容,以了解将哪个服务器添加到哪个组。

帮助查看返回值的一种方法是打印出ec2变量:

- debug: var=ec2


推荐阅读