From 908468edb6e9151d1607972c325f5e9dd22b6681 Mon Sep 17 00:00:00 2001 From: Matthew Gladney Date: Fri, 24 Apr 2020 14:15:22 -0400 Subject: [PATCH 1/3] Support OptInStatus for EC2 describe_region calls --- moto/ec2/models.py | 17 +++++++++++++---- .../responses/availability_zones_and_regions.py | 1 + .../test_availability_zones_and_regions.py | 7 +++++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/moto/ec2/models.py b/moto/ec2/models.py index 332c8f03..7a935120 100644 --- a/moto/ec2/models.py +++ b/moto/ec2/models.py @@ -1490,9 +1490,10 @@ class AmiBackend(object): class Region(object): - def __init__(self, name, endpoint): + def __init__(self, name, endpoint, opt_in_status): self.name = name self.endpoint = endpoint + self.opt_in_status = opt_in_status class Zone(object): @@ -1503,13 +1504,21 @@ class Zone(object): class RegionsAndZonesBackend(object): + regions_not_enabled_by_default = [ + 'ap-east-1', + 'me-south-1' + ] + regions = [] for region in Session().get_available_regions("ec2"): - regions.append(Region(region, "ec2.{}.amazonaws.com".format(region))) + if region in regions_not_enabled_by_default: + regions.append(Region(region, "ec2.{}.amazonaws.com".format(region), "not-opted-in")) + else: + regions.append(Region(region, "ec2.{}.amazonaws.com".format(region), "opt-in-not-required")) for region in Session().get_available_regions("ec2", partition_name="aws-us-gov"): - regions.append(Region(region, "ec2.{}.amazonaws.com".format(region))) + regions.append(Region(region, "ec2.{}.amazonaws.com".format(region), "opt-in-not-required")) for region in Session().get_available_regions("ec2", partition_name="aws-cn"): - regions.append(Region(region, "ec2.{}.amazonaws.com.cn".format(region))) + regions.append(Region(region, "ec2.{}.amazonaws.com.cn".format(region), "opt-in-not-required")) zones = { "af-south-1": [ diff --git a/moto/ec2/responses/availability_zones_and_regions.py b/moto/ec2/responses/availability_zones_and_regions.py index 28cc3a49..61d4eb1a 100644 --- a/moto/ec2/responses/availability_zones_and_regions.py +++ b/moto/ec2/responses/availability_zones_and_regions.py @@ -22,6 +22,7 @@ DESCRIBE_REGIONS_RESPONSE = """ Date: Fri, 24 Apr 2020 14:20:58 -0400 Subject: [PATCH 2/3] black reformatting changes --- moto/ec2/models.py | 25 +++++++++++++------ .../test_availability_zones_and_regions.py | 4 ++- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/moto/ec2/models.py b/moto/ec2/models.py index 7a935120..7f7b6369 100644 --- a/moto/ec2/models.py +++ b/moto/ec2/models.py @@ -1504,21 +1504,30 @@ class Zone(object): class RegionsAndZonesBackend(object): - regions_not_enabled_by_default = [ - 'ap-east-1', - 'me-south-1' - ] + regions_not_enabled_by_default = ["ap-east-1", "me-south-1"] regions = [] for region in Session().get_available_regions("ec2"): if region in regions_not_enabled_by_default: - regions.append(Region(region, "ec2.{}.amazonaws.com".format(region), "not-opted-in")) + regions.append( + Region(region, "ec2.{}.amazonaws.com".format(region), "not-opted-in") + ) else: - regions.append(Region(region, "ec2.{}.amazonaws.com".format(region), "opt-in-not-required")) + regions.append( + Region( + region, "ec2.{}.amazonaws.com".format(region), "opt-in-not-required" + ) + ) for region in Session().get_available_regions("ec2", partition_name="aws-us-gov"): - regions.append(Region(region, "ec2.{}.amazonaws.com".format(region), "opt-in-not-required")) + regions.append( + Region(region, "ec2.{}.amazonaws.com".format(region), "opt-in-not-required") + ) for region in Session().get_available_regions("ec2", partition_name="aws-cn"): - regions.append(Region(region, "ec2.{}.amazonaws.com.cn".format(region), "opt-in-not-required")) + regions.append( + Region( + region, "ec2.{}.amazonaws.com.cn".format(region), "opt-in-not-required" + ) + ) zones = { "af-south-1": [ diff --git a/tests/test_ec2/test_availability_zones_and_regions.py b/tests/test_ec2/test_availability_zones_and_regions.py index 92fb2b65..830d4c2b 100644 --- a/tests/test_ec2/test_availability_zones_and_regions.py +++ b/tests/test_ec2/test_availability_zones_and_regions.py @@ -40,7 +40,9 @@ def test_boto3_describe_regions(): resp = ec2.describe_regions(RegionNames=[test_region]) resp["Regions"].should.have.length_of(1) resp["Regions"][0].should.have.key("RegionName").which.should.equal(test_region) - resp["Regions"][0].should.have.key("OptInStatus").which.should.equal("opt-in-not-required") + resp["Regions"][0].should.have.key("OptInStatus").which.should.equal( + "opt-in-not-required" + ) test_region = "ap-east-1" resp = ec2.describe_regions(RegionNames=[test_region]) From f8cabf0729e72c9f295f52dd73f9af19148b72c0 Mon Sep 17 00:00:00 2001 From: Matthew Gladney Date: Mon, 27 Apr 2020 11:52:47 -0400 Subject: [PATCH 3/3] static list of preexisting regions --- moto/ec2/models.py | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/moto/ec2/models.py b/moto/ec2/models.py index 7f7b6369..9ceb06f6 100644 --- a/moto/ec2/models.py +++ b/moto/ec2/models.py @@ -1504,20 +1504,39 @@ class Zone(object): class RegionsAndZonesBackend(object): - regions_not_enabled_by_default = ["ap-east-1", "me-south-1"] + regions_opt_in_not_required = [ + "af-south-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-northeast-3", + "ap-south-1", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "eu-central-1", + "eu-north-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "sa-east-1", + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + ] regions = [] for region in Session().get_available_regions("ec2"): - if region in regions_not_enabled_by_default: - regions.append( - Region(region, "ec2.{}.amazonaws.com".format(region), "not-opted-in") - ) - else: + if region in regions_opt_in_not_required: regions.append( Region( region, "ec2.{}.amazonaws.com".format(region), "opt-in-not-required" ) ) + else: + regions.append( + Region(region, "ec2.{}.amazonaws.com".format(region), "not-opted-in") + ) for region in Session().get_available_regions("ec2", partition_name="aws-us-gov"): regions.append( Region(region, "ec2.{}.amazonaws.com".format(region), "opt-in-not-required")