Support tagging ELBs using boto 2.0. (#2844)
This commit is contained in:
parent
804a8e6378
commit
7fb0605824
1 changed files with 87 additions and 5 deletions
|
@ -154,6 +154,11 @@ options:
|
||||||
required: false
|
required: false
|
||||||
default: 60
|
default: 60
|
||||||
version_added: "2.1"
|
version_added: "2.1"
|
||||||
|
tags:
|
||||||
|
description:
|
||||||
|
- An associative array of tags. To delete all tags, supply an empty dict.
|
||||||
|
required: false
|
||||||
|
version_added: "2.1"
|
||||||
|
|
||||||
extends_documentation_fragment:
|
extends_documentation_fragment:
|
||||||
- aws
|
- aws
|
||||||
|
@ -348,6 +353,38 @@ EXAMPLES = """
|
||||||
enabled: yes
|
enabled: yes
|
||||||
cookie: SESSIONID
|
cookie: SESSIONID
|
||||||
|
|
||||||
|
# Create an ELB and add tags
|
||||||
|
- local_action:
|
||||||
|
module: ec2_elb_lb
|
||||||
|
name: "New ELB"
|
||||||
|
state: present
|
||||||
|
region: us-east-1
|
||||||
|
zones:
|
||||||
|
- us-east-1a
|
||||||
|
- us-east-1d
|
||||||
|
listeners:
|
||||||
|
- protocols: http
|
||||||
|
- load_balancer_port: 80
|
||||||
|
- instance_port: 80
|
||||||
|
tags:
|
||||||
|
Name: "New ELB"
|
||||||
|
stack: "production"
|
||||||
|
client: "Bob"
|
||||||
|
|
||||||
|
# Delete all tags from an ELB
|
||||||
|
- local_action:
|
||||||
|
module: ec2_elb_lb
|
||||||
|
name: "New ELB"
|
||||||
|
state: present
|
||||||
|
region: us-east-1
|
||||||
|
zones:
|
||||||
|
- us-east-1a
|
||||||
|
- us-east-1d
|
||||||
|
listeners:
|
||||||
|
- protocols: http
|
||||||
|
- load_balancer_port: 80
|
||||||
|
- instance_port: 80
|
||||||
|
tags: {}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -355,6 +392,7 @@ try:
|
||||||
import boto.ec2.elb
|
import boto.ec2.elb
|
||||||
import boto.ec2.elb.attributes
|
import boto.ec2.elb.attributes
|
||||||
from boto.ec2.elb.healthcheck import HealthCheck
|
from boto.ec2.elb.healthcheck import HealthCheck
|
||||||
|
from boto.ec2.tag import Tag
|
||||||
from boto.regioninfo import RegionInfo
|
from boto.regioninfo import RegionInfo
|
||||||
HAS_BOTO = True
|
HAS_BOTO = True
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
@ -393,7 +431,8 @@ class ElbManager(object):
|
||||||
scheme="internet-facing", connection_draining_timeout=None,
|
scheme="internet-facing", connection_draining_timeout=None,
|
||||||
idle_timeout=None,
|
idle_timeout=None,
|
||||||
cross_az_load_balancing=None, access_logs=None,
|
cross_az_load_balancing=None, access_logs=None,
|
||||||
stickiness=None, wait=None, wait_timeout=None, region=None,
|
stickiness=None, wait=None, wait_timeout=None, tags=None,
|
||||||
|
region=None,
|
||||||
instance_ids=None, purge_instance_ids=None, **aws_connect_params):
|
instance_ids=None, purge_instance_ids=None, **aws_connect_params):
|
||||||
|
|
||||||
self.module = module
|
self.module = module
|
||||||
|
@ -416,7 +455,8 @@ class ElbManager(object):
|
||||||
self.stickiness = stickiness
|
self.stickiness = stickiness
|
||||||
self.wait = wait
|
self.wait = wait
|
||||||
self.wait_timeout = wait_timeout
|
self.wait_timeout = wait_timeout
|
||||||
|
self.tags = tags
|
||||||
|
|
||||||
self.aws_connect_params = aws_connect_params
|
self.aws_connect_params = aws_connect_params
|
||||||
self.region = region
|
self.region = region
|
||||||
|
|
||||||
|
@ -451,11 +491,14 @@ class ElbManager(object):
|
||||||
self._set_access_log()
|
self._set_access_log()
|
||||||
# add sitcky options
|
# add sitcky options
|
||||||
self.select_stickiness_policy()
|
self.select_stickiness_policy()
|
||||||
|
|
||||||
# ensure backend server policies are correct
|
# ensure backend server policies are correct
|
||||||
self._set_backend_policies()
|
self._set_backend_policies()
|
||||||
# set/remove instance ids
|
# set/remove instance ids
|
||||||
self._set_instance_ids()
|
self._set_instance_ids()
|
||||||
|
|
||||||
|
self._set_tags()
|
||||||
|
|
||||||
def ensure_gone(self):
|
def ensure_gone(self):
|
||||||
"""Destroy the ELB"""
|
"""Destroy the ELB"""
|
||||||
if self.elb:
|
if self.elb:
|
||||||
|
@ -567,6 +610,8 @@ class ElbManager(object):
|
||||||
info['cross_az_load_balancing'] = 'no'
|
info['cross_az_load_balancing'] = 'no'
|
||||||
|
|
||||||
# return stickiness info?
|
# return stickiness info?
|
||||||
|
|
||||||
|
info['tags'] = self.tags
|
||||||
|
|
||||||
return info
|
return info
|
||||||
|
|
||||||
|
@ -1109,6 +1154,41 @@ class ElbManager(object):
|
||||||
self.elb_conn.deregister_instances(self.elb.name, remove_instances)
|
self.elb_conn.deregister_instances(self.elb.name, remove_instances)
|
||||||
self.changed = True
|
self.changed = True
|
||||||
|
|
||||||
|
def _set_tags(self):
|
||||||
|
"""Add/Delete tags"""
|
||||||
|
if self.tags is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
params = {'LoadBalancerNames.member.1': self.name}
|
||||||
|
|
||||||
|
tagdict = dict()
|
||||||
|
|
||||||
|
# get the current list of tags from the ELB, if ELB exists
|
||||||
|
if self.elb:
|
||||||
|
current_tags = self.elb_conn.get_list('DescribeTags', params,
|
||||||
|
[('member', Tag)])
|
||||||
|
tagdict = dict((tag.Key, tag.Value) for tag in current_tags
|
||||||
|
if hasattr(tag, 'Key'))
|
||||||
|
|
||||||
|
# Add missing tags
|
||||||
|
dictact = dict(set(self.tags.items()) - set(tagdict.items()))
|
||||||
|
if dictact:
|
||||||
|
for i, key in enumerate(dictact):
|
||||||
|
params['Tags.member.%d.Key' % (i + 1)] = key
|
||||||
|
params['Tags.member.%d.Value' % (i + 1)] = dictact[key]
|
||||||
|
|
||||||
|
self.elb_conn.make_request('AddTags', params)
|
||||||
|
self.changed=True
|
||||||
|
|
||||||
|
# Remove extra tags
|
||||||
|
dictact = dict(set(tagdict.items()) - set(self.tags.items()))
|
||||||
|
if dictact:
|
||||||
|
for i, key in enumerate(dictact):
|
||||||
|
params['Tags.member.%d.Key' % (i + 1)] = key
|
||||||
|
|
||||||
|
self.elb_conn.make_request('RemoveTags', params)
|
||||||
|
self.changed=True
|
||||||
|
|
||||||
def _get_health_check_target(self):
|
def _get_health_check_target(self):
|
||||||
"""Compose target string from healthcheck parameters"""
|
"""Compose target string from healthcheck parameters"""
|
||||||
protocol = self.health_check['ping_protocol'].upper()
|
protocol = self.health_check['ping_protocol'].upper()
|
||||||
|
@ -1143,7 +1223,8 @@ def main():
|
||||||
stickiness={'default': None, 'required': False, 'type': 'dict'},
|
stickiness={'default': None, 'required': False, 'type': 'dict'},
|
||||||
access_logs={'default': None, 'required': False, 'type': 'dict'},
|
access_logs={'default': None, 'required': False, 'type': 'dict'},
|
||||||
wait={'default': False, 'type': 'bool', 'required': False},
|
wait={'default': False, 'type': 'bool', 'required': False},
|
||||||
wait_timeout={'default': 60, 'type': 'int', 'required': False}
|
wait_timeout={'default': 60, 'type': 'int', 'required': False},
|
||||||
|
tags={'default': None, 'required': False, 'type': 'dict'}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1180,7 +1261,8 @@ def main():
|
||||||
stickiness = module.params['stickiness']
|
stickiness = module.params['stickiness']
|
||||||
wait = module.params['wait']
|
wait = module.params['wait']
|
||||||
wait_timeout = module.params['wait_timeout']
|
wait_timeout = module.params['wait_timeout']
|
||||||
|
tags = module.params['tags']
|
||||||
|
|
||||||
if state == 'present' and not listeners:
|
if state == 'present' and not listeners:
|
||||||
module.fail_json(msg="At least one port is required for ELB creation")
|
module.fail_json(msg="At least one port is required for ELB creation")
|
||||||
|
|
||||||
|
@ -1211,7 +1293,7 @@ def main():
|
||||||
subnets, purge_subnets, scheme,
|
subnets, purge_subnets, scheme,
|
||||||
connection_draining_timeout, idle_timeout,
|
connection_draining_timeout, idle_timeout,
|
||||||
cross_az_load_balancing,
|
cross_az_load_balancing,
|
||||||
access_logs, stickiness, wait, wait_timeout,
|
access_logs, stickiness, wait, wait_timeout, tags,
|
||||||
region=region, instance_ids=instance_ids, purge_instance_ids=purge_instance_ids,
|
region=region, instance_ids=instance_ids, purge_instance_ids=purge_instance_ids,
|
||||||
**aws_connect_params)
|
**aws_connect_params)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue