mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Merge pull request #4272 from psvo/tags_parameter_for_cloudformation
Add support for tags parameter to cloudformation module
This commit is contained in:
commit
deb33e9d0e
1 changed files with 34 additions and 4 deletions
|
@ -60,6 +60,14 @@ options:
|
||||||
required: true
|
required: true
|
||||||
default: null
|
default: null
|
||||||
aliases: []
|
aliases: []
|
||||||
|
tags:
|
||||||
|
description:
|
||||||
|
- Dictionary of tags to associate with stack and it's resources during stack creation. Cannot be updated later.
|
||||||
|
Requires at least Boto version 2.6.0.
|
||||||
|
required: false
|
||||||
|
default: null
|
||||||
|
aliases: []
|
||||||
|
version_added: "1.4"
|
||||||
|
|
||||||
requirements: [ "boto" ]
|
requirements: [ "boto" ]
|
||||||
author: James S. Martin
|
author: James S. Martin
|
||||||
|
@ -79,12 +87,15 @@ tasks:
|
||||||
DiskType: ephemeral
|
DiskType: ephemeral
|
||||||
InstanceType: m1.small
|
InstanceType: m1.small
|
||||||
ClusterSize: 3
|
ClusterSize: 3
|
||||||
|
tags:
|
||||||
|
Stack: ansible-cloudformation
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
import boto
|
||||||
import boto.cloudformation.connection
|
import boto.cloudformation.connection
|
||||||
except ImportError:
|
except ImportError:
|
||||||
print "failed=True msg='boto required for this module'"
|
print "failed=True msg='boto required for this module'"
|
||||||
|
@ -118,6 +129,17 @@ def boto_exception(err):
|
||||||
return error
|
return error
|
||||||
|
|
||||||
|
|
||||||
|
def boto_version_required(version_tuple):
|
||||||
|
parts = boto.Version.split('.')
|
||||||
|
boto_version = []
|
||||||
|
try:
|
||||||
|
for part in parts:
|
||||||
|
boto_version.append(int(part))
|
||||||
|
except:
|
||||||
|
boto_version.append(-1)
|
||||||
|
return tuple(boto_version) >= tuple(version_tuple)
|
||||||
|
|
||||||
|
|
||||||
def stack_operation(cfn, stack_name, operation):
|
def stack_operation(cfn, stack_name, operation):
|
||||||
'''gets the status of a stack while it is created/updated/deleted'''
|
'''gets the status of a stack while it is created/updated/deleted'''
|
||||||
existed = []
|
existed = []
|
||||||
|
@ -163,7 +185,8 @@ def main():
|
||||||
region=dict(aliases=['aws_region', 'ec2_region'], required=True, choices=AWS_REGIONS),
|
region=dict(aliases=['aws_region', 'ec2_region'], required=True, choices=AWS_REGIONS),
|
||||||
state=dict(default='present', choices=['present', 'absent']),
|
state=dict(default='present', choices=['present', 'absent']),
|
||||||
template=dict(default=None, required=True),
|
template=dict(default=None, required=True),
|
||||||
disable_rollback=dict(default=False)
|
disable_rollback=dict(default=False),
|
||||||
|
tags=dict(default=None)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -173,14 +196,20 @@ def main():
|
||||||
template_body = open(module.params['template'], 'r').read()
|
template_body = open(module.params['template'], 'r').read()
|
||||||
disable_rollback = module.params['disable_rollback']
|
disable_rollback = module.params['disable_rollback']
|
||||||
template_parameters = module.params['template_parameters']
|
template_parameters = module.params['template_parameters']
|
||||||
|
tags = module.params['tags']
|
||||||
|
|
||||||
if not r:
|
if not r:
|
||||||
if 'AWS_REGION' in os.environ:
|
if 'AWS_REGION' in os.environ:
|
||||||
r = os.environ['AWS_REGION']
|
r = os.environ['AWS_REGION']
|
||||||
elif 'EC2_REGION' in os.environ:
|
elif 'EC2_REGION' in os.environ:
|
||||||
r = os.environ['EC2_REGION']
|
r = os.environ['EC2_REGION']
|
||||||
|
|
||||||
|
kwargs = dict()
|
||||||
|
if tags is not None:
|
||||||
|
if not boto_version_required((2,6,0)):
|
||||||
|
module.fail_json(msg='Module parameter "tags" requires at least Boto version 2.6.0')
|
||||||
|
kwargs['tags'] = tags
|
||||||
|
|
||||||
|
|
||||||
# convert the template parameters ansible passes into a tuple for boto
|
# convert the template parameters ansible passes into a tuple for boto
|
||||||
template_parameters_tup = [(k, v) for k, v in template_parameters.items()]
|
template_parameters_tup = [(k, v) for k, v in template_parameters.items()]
|
||||||
|
@ -203,7 +232,8 @@ def main():
|
||||||
cfn.create_stack(stack_name, parameters=template_parameters_tup,
|
cfn.create_stack(stack_name, parameters=template_parameters_tup,
|
||||||
template_body=template_body,
|
template_body=template_body,
|
||||||
disable_rollback=disable_rollback,
|
disable_rollback=disable_rollback,
|
||||||
capabilities=['CAPABILITY_IAM'])
|
capabilities=['CAPABILITY_IAM'],
|
||||||
|
**kwargs)
|
||||||
operation = 'CREATE'
|
operation = 'CREATE'
|
||||||
except Exception, err:
|
except Exception, err:
|
||||||
error_msg = boto_exception(err)
|
error_msg = boto_exception(err)
|
||||||
|
|
Loading…
Add table
Reference in a new issue