moto/moto/elb/responses.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

896 lines
36 KiB
Python
Raw Normal View History

2013-07-23 02:50:58 +00:00
from moto.core.responses import BaseResponse
from .models import elb_backends
from .exceptions import DuplicateTagKeysError, LoadBalancerNotFoundError
2013-07-23 02:50:58 +00:00
class ELBResponse(BaseResponse):
2022-08-13 09:49:43 +00:00
def __init__(self):
super().__init__(service_name="elb")
@property
def elb_backend(self):
2022-08-13 09:49:43 +00:00
return elb_backends[self.current_account][self.region]
2013-07-23 02:50:58 +00:00
def create_load_balancer(self):
load_balancer_name = self._get_param("LoadBalancerName")
availability_zones = self._get_multi_param("AvailabilityZones.member")
ports = self._get_list_prefix("Listeners.member")
2015-12-02 22:46:24 +00:00
scheme = self._get_param("Scheme")
subnets = self._get_multi_param("Subnets.member")
security_groups = self._get_multi_param("SecurityGroups.member")
2014-07-15 00:54:45 +00:00
load_balancer = self.elb_backend.create_load_balancer(
2013-07-23 02:50:58 +00:00
name=load_balancer_name,
zones=availability_zones,
ports=ports,
scheme=scheme,
subnets=subnets,
security_groups=security_groups,
2013-07-23 02:50:58 +00:00
)
self._add_tags(load_balancer)
template = self.response_template(CREATE_LOAD_BALANCER_TEMPLATE)
return template.render(load_balancer=load_balancer)
2013-07-23 02:50:58 +00:00
2014-07-15 00:54:45 +00:00
def create_load_balancer_listeners(self):
load_balancer_name = self._get_param("LoadBalancerName")
ports = self._get_list_prefix("Listeners.member")
2014-07-15 00:54:45 +00:00
2017-02-24 02:37:43 +00:00
self.elb_backend.create_load_balancer_listeners(
name=load_balancer_name, ports=ports
)
2014-07-15 00:54:45 +00:00
2017-02-24 02:37:43 +00:00
template = self.response_template(CREATE_LOAD_BALANCER_LISTENERS_TEMPLATE)
2014-07-15 00:54:45 +00:00
return template.render()
2013-07-23 02:50:58 +00:00
def describe_load_balancers(self):
names = self._get_multi_param("LoadBalancerNames.member")
2017-05-11 01:58:42 +00:00
all_load_balancers = list(self.elb_backend.describe_load_balancers(names))
marker = self._get_param("Marker")
all_names = [balancer.name for balancer in all_load_balancers]
if marker:
start = all_names.index(marker) + 1
else:
start = 0
page_size = self._get_int_param(
"PageSize", 50
) # the default is 400, but using 50 to make testing easier
2017-05-11 01:58:42 +00:00
load_balancers_resp = all_load_balancers[start : start + page_size]
next_marker = None
if len(all_load_balancers) > start + page_size:
next_marker = load_balancers_resp[-1].name
template = self.response_template(DESCRIBE_LOAD_BALANCERS_TEMPLATE)
2022-03-21 20:55:19 +00:00
return template.render(
2022-08-13 09:49:43 +00:00
ACCOUNT_ID=self.current_account,
2022-03-21 20:55:19 +00:00
load_balancers=load_balancers_resp,
marker=next_marker,
)
2013-07-23 02:50:58 +00:00
2014-07-15 00:54:45 +00:00
def delete_load_balancer_listeners(self):
load_balancer_name = self._get_param("LoadBalancerName")
ports = self._get_multi_param("LoadBalancerPorts.member")
ports = [int(port) for port in ports]
2014-07-19 00:31:57 +00:00
2017-02-24 02:37:43 +00:00
self.elb_backend.delete_load_balancer_listeners(load_balancer_name, ports)
template = self.response_template(DELETE_LOAD_BALANCER_LISTENERS)
2014-07-15 00:54:45 +00:00
return template.render()
2013-07-23 02:50:58 +00:00
def delete_load_balancer(self):
load_balancer_name = self._get_param("LoadBalancerName")
self.elb_backend.delete_load_balancer(load_balancer_name)
template = self.response_template(DELETE_LOAD_BALANCER_TEMPLATE)
2013-07-23 02:50:58 +00:00
return template.render()
2022-03-21 20:55:19 +00:00
def delete_load_balancer_policy(self):
load_balancer_name = self.querystring.get("LoadBalancerName")[0]
names = self._get_param("PolicyName")
self.elb_backend.delete_load_balancer_policy(
lb_name=load_balancer_name, policy_name=names
)
template = self.response_template(DELETE_LOAD_BALANCER_POLICY)
return template.render()
def apply_security_groups_to_load_balancer(self):
load_balancer_name = self._get_param("LoadBalancerName")
security_group_ids = self._get_multi_param("SecurityGroups.member")
self.elb_backend.apply_security_groups_to_load_balancer(
load_balancer_name, security_group_ids
)
template = self.response_template(APPLY_SECURITY_GROUPS_TEMPLATE)
return template.render(security_group_ids=security_group_ids)
2013-07-23 02:50:58 +00:00
def configure_health_check(self):
check = self.elb_backend.configure_health_check(
load_balancer_name=self._get_param("LoadBalancerName"),
timeout=self._get_param("HealthCheck.Timeout"),
healthy_threshold=self._get_param("HealthCheck.HealthyThreshold"),
2017-02-24 02:37:43 +00:00
unhealthy_threshold=self._get_param("HealthCheck.UnhealthyThreshold"),
interval=self._get_param("HealthCheck.Interval"),
target=self._get_param("HealthCheck.Target"),
2013-07-23 02:50:58 +00:00
)
template = self.response_template(CONFIGURE_HEALTH_CHECK_TEMPLATE)
2013-07-23 02:50:58 +00:00
return template.render(check=check)
def register_instances_with_load_balancer(self):
load_balancer_name = self._get_param("LoadBalancerName")
2017-07-19 23:33:24 +00:00
instance_ids = [
list(param.values())[0]
for param in self._get_list_prefix("Instances.member")
]
template = self.response_template(REGISTER_INSTANCES_TEMPLATE)
2017-02-24 02:37:43 +00:00
load_balancer = self.elb_backend.register_instances(
load_balancer_name, instance_ids
)
2013-07-23 02:50:58 +00:00
return template.render(load_balancer=load_balancer)
def set_load_balancer_listener_ssl_certificate(self):
load_balancer_name = self._get_param("LoadBalancerName")
2014-07-15 00:54:45 +00:00
ssl_certificate_id = self.querystring["SSLCertificateId"][0]
lb_port = self.querystring["LoadBalancerPort"][0]
2021-09-24 20:00:10 +00:00
self.elb_backend.set_load_balancer_listener_ssl_certificate(
2017-02-24 02:37:43 +00:00
load_balancer_name, lb_port, ssl_certificate_id
)
2014-07-15 00:54:45 +00:00
template = self.response_template(SET_LOAD_BALANCER_SSL_CERTIFICATE)
2014-07-15 00:54:45 +00:00
return template.render()
2013-07-23 02:50:58 +00:00
def deregister_instances_from_load_balancer(self):
load_balancer_name = self._get_param("LoadBalancerName")
2017-07-19 23:33:24 +00:00
instance_ids = [
list(param.values())[0]
for param in self._get_list_prefix("Instances.member")
]
template = self.response_template(DEREGISTER_INSTANCES_TEMPLATE)
2017-02-24 02:37:43 +00:00
load_balancer = self.elb_backend.deregister_instances(
load_balancer_name, instance_ids
)
2013-07-23 02:50:58 +00:00
return template.render(load_balancer=load_balancer)
2015-03-22 14:35:27 +00:00
def describe_load_balancer_attributes(self):
load_balancer_name = self._get_param("LoadBalancerName")
load_balancer = self.elb_backend.get_load_balancer(load_balancer_name)
2015-03-22 14:35:27 +00:00
template = self.response_template(DESCRIBE_ATTRIBUTES_TEMPLATE)
return template.render(attributes=load_balancer.attributes)
def modify_load_balancer_attributes(self):
load_balancer_name = self._get_param("LoadBalancerName")
load_balancer = self.elb_backend.get_load_balancer(load_balancer_name)
2015-03-22 14:35:27 +00:00
2017-02-24 02:37:43 +00:00
cross_zone = self._get_dict_param(
"LoadBalancerAttributes.CrossZoneLoadBalancing."
)
2015-03-22 14:35:27 +00:00
if cross_zone:
self.elb_backend.modify_load_balancer_attributes(
load_balancer_name, cross_zone=cross_zone
2017-02-24 02:37:43 +00:00
)
2015-03-22 14:35:27 +00:00
access_log = self._get_dict_param("LoadBalancerAttributes.AccessLog.")
2015-03-22 14:35:27 +00:00
if access_log:
self.elb_backend.modify_load_balancer_attributes(
load_balancer_name, access_log=access_log
)
2015-03-22 14:35:27 +00:00
2017-02-24 02:37:43 +00:00
connection_draining = self._get_dict_param(
"LoadBalancerAttributes.ConnectionDraining."
)
2015-03-22 14:35:27 +00:00
if connection_draining:
self.elb_backend.modify_load_balancer_attributes(
load_balancer_name, connection_draining=connection_draining
)
2015-03-22 14:35:27 +00:00
2017-02-24 02:37:43 +00:00
connection_settings = self._get_dict_param(
"LoadBalancerAttributes.ConnectionSettings."
)
2015-03-22 14:35:27 +00:00
if connection_settings:
self.elb_backend.modify_load_balancer_attributes(
load_balancer_name, connection_settings=connection_settings
2017-02-24 02:37:43 +00:00
)
2015-03-22 14:35:27 +00:00
template = self.response_template(MODIFY_ATTRIBUTES_TEMPLATE)
return template.render(
load_balancer=load_balancer, attributes=load_balancer.attributes
)
2015-03-22 14:35:27 +00:00
2015-07-14 23:54:58 +00:00
def create_load_balancer_policy(self):
load_balancer_name = self._get_param("LoadBalancerName")
2015-07-14 23:54:58 +00:00
policy_name = self._get_param("PolicyName")
2022-03-21 20:55:19 +00:00
policy_type_name = self._get_param("PolicyTypeName")
policy_attrs = self._get_multi_param("PolicyAttributes.member.")
2015-07-14 23:54:58 +00:00
2022-03-21 20:55:19 +00:00
self.elb_backend.create_lb_other_policy(
load_balancer_name, policy_name, policy_type_name, policy_attrs
)
2015-07-14 23:54:58 +00:00
template = self.response_template(CREATE_LOAD_BALANCER_POLICY_TEMPLATE)
return template.render()
def create_app_cookie_stickiness_policy(self):
load_balancer_name = self._get_param("LoadBalancerName")
2015-07-14 23:54:58 +00:00
2022-03-21 20:55:19 +00:00
policy_name = self._get_param("PolicyName")
cookie_name = self._get_param("CookieName")
2015-07-14 23:54:58 +00:00
2022-03-21 20:55:19 +00:00
self.elb_backend.create_app_cookie_stickiness_policy(
load_balancer_name, policy_name, cookie_name
)
2015-07-14 23:54:58 +00:00
2021-09-24 20:00:10 +00:00
template = self.response_template(CREATE_APP_COOKIE_STICKINESS_POLICY_TEMPLATE)
2015-07-14 23:54:58 +00:00
return template.render()
def create_lb_cookie_stickiness_policy(self):
load_balancer_name = self._get_param("LoadBalancerName")
2015-07-14 23:54:58 +00:00
2022-03-21 20:55:19 +00:00
policy_name = self._get_param("PolicyName")
cookie_expirations = self._get_param("CookieExpirationPeriod")
2015-07-14 23:54:58 +00:00
if cookie_expirations:
2022-03-21 20:55:19 +00:00
cookie_expiration_period = int(cookie_expirations)
2015-07-14 23:54:58 +00:00
else:
2022-03-21 20:55:19 +00:00
cookie_expiration_period = None
2015-07-14 23:54:58 +00:00
2022-03-21 20:55:19 +00:00
self.elb_backend.create_lb_cookie_stickiness_policy(
load_balancer_name, policy_name, cookie_expiration_period
)
2015-07-14 23:54:58 +00:00
2021-09-24 20:00:10 +00:00
template = self.response_template(CREATE_LB_COOKIE_STICKINESS_POLICY_TEMPLATE)
2015-07-14 23:54:58 +00:00
return template.render()
def set_load_balancer_policies_of_listener(self):
load_balancer_name = self._get_param("LoadBalancerName")
load_balancer = self.elb_backend.get_load_balancer(load_balancer_name)
load_balancer_port = int(self._get_param("LoadBalancerPort"))
2015-07-14 23:54:58 +00:00
2017-02-24 02:37:43 +00:00
mb_listener = [
listner
for listner in load_balancer.listeners
if int(listner.load_balancer_port) == load_balancer_port
2017-02-24 02:37:43 +00:00
]
2015-07-14 23:54:58 +00:00
if mb_listener:
policies = self._get_multi_param("PolicyNames.member")
2017-02-24 02:37:43 +00:00
self.elb_backend.set_load_balancer_policies_of_listener(
load_balancer_name, load_balancer_port, policies
)
2015-07-14 23:54:58 +00:00
# else: explode?
2017-02-24 02:37:43 +00:00
template = self.response_template(
SET_LOAD_BALANCER_POLICIES_OF_LISTENER_TEMPLATE
)
2015-07-14 23:54:58 +00:00
return template.render()
2015-07-14 23:54:58 +00:00
def set_load_balancer_policies_for_backend_server(self):
load_balancer_name = self.querystring.get("LoadBalancerName")[0]
load_balancer = self.elb_backend.get_load_balancer(load_balancer_name)
2015-07-14 23:54:58 +00:00
instance_port = int(self.querystring.get("InstancePort")[0])
2017-02-24 02:37:43 +00:00
mb_backend = [
b for b in load_balancer.backends if int(b.instance_port) == instance_port
]
2015-07-14 23:54:58 +00:00
if mb_backend:
policies = self._get_multi_param("PolicyNames.member")
2017-02-24 02:37:43 +00:00
self.elb_backend.set_load_balancer_policies_of_backend_server(
load_balancer_name, instance_port, policies
)
2015-07-14 23:54:58 +00:00
# else: explode?
2017-02-24 02:37:43 +00:00
template = self.response_template(
SET_LOAD_BALANCER_POLICIES_FOR_BACKEND_SERVER_TEMPLATE
)
2015-07-14 23:54:58 +00:00
return template.render()
2022-03-21 20:55:19 +00:00
def describe_load_balancer_policies(self):
load_balancer_name = self.querystring.get("LoadBalancerName")[0]
names = self._get_multi_param("PolicyNames.member.")
policies = self.elb_backend.describe_load_balancer_policies(
lb_name=load_balancer_name, policy_names=names
)
template = self.response_template(DESCRIBE_LOAD_BALANCER_POLICIES_TEMPLATE)
return template.render(policies=policies)
2015-03-22 20:00:16 +00:00
def describe_instance_health(self):
lb_name = self._get_param("LoadBalancerName")
instances = self._get_params().get("Instances", [])
instances = self.elb_backend.describe_instance_health(lb_name, instances)
2015-03-22 20:00:16 +00:00
template = self.response_template(DESCRIBE_INSTANCE_HEALTH_TEMPLATE)
return template.render(instances=instances)
2015-03-22 20:00:16 +00:00
def add_tags(self):
for key, value in self.querystring.items():
if "LoadBalancerNames.member" in key:
load_balancer_name = value[0]
elb = self.elb_backend.get_load_balancer(load_balancer_name)
if not elb:
raise LoadBalancerNotFoundError(load_balancer_name)
self._add_tags(elb)
template = self.response_template(ADD_TAGS_TEMPLATE)
return template.render()
def remove_tags(self):
for key in self.querystring:
if "LoadBalancerNames.member" in key:
number = key.split(".")[2]
2017-02-24 02:37:43 +00:00
load_balancer_name = self._get_param(
f"LoadBalancerNames.member.{number}"
2019-10-31 15:44:26 +00:00
)
elb = self.elb_backend.get_load_balancer(load_balancer_name)
if not elb:
raise LoadBalancerNotFoundError(load_balancer_name)
for t_key, t_val in self.querystring.items():
if t_key.startswith("Tags.member."):
if t_key.split(".")[3] == "Key":
elb.remove_tag(t_val[0])
template = self.response_template(REMOVE_TAGS_TEMPLATE)
return template.render()
def describe_tags(self):
elbs = []
for key in self.querystring:
if "LoadBalancerNames.member" in key:
number = key.split(".")[2]
2017-02-24 02:37:43 +00:00
load_balancer_name = self._get_param(
f"LoadBalancerNames.member.{number}"
2019-10-31 15:44:26 +00:00
)
elb = self.elb_backend.get_load_balancer(load_balancer_name)
if not elb:
raise LoadBalancerNotFoundError(load_balancer_name)
elbs.append(elb)
template = self.response_template(DESCRIBE_TAGS_TEMPLATE)
return template.render(load_balancers=elbs)
def _add_tags(self, elb):
tag_values = []
tag_keys = []
for t_key, t_val in sorted(self.querystring.items()):
if t_key.startswith("Tags.member."):
if t_key.split(".")[3] == "Key":
tag_keys.extend(t_val)
elif t_key.split(".")[3] == "Value":
tag_values.extend(t_val)
counts = {}
for i in tag_keys:
counts[i] = tag_keys.count(i)
2017-02-24 02:37:43 +00:00
counts = sorted(counts.items(), key=lambda i: i[1], reverse=True)
if counts and counts[0][1] > 1:
# We have dupes...
raise DuplicateTagKeysError(counts[0])
for tag_key, tag_value in zip(tag_keys, tag_values):
elb.add_tag(tag_key, tag_value)
2022-03-21 20:55:19 +00:00
def enable_availability_zones_for_load_balancer(self):
params = self._get_params()
load_balancer_name = params.get("LoadBalancerName")
availability_zones = params.get("AvailabilityZones")
availability_zones = (
self.elb_backend.enable_availability_zones_for_load_balancer(
load_balancer_name=load_balancer_name,
availability_zones=availability_zones,
)
)
template = self.response_template(
ENABLE_AVAILABILITY_ZONES_FOR_LOAD_BALANCER_TEMPLATE
)
return template.render(availability_zones=availability_zones)
def disable_availability_zones_for_load_balancer(self):
params = self._get_params()
load_balancer_name = params.get("LoadBalancerName")
availability_zones = params.get("AvailabilityZones")
availability_zones = (
self.elb_backend.disable_availability_zones_for_load_balancer(
load_balancer_name=load_balancer_name,
availability_zones=availability_zones,
)
)
template = self.response_template(
DISABLE_AVAILABILITY_ZONES_FOR_LOAD_BALANCER_TEMPLATE
)
return template.render(availability_zones=availability_zones)
def attach_load_balancer_to_subnets(self):
params = self._get_params()
load_balancer_name = params.get("LoadBalancerName")
subnets = params.get("Subnets")
all_subnets = self.elb_backend.attach_load_balancer_to_subnets(
load_balancer_name, subnets
)
template = self.response_template(ATTACH_LB_TO_SUBNETS_TEMPLATE)
return template.render(subnets=all_subnets)
def detach_load_balancer_from_subnets(self):
params = self._get_params()
load_balancer_name = params.get("LoadBalancerName")
subnets = params.get("Subnets")
all_subnets = self.elb_backend.detach_load_balancer_from_subnets(
load_balancer_name, subnets
)
template = self.response_template(DETACH_LB_FROM_SUBNETS_TEMPLATE)
return template.render(subnets=all_subnets)
ADD_TAGS_TEMPLATE = """<AddTagsResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<AddTagsResult/>
<ResponseMetadata>
<RequestId>360e81f7-1100-11e4-b6ed-0f30EXAMPLE</RequestId>
</ResponseMetadata>
</AddTagsResponse>"""
REMOVE_TAGS_TEMPLATE = """<RemoveTagsResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<RemoveTagsResult/>
<ResponseMetadata>
<RequestId>360e81f7-1100-11e4-b6ed-0f30EXAMPLE</RequestId>
</ResponseMetadata>
</RemoveTagsResponse>"""
DESCRIBE_TAGS_TEMPLATE = """<DescribeTagsResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<DescribeTagsResult>
<TagDescriptions>
{% for elb in load_balancers %}
<member>
<LoadBalancerName>{{ elb.name }}</LoadBalancerName>
<Tags>
{% for key, value in elb.tags.items() %}
<member>
<Value>{{ value }}</Value>
<Key>{{ key }}</Key>
</member>
{% endfor %}
</Tags>
</member>
{% endfor %}
</TagDescriptions>
</DescribeTagsResult>
<ResponseMetadata>
<RequestId>360e81f7-1100-11e4-b6ed-0f30EXAMPLE</RequestId>
</ResponseMetadata>
</DescribeTagsResponse>"""
2015-03-22 14:35:27 +00:00
2022-03-21 20:55:19 +00:00
DESCRIBE_LOAD_BALANCER_POLICIES_TEMPLATE = """<DescribeLoadBalancerPoliciesResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<DescribeLoadBalancerPoliciesResult>
<PolicyDescriptions>
{% for policy in policies %}
<member>
<PolicyName>{{ policy.policy_name }}</PolicyName>
<PolicyTypeName>{{ policy.policy_type_name }}</PolicyTypeName>
<PolicyAttributeDescriptions>
{% for attr in policy.attributes %}
<member>
<AttributeName>{{ attr["AttributeName"] }}</AttributeName>
<AttributeValue>{{ attr["AttributeValue"] }}</AttributeValue>
</member>
{% endfor %}
</PolicyAttributeDescriptions>
</member>
{% endfor %}
</PolicyDescriptions>
</DescribeLoadBalancerPoliciesResult>
<ResponseMetadata>
<RequestId>360e81f7-1100-11e4-b6ed-0f30EXAMPLE</RequestId>
</ResponseMetadata>
</DescribeLoadBalancerPoliciesResponse>"""
CREATE_LOAD_BALANCER_TEMPLATE = """<CreateLoadBalancerResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<CreateLoadBalancerResult>
<DNSName>{{ load_balancer.dns_name }}</DNSName>
</CreateLoadBalancerResult>
<ResponseMetadata>
<RequestId>1549581b-12b7-11e3-895e-1334aEXAMPLE</RequestId>
</ResponseMetadata>
</CreateLoadBalancerResponse>"""
2013-07-23 02:50:58 +00:00
2014-07-15 00:54:45 +00:00
CREATE_LOAD_BALANCER_LISTENERS_TEMPLATE = """<CreateLoadBalancerListenersResponse xmlns="http://elasticloadbalancing.amazon aws.com/doc/2012-06-01/">
<CreateLoadBalancerListenersResult/>
<ResponseMetadata>
<RequestId>1549581b-12b7-11e3-895e-1334aEXAMPLE</RequestId>
</ResponseMetadata>
</CreateLoadBalancerListenersResponse>"""
DELETE_LOAD_BALANCER_TEMPLATE = """<DeleteLoadBalancerResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<DeleteLoadBalancerResult/>
<ResponseMetadata>
<RequestId>1549581b-12b7-11e3-895e-1334aEXAMPLE</RequestId>
</ResponseMetadata>
</DeleteLoadBalancerResponse>"""
2013-07-23 02:50:58 +00:00
DESCRIBE_LOAD_BALANCERS_TEMPLATE = """<DescribeLoadBalancersResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<DescribeLoadBalancersResult>
<LoadBalancerDescriptions>
{% for load_balancer in load_balancers %}
<member>
<SecurityGroups>
{% for security_group_id in load_balancer.security_groups %}
<member>{{ security_group_id }}</member>
{% endfor %}
2013-07-23 02:50:58 +00:00
</SecurityGroups>
2022-03-21 20:55:19 +00:00
{% if load_balancer.vpc_id %}
<SourceSecurityGroup>
<OwnerAlias>{{ ACCOUNT_ID }}</OwnerAlias>
<GroupName>default</GroupName>
</SourceSecurityGroup>
{% endif %}
2013-07-23 02:50:58 +00:00
<LoadBalancerName>{{ load_balancer.name }}</LoadBalancerName>
<CreatedTime>{{ load_balancer.created_time.isoformat() }}</CreatedTime>
2013-07-23 02:50:58 +00:00
<HealthCheck>
{% if load_balancer.health_check %}
<Interval>{{ load_balancer.health_check.interval }}</Interval>
<Target>{{ load_balancer.health_check.target }}</Target>
<HealthyThreshold>{{ load_balancer.health_check.healthy_threshold }}</HealthyThreshold>
<Timeout>{{ load_balancer.health_check.timeout }}</Timeout>
<UnhealthyThreshold>{{ load_balancer.health_check.unhealthy_threshold }}</UnhealthyThreshold>
2022-03-21 20:55:19 +00:00
{% else %}
<Target></Target>
2013-07-23 02:50:58 +00:00
{% endif %}
</HealthCheck>
{% if load_balancer.vpc_id %}
<VPCId>{{ load_balancer.vpc_id }}</VPCId>
{% else %}
<VPCId />
{% endif %}
2013-07-23 02:50:58 +00:00
<ListenerDescriptions>
{% for listener in load_balancer.listeners %}
<member>
<PolicyNames>
2015-07-14 23:54:58 +00:00
{% for policy_name in listener.policy_names %}
<member>{{ policy_name }}</member>
{% endfor %}
2013-07-23 02:50:58 +00:00
</PolicyNames>
<Listener>
<Protocol>{{ listener.protocol }}</Protocol>
<LoadBalancerPort>{{ listener.load_balancer_port }}</LoadBalancerPort>
<InstanceProtocol>{{ listener.protocol }}</InstanceProtocol>
<InstancePort>{{ listener.instance_port }}</InstancePort>
2014-07-15 00:54:45 +00:00
<SSLCertificateId>{{ listener.ssl_certificate_id }}</SSLCertificateId>
2013-07-23 02:50:58 +00:00
</Listener>
</member>
{% endfor %}
</ListenerDescriptions>
<Instances>
{% for instance_id in load_balancer.instance_ids %}
<member>
<InstanceId>{{ instance_id }}</InstanceId>
</member>
{% endfor %}
</Instances>
<Policies>
2015-07-14 23:54:58 +00:00
<AppCookieStickinessPolicies>
2022-03-21 20:55:19 +00:00
{% for policy in load_balancer.policies %}
{% if policy.policy_type_name == "AppCookieStickinessPolicy" %}
2015-07-14 23:54:58 +00:00
<member>
<CookieName>{{ policy.cookie_name }}</CookieName>
<PolicyName>{{ policy.policy_name }}</PolicyName>
</member>
2022-03-21 20:55:19 +00:00
{% endif %}
{% endfor %}
2015-07-14 23:54:58 +00:00
</AppCookieStickinessPolicies>
2013-07-23 02:50:58 +00:00
<LBCookieStickinessPolicies>
2022-03-21 20:55:19 +00:00
{% for policy in load_balancer.policies %}
{% if policy.policy_type_name == "LbCookieStickinessPolicy" %}
2015-07-14 23:54:58 +00:00
<member>
{% if policy.cookie_expiration_period %}
<CookieExpirationPeriod>{{ policy.cookie_expiration_period }}</CookieExpirationPeriod>
{% endif %}
<PolicyName>{{ policy.policy_name }}</PolicyName>
</member>
2022-03-21 20:55:19 +00:00
{% endif %}
{% endfor %}
2013-07-23 02:50:58 +00:00
</LBCookieStickinessPolicies>
2015-07-14 23:54:58 +00:00
<OtherPolicies>
2022-03-21 20:55:19 +00:00
{% for policy in load_balancer.policies %}
{% if policy.policy_type_name not in ["AppCookieStickinessPolicy", "LbCookieStickinessPolicy"] %}
2015-07-14 23:54:58 +00:00
<member>{{ policy.policy_name }}</member>
2022-03-21 20:55:19 +00:00
{% endif %}
{% endfor %}
2015-07-14 23:54:58 +00:00
</OtherPolicies>
2013-07-23 02:50:58 +00:00
</Policies>
<AvailabilityZones>
{% for zone in load_balancer.zones %}
<member>{{ zone }}</member>
{% endfor %}
</AvailabilityZones>
<CanonicalHostedZoneName>{{ load_balancer.dns_name }}</CanonicalHostedZoneName>
2013-07-23 02:50:58 +00:00
<CanonicalHostedZoneNameID>Z3ZONEID</CanonicalHostedZoneNameID>
2015-12-02 22:46:24 +00:00
<Scheme>{{ load_balancer.scheme }}</Scheme>
<DNSName>{{ load_balancer.dns_name }}</DNSName>
2015-07-14 23:54:58 +00:00
<BackendServerDescriptions>
{% for backend in load_balancer.backends %}
{% if backend.policy_names %}
2015-07-14 23:54:58 +00:00
<member>
<InstancePort>{{ backend.instance_port }}</InstancePort>
<PolicyNames>
{% for policy in backend.policy_names %}
<member>{{ policy }}</member>
{% endfor %}
</PolicyNames>
2015-07-14 23:54:58 +00:00
</member>
{% endif %}
2015-07-14 23:54:58 +00:00
{% endfor %}
</BackendServerDescriptions>
2013-07-23 02:50:58 +00:00
<Subnets>
{% for subnet in load_balancer.subnets %}
2016-04-14 12:48:57 +00:00
<member>{{ subnet }}</member>
{% endfor %}
2013-07-23 02:50:58 +00:00
</Subnets>
</member>
{% endfor %}
</LoadBalancerDescriptions>
2017-05-11 01:58:42 +00:00
{% if marker %}
<NextMarker>{{ marker }}</NextMarker>
{% endif %}
2013-07-23 02:50:58 +00:00
</DescribeLoadBalancersResult>
<ResponseMetadata>
<RequestId>f9880f01-7852-629d-a6c3-3ae2-666a409287e6dc0c</RequestId>
</ResponseMetadata>
</DescribeLoadBalancersResponse>"""
APPLY_SECURITY_GROUPS_TEMPLATE = """<ApplySecurityGroupsToLoadBalancerResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<ApplySecurityGroupsToLoadBalancerResult>
<SecurityGroups>
{% for security_group_id in security_group_ids %}
<member>{{ security_group_id }}</member>
{% endfor %}
</SecurityGroups>
</ApplySecurityGroupsToLoadBalancerResult>
<ResponseMetadata>
<RequestId>f9880f01-7852-629d-a6c3-3ae2-666a409287e6dc0c</RequestId>
</ResponseMetadata>
</ApplySecurityGroupsToLoadBalancerResponse>"""
CONFIGURE_HEALTH_CHECK_TEMPLATE = """<ConfigureHealthCheckResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<ConfigureHealthCheckResult>
<HealthCheck>
<Interval>{{ check.interval }}</Interval>
<Target>{{ check.target }}</Target>
<HealthyThreshold>{{ check.healthy_threshold }}</HealthyThreshold>
<Timeout>{{ check.timeout }}</Timeout>
<UnhealthyThreshold>{{ check.unhealthy_threshold }}</UnhealthyThreshold>
</HealthCheck>
</ConfigureHealthCheckResult>
<ResponseMetadata>
<RequestId>f9880f01-7852-629d-a6c3-3ae2-666a409287e6dc0c</RequestId>
</ResponseMetadata>
</ConfigureHealthCheckResponse>"""
REGISTER_INSTANCES_TEMPLATE = """<RegisterInstancesWithLoadBalancerResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<RegisterInstancesWithLoadBalancerResult>
<Instances>
{% for instance_id in load_balancer.instance_ids %}
<member>
<InstanceId>{{ instance_id }}</InstanceId>
</member>
{% endfor %}
</Instances>
</RegisterInstancesWithLoadBalancerResult>
<ResponseMetadata>
<RequestId>f9880f01-7852-629d-a6c3-3ae2-666a409287e6dc0c</RequestId>
</ResponseMetadata>
</RegisterInstancesWithLoadBalancerResponse>"""
DEREGISTER_INSTANCES_TEMPLATE = """<DeregisterInstancesFromLoadBalancerResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<DeregisterInstancesFromLoadBalancerResult>
<Instances>
{% for instance_id in load_balancer.instance_ids %}
<member>
<InstanceId>{{ instance_id }}</InstanceId>
</member>
{% endfor %}
</Instances>
</DeregisterInstancesFromLoadBalancerResult>
<ResponseMetadata>
<RequestId>f9880f01-7852-629d-a6c3-3ae2-666a409287e6dc0c</RequestId>
</ResponseMetadata>
</DeregisterInstancesFromLoadBalancerResponse>"""
2014-07-15 00:54:45 +00:00
2022-03-21 20:55:19 +00:00
SET_LOAD_BALANCER_SSL_CERTIFICATE = """<SetLoadBalancerListenerSSLCertificateResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
2014-07-15 00:54:45 +00:00
<SetLoadBalancerListenerSSLCertificateResult/>
<ResponseMetadata>
<RequestId>83c88b9d-12b7-11e3-8b82-87b12EXAMPLE</RequestId>
</ResponseMetadata>
</SetLoadBalancerListenerSSLCertificateResponse>"""
2022-03-21 20:55:19 +00:00
DELETE_LOAD_BALANCER_LISTENERS = """<DeleteLoadBalancerListenersResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
2014-07-15 00:54:45 +00:00
<DeleteLoadBalancerListenersResult/>
<ResponseMetadata>
<RequestId>83c88b9d-12b7-11e3-8b82-87b12EXAMPLE</RequestId>
</ResponseMetadata>
</DeleteLoadBalancerListenersResponse>"""
2015-03-22 14:35:27 +00:00
2022-03-21 20:55:19 +00:00
DELETE_LOAD_BALANCER_POLICY = """<DeleteLoadBalancerPolicyResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<DeleteLoadBalancerPolicyResult/>
<ResponseMetadata>
<RequestId>83c88b9d-12b7-11e3-8b82-87b12EXAMPLE</RequestId>
</ResponseMetadata>
</DeleteLoadBalancerPolicyResponse>"""
2015-03-22 14:35:27 +00:00
DESCRIBE_ATTRIBUTES_TEMPLATE = """<DescribeLoadBalancerAttributesResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<DescribeLoadBalancerAttributesResult>
<LoadBalancerAttributes>
<AccessLog>
<Enabled>{{ attributes["access_log"]["enabled"] }}</Enabled>
{% if attributes["access_log"]["enabled"] == 'true' %}
<S3BucketName>{{ attributes["access_log"]["s3_bucket_name"] }}</S3BucketName>
<S3BucketPrefix>{{ attributes["access_log"]["s3_bucket_prefix"] }}</S3BucketPrefix>
<EmitInterval>{{ attributes["access_log"]["emit_interval"] }}</EmitInterval>
2015-03-22 14:35:27 +00:00
{% endif %}
</AccessLog>
<ConnectionSettings>
<IdleTimeout>{{ attributes["connection_settings"]["idle_timeout"] }}</IdleTimeout>
2015-03-22 14:35:27 +00:00
</ConnectionSettings>
<CrossZoneLoadBalancing>
<Enabled>{{ attributes.cross_zone_load_balancing.enabled }}</Enabled>
</CrossZoneLoadBalancing>
<ConnectionDraining>
2022-03-21 20:55:19 +00:00
<Enabled>{{ attributes["connection_draining"]["enabled"] }}</Enabled>
{% if attributes["connection_draining"]["timeout"] %}
<Timeout>{{ attributes["connection_draining"]["timeout"] }}</Timeout>
2015-03-22 14:35:27 +00:00
{% endif %}
</ConnectionDraining>
</LoadBalancerAttributes>
</DescribeLoadBalancerAttributesResult>
<ResponseMetadata>
<RequestId>83c88b9d-12b7-11e3-8b82-87b12EXAMPLE</RequestId>
</ResponseMetadata>
</DescribeLoadBalancerAttributesResponse>
"""
MODIFY_ATTRIBUTES_TEMPLATE = """<ModifyLoadBalancerAttributesResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<ModifyLoadBalancerAttributesResult>
<LoadBalancerName>{{ load_balancer.name }}</LoadBalancerName>
2015-03-22 14:35:27 +00:00
<LoadBalancerAttributes>
<AccessLog>
<Enabled>{{ attributes["access_log"]["enabled"] == 'true' }}</Enabled>
{% if attributes["access_log"]["enabled"] == 'true' %}
<S3BucketName>{{ attributes["access_log"]["s3_bucket_name"] }}</S3BucketName>
<S3BucketPrefix>{{ attributes["access_log"]["s3_bucket_prefix"] }}</S3BucketPrefix>
<EmitInterval>{{ attributes["access_log"]["emit_interval"] }}</EmitInterval>
2015-03-22 14:35:27 +00:00
{% endif %}
</AccessLog>
<ConnectionSettings>
<IdleTimeout>{{ attributes["connection_settings"]["idle_timeout"] }}</IdleTimeout>
2015-03-22 14:35:27 +00:00
</ConnectionSettings>
<CrossZoneLoadBalancing>
<Enabled>{{ attributes.cross_zone_load_balancing.enabled }}</Enabled>
</CrossZoneLoadBalancing>
<ConnectionDraining>
{% if attributes["connection_draining"]["enabled"] == 'true' %}
<Enabled>true</Enabled>
<Timeout>{{ attributes["connection_draining"]["timeout"] }}</Timeout>
{% else %}
<Enabled>false</Enabled>
2015-03-22 14:35:27 +00:00
{% endif %}
2015-03-22 20:00:16 +00:00
</ConnectionDraining>
2015-03-22 14:35:27 +00:00
</LoadBalancerAttributes>
</ModifyLoadBalancerAttributesResult>
<ResponseMetadata>
<RequestId>83c88b9d-12b7-11e3-8b82-87b12EXAMPLE</RequestId>
</ResponseMetadata>
</ModifyLoadBalancerAttributesResponse>
"""
2015-07-14 23:54:58 +00:00
CREATE_LOAD_BALANCER_POLICY_TEMPLATE = """<CreateLoadBalancerPolicyResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<CreateLoadBalancerPolicyResult/>
<ResponseMetadata>
<RequestId>83c88b9d-12b7-11e3-8b82-87b12EXAMPLE</RequestId>
</ResponseMetadata>
</CreateLoadBalancerPolicyResponse>
"""
2021-09-24 20:00:10 +00:00
CREATE_LB_COOKIE_STICKINESS_POLICY_TEMPLATE = """<CreateLBCookieStickinessPolicyResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<CreateLBCookieStickinessPolicyResult/>
<ResponseMetadata>
<RequestId>83c88b9d-12b7-11e3-8b82-87b12EXAMPLE</RequestId>
</ResponseMetadata>
</CreateLBCookieStickinessPolicyResponse>
"""
CREATE_APP_COOKIE_STICKINESS_POLICY_TEMPLATE = """<CreateAppCookieStickinessPolicyResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<CreateAppCookieStickinessPolicyResult/>
<ResponseMetadata>
<RequestId>83c88b9d-12b7-11e3-8b82-87b12EXAMPLE</RequestId>
</ResponseMetadata>
</CreateAppCookieStickinessPolicyResponse>
"""
2015-07-14 23:54:58 +00:00
SET_LOAD_BALANCER_POLICIES_OF_LISTENER_TEMPLATE = """<SetLoadBalancerPoliciesOfListenerResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<SetLoadBalancerPoliciesOfListenerResult/>
<ResponseMetadata>
<RequestId>07b1ecbc-1100-11e3-acaf-dd7edEXAMPLE</RequestId>
</ResponseMetadata>
</SetLoadBalancerPoliciesOfListenerResponse>
"""
SET_LOAD_BALANCER_POLICIES_FOR_BACKEND_SERVER_TEMPLATE = """<SetLoadBalancerPoliciesForBackendServerResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<SetLoadBalancerPoliciesForBackendServerResult/>
<ResponseMetadata>
<RequestId>0eb9b381-dde0-11e2-8d78-6ddbaEXAMPLE</RequestId>
</ResponseMetadata>
</SetLoadBalancerPoliciesForBackendServerResponse>
"""
2015-03-22 20:00:16 +00:00
DESCRIBE_INSTANCE_HEALTH_TEMPLATE = """<DescribeInstanceHealthResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<DescribeInstanceHealthResult>
<InstanceStates>
{% for instance in instances %}
2015-03-22 20:00:16 +00:00
<member>
<Description>N/A</Description>
<InstanceId>{{ instance['InstanceId'] }}</InstanceId>
<State>{{ instance['State'] }}</State>
2015-03-22 20:00:16 +00:00
<ReasonCode>N/A</ReasonCode>
</member>
{% endfor %}
</InstanceStates>
</DescribeInstanceHealthResult>
<ResponseMetadata>
<RequestId>1549581b-12b7-11e3-895e-1334aEXAMPLE</RequestId>
</ResponseMetadata>
</DescribeInstanceHealthResponse>"""
2022-03-21 20:55:19 +00:00
ENABLE_AVAILABILITY_ZONES_FOR_LOAD_BALANCER_TEMPLATE = """<EnableAvailabilityZonesForLoadBalancerResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<ResponseMetadata>
<RequestId>1549581b-12b7-11e3-895e-1334aEXAMPLE</RequestId>
</ResponseMetadata>
<EnableAvailabilityZonesForLoadBalancerResult>
<AvailabilityZones>
{% for az in availability_zones %}
<AvailabilityZone>{{ az }}</AvailabilityZone>
{% endfor %}
</AvailabilityZones>
</EnableAvailabilityZonesForLoadBalancerResult>
</EnableAvailabilityZonesForLoadBalancerResponse>"""
DISABLE_AVAILABILITY_ZONES_FOR_LOAD_BALANCER_TEMPLATE = """<DisableAvailabilityZonesForLoadBalancerResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<ResponseMetadata>
<RequestId>1549581b-12b7-11e3-895e-1334aEXAMPLE</RequestId>
</ResponseMetadata>
<DisableAvailabilityZonesForLoadBalancerResult>
<AvailabilityZones>
{% for az in availability_zones %}
<AvailabilityZone>{{ az }}</AvailabilityZone>
{% endfor %}
</AvailabilityZones>
</DisableAvailabilityZonesForLoadBalancerResult>
</DisableAvailabilityZonesForLoadBalancerResponse>"""
ATTACH_LB_TO_SUBNETS_TEMPLATE = """<AttachLoadBalancerToSubnetsResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<AttachLoadBalancerToSubnetsResult>
<Subnets>
{% for subnet in subnets %}
<member>{{ subnet }}</member>
{% endfor %}
</Subnets>
</AttachLoadBalancerToSubnetsResult>
<ResponseMetadata>
<RequestId>f9880f01-7852-629d-a6c3-3ae2-666a409287e6dc0c</RequestId>
</ResponseMetadata>
</AttachLoadBalancerToSubnetsResponse>"""
DETACH_LB_FROM_SUBNETS_TEMPLATE = """<DetachLoadBalancerFromSubnetsResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<DetachLoadBalancerFromSubnetsResult>
<Subnets>
{% for subnet in subnets %}
<member>{{ subnet }}</member>
{% endfor %}
</Subnets>
</DetachLoadBalancerFromSubnetsResult>
<ResponseMetadata>
<RequestId>f9880f01-7852-629d-a6c3-3ae2-666a409287e6dc0c</RequestId>
</ResponseMetadata>
</DetachLoadBalancerFromSubnetsResponse>"""