|
9 | 9 | from django.core.exceptions import ObjectDoesNotExist
|
10 | 10 | from django.db.models import Q
|
11 | 11 | from extras.plugins import get_plugin_config
|
12 |
| -from extras.querysets import ConfigContextQuerySet |
13 | 12 | from extras.scripts import MultiObjectVar, ObjectVar
|
14 | 13 | from jinja2.exceptions import TemplateError
|
| 14 | +from netutils.config.compliance import diff_network_config |
15 | 15 | from utilities.exceptions import AbortScript
|
16 | 16 |
|
17 | 17 | from netbox_config_diff.models import ConfigCompliance
|
18 | 18 |
|
19 | 19 | from .models import DeviceDataClass
|
20 |
| -from .utils import exclude_lines, get_unified_diff |
| 20 | +from .utils import PLATFORM_MAPPING, exclude_lines, get_unified_diff |
21 | 21 |
|
22 | 22 |
|
23 | 23 | class ConfigDiffBase:
|
@@ -52,7 +52,7 @@ def run_script(self, data: dict) -> None:
|
52 | 52 | self.get_diff(devices)
|
53 | 53 | self.update_in_db(devices)
|
54 | 54 |
|
55 |
| - def validate_data(self, data: dict) -> Iterable[ConfigContextQuerySet]: |
| 55 | + def validate_data(self, data: dict) -> Iterable[Device]: |
56 | 56 | if not data["site"] and not data["devices"]:
|
57 | 57 | raise AbortScript("Define site or devices")
|
58 | 58 | if data.get("data_source") and data["data_source"].status != DataSourceStatusChoices.COMPLETED:
|
@@ -101,7 +101,7 @@ def log_results(self, device: DeviceDataClass) -> None:
|
101 | 101 | else:
|
102 | 102 | self.log_success(f"{device.name} no diff")
|
103 | 103 |
|
104 |
| - def get_devices_with_rendered_configs(self, devices: Iterable[ConfigContextQuerySet]) -> Iterator[DeviceDataClass]: |
| 104 | + def get_devices_with_rendered_configs(self, devices: Iterable[Device]) -> Iterator[DeviceDataClass]: |
105 | 105 | username = get_plugin_config("netbox_config_diff", "USERNAME")
|
106 | 106 | password = get_plugin_config("netbox_config_diff", "PASSWORD")
|
107 | 107 | for device in devices:
|
@@ -151,6 +151,12 @@ def get_diff(self, devices: list[DeviceDataClass]) -> None:
|
151 | 151 | for device in devices:
|
152 | 152 | if device.error is not None:
|
153 | 153 | continue
|
154 |
| - device.diff = get_unified_diff( |
155 |
| - device.rendered_config, exclude_lines(device.actual_config, device.exclude_regex), device.name |
156 |
| - ) |
| 154 | + cleaned_config = exclude_lines(device.actual_config, device.exclude_regex) |
| 155 | + device.diff = get_unified_diff(device.rendered_config, cleaned_config, device.name) |
| 156 | + if device.platform in PLATFORM_MAPPING: |
| 157 | + device.missing = diff_network_config( |
| 158 | + device.rendered_config, cleaned_config, PLATFORM_MAPPING[device.platform] |
| 159 | + ) |
| 160 | + device.extra = diff_network_config( |
| 161 | + cleaned_config, device.rendered_config, PLATFORM_MAPPING[device.platform] |
| 162 | + ) |
0 commit comments