amazon-web-services - 如何让我的 ansible playbook 收集所需的 AWS EC2 信息并正确包装在文本输出文件中?
问题描述
我有一个几乎写出来的 ansible playbook,包括输出到文件。我有几个我想从我的 EC2 环境中收集的字段(简单的标签:名称;公共 IP,私有 IP)。我有两个与输出有关的小问题,我似乎无法弄清楚。
为什么我的调试消息列表收集了服务器名称而不是所有公共和私有 IP?
如何使用各自的公共和私有 IP 将每个名称放在自己的行上?
我在周围找到了各种片段和示例,并将它们组合起来创建了一个非常基本的入门手册,稍后我将对其进行扩展。
这是我的剧本:
---
- 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。
我想要的文本文件输出(带有管道分隔符)是:
SERVER_NAME01 | PublicIP | PrivateIP
SERVER_NAME02 | PublicIP | PrivateIP
SERVER_NAME03 | PublicIP | PrivateIP
...
任何有关正确收集和换行的帮助都会很棒。
谢谢你。
解决方案
注册:信息
Pub_IP: "info['instances'][0]['public_ip_address']"
Pvt_IP: "info['instances'][0]['private_ip_address']"
推荐阅读
- javascript - 使用 react-router-navigation-prompt 时有关不推荐使用的 findDOMNode 的警告
- python - PyVista add_volume 显示空白图像
- c++ - 如何存储 unicode 字符并将它们输出到文件?
- json - jquery AJAX JSON 转换为多个表
- r - 通过引用日期将列表划分为子元素
- wordpress - 限制非管理员用户的访问权限,并允许管理员用户在 SAME URL 上的完全访问权限
- node.js - 来自 MessageEmbed 的 UnhandledPromiseRejectionWarning
- javascript - Express 客户端的热重载 (React+Webpack)
- python - 斜率变化时如何在 Python 中创建子列表?我想在值的方向改变时输出段
- matlab - 倍频程/Matlab 变换中的拉普拉斯逆变换 F(s)=1