nautobot-app-golden-config icon indicating copy to clipboard operation
nautobot-app-golden-config copied to clipboard

Add Register Method for Custom Compliance

Open itdependsnetworks opened this issue 9 months ago • 0 comments

Environment

  • Nautobot version:
  • nautobot-golden-config version:

Proposed Functionality

Add decorator or similar functionality for custom compliance.

from @whitej6

nautobot_config.py

PLUGINS_CONFIG = {
    "nautobot_golden_config": {
        "get_custom_compliance": "my.custom_compliance.custom_compliance_func"
    }
}
compliance_router.py
class ComplianceRouter(dict):
    def register(self, rule="", platform=""):
        _method_map = f"{rule}__{platform}"
        def wrapper(func):
            self[_method_map] = func
        return wrapper
    def __call__(self, obj):
        _method_map = f"{obj.rule.slug}__{obj.rule.platform.slug}"
        if self.get(_method_map):
            self[_method_map](obj)
        else:
            raise ValueError("Requested compliance for {} + {} does not correspond to an existing function".format(obj.rule.slug, obj.rule.platform.slug))

custom_compliance.py

from .compliance_router import ComplianceRouter

router = ComplianceRouter()

@router.register(rule="aaa", platform="ios")
def aaa_ios(obj):
    # some logic
    return {}

@router.register(rule="aaa", platform="eos")
def aaa_eos(obj):
    # some logic
    return {}

def custom_compliance_func(obj)
    return router(obj)

Use Case

itdependsnetworks avatar Oct 07 '23 13:10 itdependsnetworks