From 0c9b56fa54541e9f6fabdb8b2d4a7f8fdfbb3f79 Mon Sep 17 00:00:00 2001 From: Gary Snider <75227981+gsnider2195@users.noreply.github.com> Date: Wed, 6 Nov 2024 08:17:31 -0800 Subject: [PATCH 1/7] Added a web ui for Jinja template developers to render intended configurations from templates in an arbitrary git repository. --- .../generate-intended-config-ui-dark.png | Bin 0 -> 32814 bytes docs/images/generate-intended-config-ui.png | Bin 0 -> 32489 bytes docs/user/app_feature_intended.md | 11 ++- nautobot_golden_config/forms.py | 15 +++ nautobot_golden_config/navigation.py | 11 +++ .../generate_intended_config.html | 92 ++++++++++++++++++ nautobot_golden_config/urls.py | 1 + nautobot_golden_config/views.py | 16 ++- 8 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 docs/images/generate-intended-config-ui-dark.png create mode 100644 docs/images/generate-intended-config-ui.png create mode 100644 nautobot_golden_config/templates/nautobot_golden_config/generate_intended_config.html diff --git a/docs/images/generate-intended-config-ui-dark.png b/docs/images/generate-intended-config-ui-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e8629aa76c5c0b709d340bcd947827a4ab0687ed GIT binary patch literal 32814 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 literal 0 HcmV?d00001 diff --git a/docs/images/generate-intended-config-ui.png b/docs/images/generate-intended-config-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..3f5c602fee0b4e7bf2d614c5d062f4570966bc28 GIT binary patch literal 32489 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 SX@e*1Y1B?@oyt|b;Qv1l@2|xG literal 0 HcmV?d00001 diff --git a/docs/user/app_feature_intended.md b/docs/user/app_feature_intended.md index 81c78a34..9d558240 100644 --- a/docs/user/app_feature_intended.md +++ b/docs/user/app_feature_intended.md @@ -35,15 +35,20 @@ In these examples, `/services.j2`, `/ntp.j2`, etc. could contain the actual Jinj ### Developing Intended Configuration Templates -To help developers create the Jinja2 templates for generating the intended configuration, the app provides a REST API at `/api/plugins/golden-config/generate-intended-config/`. This API accepts two query parameters: `device_id` and `git_repository_id`. It returns the rendered configuration for the specified device using the templates from the given Git repository. This feature allows developers to test their configuration templates using a custom `GitRepository` without running a full intended configuration job. +To help developers create the Jinja2 templates for generating the intended configuration, the app provides a REST API at `/api/plugins/golden-config/generate-intended-config/` and a simple web UI at `/plugins/golden-config/generate-intended-config/`. The REST API accepts two query parameters: `device_id` and `git_repository_id`. It returns the rendered configuration for the specified device using the templates from the given Git repository. This feature allows developers to test their configuration templates using a custom `GitRepository` without running a full intended configuration job. -Here's an example of how to request the rendered configuration for a device: +Here's an example of how to request the rendered configuration for a device using the REST API: ```no-highlight GET /api/plugins/golden-config/generate-intended-config/?device_id=231b8765-054d-4abe-bdbf-cd60e049cd8d&git_repository_id=82c051e0-d0a9-4008-948a-936a409c654a ``` -The returned response will contain the rendered configuration for the specified device. This is the intended workflow for developers: +The returned response will contain the rendered configuration for the specified device. The web UI provides a simple form to input the device and Git repository and displays the rendered configuration when submitted. + +![Intended Configuration Web UI](../images/generate-intended-config-ui.png#only-light) +![Intended Configuration Web UI](../images/generate-intended-config-ui-dark.png#only-dark) + +This is the intended workflow for developers: - Create a new branch in the intended configuration repository. - Modify the Jinja2 templates in that new branch. diff --git a/nautobot_golden_config/forms.py b/nautobot_golden_config/forms.py index 66559015..2b73dd42 100644 --- a/nautobot_golden_config/forms.py +++ b/nautobot_golden_config/forms.py @@ -598,3 +598,18 @@ class Meta: "change_control_url", "tags", ] + + +class GenerateIntendedConfigForm(django_forms.Form): + """Form for generating intended configuration.""" + + device = forms.DynamicModelChoiceField( + queryset=Device.objects.all(), + required=True, + label="Device", + ) + git_repository = forms.DynamicModelChoiceField( + queryset=GitRepository.objects.all(), + required=True, + label="Git Repository", + ) diff --git a/nautobot_golden_config/navigation.py b/nautobot_golden_config/navigation.py index cad08c5c..0b3aa46d 100644 --- a/nautobot_golden_config/navigation.py +++ b/nautobot_golden_config/navigation.py @@ -146,6 +146,17 @@ groups=( NavMenuGroup(name="Manage", weight=100, items=tuple(items_operate)), NavMenuGroup(name="Setup", weight=100, items=tuple(items_setup)), + NavMenuGroup( + name="Tools", + weight=300, + items=( + NavMenuItem( + link="plugins:nautobot_golden_config:generate_intended_config", + name="Generate Intended Config", + permissions=["dcim.view_device", "extras.view_gitrepository"], + ), + ), + ), ), ), ) diff --git a/nautobot_golden_config/templates/nautobot_golden_config/generate_intended_config.html b/nautobot_golden_config/templates/nautobot_golden_config/generate_intended_config.html new file mode 100644 index 00000000..ca4b3c98 --- /dev/null +++ b/nautobot_golden_config/templates/nautobot_golden_config/generate_intended_config.html @@ -0,0 +1,92 @@ +{% extends "base.html" %} +{% load form_helpers %} +{% load helpers %} +{% load static %} + +{% block extra_styles %} + +{% endblock extra_styles %} + +{% block content %} +
+
+
+
+
{% block title %}Generate Intended Configuration{% endblock title %}
+
+

