def _image_get_state(cls, image_id): try: data = cls.client.describe_images(ImageIds=[image_id]) if not data['Images']: raise exceptions.NotFound() return data['Images'][0]['State'] except botocore.exceptions.ClientError: error_code = sys.exc_info()[1].response['Error']['Code'] if error_code == 'InvalidAMIID.NotFound': raise exceptions.NotFound() raise
def _vpc_get_state(cls, vpc_id): try: data = cls.client.describe_vpcs(VpcIds=[vpc_id]) if not data['Vpcs']: raise exceptions.NotFound() return data['Vpcs'][0]['State'] except botocore.exceptions.ClientError: error_code = sys.exc_info()[1].response['Error']['Code'] if error_code == 'InvalidVpcID.NotFound': raise exceptions.NotFound() raise
def _snapshot_get_state(cls, snapshot_id): try: data = cls.client.describe_snapshots(SnapshotIds=[snapshot_id]) if not data['Snapshots']: raise exceptions.NotFound() return data['Snapshots'][0]['State'] except botocore.exceptions.ClientError: error_code = sys.exc_info()[1].response['Error']['Code'] if error_code == 'InvalidSnapshot.NotFound': raise exceptions.NotFound() raise
def _volume_attachment_get_state(cls, volume_id): try: data = cls.client.describe_volumes(VolumeIds=[volume_id]) volume = data['Volumes'][0] if 'Attachments' in volume and len(volume['Attachments']) > 0: return volume['Attachments'][0]['State'] raise exceptions.NotFound() except botocore.exceptions.ClientError: error_code = sys.exc_info()[1].response['Error']['Code'] if error_code == 'InvalidVolume.NotFound': raise exceptions.NotFound() raise
def _network_interface_get_state(cls, ni_id): try: data = cls.client.describe_network_interfaces( NetworkInterfaceIds=[ni_id]) if not data['NetworkInterfaces']: raise exceptions.NotFound() return data['NetworkInterfaces'][0]['Status'] except botocore.exceptions.ClientError: error_code = sys.exc_info()[1].response['Error']['Code'] if error_code == 'InvalidNetworkInterfaceID.NotFound': raise exceptions.NotFound() raise
def _vpn_gateway_get_attachment_state(cls, vpn_gateway_id): try: data = cls.client.describe_vpn_gateways( VpnGatewayIds=[vpn_gateway_id]) attachments = data['VpnGateways'][0].get('VpcAttachments') if (not attachments or attachments[0]['State'] == 'detached'): raise exceptions.NotFound() return attachments[0]['State'] except botocore.exceptions.ClientError as ex: error_code = ex.response['Error']['Code'] if error_code == 'InvalidVpnGatewayID.NotFound': raise exceptions.NotFound() raise
def _vpn_object_get_state(cls, func, kwargs, data_key, error_not_found): # NOTE(andrey-mp): use this for vpn_connection, vpn_gateway, # customer_gateway due to similar states try: data = func(**kwargs) if not data[data_key]: raise exceptions.NotFound() if data[data_key][0]['State'] == 'deleted': raise exceptions.NotFound() return data[data_key][0]['State'] except botocore.exceptions.ClientError as ex: error_code = ex.response['Error']['Code'] if error_code == error_not_found: raise exceptions.NotFound() raise
def _vpn_connection_get_tunnel_up_state(cls, vpn_connection_id): data = cls.client.describe_vpn_connections( VpnConnectionIds=[vpn_connection_id]) for item in data['VpnConnections'][0].get('VgwTelemetry', []): if 'UP' == item['Status']: return 'UP' raise exceptions.NotFound()
def _instance_get_state(cls, instance_id): try: data = cls.client.describe_instances(InstanceIds=[instance_id]) if not data['Reservations']: raise exceptions.NotFound() if not data['Reservations'][0]['Instances']: raise exceptions.NotFound() state = data['Reservations'][0]['Instances'][0]['State']['Name'] if state != 'terminated': return state raise exceptions.NotFound() except botocore.exceptions.ClientError: error_code = sys.exc_info()[1].response['Error']['Code'] if error_code == 'InvalidInstanceID.NotFound': raise exceptions.NotFound() raise
def _vpn_connection_get_route_state(cls, vpn_connection_id, destination_cidr_block=None): try: data = cls.client.describe_vpn_connections( VpnConnectionIds=[vpn_connection_id]) try: route = next( r for r in data['VpnConnections'][0]['Routes'] if r['DestinationCidrBlock'] == destination_cidr_block) except StopIteration: raise exceptions.NotFound() if route['State'] == 'deleted': raise exceptions.NotFound() return route['State'] except botocore.exceptions.ClientError as ex: error_code = ex.response['Error']['Code'] if error_code == 'InvalidVpnGatewayID.NotFound': raise exceptions.NotFound() raise
def _address_assoc_get_state(cls, kwargs): try: ip = kwargs.get('PublicIp') alloc_id = kwargs.get('AllocationId') assoc_id = kwargs.get('AssociationId') if ip: data = cls.client.describe_addresses(PublicIps=[ip]) elif alloc_id: data = cls.client.describe_addresses(AllocationIds=[alloc_id]) elif assoc_id: data = cls.client.describe_addresses( Filters=[{'Name': 'association-id', 'Values': [assoc_id]}]) LOG.debug('Addresses: %s' % str(data.get('Addresses'))) if ('Addresses' in data and len(data['Addresses']) == 1 and data['Addresses'][0].get('InstanceId')): return 'available' raise exceptions.NotFound() except botocore.exceptions.ClientError: raise exceptions.NotFound()