Ansible:如何识别哪个EC2实例是当前节点以提取专用IP

时间:2019-02-18 20:08:50

标签: amazon-ec2 ansible

我需要更新一些配置,其中包括群集中所有EC2节点的列表,但是每个节点的配置也需要知道其自己的EC2公共私有IP地址。

有关完整列表,我有以下内容:

- name: Gather EC2 facts on all nodes
  ec2_instance_facts:
    region: "{{ aws.region }}"
    filters:
      "tag:Type": nodeType
      "tag:Name": '{{ aws.ec2.nodes.name }}'
      "instance-state-name": running
  register: ec2_facts

然后收集所有IP并将其添加到组:

- name: Gather IPs for all hosts
  add_host: hostname={{ item.public_ip_address }} groups=allIpAddresses
  loop: "{{ ec2_facts.instances }}"
  when:
    - item.state.name == "running"

此分组变量随后在另一个播放中使用,并用于替换Ansible模板中的值:

- seeds: "{{ allIpAddresses[0] }},{{ allIpAddresses[1] }},{{ allIpAddresses[2] }},{{ allIpAddresses[3] }}"

但是,我似乎无法提取或识别用于“当前”主机的公共IP和私有IP。

1 个答案:

答案 0 :(得分:0)

使用ec2_metadata_facts收集每个实例关联的变量中的事实。  另外,如果您想使用ec2_instance_facts,则可以根据lookup来进行inventory_hostname

示例游戏:

- name: gather ec2 facts per instance
  hosts: my_aws_instances
  gather_facts: no
  tasks:
    - ec2_metadata_facts:
    - name: debug
      debug: var=ansible_ec2_public_ipv4
    - name: debug
      debug: var=ansible_ec2_local_ipv4