"""Exec module for managing budgets."""
from typing import Dict
__func_alias__ = {"list_": "list"}
[docs]async def get(hub, ctx, name: str, resource_id: str) -> Dict:
"""Retrieves the budget details.
Args:
name(str): An Idem name of the AWS Budget.
resource_id(str): Resource ID to identify the AWS Budget.
Returns:
Dict[bool, list, dict or None]:
result(bool):
Whether the result of the function has been successful (``True``) or not (``False``).
comment(list):
A list of messages.
ret(dict or None):
The AWS budget in "present" format.
Examples:
Calling this exec module function from the cli:
.. code-block:: bash
idem exec aws.budgets.budget.get name="idem_name" resource_id="budget_name"
Calling this exec module function from within a state module in pure python:
.. code-block:: python
async def state_function(hub, ctx, name, resource_id, **kwargs):
ret = await hub.exec.aws.budgets.budget.get(
ctx, name=name, resource_id=resource_id
)
"""
result = dict(comment=[], ret=None, result=True)
account_details = await hub.exec.boto3.client.sts.get_caller_identity(ctx)
account_id = account_details["ret"]["Account"]
ret = await hub.exec.boto3.client.budgets.describe_budget(
ctx, AccountId=account_id, BudgetName=resource_id
)
if not ret["result"]:
if "NotFoundException" in str(ret["comment"]):
result["comment"].append(
hub.tool.aws.comment_utils.get_empty_comment(
resource_type="aws.budgets.budget", name=name
)
)
result["comment"] += list(ret["comment"])
return result
result["comment"] += list(ret["comment"])
result["result"] = False
return result
result[
"ret"
] = await hub.tool.aws.budgets.conversion_utils.convert_raw_budget_to_present_async(
ctx,
account_id=account_id,
raw_resource=ret["ret"].get("Budget"),
idem_resource_name=name,
)
return result
[docs]async def list_(
hub,
ctx,
) -> Dict:
"""Fetch a list of budgets from AWS.
The function returns empty list when no resource is found.
Returns:
Dict[bool, list, dict or None]:
result(bool):
Whether the result of the function has been successful (``True``) or not (``False``).
comment(list):
A list of messages.
ret(dict or None):
The AWS budget list in "present" format.
Examples:
Calling this exec module function from the cli:
.. code-block:: bash
idem exec aws.budgets.budget.list
Calling this exec module function from within a state module in pure python:
.. code-block:: python
async def state_function(hub, ctx, name, resource_id, **kwargs):
ret = await hub.exec.aws.budgets.budget.list(ctx)
"""
result = dict(comment=[], ret=[], result=True)
account_details = await hub.exec.boto3.client.sts.get_caller_identity(ctx)
account_id = account_details["ret"]["Account"]
ret = await hub.exec.boto3.client.budgets.describe_budgets(
ctx, AccountId=account_id
)
if not ret["result"]:
result["comment"] += list(ret["comment"])
result["result"] = False
return result
if not ret["ret"]["Budgets"]:
result["comment"].append(
hub.tool.aws.comment_utils.list_empty_comment(
resource_type="aws.budgets.budget", name="Budgets"
)
)
return result
for budget in ret["ret"]["Budgets"]:
result["ret"].append(
await hub.tool.aws.budgets.conversion_utils.convert_raw_budget_to_present_async(
ctx,
account_id=account_id,
raw_resource=budget,
idem_resource_name=budget.get("BudgetName"),
)
)
return result