From 7e55096db27e4c7904fe22aa385dcb4f1dddc09d Mon Sep 17 00:00:00 2001 From: Craig Shanks Date: Mon, 6 Feb 2023 16:23:56 +0000 Subject: [PATCH] Ignore non-labels.policyIds predicate attributes when migrating workflows --- ...apping.json => account_mapping.json.sample | 0 library/clients/workflowsclient.py | 15 ++++++----- migrate_workflows.py | 27 ++++++++++--------- 3 files changed, 24 insertions(+), 18 deletions(-) rename account_mapping.json => account_mapping.json.sample (100%) diff --git a/account_mapping.json b/account_mapping.json.sample similarity index 100% rename from account_mapping.json rename to account_mapping.json.sample diff --git a/library/clients/workflowsclient.py b/library/clients/workflowsclient.py index d57b862..f363276 100644 --- a/library/clients/workflowsclient.py +++ b/library/clients/workflowsclient.py @@ -108,12 +108,15 @@ def create_workflow(workflow, user_api_key, account_id, region): logger.info(f"Update policy id values in issuesFilter") predicates = [] for predicate in workflow['issuesFilter']['predicates']: - target_predicate = { - 'attribute': predicate['attribute'], # String! - 'operator': predicate['operator'], # iWorkflowsOperator! - 'values': predicate['targetValues'] # [String!]! - } - predicates.append(target_predicate) + if predicate['attribute'] == 'labels.policyIds': + target_predicate = { + 'attribute': predicate['attribute'], # String! + 'operator': predicate['operator'], # iWorkflowsOperator! + 'values': predicate['targetValues'] # [String!]! + } + predicates.append(target_predicate) + else: + logger.debug(f"Ignoring predicate {predicate}") if 'issuesFilter' in workflow: workflowData['issuesFilter'] = { 'name': workflow['issuesFilter']['name'], # String: this is a guid, which is unexpected diff --git a/migrate_workflows.py b/migrate_workflows.py index 121217c..943ee5b 100644 --- a/migrate_workflows.py +++ b/migrate_workflows.py @@ -70,21 +70,24 @@ def migrate_workflows(src_acct, src_api_key, src_region, tgt_acct, tgt_api_key, if "issuesFilter" in workflow: workflow['issuesFilter']['targetAccountId'] = int(tgt_acct) for predicate in workflow['issuesFilter']['predicates']: - targetValues = [] - for source_policy_id in predicate['values']: - if int(source_policy_id) in policies_by_source_id: - policy = policies_by_source_id.get(int(source_policy_id)) - if 'targetPolicyId' in policy: - targetValues.append(str(policy['targetPolicyId'])) - log.info(f"Target policy id: {str(policy['targetPolicyId'])} found for source policy id: {source_policy_id} ") + if predicate['attribute'] == 'labels.policyIds': + targetValues = [] + for source_policy_id in predicate['values']: + if int(source_policy_id) in policies_by_source_id: + policy = policies_by_source_id.get(int(source_policy_id)) + if 'targetPolicyId' in policy: + targetValues.append(str(policy['targetPolicyId'])) + log.info(f"Target policy id: {str(policy['targetPolicyId'])} found for source policy id: {source_policy_id} ") + else: + hasError = True + log.error(f"Unable to create workflow name: {workflow['name']}. Target policy id unavailable for source policy id: {source_policy_id}") else: hasError = True log.error(f"Unable to create workflow name: {workflow['name']}. Target policy id unavailable for source policy id: {source_policy_id}") - else: - hasError = True - log.error(f"Unable to create workflow name: {workflow['name']}. Target policy id unavailable for source policy id: {source_policy_id}") - if len(targetValues) > 0: - predicate['targetValues'] = targetValues + if len(targetValues) > 0: + predicate['targetValues'] = targetValues + else: + log.debug(f"Ignoring predicate {predicate}") else: hasError = True log.info(f"Workflow name: {workflow['name']} with id: {workflow['id']} has no issuesFilter: {workflow}")