diff --git a/moto/elb/responses.py b/moto/elb/responses.py index 23ac09177..52c649ab3 100644 --- a/moto/elb/responses.py +++ b/moto/elb/responses.py @@ -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 = """ diff --git a/tests/test_elb/test_elb.py b/tests/test_elb/test_elb.py index 7ec0a34b0..828b8b04d 100644 --- a/tests/test_elb/test_elb.py +++ b/tests/test_elb/test_elb.py @@ -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():