+ This tool renders the configuration for the specified device using the Jinja templates from the given Git repository. + This feature allows developers to test their configuration templates using a custom GitRepository without running a full + intended configuration job. See the + + developing intended configuration templates + documentation for more information. +

+ {% render_field form.device %} + {% render_field form.git_repository %} +
+
+
+ + Cancel +
+
+
+
+
+ Intended Configuration + +
+
+ +
+
+
+
+
+{% endblock content %} + +{% block javascript %} + {{ block.super }} + +{% endblock javascript %} diff --git a/nautobot_golden_config/urls.py b/nautobot_golden_config/urls.py index f6b55835..c66dd37e 100644 --- a/nautobot_golden_config/urls.py +++ b/nautobot_golden_config/urls.py @@ -23,5 +23,6 @@ urlpatterns = [ path("config-compliance/overview/", views.ConfigComplianceOverview.as_view(), name="configcompliance_overview"), path("config-plan/bulk_deploy/", views.ConfigPlanBulkDeploy.as_view(), name="configplan_bulk-deploy"), + path("generate-intended-config/", views.GenerateIntendedConfigView.as_view(), name="generate_intended_config"), path("docs/", RedirectView.as_view(url=static("nautobot_golden_config/docs/index.html")), name="docs"), ] + router.urls diff --git a/nautobot_golden_config/views.py b/nautobot_golden_config/views.py index 9826a845..024c2044 100644 --- a/nautobot_golden_config/views.py +++ b/nautobot_golden_config/views.py @@ -6,13 +6,14 @@ import yaml from django.contrib import messages +from django.contrib.auth.mixins import PermissionRequiredMixin from django.core.exceptions import ObjectDoesNotExist from django.db.models import Count, ExpressionWrapper, F, FloatField, Max, Q from django.shortcuts import redirect, render from django.urls import reverse from django.utils.html import format_html from django.utils.timezone import make_aware -from django.views.generic import View +from django.views.generic import TemplateView, View from django_pivot.pivot import pivot from nautobot.apps import views from nautobot.core.views import generic @@ -585,3 +586,16 @@ def post(self, request): **job.job_class.serialize_data(request), ) return redirect(job_result.get_absolute_url()) + + +class GenerateIntendedConfigView(PermissionRequiredMixin, TemplateView): + """View to generate the intended configuration.""" + + template_name = "nautobot_golden_config/generate_intended_config.html" + permission_required = ["dcim.view_device", "extras.view_gitrepository"] + + def get_context_data(self, **kwargs): + """Get the context data for the view.""" + context = super().get_context_data(**kwargs) + context["form"] = forms.GenerateIntendedConfigForm() + return context From 8f09593856fea3fab91eee921762616acea9827c Mon Sep 17 00:00:00 2001 From: Gary Snider <75227981+gsnider2195@users.noreply.github.com> Date: Wed, 6 Nov 2024 08:21:04 -0800 Subject: [PATCH 2/7] changelog --- changes/827.added | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/827.added diff --git a/changes/827.added b/changes/827.added new file mode 100644 index 00000000..09bb0585 --- /dev/null +++ b/changes/827.added @@ -0,0 +1 @@ +Added a web ui for Jinja template developers to render intended configurations from templates in an arbitrary git repository. From 52c358f96b14c509927d8840e650d16265c96545 Mon Sep 17 00:00:00 2001 From: Gary Snider <75227981+gsnider2195@users.noreply.github.com> Date: Wed, 6 Nov 2024 08:32:46 -0800 Subject: [PATCH 3/7] Update docs/user/app_feature_intended.md Co-authored-by: Ken Celenza --- docs/user/app_feature_intended.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user/app_feature_intended.md b/docs/user/app_feature_intended.md index 9d558240..e49eeb55 100644 --- a/docs/user/app_feature_intended.md +++ b/docs/user/app_feature_intended.md @@ -48,7 +48,7 @@ The returned response will contain the rendered configuration for the specified ![Intended Configuration Web UI](../images/generate-intended-config-ui.png#only-light) ![Intended Configuration Web UI](../images/generate-intended-config-ui-dark.png#only-dark) -This is the intended workflow for developers: +This is the intended workflow for Jinja Template developers: - Create a new branch in the intended configuration repository. - Modify the Jinja2 templates in that new branch. From 849d309160a265e8af8c4f03fff958037d86498f Mon Sep 17 00:00:00 2001 From: Gary Snider <75227981+gsnider2195@users.noreply.github.com> Date: Wed, 6 Nov 2024 09:00:46 -0800 Subject: [PATCH 4/7] Update nautobot_golden_config/templates/nautobot_golden_config/generate_intended_config.html Co-authored-by: Jeff Kala <48843785+jeffkala@users.noreply.github.com> --- .../nautobot_golden_config/generate_intended_config.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nautobot_golden_config/templates/nautobot_golden_config/generate_intended_config.html b/nautobot_golden_config/templates/nautobot_golden_config/generate_intended_config.html index ca4b3c98..7e43261d 100644 --- a/nautobot_golden_config/templates/nautobot_golden_config/generate_intended_config.html +++ b/nautobot_golden_config/templates/nautobot_golden_config/generate_intended_config.html @@ -31,7 +31,7 @@
- + Cancel
From 72868c40b96f209220c8ada0cb3194d6063ba4c7 Mon Sep 17 00:00:00 2001 From: Gary Snider <75227981+gsnider2195@users.noreply.github.com> Date: Thu, 7 Nov 2024 13:53:49 -0800 Subject: [PATCH 5/7] address feedback --- .../generate-intended-config-ui-dark.png | Bin 32814 -> 41359 bytes docs/images/generate-intended-config-ui.png | Bin 32489 -> 41459 bytes docs/user/app_feature_intended.md | 19 ++----- nautobot_golden_config/api/serializers.py | 4 +- nautobot_golden_config/api/views.py | 25 +++++---- nautobot_golden_config/forms.py | 5 -- .../generate_intended_config.html | 24 ++++---- nautobot_golden_config/tests/test_api.py | 53 ++++++++---------- 8 files changed, 58 insertions(+), 72 deletions(-) diff --git a/docs/images/generate-intended-config-ui-dark.png b/docs/images/generate-intended-config-ui-dark.png index e8629aa76c5c0b709d340bcd947827a4ab0687ed..7980b92c22ed5b8dfbc5a8e2a15f08187f66eeea 100644 GIT binary patch literal 41359 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 diff --git a/docs/images/generate-intended-config-ui.png b/docs/images/generate-intended-config-ui.png index 3f5c602fee0b4e7bf2d614c5d062f4570966bc28..604a6ab310bde730f34fafb6f07c5d954b4dd149 100644 GIT binary patch literal 41459 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 SX@e*1Y1B?@oyt|b;Qv1l@2|xG diff --git a/docs/user/app_feature_intended.md b/docs/user/app_feature_intended.md index e49eeb55..a27170a5 100644 --- a/docs/user/app_feature_intended.md +++ b/docs/user/app_feature_intended.md @@ -35,29 +35,22 @@ In these examples, `/services.j2`, `/ntp.j2`, etc. could contain the actual Jinj ### Developing Intended Configuration Templates -To help developers create the Jinja2 templates for generating the intended configuration, the app provides a REST API at `/api/plugins/golden-config/generate-intended-config/` and a simple web UI at `/plugins/golden-config/generate-intended-config/`. The REST API accepts two query parameters: `device_id` and `git_repository_id`. It returns the rendered configuration for the specified device using the templates from the given Git repository. This feature allows developers to test their configuration templates using a custom `GitRepository` without running a full intended configuration job. +To help developers create the Jinja2 templates for generating a device's intended configuration, the app provides a REST API at `/api/plugins/golden-config/generate-intended-config/` and a simple web UI at `/plugins/golden-config/generate-intended-config/`. The REST API accepts a query parameter for `device_id` and returns the rendered configuration for the specified device using the templates from the device's golden config `jinja_repository` Git repository. This feature allows developers to test their configuration templates without running a full "intended configuration" job. Here's an example of how to request the rendered configuration for a device using the REST API: ```no-highlight -GET /api/plugins/golden-config/generate-intended-config/?device_id=231b8765-054d-4abe-bdbf-cd60e049cd8d&git_repository_id=82c051e0-d0a9-4008-948a-936a409c654a +curl -s -X GET \ + -H "Accept: application/json" \ + http://nautobot/api/plugins/golden-config/generate-intended-config/?device_id=231b8765-054d-4abe-bdbf-cd60e049cd8d ``` -The returned response will contain the rendered configuration for the specified device. The web UI provides a simple form to input the device and Git repository and displays the rendered configuration when submitted. +The returned response will contain the rendered configuration for the specified device. The web UI provides a simple form to input the device and displays the rendered configuration when submitted. ![Intended Configuration Web UI](../images/generate-intended-config-ui.png#only-light) ![Intended Configuration Web UI](../images/generate-intended-config-ui-dark.png#only-dark) -This is the intended workflow for Jinja Template developers: - -- Create a new branch in the intended configuration repository. -- Modify the Jinja2 templates in that new branch. -- Add a new `GitRepository` in Nautobot that points to the new branch and sync the repository. - - NOTE: Do not select the "jinja templates" option under the "Provides" field when creating the `GitRepository`. Nautobot does not allow multiple `GitRepository` instances with an identical URL and "Provided Content". This API ignores the "Provided Content" field for this reason. - - Don't forget to associate credentials required to access the repository using the "Secrets Group" field. -- Use the API to render the configuration for a device, using the new `GitRepository`. - -Calling this API endpoint automatically performs a `git pull`, retrieving the latest commit from the branch before rendering the template. +Calling this API endpoint automatically performs a `git pull`, retrieving the latest commit from the Jinja2 templates Git repository before rendering the template. Note that this API is only intended to render Jinja2 templates and does not apply any [configuration post-processing](./app_feature_config_postprocessing.md). diff --git a/nautobot_golden_config/api/serializers.py b/nautobot_golden_config/api/serializers.py index 64ba2120..d67f57d4 100644 --- a/nautobot_golden_config/api/serializers.py +++ b/nautobot_golden_config/api/serializers.py @@ -129,5 +129,5 @@ class Meta: class GenerateIntendedConfigSerializer(serializers.Serializer): # pylint: disable=abstract-method """Serializer for GenerateIntendedConfigView.""" - intended_config = serializers.CharField() - intended_config_lines = serializers.ListField(child=serializers.CharField()) + intended_config = serializers.CharField(read_only=True) + intended_config_lines = serializers.ListField(read_only=True, child=serializers.CharField()) diff --git a/nautobot_golden_config/api/views.py b/nautobot_golden_config/api/views.py index 17358c72..cf7178e5 100644 --- a/nautobot_golden_config/api/views.py +++ b/nautobot_golden_config/api/views.py @@ -20,7 +20,6 @@ from nautobot.dcim.models import Device from nautobot.extras.api.views import NautobotModelViewSet, NotesViewSetMixin from nautobot.extras.datasources.git import ensure_git_repository -from nautobot.extras.models import GitRepository from nautobot_plugin_nornir.constants import NORNIR_SETTINGS from nornir import InitNornir from nornir_nautobot.plugins.tasks.dispatcher import dispatcher @@ -233,25 +232,21 @@ def _get_jinja_template_path(self, settings, device, git_repository): type=OpenApiTypes.UUID, location=OpenApiParameter.QUERY, ), - OpenApiParameter( - name="git_repository_id", - required=True, - type=OpenApiTypes.UUID, - location=OpenApiParameter.QUERY, - ), ] ) def get(self, request, *args, **kwargs): - """Generate intended configuration for a Device with an arbitrary GitRepository.""" + """Generate intended configuration for a Device.""" device = self._get_object(request, Device, "device_id") - git_repository = self._get_object(request, GitRepository, "git_repository_id") settings = models.GoldenConfigSetting.objects.get_for_device(device) if not settings: raise GenerateIntendedConfigException("No Golden Config settings found for this device") if not settings.sot_agg_query: raise GenerateIntendedConfigException("Golden Config settings sot_agg_query not set") + if not settings.jinja_repository: + raise GenerateIntendedConfigException("Golden Config settings jinja_repository not set") try: + git_repository = settings.jinja_repository ensure_git_repository(git_repository) except Exception as exc: raise GenerateIntendedConfigException("Error trying to sync git repository") from exc @@ -268,7 +263,7 @@ def get(self, request, *args, **kwargs): graphql_data=context, ) except Exception as exc: - raise GenerateIntendedConfigException("Error rendering Jinja template") from exc + raise GenerateIntendedConfigException(f"Error rendering Jinja template: {exc}") from exc return Response( data={ "intended_config": intended_config, @@ -315,4 +310,12 @@ def _render_config_nornir_serial(self, device, jinja_template, jinja_root_path, "generate_config", device.platform.network_driver, logging.getLogger(dispatch_params.__module__) ), ) - return results[device.name][1][1][0].result["config"] + if results[device.name].failed: + if results[device.name].exception: + raise results[device.name].exception + else: + raise GenerateIntendedConfigException( + f"Error generating intended config for {device.name}: {results[device.name].result}" + ) + else: + return results[device.name][1][1][0].result["config"] diff --git a/nautobot_golden_config/forms.py b/nautobot_golden_config/forms.py index 2b73dd42..1c7a5740 100644 --- a/nautobot_golden_config/forms.py +++ b/nautobot_golden_config/forms.py @@ -608,8 +608,3 @@ class GenerateIntendedConfigForm(django_forms.Form): required=True, label="Device", ) - git_repository = forms.DynamicModelChoiceField( - queryset=GitRepository.objects.all(), - required=True, - label="Git Repository", - ) diff --git a/nautobot_golden_config/templates/nautobot_golden_config/generate_intended_config.html b/nautobot_golden_config/templates/nautobot_golden_config/generate_intended_config.html index 7e43261d..d74e62a2 100644 --- a/nautobot_golden_config/templates/nautobot_golden_config/generate_intended_config.html +++ b/nautobot_golden_config/templates/nautobot_golden_config/generate_intended_config.html @@ -19,13 +19,21 @@
{% block title %}Generate Intended Configuration{% endblock title %}

- This tool renders the configuration for the specified device using the Jinja templates from the given Git repository. - This feature allows developers to test their configuration templates using a custom GitRepository without running a full - intended configuration job. See the + This tool is intended for template developers. Production configuration generation should be initiated from the + Config Overview page. +

+

+ This will render the configuration for the selected device using Jinja templates from the golden config jinja_repository + Git repository for that device. + This feature allows developers to test their configuration templates without running a full "intended configuration" job. See the developing intended configuration templates documentation for more information.

+

+ Note: + This will perform a git pull on the golden config Jinja template repository to ensure the latest templates are used. +

{% render_field form.device %} {% render_field form.git_repository %}
@@ -66,12 +74,8 @@ const rendered_config = document.getElementById("rendered_config"); rendered_config.innerHTML = "Loading..."; const device = document.getElementById("id_device").value; - const git_repository = document.getElementById("id_git_repository").value; const url = "{% url 'plugins-api:nautobot_golden_config-api:generate_intended_config' %}"; - const data = { - device_id: device, - git_repository_id: git_repository, - }; + const data = {device_id: device}; const query_params = new URLSearchParams(data).toString(); const response = await fetch(url + "?" + query_params, { method: "GET", @@ -80,12 +84,12 @@ const responseData = await response.json(); if (!response.ok) { const msg = responseData.detail ? responseData.detail : response.statusText; - rendered_config.innerHTML = sanitize(`An error occurred: ${msg}`); + rendered_config.innerHTML = sanitize(`An error occurred:\n\n${msg}`); } else { rendered_config.innerHTML = sanitize(responseData.intended_config); } } catch (error) { - rendered_config.innerHTML = sanitize(`An error occurred: ${error.message}`); + rendered_config.innerHTML = sanitize(`An error occurred:\n\n${error.message}`); } } diff --git a/nautobot_golden_config/tests/test_api.py b/nautobot_golden_config/tests/test_api.py index 88ed0d8f..13855679 100644 --- a/nautobot_golden_config/tests/test_api.py +++ b/nautobot_golden_config/tests/test_api.py @@ -1,6 +1,5 @@ """Unit tests for nautobot_golden_config.""" -import uuid from copy import deepcopy from unittest.mock import patch @@ -431,15 +430,15 @@ def setUpTestData(cls): platform.network_driver = "arista_eos" platform.save() + cls.git_repository = GitRepository.objects.get(name="test-jinja-repo-1") cls.golden_config_setting = GoldenConfigSetting.objects.create( name="GoldenConfigSetting test api generate intended config", slug="goldenconfigsetting-test-api-generate-intended-config", sot_agg_query=GraphQLQuery.objects.get(name="GC-SoTAgg-Query-2"), dynamic_group=cls.dynamic_group, + jinja_repository=cls.git_repository, ) - cls.git_repository = GitRepository.objects.get(name="test-jinja-repo-1") - def _setup_mock_path(self, MockPath): # pylint: disable=invalid-name mock_path_instance = MockPath.return_value mock_path_instance.__str__.return_value = "test.j2" @@ -474,7 +473,7 @@ def _generate_config(task, *args, **kwargs): response = self.client.get( reverse("plugins-api:nautobot_golden_config-api:generate_intended_config"), - data={"device_id": self.device.pk, "git_repository_id": self.git_repository.pk}, + data={"device_id": self.device.pk}, **self.header, ) @@ -499,7 +498,7 @@ def test_generate_intended_config_failures(self, mock_dispatcher, MockPath, mock # test missing query parameters response = self.client.get( reverse("plugins-api:nautobot_golden_config-api:generate_intended_config"), - data={"git_repository_id": self.git_repository.pk}, + data={}, **self.header, ) self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST) @@ -509,24 +508,12 @@ def test_generate_intended_config_failures(self, mock_dispatcher, MockPath, mock "Parameter device_id is required", ) - response = self.client.get( - reverse("plugins-api:nautobot_golden_config-api:generate_intended_config"), - data={"device_id": self.device.pk}, - **self.header, - ) - self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST) - self.assertTrue("detail" in response.data) - self.assertEqual( - response.data["detail"], - "Parameter git_repository_id is required", - ) - # test git repo not present on filesystem mock_path_instance.is_file.return_value = False response = self.client.get( reverse("plugins-api:nautobot_golden_config-api:generate_intended_config"), - data={"device_id": self.device.pk, "git_repository_id": self.git_repository.pk}, + data={"device_id": self.device.pk}, **self.header, ) @@ -556,20 +543,23 @@ def _generate_config(task, *args, **kwargs): response = self.client.get( reverse("plugins-api:nautobot_golden_config-api:generate_intended_config"), - data={"device_id": self.device.pk, "git_repository_id": self.git_repository.pk}, + data={"device_id": self.device.pk}, **self.header, ) self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST) self.assertTrue("detail" in response.data) - self.assertEqual("Error rendering Jinja template", response.data["detail"]) + self.assertEqual( + response.data["detail"].strip(), + "Error rendering Jinja template: Subtask: GENERATE CONFIG (failed)", + ) # test ensure_git_repository failure mock_ensure_git_repository.side_effect = Exception("Test exception") response = self.client.get( reverse("plugins-api:nautobot_golden_config-api:generate_intended_config"), - data={"device_id": self.device.pk, "git_repository_id": self.git_repository.pk}, + data={"device_id": self.device.pk}, **self.header, ) @@ -577,37 +567,38 @@ def _generate_config(task, *args, **kwargs): self.assertTrue("detail" in response.data) self.assertEqual("Error trying to sync git repository", response.data["detail"]) - # test no sot_agg_query on GoldenConfigSetting - self.golden_config_setting.sot_agg_query = None + # test jinja_repository not set + self.golden_config_setting.jinja_repository = None self.golden_config_setting.save() - response = self.client.get( reverse("plugins-api:nautobot_golden_config-api:generate_intended_config"), - data={"device_id": self.device.pk, "git_repository_id": self.git_repository.pk}, + data={"device_id": self.device.pk}, **self.header, ) self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST) self.assertTrue("detail" in response.data) - self.assertEqual("Golden Config settings sot_agg_query not set", response.data["detail"]) + self.assertEqual(response.data["detail"], "Golden Config settings jinja_repository not set") + + # test no sot_agg_query on GoldenConfigSetting + self.golden_config_setting.sot_agg_query = None + self.golden_config_setting.save() - # test git_repository instance not found - invalid_uuid = uuid.uuid4() response = self.client.get( reverse("plugins-api:nautobot_golden_config-api:generate_intended_config"), - data={"device_id": self.device.pk, "git_repository_id": invalid_uuid}, + data={"device_id": self.device.pk}, **self.header, ) self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST) self.assertTrue("detail" in response.data) - self.assertEqual(f"GitRepository with id '{invalid_uuid}' not found", response.data["detail"]) + self.assertEqual("Golden Config settings sot_agg_query not set", response.data["detail"]) # test no GoldenConfigSetting found for device GoldenConfigSetting.objects.all().delete() response = self.client.get( reverse("plugins-api:nautobot_golden_config-api:generate_intended_config"), - data={"device_id": self.device.pk, "git_repository_id": self.git_repository.pk}, + data={"device_id": self.device.pk}, **self.header, ) From a06367567c64c68a0e994180aa37d99302cd447f Mon Sep 17 00:00:00 2001 From: Gary Snider <75227981+gsnider2195@users.noreply.github.com> Date: Thu, 7 Nov 2024 13:57:19 -0800 Subject: [PATCH 6/7] silence overly opinionated pylint rule --- nautobot_golden_config/api/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nautobot_golden_config/api/views.py b/nautobot_golden_config/api/views.py index cf7178e5..acba6b2c 100644 --- a/nautobot_golden_config/api/views.py +++ b/nautobot_golden_config/api/views.py @@ -311,7 +311,7 @@ def _render_config_nornir_serial(self, device, jinja_template, jinja_root_path, ), ) if results[device.name].failed: - if results[device.name].exception: + if results[device.name].exception: # pylint: disable=no-else-raise raise results[device.name].exception else: raise GenerateIntendedConfigException( From 909bf46750b6857e6304dbc5ee4893c81b97ab9d Mon Sep 17 00:00:00 2001 From: Gary Snider <75227981+gsnider2195@users.noreply.github.com> Date: Thu, 7 Nov 2024 14:02:40 -0800 Subject: [PATCH 7/7] changelog --- changes/827.added | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changes/827.added b/changes/827.added index 09bb0585..d2f8aec3 100644 --- a/changes/827.added +++ b/changes/827.added @@ -1 +1 @@ -Added a web ui for Jinja template developers to render intended configurations from templates in an arbitrary git repository. +Added a web ui for Jinja template developers to render intended configurations.