Skip to content

Commit

Permalink
implement unifieddiff
Browse files Browse the repository at this point in the history
Signed-off-by: rohitthakur2590 <rohitthakur2590@outlook.com>
  • Loading branch information
rohitthakur2590 committed Dec 18, 2023
1 parent 961f2e3 commit d0881ae
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 11 deletions.
2 changes: 1 addition & 1 deletion plugins/cliconf/eos.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ def edit_config(

resp = {}
session = None
diff_onbox = self.get_option("diff_onbox")
# diff_onbox = self.get_option("diff_onbox")

if self.supports_sessions():
session = session_name()
Expand Down
5 changes: 5 additions & 0 deletions plugins/module_utils/network/eos/utils/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

__metaclass__ = type

import difflib

def get_interface_number(name):
digits = ""
Expand Down Expand Up @@ -82,3 +83,7 @@ def numerical_sort(string_int_list):
as_int_list.append(int(vlan))
as_int_list.sort()
return list(set(as_int_list))

def unified_diff(content1, content2):
unified_diff = difflib.unified_diff(content1, content2, n=70, lineterm='\n')
return "\n".join(unified_diff)
28 changes: 18 additions & 10 deletions plugins/modules/eos_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,10 +140,16 @@
false, the command is issued without the all keyword
type: bool
default: false
diff_onbox:
description: Specify the status for on-box-diff
type: bool
default: true
off_box_diff:
description: Specify the off-box diff parameters
type: dict
suboptions:
enable:
description: Enable off box diff
type: bool
context_lines:
description: Specify The number of context lines, by default it includes all lines.
type: int
save_when:
description:
- When changes are made to the device running-configuration, the changes are not
Expand Down Expand Up @@ -322,6 +328,7 @@
NetworkConfig,
dumps,
)
from ansible_collections.arista.eos.plugins.module_utils.network.eos.utils.utils import unified_diff

from ansible_collections.arista.eos.plugins.module_utils.network.eos.eos import (
get_config,
Expand Down Expand Up @@ -379,7 +386,9 @@ def main():
parents=dict(type="list", elements="str"),
before=dict(type="list", elements="str"),
after=dict(type="list", elements="str"),
diff_onbox=dict(type="bool", default=True),
off_box_diff=dict(type="dict", options=dict(
enable=dict(type=bool), context_lines=dict(type=int)
)),
match=dict(
default="line",
choices=["line", "strict", "exact", "none"],
Expand Down Expand Up @@ -463,15 +472,13 @@ def main():
candidate=candidate,
running=running,
diff_match=match,
diff_onbox=module.params["diff_onbox"],
diff_ignore_lines=diff_ignore_lines,
path=path,
diff_replace=replace,
)
except ConnectionError as exc:
module.fail_json(msg=to_text(exc, errors="surrogate_then_replace"))


config_diff = response["config_diff"]
if config_diff:
commands = config_diff.split("\n")
Expand All @@ -493,12 +500,14 @@ def main():
replace=replace,
commit=commit,
)

result["changed"] = True

if module.params["diff_against"] == "session":
if "diff" in response:
result["diff"] = {"prepared": response["diff"]}
if module.params.get("off_box_diff"):
result["off_box_diff"] = unified_diff(candidate.split("\n"), running.split("\n"))
else:
result["diff"] = {"prepared": response["diff"]}
else:
result["changed"] = False

Expand Down Expand Up @@ -624,7 +633,6 @@ def main():
result["warnings"].append(msg)
else:
result["warnings"] = msg

module.exit_json(**result)


Expand Down

0 comments on commit d0881ae

Please sign in to comment.