Source code for idem_aws.states.aws.apigatewayv2.route

"""
Autogenerated using `pop-create-idem <https://gitlab.com/saltstack/pop/pop-create-idem>`__

hub.exec.boto3.client.apigatewayv2.create_route
hub.exec.boto3.client.apigatewayv2.delete_route
hub.exec.boto3.client.apigatewayv2.get_apis
hub.exec.boto3.client.apigatewayv2.get_route
hub.exec.boto3.client.apigatewayv2.get_routes
hub.exec.boto3.client.apigatewayv2.tag_resource
hub.exec.boto3.client.apigatewayv2.untag_resource
hub.exec.boto3.client.apigatewayv2.update_route
"""
import copy
from dataclasses import field
from dataclasses import make_dataclass
from typing import Any
from typing import Dict
from typing import List

__contracts__ = ["resource"]


[docs]async def present( hub, ctx, name: str, api_id: str, route_key: str, resource_id: str = None, api_key_required: bool = None, authorization_scopes: List[str] = None, authorization_type: str = None, authorizer_id: str = None, model_selection_expression: str = None, operation_name: str = None, request_models: Dict[str, str] = None, request_parameters: Dict[ str, make_dataclass("RouteParameters", [("Required", bool, field(default=None))]), ] = None, route_response_selection_expression: str = None, target: str = None, ) -> Dict[str, Any]: """ Creates an API Gateway v2 route resource. Args: name(str): An Idem name of the resource. api_id(str): The API resource identifier in Amazon Web Services. route_key(str): The route key for the route. resource_id(str, Optional): The route resource identifier in Amazon Web Services. api_key_required(bool, Optional): Specifies whether an API key is required for the route. Supported only for WebSocket APIs. authorization_scopes(List, Optional): The authorization scopes supported by this route. authorization_type(str, Optional): The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer. authorizer_id(str, Optional): The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer. model_selection_expression(str, Optional): The model selection expression for the route. Supported only for WebSocket APIs. operation_name(str, Optional): The operation name for the route. request_models(Dict[str, str], Optional): The request models for the route. Supported only for WebSocket APIs. request_parameters(Dict[str, Dict[str, Any]], Optional): The request parameters for the route. Supported only for WebSocket APIs. Defaults to None. * Required (bool, Optional): Whether or not the parameter is required. route_response_selection_expression(str, Optional): The route response selection expression for the route. Supported only for WebSocket APIs. target(str, Optional): The target for the route. Request Syntax: [idem_test_aws_apigatewayv2_route]: aws.apigatewayv2.route.present: - name: 'string' - api_id: 'string' - route_key: 'string' - api_key_required: True|False - authorization_scopes: ['string'] - authorization_type: 'NONE'|'AWS_IAM'|'CUSTOM'|'JWT' - authorizer_id: 'string' - model_selection_expression: 'string' - operation_name: 'string' - request_models: {'string': 'string'} - request_parameters: { 'string': { 'Required': True|False } } - route_response_selection_expression: 'string' - target: 'string' Returns: Dict[str, Any] Examples: .. code-block:: sls idem_test_aws_apigatewayv2_route: aws.apigatewayv2.route.present: - name: value - api_id: value - route_key: value - api_key_required: True|False - authorization_scopes: [] - authorization_type: value - authorizer_id: value - model_selection_expression: value - operation_name: value - request_models: {} - request_parameters: {} - route_response_selection_expression: value - target: value """ result = dict(comment=[], old_state=None, new_state=None, name=name, result=True) before_ret = None resource_updated = False if resource_id: before_ret = await hub.exec.boto3.client.apigatewayv2.get_route( ctx, ApiId=api_id, RouteId=resource_id ) if not before_ret["result"]: result["result"] = False result["comment"] = before_ret["comment"] return result if before_ret: result["comment"] = hub.tool.aws.comment_utils.already_exists_comment( resource_type="aws.apigatewayv2.route", name=name ) result[ "old_state" ] = hub.tool.aws.apigatewayv2.route.convert_raw_route_to_present( api_id=api_id, raw_resource=before_ret.get("ret"), idem_resource_name=name ) result["new_state"] = copy.deepcopy(result["old_state"]) resource_parameters = { "ApiKeyRequired": api_key_required, "AuthorizationScopes": authorization_scopes, "AuthorizationType": authorization_type, "AuthorizerId": authorizer_id, "ModelSelectionExpression": model_selection_expression, "OperationName": operation_name, "RequestModels": request_models, "RequestParameters": request_parameters, "RouteKey": route_key, "RouteResponseSelectionExpression": route_response_selection_expression, "Target": target, } update_route_ret = await hub.tool.aws.apigatewayv2.route.update( ctx, api_id=api_id, resource_id=resource_id, raw_resource=before_ret.get("ret"), resource_parameters=resource_parameters, ) result["comment"] += update_route_ret["comment"] if not update_route_ret["result"]: result["result"] = False return result resource_updated = resource_updated or bool(update_route_ret["ret"]) if update_route_ret["ret"] and ctx.get("test", False): result["new_state"].update(update_route_ret["ret"]) if resource_updated and ctx.get("test", False): return result else: if ctx.get("test", False): result[ "new_state" ] = raw_resource = hub.tool.aws.test_state_utils.generate_test_state( enforced_state={}, desired_state={ "name": name, "api_id": api_id, "api_key_required": api_key_required, "authorization_scopes": authorization_scopes, "authorization_type": authorization_type, "authorizer_id": authorizer_id, "model_selection_expression": model_selection_expression, "operation_name": operation_name, "request_models": request_models, "request_parameters": request_parameters, "route_key": route_key, "route_response_selection_expression": route_response_selection_expression, "target": target, }, ) result["comment"] = hub.tool.aws.comment_utils.would_create_comment( resource_type="aws.apigatewayv2.route", name=name ) return result create_ret = await hub.exec.boto3.client.apigatewayv2.create_route( ctx, ApiId=api_id, ApiKeyRequired=api_key_required, AuthorizationScopes=authorization_scopes, AuthorizationType=authorization_type, AuthorizerId=authorizer_id, ModelSelectionExpression=model_selection_expression, OperationName=operation_name, RequestModels=request_models, RequestParameters=request_parameters, RouteKey=route_key, RouteResponseSelectionExpression=route_response_selection_expression, Target=target, ) if not create_ret["result"]: result["result"] = False result["comment"] = create_ret["comment"] return result result["comment"] = hub.tool.aws.comment_utils.create_comment( resource_type="aws.apigatewayv2.route", name=name ) resource_id = create_ret["ret"]["RouteId"] if (not result["old_state"]) or resource_updated: after_ret = await hub.exec.boto3.client.apigatewayv2.get_route( ctx, ApiId=api_id, RouteId=resource_id ) if not after_ret["result"]: result["result"] = False result["comment"] += after_ret["comment"] return result result[ "new_state" ] = hub.tool.aws.apigatewayv2.route.convert_raw_route_to_present( api_id=api_id, raw_resource=after_ret.get("ret"), idem_resource_name=name ) return result
[docs]async def absent( hub, ctx, name: str, api_id: str = None, resource_id: str = None ) -> Dict[str, Any]: """ Deletes an API Gateway v2 route resource. Args: name(str): An Idem name of the resource. api_id(str, Optional): The API resource identifier in Amazon Web Services. resource_id(str, Optional): The Route resource identifier in Amazon Web Services. Idem automatically considers this resource being absent if this field is not specified. Returns: Dict[str, Any] Examples: .. code-block:: sls idem_test_aws_apigatewayv2_route: aws.apigatewayv2.route.absent: - name: value - api_id: value - resource_id: value """ result = dict(comment=[], old_state=None, new_state=None, name=name, result=True) if not resource_id: result["comment"] = hub.tool.aws.comment_utils.already_absent_comment( resource_type="aws.apigatewayv2.route", name=name ) return result if not api_id: result["comment"] = hub.tool.aws.comment_utils.missing_args_for_absent_comment( resource_type="aws.apigateway2.route", name=name, args=["api_id"] ) result["result"] = False return result before_ret = await hub.exec.boto3.client.apigatewayv2.get_route( ctx, ApiId=api_id, RouteId=resource_id ) if not before_ret["result"]: if "NotFoundException" not in str(before_ret["comment"][0]): result["result"] = False result["comment"] = before_ret["comment"] else: result["comment"] = hub.tool.aws.comment_utils.already_absent_comment( resource_type="aws.apigatewayv2.route", name=name ) return result result["old_state"] = hub.tool.aws.apigatewayv2.route.convert_raw_route_to_present( api_id=api_id, raw_resource=before_ret["ret"], idem_resource_name=name ) if ctx.get("test", False): result["comment"] = hub.tool.aws.comment_utils.would_delete_comment( resource_type="aws.apigatewayv2.route", name=name ) return result delete_ret = await hub.exec.boto3.client.apigatewayv2.delete_route( ctx, ApiId=api_id, RouteId=resource_id ) if not delete_ret["result"]: result["result"] = False result["comment"] = delete_ret["comment"] return result result["comment"] = hub.tool.aws.comment_utils.delete_comment( resource_type="aws.apigatewayv2.route", name=name ) return result
[docs]async def describe(hub, ctx) -> Dict[str, Dict[str, Any]]: """ Describe the resource in a way that can be recreated/managed with the corresponding "present" function Gets the API Gateway v2 route resources for an AWS account. Returns: Dict[str, Dict[str, Any]] Examples: .. code-block:: bash $ idem describe aws.apigatewayv2.route """ result = {} get_apis_ret = await hub.exec.boto3.client.apigatewayv2.get_apis(ctx) if not get_apis_ret["result"]: hub.log.warning(f"Could not get apis {get_apis_ret['comment']}") return result for api in get_apis_ret["ret"]["Items"]: api_id = api.get("ApiId") get_routes_ret = await hub.exec.boto3.client.apigatewayv2.get_routes( ctx, ApiId=api_id ) if not get_routes_ret["result"]: hub.log.debug( f"Could not get routes for ApiId '{api_id}': " f"{get_routes_ret['comment']}. Describe will skip this api and continue." ) continue for route in get_routes_ret["ret"]["Items"]: resource_translated = ( hub.tool.aws.apigatewayv2.route.convert_raw_route_to_present( api_id=api_id, raw_resource=route, ) ) result[resource_translated["name"]] = { "aws.apigatewayv2.route.present": [ {parameter_key: parameter_value} for parameter_key, parameter_value in resource_translated.items() ] } return result