如何格式化route53listrecords的输出以显示特定信息?

2024-10-02 22:38:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想写一个Python代码,它使用boto3查询route53并获取Ip和“服务器角色”,这是每个服务器主机名的一部分。在

我对Python非常陌生,在格式化我得到的输出时遇到了问题。在

我当前的代码如下:

#!/usr/bin/python
import boto3

region = 'eu-west-1'
hostedzoneid = 'XXXXXXXX'
stackvpcid = 'vpc-xxxxxxx'

r53client = boto3.client('route53')

response = r53client.list_resource_record_sets(
        HostedZoneId=hostedzoneid,
        StartRecordName='dev',
        StartRecordType='A'
        )

#dict = {}
for resource in response['ResourceRecordSets']:
    print(resource)

输出如下:

^{pr2}$

所以现在我试图从输出中删除包含单词“kafka”、CNAME和NS记录的所有行,我不明白为什么它们首先会显示,因为我在“list_resource_record_sets()”中配置了一个过滤器。在

然后,在每个主机名中,例如:

Name': 'dev-cassandra3.vpc-XXXXXXXX.eu-west-1.company.private.'

服务器角色将是字符串“cassandra”或在其他服务器中:analytics、api、bastion等。。。Ip就是“价值”。在

所以我希望代码创建一个文本列表,如下所示:

172.58.31.112 : cassandra
52.154.154.22 : bastion

怎么做的?我想我的问题是我不知道如何获取“价值”,例如。。。在


Tags: 代码ip服务器角色responseboto3vpcresource
1条回答
网友
1楼 · 发布于 2024-10-02 22:38:01

response['ResourceRecordSets']是资源记录的列表。每个ResourceRecords都是一个字典。下面的方法应该有用,或者你可以根据自己的需要进行调整。循环查看记录并检查名称是否具有dev-([a-z]*)模式,然后打印名称和值。在

import re

for resource in response['ResourceRecordSets']
  records = resource['ResourceRecords'][0]
  if 'Name' in resource:
    name = re.findall('dev-([a-z]*)', resource['Name'])
    if name:
      print records['Value'], name[0]

输出

^{pr2}$

相关问题 更多 >