Skip to content

Commit

Permalink
Back out some of the drift manager changes.
Browse files Browse the repository at this point in the history
  • Loading branch information
smk4664 committed Jan 8, 2025
1 parent a89b7ce commit fff9b76
Show file tree
Hide file tree
Showing 18 changed files with 5,398 additions and 268 deletions.
122 changes: 121 additions & 1 deletion nautobot_golden_config/api/serializers.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,22 @@
"""API serializers for nautobot_golden_config."""

# pylint: disable=too-many-ancestors
from nautobot.apps.api import NautobotModelSerializer, TaggedModelSerializerMixin
from nautobot.dcim.api.serializers import DeviceSerializer
from nautobot.dcim.models import Device
from rest_framework import serializers

from nautobot_golden_config import models
from nautobot_golden_config.utilities.config_postprocessing import get_config_postprocessing


class ComplianceFeatureSerializer(NautobotModelSerializer, TaggedModelSerializerMixin): # pylint: disable=too-many-ancestors
class GraphQLSerializer(serializers.Serializer): # pylint: disable=abstract-method
"""Serializer for a GraphQL object."""

data = serializers.JSONField()


class ComplianceFeatureSerializer(NautobotModelSerializer, TaggedModelSerializerMixin):
"""ComplianceFeature Serializer."""

class Meta:
Expand All @@ -16,3 +27,112 @@ class Meta:

# Option for disabling write for certain fields:
# read_only_fields = []


class ComplianceRuleSerializer(NautobotModelSerializer, TaggedModelSerializerMixin):
"""Serializer for ComplianceRule object."""

class Meta:
"""Set Meta Data for ComplianceRule, will serialize all fields."""

model = models.ComplianceRule
fields = "__all__"


class ConfigComplianceSerializer(NautobotModelSerializer, TaggedModelSerializerMixin):
"""Serializer for ConfigCompliance object."""

class Meta:
"""Set Meta Data for ConfigCompliance, will serialize fields."""

model = models.ConfigCompliance
fields = "__all__"


class GoldenConfigSerializer(NautobotModelSerializer, TaggedModelSerializerMixin):
"""Serializer for GoldenConfig object."""

class Meta:
"""Set Meta Data for GoldenConfig, will serialize all fields."""

model = models.GoldenConfig
fields = "__all__"


class GoldenConfigSettingSerializer(NautobotModelSerializer, TaggedModelSerializerMixin):
"""Serializer for GoldenConfigSetting object."""

class Meta:
"""Set Meta Data for GoldenConfigSetting, will serialize all fields."""

model = models.GoldenConfigSetting
fields = "__all__"


class ConfigRemoveSerializer(NautobotModelSerializer, TaggedModelSerializerMixin):
"""Serializer for ConfigRemove object."""

class Meta:
"""Set Meta Data for ConfigRemove, will serialize all fields."""

model = models.ConfigRemove
fields = "__all__"


class ConfigReplaceSerializer(NautobotModelSerializer, TaggedModelSerializerMixin):
"""Serializer for ConfigReplace object."""

class Meta:
"""Set Meta Data for ConfigReplace, will serialize all fields."""

model = models.ConfigReplace
fields = "__all__"


class ConfigToPushSerializer(DeviceSerializer): # pylint: disable=nb-sub-class-name
"""Serializer for ConfigToPush view."""

config = serializers.SerializerMethodField()

class Meta(DeviceSerializer.Meta):
"""Extend the Device serializer with the configuration after postprocessing."""

fields = "__all__"
model = Device

def get_config(self, obj):
"""Provide the intended configuration ready after postprocessing to the config field."""
request = self.context.get("request")
config_details = models.GoldenConfig.objects.get(device=obj)
return get_config_postprocessing(config_details, request)


class RemediationSettingSerializer(NautobotModelSerializer, TaggedModelSerializerMixin):
"""Serializer for RemediationSetting object."""

class Meta:
"""Set Meta Data for RemediationSetting, will serialize all fields."""

model = models.RemediationSetting
fields = "__all__"


class ConfigPlanSerializer(NautobotModelSerializer, TaggedModelSerializerMixin):
"""Serializer for ConfigPlan object."""

class Meta:
"""Set Meta Data for ConfigPlan, will serialize all fields."""

model = models.ConfigPlan
fields = "__all__"
read_only_fields = ["device", "plan_type", "feature", "config_set"]


class GenerateIntendedConfigSerializer(serializers.Serializer): # pylint: disable=abstract-method
"""Serializer for GenerateIntendedConfigView."""

intended_config = serializers.CharField(read_only=True)
intended_config_lines = serializers.ListField(read_only=True, child=serializers.CharField())
graphql_data = serializers.JSONField(read_only=True)
diff = serializers.CharField(read_only=True)
diff_lines = serializers.ListField(read_only=True, child=serializers.CharField())
27 changes: 25 additions & 2 deletions nautobot_golden_config/api/urls.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,34 @@
"""Django API urlpatterns declaration for nautobot_golden_config app."""

from django.urls import path
from nautobot.apps.api import OrderedDefaultRouter

from nautobot_golden_config.api import views

router = OrderedDefaultRouter()
# add the name of your api endpoint, usually hyphenated model name in plural, e.g. "my-model-classes"
router.register("compliancefeature", views.ComplianceFeatureViewSet)
router.APIRootView = views.GoldenConfigRootView
router.register("compliance-feature", views.ComplianceFeatureViewSet)
router.register("compliance-rule", views.ComplianceRuleViewSet)
router.register("config-compliance", views.ConfigComplianceViewSet)
router.register("golden-config", views.GoldenConfigViewSet)
router.register("golden-config-settings", views.GoldenConfigSettingViewSet)
router.register("config-remove", views.ConfigRemoveViewSet)
router.register("config-replace", views.ConfigReplaceViewSet)
router.register("remediation-setting", views.RemediationSettingViewSet)
router.register("config-postprocessing", views.ConfigToPushViewSet)
router.register("config-plan", views.ConfigPlanViewSet)

urlpatterns = router.urls
urlpatterns = [
path(
"sotagg/<uuid:pk>/",
views.SOTAggDeviceDetailView.as_view(),
name="device_detail",
),
path(
"generate-intended-config/",
views.GenerateIntendedConfigView.as_view(),
name="generate_intended_config",
),
]
urlpatterns += router.urls
Loading

0 comments on commit fff9b76

Please sign in to comment.