moto/moto/ec2/responses/vpc_service_configuration.py
2022-01-30 22:00:26 -01:00

224 lines
8.6 KiB
Python

from moto.core.responses import BaseResponse
from ..exceptions import NoLoadBalancersProvided
class VPCEndpointServiceConfiguration(BaseResponse):
def create_vpc_endpoint_service_configuration(self):
gateway_lbs = self._get_multi_param("GatewayLoadBalancerArn")
network_lbs = self._get_multi_param("NetworkLoadBalancerArn")
if not gateway_lbs and not network_lbs:
raise NoLoadBalancersProvided
tags = self._get_multi_param("TagSpecification")
if tags:
tags = tags[0].get("Tag")
acceptance_required = (
str(self._get_param("AcceptanceRequired", "true")).lower() == "true"
)
private_dns_name = self._get_param("PrivateDnsName")
config = self.ec2_backend.create_vpc_endpoint_service_configuration(
gateway_lbs or network_lbs,
acceptance_required=acceptance_required,
private_dns_name=private_dns_name,
tags=tags,
)
template = self.response_template(CREATE_VPC_ENDPOINT_SERVICE_CONFIGURATION)
return template.render(config=config)
def describe_vpc_endpoint_service_configurations(self):
service_ids = self._get_multi_param("ServiceId")
configs = self.ec2_backend.describe_vpc_endpoint_service_configurations(
service_ids
)
template = self.response_template(DESCRIBE_VPC_ENDPOINT_SERVICE_CONFIGURATION)
return template.render(configs=configs)
def delete_vpc_endpoint_service_configurations(self):
service_ids = self._get_multi_param("ServiceId")
missing_configs = self.ec2_backend.delete_vpc_endpoint_service_configurations(
service_ids
)
template = self.response_template(DELETE_VPC_ENDPOINT_SERVICE_CONFIGURATION)
return template.render(missing=missing_configs)
def describe_vpc_endpoint_service_permissions(self):
service_id = self._get_param("ServiceId")
principals = self.ec2_backend.describe_vpc_endpoint_service_permissions(
service_id
)
template = self.response_template(DESCRIBE_VPC_ENDPOINT_SERVICE_PERMISSIONS)
return template.render(principals=principals)
def modify_vpc_endpoint_service_configuration(self):
service_id = self._get_param("ServiceId")
private_dns_name = self._get_param("PrivateDnsName")
acceptance_required = self._get_param("AcceptanceRequired")
add_network_lbs = self._get_multi_param("AddNetworkLoadBalancerArn")
remove_network_lbs = self._get_multi_param("RemoveNetworkLoadBalancerArn")
add_gateway_lbs = self._get_multi_param("AddGatewayLoadBalancerArn")
remove_gateway_lbs = self._get_multi_param("RemoveGatewayLoadBalancerArn")
self.ec2_backend.modify_vpc_endpoint_service_configuration(
service_id,
acceptance_required=acceptance_required,
private_dns_name=private_dns_name,
add_network_lbs=add_network_lbs,
remove_network_lbs=remove_network_lbs,
add_gateway_lbs=add_gateway_lbs,
remove_gateway_lbs=remove_gateway_lbs,
)
return MODIFY_VPC_ENDPOINT_SERVICE_CONFIGURATION
def modify_vpc_endpoint_service_permissions(self):
service_id = self._get_param("ServiceId")
add_principals = self._get_multi_param("AddAllowedPrincipals")
remove_principals = self._get_multi_param("RemoveAllowedPrincipals")
self.ec2_backend.modify_vpc_endpoint_service_permissions(
service_id, add_principals, remove_principals
)
return MODIFY_VPC_ENDPOINT_SERVICE_PERMISSIONS
CREATE_VPC_ENDPOINT_SERVICE_CONFIGURATION = """
<CreateVpcEndpointServiceConfigurationResult xmlns="http://ec2.amazonaws.com/doc/2013-10-15/">
<requestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</requestId>
<serviceConfiguration>
<serviceType>
<item><serviceType>{{ config.service_type }}</serviceType></item>
</serviceType>
<serviceId>{{ config.id }}</serviceId>
<serviceName>{{ config.service_name }}</serviceName>
<serviceState>{{ config.service_state }}</serviceState>
<availabilityZoneSet>
{% for zone in config.availability_zones %}<item>{{ zone }}</item>{% endfor %}
</availabilityZoneSet>
<acceptanceRequired>{{ 'true' if config.acceptance_required else 'false' }}</acceptanceRequired>
<managesVpcEndpoints>{{ 'true' if config.manages_vpc_endpoints else 'false' }}</managesVpcEndpoints>
{%- if config.network_load_balancer_arns %}
<networkLoadBalancerArnSet>
{% for lb in config.network_load_balancer_arns %}<item>{{ lb }}</item>{% endfor %}
</networkLoadBalancerArnSet>
{% endif -%}
{%- if config.gateway_load_balancer_arns %}
<gatewayLoadBalancerArnSet>
{% for lb in config.gateway_load_balancer_arns %}<item>{{ lb }}</item>{% endfor %}
</gatewayLoadBalancerArnSet>
{% endif -%}
<baseEndpointDnsNameSet><item>{{ config.endpoint_dns_name }}</item></baseEndpointDnsNameSet>
<privateDnsName>{{ config.private_dns_name }}</privateDnsName>
<privateDnsNameConfiguration>
{% if config.private_dns_name %}
<state>verified</state>
<type>TXT</type>
<value>val</value>
<name>n</name>
{% endif %}
</privateDnsNameConfiguration>
</serviceConfiguration>
</CreateVpcEndpointServiceConfigurationResult>
"""
DESCRIBE_VPC_ENDPOINT_SERVICE_CONFIGURATION = """
<DescribeVpcEndpointServiceConfigurationsResult>
<serviceConfigurationSet>
{% for config in configs %}
<item>
<serviceType>
<item><serviceType>{{ config.service_type }}</serviceType></item>
</serviceType>
<serviceId>{{ config.id }}</serviceId>
<serviceName>{{ config.service_name }}</serviceName>
<serviceState>{{ config.service_state }}</serviceState>
<availabilityZoneSet>
{% for zone in config.availability_zones %}<item>{{ zone }}</item>{% endfor %}
</availabilityZoneSet>
<acceptanceRequired>{{ 'true' if config.acceptance_required else 'false' }}</acceptanceRequired>
<managesVpcEndpoints>{{ 'true' if config.manages_vpc_endpoints else 'false' }}</managesVpcEndpoints>
{%- if config.network_load_balancer_arns %}
<networkLoadBalancerArnSet>
{% for lb in config.network_load_balancer_arns %}<item>{{ lb }}</item>{% endfor %}
</networkLoadBalancerArnSet>
{% endif -%}
{%- if config.gateway_load_balancer_arns %}
<gatewayLoadBalancerArnSet>
{% for lb in config.gateway_load_balancer_arns %}<item>{{ lb }}</item>{% endfor %}
</gatewayLoadBalancerArnSet>
{% endif -%}
<baseEndpointDnsNameSet><item>{{ config.endpoint_dns_name }}</item></baseEndpointDnsNameSet>
<privateDnsName>{{ config.private_dns_name }}</privateDnsName>
<privateDnsNameConfiguration>
{% if config.private_dns_name %}
<state>verified</state>
<type>TXT</type>
<value>val</value>
<name>n</name>
{% endif %}
</privateDnsNameConfiguration>
<tagSet>
{% for tag in config.get_tags() %}
<item>
<key>{{ tag.key }}</key>
<value>{{ tag.value }}</value>
</item>
{% endfor %}
</tagSet>
</item>
{% endfor %}
</serviceConfigurationSet>
</DescribeVpcEndpointServiceConfigurationsResult>
"""
DELETE_VPC_ENDPOINT_SERVICE_CONFIGURATION = """
<DeleteVpcEndpointServiceConfigurationsResult>
<unsuccessful>
{% for m in missing %}
<item>
<error>
<code>InvalidVpcEndpointService.NotFound</code>
<message>The VpcEndpointService Id '{{ m }}' does not exist</message>
</error>
<resourceId>{{ m }}</resourceId>
</item>
{% endfor %}
</unsuccessful>
</DeleteVpcEndpointServiceConfigurationsResult>
"""
DESCRIBE_VPC_ENDPOINT_SERVICE_PERMISSIONS = """
<DescribeVpcEndpointServicePermissionsResult>
<allowedPrincipals>
{% for principal in principals %}
<item>
<principal>{{ principal }}</principal>
</item>
{% endfor %}
</allowedPrincipals>
</DescribeVpcEndpointServicePermissionsResult>
"""
MODIFY_VPC_ENDPOINT_SERVICE_PERMISSIONS = """
<ModifyVpcEndpointServicePermissionsResult>
<return>true</return>
</ModifyVpcEndpointServicePermissionsResult>
"""
MODIFY_VPC_ENDPOINT_SERVICE_CONFIGURATION = """
<ModifyVpcEndpointServiceConfigurationResult>
<return>true</return>
</ModifyVpcEndpointServiceConfigurationResult>
"""