From 1c6ff35ec9246e53b86e93b9da5b97911edc71c1 Mon Sep 17 00:00:00 2001 From: Marcus Robinson Date: Wed, 2 Aug 2023 20:53:00 +0100 Subject: [PATCH] Custom actions fail when action not defined in pipeline (#3647) * Custom actions fail in release 0.12 Fixes #3646 * up api version * up api version * Make DRY * Fix case where calling dict on empty pipeline --- CHANGELOG.md | 1 + api_app/_version.py | 2 +- api_app/service_bus/helpers.py | 12 +++++++++--- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06dc05c38..f61a432ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ FEATURES: ENHANCEMENTS: BUG FIXES: +* Cusotm actions fail on resources with a pipline ([#3646](https://github.com/microsoft/AzureTRE/issues/3646)) ## 0.12.0 (July 27, 2023) diff --git a/api_app/_version.py b/api_app/_version.py index 07c3e7b82..66a62a276 100644 --- a/api_app/_version.py +++ b/api_app/_version.py @@ -1 +1 @@ -__version__ = "0.15.6" +__version__ = "0.15.7" diff --git a/api_app/service_bus/helpers.py b/api_app/service_bus/helpers.py index 050e48b83..729b9953a 100644 --- a/api_app/service_bus/helpers.py +++ b/api_app/service_bus/helpers.py @@ -63,18 +63,24 @@ async def update_resource_for_step(operation_step: OperationStep, resource_repo: parent_template = await resource_template_repo.get_template_by_name_and_version(step_resource.templateName, step_resource.templateVersion, step_resource.resourceType, step_resource_parent_service_name) - # if there are no pipelines, no need to continue with substitutions. + # if there are no pipelines, or custom action, no need to continue with substitutions. if not parent_template.pipeline: return step_resource - pipeline_primary_action = parent_template.pipeline.dict()[primary_action] + parent_template_pipeline_dict = parent_template.pipeline.dict() + + # if action not defined as a pipeline, custom action, no need to continue with substitutions. + if primary_action not in parent_template_pipeline_dict: + return step_resource + + pipeline_primary_action = parent_template_pipeline_dict[primary_action] is_first_main_step = pipeline_primary_action and len(pipeline_primary_action) == 1 and pipeline_primary_action[0]['stepId'] == 'main' if not pipeline_primary_action or is_first_main_step: return step_resource # get the template step template_step = None - for step in parent_template.pipeline.dict()[primary_action]: + for step in parent_template_pipeline_dict[primary_action]: if step["stepId"] == operation_step.templateStepId: template_step = parse_obj_as(PipelineStep, step) break