From b8da83cfe0db69935bc11c60d7591e5991a9cb22 Mon Sep 17 00:00:00 2001 From: Abhijeet Kasurde Date: Thu, 14 Mar 2019 17:06:25 +0530 Subject: [PATCH] AWS: add capabilities parameter in cloudformation (#53624) User can now specify capabilities that stack template provides. Signed-off-by: Abhijeet Kasurde --- .../modules/cloud/amazon/cloudformation.py | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/ansible/modules/cloud/amazon/cloudformation.py b/lib/ansible/modules/cloud/amazon/cloudformation.py index eb4db41f5a..9d4283f79c 100644 --- a/lib/ansible/modules/cloud/amazon/cloudformation.py +++ b/lib/ansible/modules/cloud/amazon/cloudformation.py @@ -143,6 +143,13 @@ options: version_added: "2.8" type: int required: False + capabilities: + description: + - Specify capabilites that stack template contains. + - Valid values are CAPABILITY_IAM, CAPABILITY_NAMED_IAM and CAPABILITY_AUTO_EXPAND. + type: list + version_added: "2.8" + default: [ CAPABILITY_IAM, CAPABILITY_NAMED_IAM ] author: "James S. Martin (@jsmartin)" extends_documentation_fragment: @@ -605,6 +612,7 @@ def main(): backoff_retries=dict(type='int', default=10, required=False), backoff_delay=dict(type='int', default=3, required=False), backoff_max_delay=dict(type='int', default=30, required=False), + capabilities=dict(type='list', default=['CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM']) ) ) @@ -616,9 +624,19 @@ def main(): if not HAS_BOTO3: module.fail_json(msg='boto3 and botocore are required for this module') + invalid_capabilities = [] + user_capabilities = module.params.get('capabilities') + for user_cap in user_capabilities: + if user_cap not in ['CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND']: + invalid_capabilities.append(user_cap) + + if invalid_capabilities: + module.fail_json(msg="Specified capabilities are invalid : %r," + " please check documentation for valid capabilities" % invalid_capabilities) + # collect the parameters that are passed to boto3. Keeps us from having so many scalars floating around. stack_params = { - 'Capabilities': ['CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM'], + 'Capabilities': user_capabilities, 'ClientRequestToken': to_native(uuid.uuid4()), } state = module.params['state']