无法打印"未知"如果AWS实例没有使用Python关联的名称标记

时间:2016-01-07 07:40:01

标签: python python-2.7 amazon-web-services boto

下面是我编写的程序的一小段代码片段,它获取与之关联的所有实例ip和实例标记。我可以使用boto轻松完成此操作,我的问题是,如果我找到一个没有任何标记名称的AWS实例,我想在文件中显示/写入" ip UNKNOWN"。

for reservation in reservations: 
  for instances in reservation.instances: 
    if instances.state == "running": 
     print instances.private_ip_address,instances.tags['Name'] 
     fileCSV.write("%s %s\n"%(instances.private_ip_address,instances.tags['Name'])) 
    if instances.state == "running" and 'Name' in instances.tags==' ': 
     print "%s %s" % (instances.private_ip_address,"UNKNOWN") 
     fileCSV.write("%s %s\n"%(instances.private_ip_address,"UNKNOWN")

此代码打印出类似这样的内容

192.124.121.17
192.124.121.11 squid-server
192.124.121.13 apache

我期待:

192.124.121.17 UNKNOWN
192.124.121.11 squid-server
192.124.121.13 apache

2 个答案:

答案 0 :(得分:1)

您的代码似乎始终捕获第一个if块。

您可以尝试使用default value方法中的get字典选项。

试试这个:

for reservation in reservations: 
  for instances in reservation.instances: 
    if instances.state == "running": 
        name = instances.tags["Name"] if instances.tags["Name"] != "" else "UNKNOWN"
        print instances.private_ip_address,name
        fileCSV.write("%s %s\n" % (instances.private_ip_address,name))

答案 1 :(得分:1)

我没有对此进行测试,但这应该可行。

for reservation in reservations: 
  for instances in reservation.instances: 
    if instances.state == "running": 
     print instances.private_ip_address, instances.tags['Name'] if instances.tags['Name'] else 'UNKNOWN'