Skip to content

Commit

Permalink
Merge pull request #174 from nautobot/stable-0.9
Browse files Browse the repository at this point in the history
Stable 0.9
  • Loading branch information
itdependsnetworks authored Nov 27, 2021
2 parents b33f1f0 + 7d5ad95 commit 6034577
Show file tree
Hide file tree
Showing 23 changed files with 1,404 additions and 722 deletions.
22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,27 @@
# Changelog

## v0.9.10 - 2021-11

### Announcements

- Nautobot Golden Config 0.9.X will officially not support versions after 1.2.X
- Nautobot Golden Config 1.0.X will tentatively not support versions after 1.2.X
- Nautobot Golden Config will maintain a `stable-<major>.<minor>` branch name
- Nautobot Golden Config branching policy created

### Added

- #155 Contribution policy updated in Readme

### Fixed

- #129 Update filters, forms, add filters to api.
- #148 move diff2html to be locally served
- #154 Fix report bar chart overlap
- #161 Fix configuration compliance export gives traceback
- #164 Fixes the export functionality for configuration compliance list view.
- #166 fix configuration and overview reporting csv exports

## v0.9.9 - 2021-10

### Fixed
Expand Down
33 changes: 29 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@

A plugin for [Nautobot](https://github.com/nautobot/nautobot) that intends to provide context around golden configuration.

**This version is currently in Beta and will require a rebuild of the database for a 1.0 release.**


# Introduction

## What is the Golden Configuration Plugin?
Expand All @@ -19,7 +16,7 @@ This plugin enable four (4) key use cases.
1. **Configuration Backups** - Is a Nornir process to connect to devices, optionally parse out lines/secrets, backup the configuration, and save to a Git repository.
2. **Intended Configuration** - Is a Nornir process to generate configuration based on a Git repo of Jinja files to combine with a GraphQL generated data and a Git repo to store the intended configuration.
3. **Source of Truth Aggregation** - Is a GraphQL query per device that creates a data structure used in the generation of configuration.
4. **Configuration Compliance** - Is a Nornir process to run comparison of the actual (via backups) and intended (via Jinja file creation) CLI configurations.
4. **Configuration Compliance** - Is a process to run comparison of the actual (via backups) and intended (via Jinja file creation) CLI configurations upon saving the actual and intended configuration. This is started by either a Nornir process for cli-like configurations or calling the API for json-like configurations

>Notice: The operator's of their own Nautobot instance are welcome to use any combination of these features. Though the appearance may seem like they are tightly
coupled, this isn't actually the case. For example, one can obtain backup configurations from their current RANCID/Oxidized process and simply provide a Git Repo
Expand All @@ -34,6 +31,7 @@ but not want to use other features, which is perfectly fine to do so.
- [Navigating Intended](./docs/navigating-intended.md)
- [Navigating SoTAgg](./docs/navigating-sot-agg.md)
- [Navigating Compliance](./docs/navigating-compliance.md)
- [Navigating JSON Compliance](./docs/navigating-compliance-json.md)
- [FAQ](./docs/FAQ.md)

## Screenshots
Expand Down Expand Up @@ -65,6 +63,33 @@ The project is following Network to Code software development guidelines and are
- Black, Pylint, Bandit, flake8, and pydocstyle for Python linting and formatting.
- Django unit test to ensure the plugin is working properly.

## Branching Policy

The branching policy includes the following tenets:

- The develop branch is the branch of the next major or minor version planned.
- The `stable-<major>.<minor>` branch is the branch of the latest version within that major/minor version
- PRs intended to add new features should be sourced from the develop branch
- PRs intended to address bug fixes and security patches should be sourced from `stable-<major>.<minor>`

Nautobot Golden Config will observe semantic versioning, as of 1.0. This may result in an quick turn around in minor versions to keep
pace with an ever growing feature set.

## Release Policy

Nautobot Golden Config has currently no intended scheduled release schedule, and will release new feature in minor versions.

## Deprecation Policy

Support of upstream Nautobot will be announced 1 minor or major version ahead. Deprecation policy will be announced within the
CHANGELOG.md file, and updated in the table below. There will be a `stable-<major>.<minor>` branch that will be minimally maintained.
Any security enhancements or major bugs will be supported for a limited time.

| Golden Config Version | Nautobot First Support Version | Nautobot Last Support Version |
| --------------------- | ------------------------------ | ----------------------------- |
| 0.9.X | 1.0 | 1.2 [Official] |
| 1.0.X | 1.2 | 1.2 [Tentative] |

## CLI Helper Commands

The project features a CLI helper based on [invoke](http://www.pyinvoke.org/) to help setup the development environment. The commands are listed below in 3 categories:
Expand Down
5 changes: 4 additions & 1 deletion docs/FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,15 @@ _What are the supported platforms for Compliance jobs? How do I configure a devi
The current supported platform and the associated *default* platform slug names are the following for:

* arista_eos
* bigip_f5
* cisco_asa
* cisco_ios
* cisco_nxos
* cisco_aireos
* linux
* bigip_f5
* fortinet_fortios
* juniper_junos
* linux

The expected "network_os" parameter must be as defined by netutils and golden config uses the platform slug to map from the device to the appropriate
"network_os" that netutils expects. However, there an ability to map the actual platform slug for compliance and parsing tasks via the plugin settings in your
Expand All @@ -72,6 +74,7 @@ _What are the supported platforms for Backup and Intended Configuration jobs? Ho
The current supported platform and the associated *default* platform slug names are the following for:

* arista_eos
* cisco_asa
* cisco_ios
* cisco_ios_xr
* cisco_nxos
Expand Down
6 changes: 3 additions & 3 deletions docs/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,9 @@ The plugin behavior can be controlled with the following list of settings.
| enable_sotagg | True | True | A boolean to represent whether or not to provide a GraphQL query per device to allow the intended configuration to provide data variables to the plugin. |
| platform_slug_map | {"cisco_wlc": "cisco_aireos"} | None | A dictionary in which the key is the platform slug and the value is what netutils uses in any "network_os" parameter. |
| sot_agg_transposer | mypkg.transposer | - | A string representation of a function that can post-process the graphQL data. |
| per_feature_bar_width | 0.15 | 0.15 | The width of the table bar within the overview report |
| per_feature_width | 13 | 13 | The width in inches that the overview table can be. |
| per_feature_height | 4 | 4 | The height in inches that the overview table can be. |
| per_feature_bar_width | 0.15 | 0.15 | The width of the table bar within the overview report |
| per_feature_width | 13 | 13 | The width in inches that the overview table can be. |
| per_feature_height | 4 | 4 | The height in inches that the overview table can be. |

> Note: Over time the intention is to make the compliance report more dynamic, but for now allow users to configure the `per_*` configs in a way that fits best for them.
Expand Down
2 changes: 1 addition & 1 deletion nautobot_golden_config/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""Plugin declaration for nautobot_golden_config."""

__version__ = "0.9.9"
__version__ = "0.9.10"

from nautobot.extras.plugins import PluginConfig

Expand Down
7 changes: 7 additions & 0 deletions nautobot_golden_config/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

from nautobot_golden_config.api import serializers
from nautobot_golden_config import models
from nautobot_golden_config import filters
from nautobot_golden_config.utilities.graphql import graph_ql_query


Expand Down Expand Up @@ -40,27 +41,31 @@ class ComplianceRuleViewSet(CustomFieldModelViewSet): # pylint:disable=too-many

queryset = models.ComplianceRule.objects.all()
serializer_class = serializers.ComplianceRuleSerializer
filterset_class = filters.ComplianceRuleFilterSet


class ComplianceFeatureViewSet(CustomFieldModelViewSet): # pylint:disable=too-many-ancestors
"""API viewset for interacting with ComplianceFeature objects."""

queryset = models.ComplianceFeature.objects.all()
serializer_class = serializers.ComplianceFeatureSerializer
filterset_class = filters.ComplianceFeatureFilterSet


class ConfigComplianceViewSet(CustomFieldModelViewSet): # pylint:disable=too-many-ancestors
"""API viewset for interacting with ConfigCompliance objects."""

queryset = models.ConfigCompliance.objects.all()
serializer_class = serializers.ConfigComplianceSerializer
filterset_class = filters.ConfigComplianceFilterSet


class GoldenConfigViewSet(CustomFieldModelViewSet): # pylint:disable=too-many-ancestors
"""API viewset for interacting with GoldenConfig objects."""

queryset = models.GoldenConfig.objects.all()
serializer_class = serializers.GoldenConfigSerializer
filterset_class = filters.GoldenConfigFilterSet


class GoldenConfigSettingViewSet(CustomFieldModelViewSet): # pylint:disable=too-many-ancestors
Expand All @@ -75,10 +80,12 @@ class ConfigRemoveViewSet(CustomFieldModelViewSet): # pylint:disable=too-many-a

queryset = models.ConfigRemove.objects.all()
serializer_class = serializers.ConfigRemoveSerializer
filterset_class = filters.ConfigRemoveFilterSet


class ConfigReplaceViewSet(CustomFieldModelViewSet): # pylint:disable=too-many-ancestors
"""API viewset for interacting with ConfigReplace objects."""

queryset = models.ConfigReplace.objects.all()
serializer_class = serializers.ConfigReplaceSerializer
filterset_class = filters.ConfigReplaceFilterSet
Loading

0 comments on commit 6034577

Please sign in to comment.