EC2: fixed filtering in describe az (#5307)

This commit is contained in:
Macwan Nevil 2022-07-28 04:11:27 +05:30 committed by GitHub
parent bc3ddcff5b
commit 5cdd5bf9d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 45 additions and 10 deletions

View File

@ -1,4 +1,5 @@
from boto3 import Session from boto3 import Session
from moto.utilities.utils import filter_resources
class Region(object): class Region(object):
@ -9,10 +10,11 @@ class Region(object):
class Zone(object): class Zone(object):
def __init__(self, name, region_name, zone_id): def __init__(self, name, region_name, zone_id, zone_type="availability-zone"):
self.name = name self.name = name
self.region_name = region_name self.region_name = region_name
self.zone_id = zone_id self.zone_id = zone_id
self.zone_type = zone_type
class RegionsAndZonesBackend: class RegionsAndZonesBackend:
@ -304,9 +306,19 @@ class RegionsAndZonesBackend:
ret.append(region) ret.append(region)
return ret return ret
def describe_availability_zones(self): def describe_availability_zones(self, filters=None):
# We might not have any zones for the current region, if it was introduced recently # We might not have any zones for the current region, if it was introduced recently
return self.zones.get(self.region_name, []) zones = self.zones.get(self.region_name, [])
attr_pairs = (
("zone-id", "zone_id"),
("zone-type", "zone_type"),
("zone-name", "name"),
("region-name", "region_name"),
)
result = zones
if filters:
result = filter_resources(zones, filters, attr_pairs)
return result
def get_zone_by_name(self, name): def get_zone_by_name(self, name):
for zone in self.describe_availability_zones(): for zone in self.describe_availability_zones():

View File

@ -139,6 +139,7 @@ class VPC(TaggedEC2Resource, CloudFormationModel):
is_default, is_default,
instance_tenancy="default", instance_tenancy="default",
amazon_provided_ipv6_cidr_block=False, amazon_provided_ipv6_cidr_block=False,
ipv6_cidr_block_network_border_group=None,
): ):
self.ec2_backend = ec2_backend self.ec2_backend = ec2_backend
@ -161,6 +162,7 @@ class VPC(TaggedEC2Resource, CloudFormationModel):
self.associate_vpc_cidr_block( self.associate_vpc_cidr_block(
cidr_block, cidr_block,
amazon_provided_ipv6_cidr_block=amazon_provided_ipv6_cidr_block, amazon_provided_ipv6_cidr_block=amazon_provided_ipv6_cidr_block,
ipv6_cidr_block_network_border_group=ipv6_cidr_block_network_border_group,
) )
@property @property
@ -246,7 +248,10 @@ class VPC(TaggedEC2Resource, CloudFormationModel):
return True return True
def associate_vpc_cidr_block( def associate_vpc_cidr_block(
self, cidr_block, amazon_provided_ipv6_cidr_block=False self,
cidr_block,
amazon_provided_ipv6_cidr_block=False,
ipv6_cidr_block_network_border_group=None,
): ):
max_associations = 5 if not amazon_provided_ipv6_cidr_block else 1 max_associations = 5 if not amazon_provided_ipv6_cidr_block else 1
@ -274,6 +279,11 @@ class VPC(TaggedEC2Resource, CloudFormationModel):
association_set["cidr_block"] = ( association_set["cidr_block"] = (
random_ipv6_cidr() if amazon_provided_ipv6_cidr_block else cidr_block random_ipv6_cidr() if amazon_provided_ipv6_cidr_block else cidr_block
) )
if amazon_provided_ipv6_cidr_block:
association_set["ipv6_pool"] = "Amazon"
association_set[
"ipv6_cidr_block_network_border_group"
] = ipv6_cidr_block_network_border_group
self.cidr_block_association_set[association_id] = association_set self.cidr_block_association_set[association_id] = association_set
return association_set return association_set
@ -345,6 +355,7 @@ class VPCBackend:
cidr_block, cidr_block,
instance_tenancy="default", instance_tenancy="default",
amazon_provided_ipv6_cidr_block=False, amazon_provided_ipv6_cidr_block=False,
ipv6_cidr_block_network_border_group=None,
tags=None, tags=None,
is_default=False, is_default=False,
): ):
@ -362,6 +373,7 @@ class VPCBackend:
is_default=is_default, is_default=is_default,
instance_tenancy=instance_tenancy, instance_tenancy=instance_tenancy,
amazon_provided_ipv6_cidr_block=amazon_provided_ipv6_cidr_block, amazon_provided_ipv6_cidr_block=amazon_provided_ipv6_cidr_block,
ipv6_cidr_block_network_border_group=ipv6_cidr_block_network_border_group,
) )
for tag in tags or []: for tag in tags or []:

View File

