Amazon web services 如何让ansible playbook收集所需的AWS EC2信息并正确地包装到文本输出文件中?
我有一本ansible的剧本,基本上已经写好了,包括输出到一个文件。我想从EC2环境中收集几个字段(只需标记:Name;Public-IP,Private-IP)。我有两个小问题,我似乎无法解决,与输出有关Amazon web services 如何让ansible playbook收集所需的AWS EC2信息并正确地包装到文本输出文件中?,amazon-web-services,amazon-ec2,ansible-2.x,Amazon Web Services,Amazon Ec2,Ansible 2.x,我有一本ansible的剧本,基本上已经写好了,包括输出到一个文件。我想从EC2环境中收集几个字段(只需标记:Name;Public-IP,Private-IP)。我有两个小问题,我似乎无法解决,与输出有关 为什么我的调试消息列表收集服务器名称而不是所有的公共和私有IP 如何在各自的公用和专用IP上获得每个名称 我已经找到了各种各样的片段和示例,并将它们结合起来,创建了一个非常基本的入门剧本,稍后我将对其进行扩展 这是我的剧本: --- - name: Test ec2 info hosts
---
- name: Test ec2 info
hosts: local
connection: local
tasks:
- name: Get EC2 Info
ec2_instance_info:
filters:
"tag:Name": "SERVER0*"
register: ec2_name
- name: Get instance IP addresses.
debug:
msg: "{{ item.0 }} | {{ item.1 }} | {{ item.2 }}"
with_together:
- "{{ ec2_name.instances | map(attribute='tags.Name') | list }}"
- "{{ ec2_name.instances[0].public_ip_address }}"
- "{{ ec2_name.instances[0].private_ip_address }}"
- name: Gather and Save Instance Info
set_fact:
Tag_Name: "{{ ec2_name.instances | map(attribute='tags.Name') | list }}"
Pub_IP: "{{ ec2_name.instances[0].public_ip_address }}"
Pvt_IP: "{{ ec2_name.instances[0].private_ip_address }}"
- local_action:
copy content="{{ Tag_Name }} | {{ Pub_IP }} | {{ Pvt_IP }}" dest=ec2iptest.txt
以下是屏幕上的调试输出:
TASK [Get only running instance IP addresses.] *********************************
ok: [localhost] => (item=['SERVER01', 'xx.xx.xx.xx', '10.1.0.10']) => {
"msg": "SERVER01 | xx.xx.xx.xx | 10.1.0.10"
}
ok: [localhost] => (item=['SERVER02', None, None]) => {
"msg": "SERVER02 | | "
}
ok: [localhost] => (item=['SERVER03', None, None]) => {
"msg": "SERVER03 | | "
}
ok: [localhost] => (item=['SERVER04', None, None]) => {
"msg": "SERVER04 | | "
}
TASK [Gather and Save Instance Info] *******************************************
ok: [localhost]
TASK [copy] ********************************************************************
changed: [localhost -> localhost]
PLAY RECAP *********************************************************************
localhost : ok=5 changed=1
下面是文本文件的输出:
['SERVER01', 'SERVER02', 'SERVER03', 'SERVER04'] | xx.xx.xx.xx | 10.1.0.10
它将所有服务器标记名放在括号中的一行,只提供一个公共IP和一个私有IP
我希望文本文件的输出(带有管道分隔符)为:
任何正确收集和包装的帮助都会很好
谢谢。我想您需要的是:
Pub_IP: "{{ ec2_name.instances[0].network_interfaces[0].association.public_ip }}"
Pvt_IP: "{{ ec2_name.instances[0].network_interfaces[0].private_ip_address }}"
谢谢你的回复,但不幸的是,这对我不起作用。添加
.network\u interfaces[0]
会导致错误:'dict object'没有属性'public\u ip\u address'
。
Pub_IP: "{{ ec2_name.instances[0].network_interfaces[0].association.public_ip }}"
Pvt_IP: "{{ ec2_name.instances[0].network_interfaces[0].private_ip_address }}"