未应用Python无值

问题描述 投票:0回答:2

我正在尝试在AWS实例中查找键和值。如果存在密钥,那么我希望脚本报告存在的值,或者如果密钥没有值,则报告None

我对许多键值对执行此操作,除了一个键对,它们都起作用。

如果键没有值,这些键/值对将报告None

instance_list = ec2.describe_instances()
    for reservation in instance_list["Reservations"]:
        for instance in reservation.get("Instances", []):
            if instance['PublicDnsName']:
                public_dns_name = instance['PublicDnsName']
            else:
                public_dns_name = None
            if 'KeyName' in instance:
                key_name = instance['KeyName']
            else:
                key_name = None

此总是显示空白值而不是None。当他们的键有值时,它会报告一个值:

                if 'PrivateDnsName' in instance:
                    private_dns = instance['PrivateDnsName']
                else:
                    private_dns = None

这里是实例ID的instance的值,其中显示private_dns的空白条目:

{'AmiLaunchIndex': 0, 'ImageId': 'ami-062f7200baf2fa504', 'InstanceId': 'i-02fa5c552a10ddfca', 'InstanceType': 't2.micro', 'KeyName': 'sncr-timd', 'LaunchTime': datetime.datetime(2020, 1, 14, 22, 25, tzinfo=tzutc()), 'Monitoring': {'State': 'disabled'}, 'Placement': {'AvailabilityZone': 'us-east-1b', 'GroupName': '', 'Tenancy': 'default'}, 'PrivateDnsName': '', 'ProductCodes': [], 'PublicDnsName': '', 'State': {'Code': 48, 'Name': 'terminated'}, 'StateTransitionReason': 'User initiated (2020-01-15 14:43:16 GMT)', 'Architecture': 'x86_64', 'BlockDeviceMappings': [], 'ClientToken': '', 'EbsOptimized': False, 'EnaSupport': True, 'Hypervisor': 'xen', 'NetworkInterfaces': [], 'RootDeviceName': '/dev/xvda', 'RootDeviceType': 'ebs', 'SecurityGroups': [], 'StateReason': {'Code': 'Client.UserInitiatedShutdown', 'Message': 'Client.UserInitiatedShutdown: User initiated shutdown'}, 'VirtualizationType': 'hvm', 'CpuOptions': {'CoreCount': 1, 'ThreadsPerCore': 1}, 'CapacityReservationSpecification': {'CapacityReservationPreference': 'open'}, 'HibernationOptions': {'Configured': False}, 'MetadataOptions': {'State': 'pending', 'HttpTokens': 'optional', 'HttpPutResponseHopLimit': 1, 'HttpEndpoint': 'enabled'}}

[这是instance确实具有private_dns键和值时的输出外观:

Private DNS: ip-172-31-37-19.us-east-2.compute.internal

[instance存在时,private_dns的外观:

{'AmiLaunchIndex': 0, 'ImageId': 'ami-02ccb28830b645a41', 'InstanceId': 'i-069e87e16db1bf49b', 'InstanceType': 't2.micro', 'KeyName': 'sncr-timd', 'LaunchTime': datetime.datetime(2020, 1, 14, 22, 27, 17, tzinfo=tzutc()), 'Monitoring': {'State': 'disabled'}, 'Placement': {'AvailabilityZone': 'us-east-2c', 'GroupName': '', 'Tenancy': 'default'}, 'PrivateDnsName': 'ip-172-31-37-19.us-east-2.compute.internal', 'PrivateIpAddress': '172.31.37.19', 'ProductCodes': [], 'PublicDnsName': 'ec2-18-223-15-106.us-east-2.compute.amazonaws.com', 'PublicIpAddress': '18.223.15.106', 'State': {'Code': 16, 'Name': 'running'}, 'StateTransitionReason': '', 'SubnetId': 'subnet-22038f6e', 'VpcId': 'vpc-859c5aee', 'Architecture': 'x86_64', 'BlockDeviceMappings': [{'DeviceName': '/dev/xvda', 'Ebs': {'AttachTime': datetime.datetime(2020, 1, 14, 22, 27, 18, tzinfo=tzutc()), 'DeleteOnTermination': True, 'Status': 'attached', 'VolumeId': 'vol-08f30292b9a7039bc'}}], 'ClientToken': '', 'EbsOptimized': False, 'EnaSupport': True, 'Hypervisor': 'xen', 'NetworkInterfaces': [{'Association': {'IpOwnerId': 'amazon', 'PublicDnsName': 'ec2-18-223-15-106.us-east-2.compute.amazonaws.com', 'PublicIp': '18.223.15.106'}, 'Attachment': {'AttachTime': datetime.datetime(2020, 1, 14, 22, 27, 17, tzinfo=tzutc()), 'AttachmentId': 'eni-attach-0937973380674deef', 'DeleteOnTermination': True, 'DeviceIndex': 0, 'Status': 'attached'}, 'Description': '', 'Groups': [{'GroupName': 'launch-wizard-1', 'GroupId': 'sg-08b8c8a89bcc3c692'}], 'Ipv6Addresses': [], 'MacAddress': '0a:d9:9b:03:a7:a8', 'NetworkInterfaceId': 'eni-0bfcd12253ecf87ec', 'OwnerId': '565241749827', 'PrivateDnsName': 'ip-172-31-37-19.us-east-2.compute.internal', 'PrivateIpAddress': '172.31.37.19', 'PrivateIpAddresses': [{'Association': {'IpOwnerId': 'amazon', 'PublicDnsName': 'ec2-18-223-15-106.us-east-2.compute.amazonaws.com', 'PublicIp': '18.223.15.106'}, 'Primary': True, 'PrivateDnsName': 'ip-172-31-37-19.us-east-2.compute.internal', 'PrivateIpAddress': '172.31.37.19'}], 'SourceDestCheck': True, 'Status': 'in-use', 'SubnetId': 'subnet-22038f6e', 'VpcId': 'vpc-859c5aee', 'InterfaceType': 'interface'}], 'RootDeviceName': '/dev/xvda', 'RootDeviceType': 'ebs', 'SecurityGroups': [{'GroupName': 'launch-wizard-1', 'GroupId': 'sg-08b8c8a89bcc3c692'}], 'SourceDestCheck': True, 'VirtualizationType': 'hvm', 'CpuOptions': {'CoreCount': 1, 'ThreadsPerCore': 1}, 'CapacityReservationSpecification': {'CapacityReservationPreference': 'open'}, 'HibernationOptions': {'Configured': False}, 'MetadataOptions': {'State': 'applied', 'HttpTokens': 'optional', 'HttpPutResponseHopLimit': 1, 'HttpEndpoint': 'enabled'}}

我想知道为什么会这样。我该如何纠正?

python boto
2个回答
1
投票

我认为键PrivateDnsName始终是轴,请尝试更改:


1
投票

似乎是因为某些instance"PrivateDnsName" key中存储了一个空字符串。尝试更换:

© www.soinside.com 2019 - 2024. All rights reserved.