Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
 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
Ejemplo n.º 8
0
 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()
Ejemplo n.º 9
0
 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
Ejemplo n.º 10
0
 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
Ejemplo n.º 11
0
    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()