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 = """ 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE {{ config.service_type }} {{ config.id }} {{ config.service_name }} {{ config.service_state }} {% for zone in config.availability_zones %}{{ zone }}{% endfor %} {{ 'true' if config.acceptance_required else 'false' }} {{ 'true' if config.manages_vpc_endpoints else 'false' }} {%- if config.network_load_balancer_arns %} {% for lb in config.network_load_balancer_arns %}{{ lb }}{% endfor %} {% endif -%} {%- if config.gateway_load_balancer_arns %} {% for lb in config.gateway_load_balancer_arns %}{{ lb }}{% endfor %} {% endif -%} {{ config.endpoint_dns_name }} {{ config.private_dns_name }} {% if config.private_dns_name %} verified TXT val n {% endif %} """ DESCRIBE_VPC_ENDPOINT_SERVICE_CONFIGURATION = """ {% for config in configs %} {{ config.service_type }} {{ config.id }} {{ config.service_name }} {{ config.service_state }} {% for zone in config.availability_zones %}{{ zone }}{% endfor %} {{ 'true' if config.acceptance_required else 'false' }} {{ 'true' if config.manages_vpc_endpoints else 'false' }} {%- if config.network_load_balancer_arns %} {% for lb in config.network_load_balancer_arns %}{{ lb }}{% endfor %} {% endif -%} {%- if config.gateway_load_balancer_arns %} {% for lb in config.gateway_load_balancer_arns %}{{ lb }}{% endfor %} {% endif -%} {{ config.endpoint_dns_name }} {{ config.private_dns_name }} {% if config.private_dns_name %} verified TXT val n {% endif %} {% for tag in config.get_tags() %} {{ tag.key }} {{ tag.value }} {% endfor %} {% endfor %} """ DELETE_VPC_ENDPOINT_SERVICE_CONFIGURATION = """ {% for m in missing %} InvalidVpcEndpointService.NotFound The VpcEndpointService Id '{{ m }}' does not exist {{ m }} {% endfor %} """ DESCRIBE_VPC_ENDPOINT_SERVICE_PERMISSIONS = """ {% for principal in principals %} {{ principal }} {% endfor %} """ MODIFY_VPC_ENDPOINT_SERVICE_PERMISSIONS = """ true """ MODIFY_VPC_ENDPOINT_SERVICE_CONFIGURATION = """ true """