2017-12-11 13 views
0

私はroute53を照会するためにboto3を使用し、各サーバーのホスト名の一部であるIPと "サーバーの役割"を取得するPythonコードを記述したいと思います。特定の情報を表示するためにroute53-list-recordの出力をフォーマットするにはどうすればよいですか?

私は非常に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) 

出力はそうのようになります。

{u'ResourceRecords': [{u'Value': 'ns-512.awsdns-00.net.'}, {u'Value': 'ns-1536.awsdns-00.co.uk.'}, {u'Value': 'ns-0.awsdns-00.com.'}, {u'Value': 'ns-1024.awsdns-00.org.'}], u'Type': 'NS', u'Name': 'vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 172800} 
{u'ResourceRecords': [{u'Value': 'ns-1536.awsdns-00.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400'}], u'Type': 'SOA', u'Name': 'vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 900} 
{u'ResourceRecords': [{u'Value': '172.58.38.137'}], u'Type': 'A', u'Name': 'dev-analytics1.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
{u'ResourceRecords': [{u'Value': '172.58.17.224'}], u'Type': 'A', u'Name': 'dev-analytics2.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
{u'ResourceRecords': [{u'Value': '172.58.32.16'}], u'Type': 'A', u'Name': 'dev-api1.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
{u'ResourceRecords': [{u'Value': '172.58.26.94'}], u'Type': 'A', u'Name': 'dev-api2.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
{u'ResourceRecords': [{u'Value': '172.58.14.88'}], u'Type': 'A', u'Name': 'dev-api4.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
{u'ResourceRecords': [{u'Value': '52.154.154.22'}], u'Type': 'A', u'Name': 'dev-bastion.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
{u'ResourceRecords': [{u'Value': '172.58.41.124'}], u'Type': 'A', u'Name': 'dev-batch1.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
{u'ResourceRecords': [{u'Value': '172.58.39.163'}], u'Type': 'A', u'Name': 'dev-cassandra1.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
{u'ResourceRecords': [{u'Value': '172.58.14.5'}], u'Type': 'A', u'Name': 'dev-cassandra2.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
{u'ResourceRecords': [{u'Value': '172.58.31.112'}], u'Type': 'A', u'Name': 'dev-cassandra3.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
{u'ResourceRecords': [{u'Value': '172.58.38.137'}], u'Type': 'A', u'Name': 'dev-kafka-10.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
{u'ResourceRecords': [{u'Value': '172.58.41.124'}], u'Type': 'A', u'Name': 'dev-kafka-20.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
{u'ResourceRecords': [{u'Value': '172.58.32.16'}], u'Type': 'A', u'Name': 'dev-kafka-30.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
{u'ResourceRecords': [{u'Value': '172.58.26.94'}], u'Type': 'A', u'Name': 'dev-kafka-31.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
{u'ResourceRecords': [{u'Value': 'dev-mysql-14-vpc-XXXXXXXX.c1te7xcziik1.eu-west-1.rds.amazonaws.com'}], u'Type': 'CNAME', u'Name': 'dev-mysql.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 

は、だから今、私は、「出力から単語を含むすべての行を削除しようとしていますkafka "、CNAMEとNSレコードがあります。なぜなら、" list_resource_record_sets() "でフィルタを設定したので、なぜそれらが最初に表示されるのかわかりません。分析、API、要塞、等...と:サーバーの役割は、文字列「カサンドラ」または他のサーバーにあるであろう

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

:例えばこのように、各ホスト名に続いて

、 Ipは "値"になります。

だから私はそうのようになります。テキストリストを作成するためのコードをしたいと思います:

172.58.31.112 : cassandra 
52.154.154.22 : bastion 

は、それはどのように行われていますか?私は自分の問題は、例えば "値"にアクセスする方法がわからないことだと思います...

答えて

1

response['ResourceRecordSets']はResourceRecordsのリストです。各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] 

出力

172.58.38.137 analytics 
172.58.17.224 analytics 
172.58.32.16 api 
172.58.26.94 api 
172.58.14.88 api 
52.154.154.22 bastion 
172.58.41.124 batch 
172.58.39.163 cassandra 
172.58.14.5 cassandra 
172.58.31.112 cassandra 
172.58.38.137 kafka 
172.58.41.124 kafka 
172.58.32.16 kafka 
172.58.26.94 kafka 
dev-mysql-14-vpc-XXXXXXXX.c1te7xcziik1.eu-west-1.rds.amazonaws.com mysql 
関連する問題