From a85585fb25a2588f85a80b6f92f4b3c50fbead0e Mon Sep 17 00:00:00 2001 From: tobhai Date: Wed, 1 Jul 2020 15:10:25 +0200 Subject: [PATCH 1/2] Add ELBv2 --- skew/resources/__init__.py | 1 + skew/resources/aws/elb.py | 29 +++++++++++++-- ...loadbalancing.DescribeLoadBalancers_1.json | 36 +++++++++++++++++++ tests/unit/test_arn.py | 13 +++++++ 4 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 tests/unit/responses/elbsv2/elasticloadbalancing.DescribeLoadBalancers_1.json diff --git a/skew/resources/__init__.py b/skew/resources/__init__.py index e586d1d..906f500 100644 --- a/skew/resources/__init__.py +++ b/skew/resources/__init__.py @@ -49,6 +49,7 @@ 'aws.elasticache.snapshot': 'aws.elasticache.Snapshot', 'aws.elasticbeanstalk.application': 'aws.elasticbeanstalk.Application', 'aws.elasticbeanstalk.environment': 'aws.elasticbeanstalk.Environment', + 'aws.elasticloadbalancing.loadbalancer': 'aws.elb.LoadBalancerV2', 'aws.elb.loadbalancer': 'aws.elb.LoadBalancer', 'aws.es.domain': 'aws.es.ElasticsearchDomain', 'aws.firehose.deliverystream': 'aws.firehose.DeliveryStream', diff --git a/skew/resources/aws/elb.py b/skew/resources/aws/elb.py index 0f11451..4a3a8dd 100644 --- a/skew/resources/aws/elb.py +++ b/skew/resources/aws/elb.py @@ -28,9 +28,9 @@ class Meta(object): detail_spec = None attr_spec = [ ('describe_load_balancer_attributes', 'LoadBalancerName', - 'LoadBalancerAttributes', 'LoadBalancerAttributes'), + 'LoadBalancerAttributes', 'LoadBalancerAttributes'), ('describe_load_balancer_policies', 'LoadBalancerName', - 'PolicyDescriptions', 'PolicyDescriptions'), + 'PolicyDescriptions', 'PolicyDescriptions'), ] id = 'LoadBalancerName' filter_name = 'LoadBalancerNames' @@ -57,3 +57,28 @@ def __init__(self, client, data, query=None): del data['ResponseMetadata'] self.data[detail_key] = data LOG.debug(data) + + +class LoadBalancerV2(AWSResource): + + class Meta(object): + service = 'elbv2' + type = 'loadbalancer' + enum_spec = ('describe_load_balancers', + 'LoadBalancers', None) + detail_spec = None + id = 'LoadBalancerArn' + filter_name = 'LoadBalancerNames' + filter_type = 'list' + name = 'DNSName' + date = 'CreatedTime' + dimension = 'LoadBalancerName' + tags_spec = ('describe_tags', 'TagDescriptions[].Tags[]', + 'ResourceArn', 'id') + + + @property + def arn(self): + return '%s' % ( + self.id + ) diff --git a/tests/unit/responses/elbsv2/elasticloadbalancing.DescribeLoadBalancers_1.json b/tests/unit/responses/elbsv2/elasticloadbalancing.DescribeLoadBalancers_1.json new file mode 100644 index 0000000..2509c04 --- /dev/null +++ b/tests/unit/responses/elbsv2/elasticloadbalancing.DescribeLoadBalancers_1.json @@ -0,0 +1,36 @@ +{ + "status_code": 200, + "data": { + "LoadBalancers": [ + { + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-east-1:1111111111:loadbalancer/app/some-loadbalancer-v2/2277c8dd3340a0e3", + "DNSName": "internal-some-loadbalancer-v2-1835498223.us-east-1.elb.amazonaws.com", + "CanonicalHostedZoneId": "Z215JYRZR1TBD5", + "CreatedTime": "2020-08-24T11:21:15.360Z", + "LoadBalancerName": "some-loadbalancer-v2", + "Scheme": "internal", + "VpcId": "vpc-a57fafce", + "State": { + "Code": "active" + }, + "Type": "application", + "AvailabilityZones": [ + { + "ZoneName": "us-east-1b", + "SubnetId": "subnet-2921d754", + "LoadBalancerAddresses": [] + }, + { + "ZoneName": "us-east-1a", + "SubnetId": "subnet-7fa21911", + "LoadBalancerAddresses": [] + } + ], + "SecurityGroups": [ + "sg-3703b84d" + ], + "IpAddressType": "ipv4" + } + ] + } +} diff --git a/tests/unit/test_arn.py b/tests/unit/test_arn.py index f897a82..6c3a196 100644 --- a/tests/unit/test_arn.py +++ b/tests/unit/test_arn.py @@ -357,3 +357,16 @@ def test_customer_gateway(self): self.assertEqual(l[0].arn, 'arn:aws:ec2:us-east-1:123456789012:customer-gateway/cgw-030d9af8cdbcdc12f') self.assertEqual(l[0].data['CustomerGatewayId'], 'cgw-030d9af8cdbcdc12f') + + def test_elb_loadbalancer_v2(self): + placebo_cfg = { + 'placebo': placebo, + 'placebo_dir': self._get_response_path('elbsv2'), + 'placebo_mode': 'playback'} + arn = scan('arn:aws:elasticloadbalancing:us-east-1:1111111111:loadbalancer/*', + **placebo_cfg) + l = list(arn) + self.assertEqual(len(l), 1) + self.assertEqual(l[0].arn, 'arn:aws:elasticloadbalancing:us-east-1:1111111111:loadbalancer/app/some-loadbalancer-v2/2277c8dd3340a0e3') + self.assertEqual(l[0].data['DNSName'], 'internal-some-loadbalancer-v2-1835498223.us-east-1.elb.amazonaws.com') + self.assertEqual(l[0].tags['Name'], 'some-loadbalancer-v2') From 68b7b4f116bdeb9b906c5b354834538957249563 Mon Sep 17 00:00:00 2001 From: tobhai Date: Thu, 2 Jul 2020 08:33:19 +0200 Subject: [PATCH 2/2] Fix ELBv1 ARN --- skew/resources/aws/elb.py | 8 +++++++- tests/unit/test_arn.py | 3 ++- tests/unit/test_resource.py | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/skew/resources/aws/elb.py b/skew/resources/aws/elb.py index 4a3a8dd..aff7e9f 100644 --- a/skew/resources/aws/elb.py +++ b/skew/resources/aws/elb.py @@ -58,6 +58,13 @@ def __init__(self, client, data, query=None): self.data[detail_key] = data LOG.debug(data) + @property + def arn(self): + return 'arn:aws:elasticloadbalancing:%s:%s:%s/%s' % ( + self._client.region_name, + self._client.account_id, + self.resourcetype, self.id) + class LoadBalancerV2(AWSResource): @@ -76,7 +83,6 @@ class Meta(object): tags_spec = ('describe_tags', 'TagDescriptions[].Tags[]', 'ResourceArn', 'id') - @property def arn(self): return '%s' % ( diff --git a/tests/unit/test_arn.py b/tests/unit/test_arn.py index 6c3a196..1ed0520 100644 --- a/tests/unit/test_arn.py +++ b/tests/unit/test_arn.py @@ -131,7 +131,7 @@ def test_elb_loadbalancer(self): **placebo_cfg) l = list(arn) self.assertEqual(len(l), 1) - self.assertEqual(l[0].arn, 'arn:aws:elb:us-east-1:123456789012:loadbalancer/example') + self.assertEqual(l[0].arn, 'arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/example') self.assertEqual(l[0].data['DNSName'], 'example-1111111111.us-east-1.elb.amazonaws.com') self.assertEqual(l[0].tags['Name'], 'example-web') self.assertEqual(l[0].data['LoadBalancerAttributes']['CrossZoneLoadBalancing']['Enabled'], False) @@ -370,3 +370,4 @@ def test_elb_loadbalancer_v2(self): self.assertEqual(l[0].arn, 'arn:aws:elasticloadbalancing:us-east-1:1111111111:loadbalancer/app/some-loadbalancer-v2/2277c8dd3340a0e3') self.assertEqual(l[0].data['DNSName'], 'internal-some-loadbalancer-v2-1835498223.us-east-1.elb.amazonaws.com') self.assertEqual(l[0].tags['Name'], 'some-loadbalancer-v2') + diff --git a/tests/unit/test_resource.py b/tests/unit/test_resource.py index 8cc560e..a97f88c 100644 --- a/tests/unit/test_resource.py +++ b/tests/unit/test_resource.py @@ -61,4 +61,4 @@ def test_all_providers(self): def test_all_services(self): all_providers = skew.resources.all_services('aws') - self.assertEqual(len(all_providers), 24) + self.assertEqual(len(all_providers), 25)