2017-07-07 52 views
0

我的python代码如下,需要相同的帮助。由于使用boto3的实例标签信息:获取无对象

import boto3 
    import yaml 

    def get_all_running_instances(unique_name): 
     """ 
     Returns instance data for given instance id. 
     :param unique_name: 
     :return: 
     """ 
     count = 1 
     rname = unique_name.rsplit('-', 1)[0] + '-' + str(count) 
     print rname 
     ec2 = boto3.resource('ec2') 
     instances = ec2.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['running', 'pending']}]) 
     for instance in instances: 
      print(instance.id, instance.instance_type) 
     for instance in instances: 
      for tag in instance.tags: 
       if rname in tag['Value'] and "Name" in tag['Key']: 
        count = count + 1 
        rname = rname.rsplit('-', 1)[0] + '-' + str(count) 
     return count 
    x = get_all_running_instances('test-1') 
    print x 

输出如下,不能够得到与每个实例相关联的标签信息。 我对作为此函数的一部分返回的标记信息运行Lambda。

('i-08987804493yyyyyy82', 't2.medium') 
    ('i-0e96754xxxxxxxxx', 't2.small') 
    Traceback (most recent call last): 
     File "dummy.py", line 30, in <module> 
     x = get_all_running_instances('test-1') 
     File "dummy.py", line 23, in get_all_running_instances 
     for tag in instance.tags: 
    **TypeError**: 'NoneType' object is not iterable 
+0

非常感谢HelloV。那就是诀窍。 – rashcuva

回答

1

您假定所有实例都至少有一个标记。在你的情况下,有没有标签导致你的代码失败的实例。相反,您可以在tags上迭代之前检查标签是否存在。

上述代码将忽略没有定义标签的实例。您可以修改代码以满足您的需求。要验证这一点,您还可以在打印instance-idinstance-type时打印标签。

for instance in instances: 
    print(instance.id, instance.instance_type, instance.tags)