@ -4,7 +4,8 @@ from moto.core.responses import BaseResponse
class AvailabilityZonesAndRegions(BaseResponse): class AvailabilityZonesAndRegions(BaseResponse):
def describe_availability_zones(self): def describe_availability_zones(self):
self.error_on_dryrun() self.error_on_dryrun()
zones = self.ec2_backend.describe_availability_zones() filters = self._filters_from_querystring()
zones = self.ec2_backend.describe_availability_zones(filters)
template = self.response_template(DESCRIBE_ZONES_RESPONSE) template = self.response_template(DESCRIBE_ZONES_RESPONSE)
return template.render(zones=zones) return template.render(zones=zones)
@ -38,6 +39,7 @@ DESCRIBE_ZONES_RESPONSE = """<DescribeAvailabilityZonesResponse xmlns="http://ec
<zoneState>available</zoneState> <zoneState>available</zoneState>
<regionName>{{ zone.region_name }}</regionName> <regionName>{{ zone.region_name }}</regionName>
<zoneId>{{ zone.zone_id }}</zoneId> <zoneId>{{ zone.zone_id }}</zoneId>
<zoneType>{{ zone.zone_type }}</zoneType>
<messageSet/> <messageSet/>
</item> </item>
{% endfor %} {% endfor %}

View File

@ -25,13 +25,19 @@ class VPCs(EC2BaseResponse):
amazon_provided_ipv6_cidr_block = self._get_param( amazon_provided_ipv6_cidr_block = self._get_param(
"AmazonProvidedIpv6CidrBlock" "AmazonProvidedIpv6CidrBlock"
) in ["true", "True"] ) in ["true", "True"]
ipv6_cidr_block_network_border_group = self._get_param(
"Ipv6CidrBlockNetworkBorderGroup"
)
# if network group is not specified, use the region of the VPC
if not ipv6_cidr_block_network_border_group:
ipv6_cidr_block_network_border_group = self.region
if tags: if tags:
tags = tags[0].get("Tag") tags = tags[0].get("Tag")
vpc = self.ec2_backend.create_vpc( vpc = self.ec2_backend.create_vpc(
cidr_block, cidr_block,
instance_tenancy, instance_tenancy,
amazon_provided_ipv6_cidr_block=amazon_provided_ipv6_cidr_block, amazon_provided_ipv6_cidr_block=amazon_provided_ipv6_cidr_block,
ipv6_cidr_block_network_border_group=ipv6_cidr_block_network_border_group,
tags=tags, tags=tags,
) )
doc_date = self._get_doc_date() doc_date = self._get_doc_date()
@ -55,7 +61,7 @@ class VPCs(EC2BaseResponse):
else "2016-11-15" else "2016-11-15"
) )
template = self.response_template(DESCRIBE_VPCS_RESPONSE) template = self.response_template(DESCRIBE_VPCS_RESPONSE)
return template.render(vpcs=vpcs, doc_date=doc_date) return template.render(vpcs=vpcs, doc_date=doc_date, region=self.region)
def modify_vpc_tenancy(self): def modify_vpc_tenancy(self):
vpc_id = self._get_param("VpcId") vpc_id = self._get_param("VpcId")
@ -452,6 +458,8 @@ DESCRIBE_VPCS_RESPONSE = """
<ipv6CidrBlockState> <ipv6CidrBlockState>
<state>{{assoc.cidr_block_state.state}}</state> <state>{{assoc.cidr_block_state.state}}</state>
</ipv6CidrBlockState> </ipv6CidrBlockState>
<networkBorderGroup>{{ assoc.ipv6_cidr_block_network_border_group }}</networkBorderGroup>
<ipv6Pool>{{ assoc.ipv6_pool }}</ipv6Pool>
</item> </item>
{% endfor %} {% endfor %}
</ipv6CidrBlockAssociationSet> </ipv6CidrBlockAssociationSet>

View File

@ -281,7 +281,7 @@ index d42232fc09..8f7f983957 100644
) )
-const EventualConsistencyTimeout = 5 * time.Minute -const EventualConsistencyTimeout = 5 * time.Minute
+const EventualConsistencyTimeout = 1 * time.Minute +const EventualConsistencyTimeout = 5 * time.Second
// CreateTags creates {{ .ServicePackage }} service tags for new resources. // CreateTags creates {{ .ServicePackage }} service tags for new resources.
// The identifier is typically the Amazon Resource Name (ARN), although // The identifier is typically the Amazon Resource Name (ARN), although
@ -1021,8 +1021,8 @@ index 5ad62e86c0..68209e7fb8 100644
const ( const (
- vpcIPv6CIDRBlockAssociationCreatedTimeout = 10 * time.Minute - vpcIPv6CIDRBlockAssociationCreatedTimeout = 10 * time.Minute
- vpcIPv6CIDRBlockAssociationDeletedTimeout = 5 * time.Minute - vpcIPv6CIDRBlockAssociationDeletedTimeout = 5 * time.Minute
+ vpcIPv6CIDRBlockAssociationCreatedTimeout = 10 * time.Second + vpcIPv6CIDRBlockAssociationCreatedTimeout = 15 * time.Second
+ vpcIPv6CIDRBlockAssociationDeletedTimeout = 5 * time.Second + vpcIPv6CIDRBlockAssociationDeletedTimeout = 15 * time.Second
) )
func WaitVPCIPv6CIDRBlockAssociationCreated(conn *ec2.EC2, id string, timeout time.Duration) (*ec2.VpcCidrBlockState, error) { func WaitVPCIPv6CIDRBlockAssociationCreated(conn *ec2.EC2, id string, timeout time.Duration) (*ec2.VpcCidrBlockState, error) {

View File

@ -56,6 +56,7 @@ ec2:
- TestAccEC2VPCsDataSource - TestAccEC2VPCsDataSource
- TestAccEC2VPNGateway_ - TestAccEC2VPNGateway_
- TestAccEC2VPNGatewayAttachment_ - TestAccEC2VPNGatewayAttachment_
- TestAccVPC_
ecr: ecr:
- TestAccECRLifecyclePolicy - TestAccECRLifecyclePolicy
- TestAccECRRegistryPolicy - TestAccECRRegistryPolicy