nautobot-app-golden-config
nautobot-app-golden-config copied to clipboard
Add Register Method for Custom Compliance
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)