EC2: describe_vpc_endpoint_services() now returns user-defined ones (#6578)

This commit is contained in:
Bert Blommers 2023-08-01 09:29:20 +00:00 committed by GitHub
parent 95dfa04691
commit 58a981a002
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 6 deletions

View File

@ -41,6 +41,21 @@ class VPCServiceConfiguration(TaggedEC2Resource, CloudFormationModel):
self.principals: List[str] = [] self.principals: List[str] = []
self.ec2_backend = ec2_backend self.ec2_backend = ec2_backend
def to_dict(self) -> Dict[str, Any]:
return {
"AcceptanceRequired": self.acceptance_required,
"AvailabilityZones": self.availability_zones,
"BaseEndpointDnsNames": [self.endpoint_dns_name],
"ManagesVpcEndpoints": self.manages_vpc_endpoints,
"Owner": self.ec2_backend.account_id,
"PrivateDnsName": self.private_dns_name,
"PrivateDnsNames": [{"PrivateDnsName": self.private_dns_name}],
"ServiceId": self.id,
"ServiceName": self.service_name,
"ServiceType": [{"ServiceType": self.service_type}],
"VpcEndpointPolicySupported": True,
}
class VPCServiceConfigurationBackend: class VPCServiceConfigurationBackend:
def __init__(self) -> None: def __init__(self) -> None:

View File

@ -845,13 +845,16 @@ class VPCBackend:
default_services = self._collect_default_endpoint_services( default_services = self._collect_default_endpoint_services(
self.account_id, region # type: ignore[attr-defined] self.account_id, region # type: ignore[attr-defined]
) )
custom_services = [x.to_dict() for x in self.configurations.values()] # type: ignore
all_services = default_services + custom_services
for service_name in service_names: for service_name in service_names:
if service_name not in [x["ServiceName"] for x in default_services]: if service_name not in [x["ServiceName"] for x in all_services]:
raise InvalidServiceName(service_name) raise InvalidServiceName(service_name)
# Apply filters specified in the service_names and filters arguments. # Apply filters specified in the service_names and filters arguments.
filtered_services = sorted( filtered_services = sorted(
self._filter_endpoint_services(service_names, filters, default_services), self._filter_endpoint_services(service_names, filters, all_services),
key=itemgetter("ServiceName"), key=itemgetter("ServiceName"),
) )

View File

@ -3,6 +3,7 @@ import pytest
from botocore.exceptions import ClientError from botocore.exceptions import ClientError
from moto import mock_ec2, mock_elbv2 from moto import mock_ec2, mock_elbv2
from moto.core import DEFAULT_ACCOUNT_ID
from moto.moto_api._internal import mock_random from moto.moto_api._internal import mock_random
# See our Development Tips on writing tests for hints on how to write good tests: # See our Development Tips on writing tests for hints on how to write good tests:
@ -101,13 +102,11 @@ def test_create_vpc_endpoint_service_configuration_with_options():
region_name="us-east-2", lb_type="gateway", zone="us-east-1c" region_name="us-east-2", lb_type="gateway", zone="us-east-1c"
) )
resp = client.create_vpc_endpoint_service_configuration( config = client.create_vpc_endpoint_service_configuration(
GatewayLoadBalancerArns=[lb_arn], GatewayLoadBalancerArns=[lb_arn],
AcceptanceRequired=False, AcceptanceRequired=False,
PrivateDnsName="example.com", PrivateDnsName="example.com",
) )["ServiceConfiguration"]
assert "ServiceConfiguration" in resp
config = resp["ServiceConfiguration"]
assert config["AcceptanceRequired"] is False assert config["AcceptanceRequired"] is False
assert config["PrivateDnsName"] == "example.com" assert config["PrivateDnsName"] == "example.com"
@ -118,6 +117,13 @@ def test_create_vpc_endpoint_service_configuration_with_options():
"Value": "val", "Value": "val",
} }
service_name = config["ServiceName"]
detail = client.describe_vpc_endpoint_services(ServiceNames=[service_name])[
"ServiceDetails"
][0]
assert detail["ServiceName"] == service_name
assert detail["Owner"] == DEFAULT_ACCOUNT_ID
@mock_ec2 @mock_ec2
@mock_elbv2 @mock_elbv2