From 3038096ed5745f2040038698cbcdbc41560bb900 Mon Sep 17 00:00:00 2001 From: Matthias Veit Date: Tue, 24 Jan 2023 14:14:00 +0100 Subject: [PATCH] [aws][fix] Aws lambda function can not be read (#1376) --- .../aws/resoto_plugin_aws/resource/lambda_.py | 22 ++++++++--------- plugins/aws/test/resources/lambda_test.py | 24 ++++++++++++++++++- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/plugins/aws/resoto_plugin_aws/resource/lambda_.py b/plugins/aws/resoto_plugin_aws/resource/lambda_.py index f3cd4bf1db..ae9e863f90 100644 --- a/plugins/aws/resoto_plugin_aws/resource/lambda_.py +++ b/plugins/aws/resoto_plugin_aws/resource/lambda_.py @@ -38,12 +38,12 @@ class AwsLambdaPolicyStatement: "resource": S("Resource"), "condition": S("Condition") >> Bend(AwsLambdaCondition.mapping), } - sid: str = field(default=None) - effect: str = field(default=None) - principal: Dict[str, str] = field(default=None) - action: str = field(default=None) - resource: str = field(default=None) - condition: AwsLambdaCondition = field(default=None) + sid: Optional[str] = field(default=None) + effect: Optional[str] = field(default=None) + principal: Optional[Dict[str, str]] = field(default=None) + action: Optional[str] = field(default=None) + resource: Optional[str] = field(default=None) + condition: Optional[AwsLambdaCondition] = field(default=None) @define(eq=False, slots=False) @@ -54,9 +54,9 @@ class AwsLambdaPolicyDetails: "policy_version": S("Version"), "policy_statement": S("Statement") >> ForallBend(AwsLambdaPolicyStatement.mapping), } - id: str = field(default=None) + id: Optional[str] = field(default=None) policy_version: Optional[str] = field(default=None) - policy_statement: List[AwsLambdaPolicyStatement] = field(factory=list) + policy_statement: Optional[List[AwsLambdaPolicyStatement]] = field(default=None) @define(eq=False, slots=False) @@ -66,7 +66,7 @@ class AwsLambdaGetPolicyResponse: "policy": S("Policy") >> F(json.loads) >> Bend(AwsLambdaPolicyDetails.mapping), "policy_revision_id": S("RevisionId"), } - policy: AwsLambdaPolicyDetails = field(default=None) + policy: Optional[AwsLambdaPolicyDetails] = field(default=None) policy_revision_id: Optional[str] = field(default=None) @@ -120,8 +120,8 @@ class AwsLambdaImageConfig: "command": S("Command", default=[]), "working_directory": S("WorkingDirectory"), } - entry_point: List[str] = field(factory=list) - command: List[str] = field(factory=list) + entry_point: Optional[List[str]] = field(default=None) + command: Optional[List[str]] = field(default=None) working_directory: Optional[str] = field(default=None) diff --git a/plugins/aws/test/resources/lambda_test.py b/plugins/aws/test/resources/lambda_test.py index 83c7bee533..14cfb97aae 100644 --- a/plugins/aws/test/resources/lambda_test.py +++ b/plugins/aws/test/resources/lambda_test.py @@ -1,10 +1,32 @@ -from resoto_plugin_aws.resource.lambda_ import AwsLambdaFunction +from resoto_plugin_aws.resource.lambda_ import AwsLambdaFunction, AwsLambdaGetPolicyResponse +from resotolib.json import from_json from test.resources import round_trip_for from typing import Any, cast from types import SimpleNamespace from resoto_plugin_aws.aws_client import AwsClient +def test_regression_lamda_get_policy() -> None: + value_to_read = { + "policy": { + "id": "default", + "policy_version": "2012-10-17", + "policy_statement": [ + { + "sid": "StackSet-AWSControlTower-ALCD-LZ-resource-owner-tag", + "effect": "Allow", + "principal": {"Service": "events.amazonaws.com"}, + "action": "lambda:InvokeFunction", + "resource": "arn:aws:lambda:eu-central-1:test:function:aws-controltower-owner-tagging-func", + "condition": None, + } + ], + }, + "policy_revision_id": "b3f179eb-569b-4ea2-8ec4-4324609b0694", + } + from_json(value_to_read, AwsLambdaGetPolicyResponse) + + def test_lambda() -> None: first, graph = round_trip_for(AwsLambdaFunction) assert len(graph.resources_of(AwsLambdaFunction)) == 2