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
|
||||
default: 60
|
||||
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:
|
||||
- aws
|
||||
|
@ -348,6 +353,38 @@ EXAMPLES = """
|
|||
enabled: yes
|
||||
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:
|
||||
|
@ -355,6 +392,7 @@ try:
|
|||
import boto.ec2.elb
|
||||
import boto.ec2.elb.attributes
|
||||
from boto.ec2.elb.healthcheck import HealthCheck
|
||||
from boto.ec2.tag import Tag
|
||||
from boto.regioninfo import RegionInfo
|
||||
HAS_BOTO = True
|
||||
except ImportError:
|
||||
|
@ -393,7 +431,8 @@ class ElbManager(object):
|
|||
scheme="internet-facing", connection_draining_timeout=None,
|
||||
idle_timeout=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):
|
||||
|
||||
self.module = module
|
||||
|
@ -416,6 +455,7 @@ class ElbManager(object):
|
|||
self.stickiness = stickiness
|
||||
self.wait = wait
|
||||
self.wait_timeout = wait_timeout
|
||||
self.tags = tags
|
||||
|
||||
self.aws_connect_params = aws_connect_params
|
||||
self.region = region
|
||||
|
@ -451,11 +491,14 @@ class ElbManager(object):
|
|||
self._set_access_log()
|
||||
# add sitcky options
|
||||
self.select_stickiness_policy()
|
||||
|
||||
# ensure backend server policies are correct
|
||||
self._set_backend_policies()
|
||||
# set/remove instance ids
|
||||
self._set_instance_ids()
|
||||
|
||||
self._set_tags()
|
||||
|
||||
def ensure_gone(self):
|
||||
"""Destroy the ELB"""
|
||||
if self.elb:
|
||||
|
@ -568,6 +611,8 @@ class ElbManager(object):
|
|||
|
||||
# return stickiness info?
|
||||
|
||||
info['tags'] = self.tags
|
||||
|
||||
return info
|
||||
|
||||
@_throttleable_operation(_THROTTLING_RETRIES)
|
||||
|
@ -1109,6 +1154,41 @@ class ElbManager(object):
|
|||
self.elb_conn.deregister_instances(self.elb.name, remove_instances)
|
||||
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):
|
||||
"""Compose target string from healthcheck parameters"""
|
||||
protocol = self.health_check['ping_protocol'].upper()
|
||||
|
@ -1143,7 +1223,8 @@ def main():
|
|||
stickiness={'default': None, 'required': False, 'type': 'dict'},
|
||||
access_logs={'default': None, 'required': False, 'type': 'dict'},
|
||||
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,6 +1261,7 @@ def main():
|
|||
stickiness = module.params['stickiness']
|
||||
wait = module.params['wait']
|
||||
wait_timeout = module.params['wait_timeout']
|
||||
tags = module.params['tags']
|
||||
|
||||
if state == 'present' and not listeners:
|
||||
module.fail_json(msg="At least one port is required for ELB creation")
|
||||
|
@ -1211,7 +1293,7 @@ def main():
|
|||
subnets, purge_subnets, scheme,
|
||||
connection_draining_timeout, idle_timeout,
|
||||
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,
|
||||
**aws_connect_params)
|
||||
|
||||
|
|
Loading…
Reference in a new issue