From b7efc8d8abe267079d3ec726aa8c0ad2728b219a Mon Sep 17 00:00:00 2001 From: Keeton Hodgson Date: Tue, 4 Feb 2020 13:58:19 -0800 Subject: [PATCH 1/2] fix: fix usage plan SHARED implementation --- samtranslator/model/api/api_generator.py | 6 +- .../output/aws-cn/api_with_usageplans.json | 34 ---------- .../aws-us-gov/api_with_usageplans.json | 68 ------------------- 3 files changed, 4 insertions(+), 104 deletions(-) diff --git a/samtranslator/model/api/api_generator.py b/samtranslator/model/api/api_generator.py index fe6d139b63..7752c8099d 100644 --- a/samtranslator/model/api/api_generator.py +++ b/samtranslator/model/api/api_generator.py @@ -598,7 +598,8 @@ def _construct_usage_plan(self, rest_api_stage=None): api_stage = dict() api_stage["ApiId"] = ref(self.logical_id) api_stage["Stage"] = ref(rest_api_stage.logical_id) - ApiGenerator.api_stages_shared.append(api_stage) + if api_stage not in ApiGenerator.api_stages_shared: + ApiGenerator.api_stages_shared.append(api_stage) usage_plan.ApiStages = ApiGenerator.api_stages_shared api_key = self._construct_api_key(usage_plan_logical_id, create_usage_plan, rest_api_stage) @@ -631,7 +632,8 @@ def _construct_api_key(self, usage_plan_logical_id, create_usage_plan, rest_api_ stage_key = dict() stage_key["RestApiId"] = ref(self.logical_id) stage_key["StageName"] = ref(rest_api_stage.logical_id) - ApiGenerator.stage_keys_shared.append(stage_key) + if stage_key not in ApiGenerator.stage_keys_shared: + ApiGenerator.stage_keys_shared.append(stage_key) api_key.StageKeys = ApiGenerator.stage_keys_shared # for create_usage_plan = "PER_API" else: diff --git a/tests/translator/output/aws-cn/api_with_usageplans.json b/tests/translator/output/aws-cn/api_with_usageplans.json index 3f38b0ce5e..7f3fe62693 100644 --- a/tests/translator/output/aws-cn/api_with_usageplans.json +++ b/tests/translator/output/aws-cn/api_with_usageplans.json @@ -364,22 +364,6 @@ "Type": "AWS::ApiGateway::UsagePlan", "Properties": { "ApiStages": [ - { - "ApiId": { - "Ref": "MyApiThree" - }, - "Stage": { - "Ref": "MyApiThreeProdStage" - } - }, - { - "ApiId": { - "Ref": "ServerlessRestApi" - }, - "Stage": { - "Ref": "ServerlessRestApiProdStage" - } - }, { "ApiId": { "Ref": "MyApiThree" @@ -399,8 +383,6 @@ ] }, "DependsOn": [ - "MyApiThree", - "ServerlessRestApi", "MyApiThree", "ServerlessRestApi" ] @@ -601,22 +583,6 @@ "Properties": { "Enabled": true, "StageKeys": [ - { - "RestApiId": { - "Ref": "MyApiThree" - }, - "StageName": { - "Ref": "MyApiThreeProdStage" - } - }, - { - "RestApiId": { - "Ref": "ServerlessRestApi" - }, - "StageName": { - "Ref": "ServerlessRestApiProdStage" - } - }, { "RestApiId": { "Ref": "MyApiThree" diff --git a/tests/translator/output/aws-us-gov/api_with_usageplans.json b/tests/translator/output/aws-us-gov/api_with_usageplans.json index 7c0d0eaad3..8309958bab 100644 --- a/tests/translator/output/aws-us-gov/api_with_usageplans.json +++ b/tests/translator/output/aws-us-gov/api_with_usageplans.json @@ -363,38 +363,6 @@ "Type": "AWS::ApiGateway::UsagePlan", "Properties": { "ApiStages": [ - { - "ApiId": { - "Ref": "MyApiThree" - }, - "Stage": { - "Ref": "MyApiThreeProdStage" - } - }, - { - "ApiId": { - "Ref": "ServerlessRestApi" - }, - "Stage": { - "Ref": "ServerlessRestApiProdStage" - } - }, - { - "ApiId": { - "Ref": "MyApiThree" - }, - "Stage": { - "Ref": "MyApiThreeProdStage" - } - }, - { - "ApiId": { - "Ref": "ServerlessRestApi" - }, - "Stage": { - "Ref": "ServerlessRestApiProdStage" - } - }, { "ApiId": { "Ref": "MyApiThree" @@ -414,10 +382,6 @@ ] }, "DependsOn": [ - "MyApiThree", - "ServerlessRestApi", - "MyApiThree", - "ServerlessRestApi", "MyApiThree", "ServerlessRestApi" ] @@ -427,38 +391,6 @@ "Properties": { "Enabled": true, "StageKeys": [ - { - "RestApiId": { - "Ref": "MyApiThree" - }, - "StageName": { - "Ref": "MyApiThreeProdStage" - } - }, - { - "RestApiId": { - "Ref": "ServerlessRestApi" - }, - "StageName": { - "Ref": "ServerlessRestApiProdStage" - } - }, - { - "RestApiId": { - "Ref": "MyApiThree" - }, - "StageName": { - "Ref": "MyApiThreeProdStage" - } - }, - { - "RestApiId": { - "Ref": "ServerlessRestApi" - }, - "StageName": { - "Ref": "ServerlessRestApiProdStage" - } - }, { "RestApiId": { "Ref": "MyApiThree" From 3f86d6665000ab8c85d89c80115fc9e91d4acb54 Mon Sep 17 00:00:00 2001 From: Keeton Hodgson Date: Tue, 4 Feb 2020 14:03:28 -0800 Subject: [PATCH 2/2] Add same check to depends on section for usage plan --- samtranslator/model/api/api_generator.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/samtranslator/model/api/api_generator.py b/samtranslator/model/api/api_generator.py index 7752c8099d..204f180c7a 100644 --- a/samtranslator/model/api/api_generator.py +++ b/samtranslator/model/api/api_generator.py @@ -591,7 +591,8 @@ def _construct_usage_plan(self, rest_api_stage=None): # create a usage plan for all the Apis elif create_usage_plan == "SHARED": usage_plan_logical_id = "ServerlessUsagePlan" - ApiGenerator.depends_on_shared.append(self.logical_id) + if self.logical_id not in ApiGenerator.depends_on_shared: + ApiGenerator.depends_on_shared.append(self.logical_id) usage_plan = ApiGatewayUsagePlan( logical_id=usage_plan_logical_id, depends_on=ApiGenerator.depends_on_shared )