From 2bfe13159159d4e36b080df4ae50d0d7a8d96c0f Mon Sep 17 00:00:00 2001 From: Vadim Stepanov Date: Fri, 17 Mar 2023 11:32:30 +0000 Subject: [PATCH] PD migrator: ignore deleted services in event rules (#1569) Update PD migrator to create routes with no escalation chain selected for event rules referencing deleted services --- .../migrator/resources/rulesets.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tools/pagerduty-migrator/migrator/resources/rulesets.py b/tools/pagerduty-migrator/migrator/resources/rulesets.py index 0296c8b8..2204a8f3 100644 --- a/tools/pagerduty-migrator/migrator/resources/rulesets.py +++ b/tools/pagerduty-migrator/migrator/resources/rulesets.py @@ -22,10 +22,12 @@ def match_ruleset( for r in ruleset["rules"] if not r["disabled"] and r["actions"]["route"] ] - escalation_policy_ids = [ - find_by_id(services, service_id)["escalation_policy"]["id"] - for service_id in service_ids - ] + escalation_policy_ids = [] + for service_id in service_ids: + service = find_by_id(services, service_id) + # Sometimes service cannot be found, e.g. when it is deleted but still referenced in ruleset + if service: + escalation_policy_ids.append(service["escalation_policy"]["id"]) flawed_escalation_policies = [] for escalation_policy_id in escalation_policy_ids: @@ -153,6 +155,10 @@ def _pd_service_id_to_oncall_escalation_chain_id( return None service = find_by_id(services, service_id) + if service is None: + # Service cannot be found, e.g. when it is deleted but still referenced in ruleset + return None + escalation_policy_id = service["escalation_policy"]["id"] escalation_policy = find_by_id(escalation_policies, escalation_policy_id) escalation_chain_id = escalation_policy["oncall_escalation_chain"]["id"]