Source code for idem_aws.exec.aws.cloudformation.stack
"""Exec module for managing Amazon Cloudformation Stacks."""
[docs]async def get(
hub,
ctx,
name: str,
resource_id: str,
):
"""
Get a Cloudformation Stack from AWS.
Args:
name(str):
The name of the Cloudformation Stack.
resource_id(str):
The StackID of the Cloudformation Stack.
Examples:
Calling this exec module function from the cli with resource_id
.. code-block:: bash
idem exec aws.cloudformation.stack.get name="name" resource_id="unmanaged_stack"
Calling this exec module function from within a state module in pure python
.. code-block:: yaml
my_unmanaged_stack:
exec.run:
- path: aws.cloudformation.stack.get
- kwargs:
name: test-stack-name
resource_id: ax0li
"""
result = dict(comment=[], ret=None, result=True)
ret = await hub.exec.boto3.client.cloudformation.describe_stacks(
ctx, StackName=name
)
if (not ret["result"]) or (
ret["ret"]["Stacks"][0].get("StackStatus") == "DELETE_COMPLETE"
):
if ("ValidationError" in str(ret["comment"])) or (
ret["ret"]["Stacks"][0].get("StackStatus") == "DELETE_COMPLETE"
):
result["comment"].append(
hub.tool.aws.comment_utils.get_empty_comment(
resource_type="aws.cloudformation.stack", name=name
)
)
result["comment"] += list(ret["comment"])
return result
result["comment"] += list(ret["comment"])
result["result"] = False
return result
resource = ret["ret"]["Stacks"][0]
if len(ret["ret"]["Stacks"]) > 1:
result["comment"].append(
hub.tool.aws.comment_utils.find_more_than_one(
resource_type="aws.cloudformation.stack", resource_id=resource_id
)
)
elif resource.get("StackStatus") != "DELETE_COMPLETE":
result["ret"] = hub.tool.aws.cloudformation.stack.convert_raw_stack_to_present(
raw_resource=ret["ret"]["Stacks"][0],
resource_id=resource_id,
idem_resource_name=name,
)
return result