我需要更新一些配置,其中包括群集中所有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。
答案 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