From ffbccc7fa9bc31ccf6afccbf0f6bb862f01a96a7 Mon Sep 17 00:00:00 2001 From: Karel van Klink <karel.vanklink@geant.org> Date: Fri, 18 Aug 2023 16:33:09 +0200 Subject: [PATCH] add redundant key, change handling of Nokia config diff --- lso/playbook.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lso/playbook.py b/lso/playbook.py index 7855588..4475f7d 100644 --- a/lso/playbook.py +++ b/lso/playbook.py @@ -7,6 +7,7 @@ import uuid import ansible_runner import requests +import xmltodict from pydantic import BaseModel, HttpUrl logger = logging.getLogger(__name__) @@ -89,6 +90,7 @@ def _run_playbook_proc(job_id: str, playbook_path: str, extra_vars: dict, invent "invocation", "include", "include_args", + "server_capabilities", ] for line in json_content.strip().splitlines(): try: @@ -110,8 +112,18 @@ def _run_playbook_proc(job_id: str, playbook_path: str, extra_vars: dict, invent continue if "diff_lines" in task_result: + # Juniper-specific # Prevent the diff from being displayed twice, and only keep the formatted version. task_result.pop("diff", None) + elif "before" in task_result["diff"] and "after" in task_result["diff"]: + # Nokia-specific + # We have a chunk of Nokia config, and we would like to show the actual diff, not a full before and + # after. This will take some extra steps. + before_parsed = xmltodict.parse(task_result["diff"]["before"]) + after_parsed = xmltodict.parse(task_result["diff"]["after"]) + # Only leave the diff in the resulting output + task_result["diff"] = {k: v for k, v in after_parsed.items() if + k not in before_parsed or v != before_parsed[k]} if bool(task_result): # Only add the event if there are any relevant keys left. -- GitLab