Honor Tags when creating a load balancer

This commit is contained in:
Daniel Hepper 2016-04-14 15:50:51 +02:00
parent de4dfaac55
commit 6eee995dcf
2 changed files with 47 additions and 27 deletions

View File

@ -29,13 +29,14 @@ class ELBResponse(BaseResponse):
scheme = self._get_param('Scheme')
subnets = self._get_multi_param("Subnets.member")
self.elb_backend.create_load_balancer(
elb = self.elb_backend.create_load_balancer(
name=load_balancer_name,
zones=availability_zones,
ports=ports,
scheme=scheme,
subnets=subnets
subnets=subnets,
)
self._add_tags(elb)
template = self.response_template(CREATE_LOAD_BALANCER_TEMPLATE)
return template.render()
@ -231,31 +232,7 @@ class ELBResponse(BaseResponse):
if not elb:
raise LoadBalancerNotFoundError(load_balancer_name)
value = 'Tags.member.{0}.Value'.format(number)
key = 'Tags.member.{0}.Key'.format(number)
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)
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)
self._add_tags(elb)
template = self.response_template(ADD_TAGS_TEMPLATE)
return template.render()
@ -292,6 +269,31 @@ class ELBResponse(BaseResponse):
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)
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)
ADD_TAGS_TEMPLATE = """<AddTagsResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/">
<AddTagsResult/>
<ResponseMetadata>

View File

@ -721,6 +721,24 @@ def test_add_remove_tags():
lb_tags['other-lb'].should.have.key('other').which.should.equal('something')
@mock_elb
def test_create_with_tags():
client = boto3.client('elb', region_name='us-east-1')
client.create_load_balancer(
LoadBalancerName='my-lb',
Listeners=[{'Protocol':'tcp', 'LoadBalancerPort':80, 'InstancePort':8080}],
AvailabilityZones=['us-east-1a', 'us-east-1b'],
Tags=[{
'Key': 'k',
'Value': 'v'
}]
)
tags = dict((d['Key'], d['Value']) for d in client.describe_tags(LoadBalancerNames=['my-lb'])['TagDescriptions'][0]['Tags'])
tags.should.have.key('k').which.should.equal('v')
@mock_ec2
@mock_elb
def test_subnets():