From f9cea2b2784d1467e8fb64488ac6924509e0c7ed Mon Sep 17 00:00:00 2001 From: Artem Kotik Date: Mon, 23 Oct 2023 17:30:46 +0400 Subject: [PATCH] Closes #38: Add role field to ConfigDiffScript --- docs/colliecting-diffs.md | 4 ++-- docs/media/screenshots/script.png | Bin 37552 -> 42952 bytes netbox_config_diff/compliance/base.py | 32 ++++++++++++++++++-------- tests/conftest.py | 1 + tests/test_compliance.py | 2 +- 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/docs/colliecting-diffs.md b/docs/colliecting-diffs.md index 00b9af7..54ddae6 100644 --- a/docs/colliecting-diffs.md +++ b/docs/colliecting-diffs.md @@ -28,8 +28,8 @@ You can find scripts list in navbar `Customization -> Scripts`. ![Screenshot of the scripts list](media/screenshots/script-list.png) -In the script, you can define a site, on which devices run compliance, or devices. - If you define both fields, script will run only on devices from `Devices` field +In the script, you can define a site or role, on which devices run compliance, or devices. + If you define all fields, script will run only on devices from `Devices` field !!! warning Script runs only on devices with assigned Primary IP, Platform and PlatformSetting diff --git a/docs/media/screenshots/script.png b/docs/media/screenshots/script.png index 77c7b15862e56bbff62cf1b3b43c96b59d4281d7..b0fe6768dd02257a5e7687f0145db798db6f53e1 100644 GIT binary patch literal 42952 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 JnUQPMe*j#fDX;(l literal 37552 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 Q!02P}boFyt=akR{0Eu&JDF6Tf diff --git a/netbox_config_diff/compliance/base.py b/netbox_config_diff/compliance/base.py index 49e478a..9478764 100644 --- a/netbox_config_diff/compliance/base.py +++ b/netbox_config_diff/compliance/base.py @@ -6,7 +6,8 @@ from core.choices import DataSourceStatusChoices from core.models import DataFile, DataSource from dcim.choices import DeviceStatusChoices -from dcim.models import Device, Site +from dcim.models import Device, DeviceRole, Site +from django.conf import settings from django.core.exceptions import ObjectDoesNotExist from django.db.models import Q from extras.scripts import MultiObjectVar, ObjectVar @@ -27,6 +28,11 @@ class ConfigDiffBase(SecretsMixin): required=False, description="Run compliance for devices (with primary IP, platform) in this site", ) + role = ObjectVar( + model=DeviceRole, + required=False, + description="Run compliance for devices with this role", + ) devices = MultiObjectVar( model=Device, required=False, @@ -34,7 +40,7 @@ class ConfigDiffBase(SecretsMixin): "has_primary_ip": True, "platform_id__n": "null", }, - description="If you define devices in this field, the Site field will be ignored", + description="If you define devices in this field, Site, Role fields will be ignored", ) status = CustomChoiceVar( choices=DeviceStatusChoices, @@ -57,8 +63,8 @@ def run_script(self, data: dict) -> None: self.update_in_db(devices) def validate_data(self, data: dict) -> Iterable[Device]: - if not data["site"] and not data["devices"]: - raise AbortScript("Define site or devices") + if not data["site"] and not data["role"] and not data["devices"]: + raise AbortScript("Define site, role or devices") if data.get("data_source") and data["data_source"].status != DataSourceStatusChoices.COMPLETED: raise AbortScript("Define synced DataSource") @@ -75,13 +81,21 @@ def validate_data(self, data: dict) -> Iterable[Device]: ) ) else: - devices = Device.objects.filter( - site=data["site"], - status=data["status"], - platform__platform_setting__isnull=False, - ).exclude( + filters = { + "status": data["status"], + "platform__platform_setting__isnull": False, + } + if data["site"]: + filters["site"] = data["site"] + elif data["role"]: + if settings.VERSION.split(".", 1)[1].startswith("5"): + filters["device_role"] = data["role"] + else: + filters["role"] = data["role"] + devices = Device.objects.filter(**filters).exclude( Q(primary_ip4__isnull=True) & Q(primary_ip6__isnull=True), ) + if data.get("devices"): if qs_diff := data["devices"].difference(devices): platforms = {d.platform.name for d in qs_diff} diff --git a/tests/conftest.py b/tests/conftest.py index 0a5c91c..6c44751 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -34,6 +34,7 @@ def script_data_factory() -> "ScriptDataFactory": def factory(**fields: Unpack["ScriptData"]) -> "ScriptData": data = { "site": None, + "role": None, "devices": None, "data_source": None, "status": "active", diff --git a/tests/test_compliance.py b/tests/test_compliance.py index e9350f3..e111ab1 100644 --- a/tests/test_compliance.py +++ b/tests/test_compliance.py @@ -16,7 +16,7 @@ def test_validate_data_no_data(mock_config_diff: "ConfigDiffBase", script_data: "ScriptData") -> None: with pytest.raises(AbortScript) as e: mock_config_diff.validate_data(data=script_data) - assert str(e.value) == "Define site or devices" + assert str(e.value) == "Define site, role or devices" @pytest.mark.django_db()