diff --git a/cloud/cloudformation b/cloud/cloudformation index 955278406b0..164f306854a 100644 --- a/cloud/cloudformation +++ b/cloud/cloudformation @@ -63,6 +63,7 @@ options: 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: [] @@ -93,6 +94,7 @@ import json import time try: + import boto import boto.cloudformation.connection except ImportError: print "failed=True msg='boto required for this module'" @@ -126,6 +128,17 @@ def boto_exception(err): 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): '''gets the status of a stack while it is created/updated/deleted''' existed = [] @@ -190,6 +203,11 @@ def main(): elif 'EC2_REGION' in os.environ: 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 @@ -214,7 +232,7 @@ def main(): template_body=template_body, disable_rollback=disable_rollback, capabilities=['CAPABILITY_IAM'], - tags=tags) + **kwargs) operation = 'CREATE' except Exception, err: error_msg = boto_exception(err)