Code Monkey home page Code Monkey logo

nautobot-app-device-lifecycle-mgmt's Introduction

Device Lifecycle Management



An App for Nautobot.

Overview

An app for Nautobot to manage device lifecycles. This app works by making related associations to Devices, Device Types, and Inventory Items to help provide data about the hardware end of life notices, appropriate software versions to be running on the devices, and the maintenance contracts associated with devices. This will help with the various aspects of planning Lifecycle events, and provides quick access to ancillary data about the devices in Nautobot.

Screenshots

More screenshots can be found in the Using the App page in the documentation. Here's a quick overview of some of the app's added functionality:

Device Lifecycle Management List View

You can view the list of Hardware/Software notices as well as filter the table.

Device Lifecycle Management Detail View

You can also click a Hardware/Software Notice and see the detail view. This view provides links to the devices that are part affected by this EoX notice due to their device type.

Software Lifecycle Management List View

You can view the list of Software versions as well as filter the table.

Software Lifecycle Reporting

Reports can be created from the Nautobot's software validation jobs Device Software Validation - Report or Inventory Item Software Validation - Report.

Individual CSV files can be exported per platform or inventory item.

Sample CSV.

You can also view validation results as a list from the Nautobot GUI.

Try it out!

This App is installed in the Nautobot Community Sandbox found over at demo.nautobot.com!

For a full list of all the available always-on sandbox environments, head over to the main page on networktocode.com.

Documentation

Full web-based HTML documentation for this app can be found over on the Nautobot Docs website:

Contributing to the Docs

You can find all the Markdown source for the App documentation under the docs folder in this repository. For simple edits, a Markdown capable editor is sufficient - clone the repository and edit away.

If you need to view the fully generated documentation site, you can build it with mkdocs. A container hosting the docs will be started using the invoke commands (details in the Development Environment Guide) on http://localhost:8001. As your changes are saved, the live docs will be automatically reloaded.

Any PRs with fixes or improvements are very welcome!

Questions

For any questions or comments, please check the FAQ first. Feel free to also swing by the Network to Code Slack (channel #nautobot), sign up here if you don't have an account.

nautobot-app-device-lifecycle-mgmt's People

Contributors

abates avatar alhogan avatar bajansen avatar bradh11 avatar briddo avatar chadell avatar cmsirbu avatar dependabot[bot] avatar dgarros avatar fragmentedpacket avatar gertzakis avatar gsnider2195 avatar jdrew82 avatar joewesch avatar josh-silvas avatar jvanderaa avatar pato23arg avatar progala avatar qduk avatar smk4664 avatar snaselj avatar ubajze avatar whitej6 avatar zackt25 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nautobot-app-device-lifecycle-mgmt's Issues

Add capability to get Validated Softwares per given device

Proposed Functionality

Add capability to fetch Validated Softwares per given device. This could be potentially a device filter. This should be covered by both GraphQL and REST APIs.

Example query (pseudocode):

query {
  validated softwares(device: "warsaw-rtr-01") {
    name
  }
}

Use Case

As a Network Automation Engineer, I want to fetch a list Validated Softwares for a given device. List of Validated Softwares is useful to me, to perform checks if particular software has been approved for a given device.

Hardware Notices Sort Broken for Name & Reference

Environment

  • Python version: 3.8.12
  • Nautobot version: 1.4.0, 1.4.1, and 1.4.3
  • nautobot-plugin-device-lifecycle-mgmt version: 1.0.2

Expected Behavior

Able to sort the list of Hardware Notices by clicking on the Name or Reference menu header.

Observed Behavior

A Server Error is triggered with the error: "Cannot resolve keyword 'name' into field. Choices are: _custom_field_data, comments, created, destination_for_associations, device_type, device_type_id, documentation_url, end_of_sale, end_of_security_patches, end_of_support, end_of_sw_releases, id, inventory_item, last_updated, release_date, source_for_associations, tagged_items, tags
" or "Cannot resolve keyword 'reference_item' into field. Choices are: _custom_field_data, comments, created, destination_for_associations, device_type, device_type_id, documentation_url, end_of_sale, end_of_security_patches, end_of_support, end_of_sw_releases, id, inventory_item, last_updated, release_date, source_for_associations, tagged_items, tags"

The sort works for the other menu headers, just not for Name or Reference. This is also seen on the demo.nautobot.com instance at

https://demo.nautobot.com/plugins/nautobot-device-lifecycle-mgmt/hardware/?sort=name and https://demo.nautobot.com/plugins/nautobot-device-lifecycle-mgmt/hardware/?sort=reference_item

Steps to Reproduce

  1. Setup Nautobot and DLC plugin.
  2. Add some Hardware Notices.
  3. Click on the "Name" or "Reference" menu header.

Feature Request: Last Updated Date field (for the vendor's update timestamps)

Environment

  • Nautobot version: N/A
  • nautobot-plugin-device-lifecycle-mgmt version: latest

Proposed Functionality

For CVE / Hardware Notices / Software Notices include a field to record the date the notice was updated by the vendor.

Use Case

Vendor's will often publish a notice, and then update it at later dates. Including the date of last update within the lifecycle plugin in Nautobot allows for automated confirmation that the notice is up to date, or a flag if it has been updated by the vendor.

API Integration: Cisco

Environment

  • Nautobot version: N/A
  • nautobot-plugin-device-lifecycle-mgmt version: latest

Proposed Functionality

It would be great to be able to provide a Nautobot job that will poll the Cisco EoX API and populate the necessary lifecycle models.

Use Case

Pull accurate data from Cisco EoX API and populate the necessary notices, etc. so users do not have to manually input or create a standalone integration between the Cisco EoX API and Nautobot.

Allow "Object Assigned To" to reference multiple objects

Environment

  • Nautobot version: 1.1.4
  • nautobot-plugin-device-lifecycle-mgmt version: 0.2.1

Proposed Functionality

Currently, when creating a ValidatedSoftware object, it only allows for reference to a single Device/DeviceType/InventoryItem. Would be good to have this able to reference multiple.

Use Case

As Nelly the Network Engineer, I define all of the validated software for Initec, Inc. Our company uses many different models of the Juniper SRX3xx family of devices. The SR3xx devices use the same code base, across many models. For example, we will specify 18.4R2-S6.3 for SRX300, SRX320, SRX340, etc. We would like to be able to create a single ValidatedSoftware entry that can reference all of these models.

Reports: Add click through for the data

Environment

  • Python version:
  • Nautobot version:
  • nautobot-plugin-device-lifecycle-mgmt version:

Expected Behavior

Reports - should be able to click through into the items (such as No Software) to get those items

Observed Behavior

Just a table without being able to click into the items

Steps to Reproduce

Incorrect permissions in the template content inc templates

Environment

  • Nautobot version: 1.1.6
  • nautobot-plugin-device-lifecycle-mgmt version: 0.3.0

Expected Behavior

Standard user with device lifecycle plugin permissions assigned should see content for the matching hardware notice in the:

  • detailed device view in GUI
  • detailed device type view in GUI

Observed Behavior

No additional content is displayed for the standard user despite all of the permissions being in place. Admin user can see the content.

Steps to Reproduce

  1. Create standard user
  2. Assign all of the nautobot_device_lifecycle_mgmt permissions to the user
  3. Create Hardware notice matching one of the existing device types
  4. Navigate to the detailed view for either the device or device type matching the hardware notice

Deprecated class warnings when starting Nautobot

Environment

  • Python version: 3.9
  • Nautobot version: 1.4.5
  • nautobot-plugin-device-lifecycle-mgmt version: 1.0.2

Expected Behavior

No warnings.

Observed Behavior

When I start Nautobot and run the post_upgrade command I can see a lot of warning messages saying class XYZ is deprecated.

06:21:09 WARNING Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving SoftwareLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - forms - /usr/local/lib/python3.9/site-packages/nautobot_device_lifecycle_mgmt/forms.py:188
06:21:09 WARNING Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving SoftwareImageLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - forms - /usr/local/lib/python3.9/site-packages/nautobot_device_lifecycle_mgmt/forms.py:265
06:21:09 WARNING Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving ValidatedSoftwareLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - forms - /usr/local/lib/python3.9/site-packages/nautobot_device_lifecycle_mgmt/forms.py:420
06:21:09 WARNING Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving ValidatedSoftwareLCMFilterForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - forms - /usr/local/lib/python3.9/site-packages/nautobot_device_lifecycle_mgmt/forms.py:469
06:21:09 WARNING Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving DeviceSoftwareValidationResultFilterForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - forms - /usr/local/lib/python3.9/site-packages/nautobot_device_lifecycle_mgmt/forms.py:529
06:21:09 WARNING Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving InventoryItemSoftwareValidationResultFilterForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - forms - /usr/local/lib/python3.9/site-packages/nautobot_device_lifecycle_mgmt/forms.py:579
06:21:09 WARNING Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving ContractLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - forms - /usr/local/lib/python3.9/site-packages/nautobot_device_lifecycle_mgmt/forms.py:693
06:21:09 WARNING Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving ProviderLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - forms - /usr/local/lib/python3.9/site-packages/nautobot_device_lifecycle_mgmt/forms.py:806
06:21:09 WARNING Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving ContactLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - forms - /usr/local/lib/python3.9/site-packages/nautobot_device_lifecycle_mgmt/forms.py:896
06:21:09 WARNING Class StatusBulkEditFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving CVELCMForm from StatusBulkEditFormMixin, please migrate your code to inherit from class StatusModelBulkEditFormMixin instead. - nautobot.utilities.deprecation - forms - /usr/local/lib/python3.9/site-packages/nautobot_device_lifecycle_mgmt/forms.py:982
06:21:09 WARNING Class StatusBulkEditFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving CVELCMBulkEditForm from StatusBulkEditFormMixin, please migrate your code to inherit from class StatusModelBulkEditFormMixin instead. - nautobot.utilities.deprecation - forms - /usr/local/lib/python3.9/site-packages/nautobot_device_lifecycle_mgmt/forms.py:1008
06:21:09 WARNING Class StatusFilterFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving CVELCMFilterForm from StatusFilterFormMixin, please migrate your code to inherit from class StatusModelFilterFormMixin instead. - nautobot.utilities.deprecation - forms - /usr/local/lib/python3.9/site-packages/nautobot_device_lifecycle_mgmt/forms.py:1028
06:21:09 WARNING Class StatusBulkEditFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving VulnerabilityLCMForm from StatusBulkEditFormMixin, please migrate your code to inherit from class StatusModelBulkEditFormMixin instead. - nautobot.utilities.deprecation - forms - /usr/local/lib/python3.9/site-packages/nautobot_device_lifecycle_mgmt/forms.py:1090
06:21:09 WARNING Class StatusBulkEditFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving VulnerabilityLCMBulkEditForm from StatusBulkEditFormMixin, please migrate your code to inherit from class StatusModelBulkEditFormMixin instead. - nautobot.utilities.deprecation - forms - /usr/local/lib/python3.9/site-packages/nautobot_device_lifecycle_mgmt/forms.py:1109
06:21:09 WARNING Class StatusFilterFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving VulnerabilityLCMFilterForm from StatusFilterFormMixin, please migrate your code to inherit from class StatusModelFilterFormMixin instead. - nautobot.utilities.deprecation - forms - /usr/local/lib/python3.9/site-packages/nautobot_device_lifecycle_mgmt/forms.py:1125

I think this happens for all Nautobot 1.4.x versions.

Steps to Reproduce

  1. Install plugins
  2. Run the post_upgrade command.

Add report showing devices and their software validation status

Proposed Functionality

Add reporting showing the devices running validated/invalid software versions.

User Story

As Alison the Network Engineer,
I want to be able to see in GUI all of my devices that are running invalid/validated versions of the software.

I will know this is done when:

I can navigate to the report view showing list of devices and their software validation status.

Associate software to Virtual Machines

Environment

  • Nautobot version: 1.4.5
  • nautobot-plugin-device-lifecycle-mgmt version: 1.0.2

(May be unnecessary depending on if nautobot/nautobot#1178 progresses)

Proposed Functionality

Have the ability to select Virtual Machines for software relationships, the same as Running on Devices / Running on Inventory Items.

Use Case

I would like to be able to set software on virtual machines in the same way as is currently available in devices. This would allow for simple tracking of OS on VMs.

Implementing this would also enable Generate Vulnerabilities to highlight CVE that impacts OS running on VMs as well as Devices / Inventory Items.

Edit and Delete buttons missing from many Detail views

Environment

  • Python version: 3.7.9
  • Nautobot version: 1.1.6
  • nautobot-plugin-device-lifecycle-mgmt version: 0.4.0

Expected Behavior

When logged into the Nautobot demo site as the demo user, in the detail view a single object you should have an Edit and Delete button.

Observed Behavior

The Edit and Delete buttons are missing. If you are in the list view, the row action buttons are there and grant you access to edit. Also, the bulk edit works.

Steps to Reproduce

  1. Go to the Hardware Notices List view on the demo site
  2. Click on any of the items to go to the detail view to observe the buttons are missing
  3. If, however, you go to the Software List view and select a single item there you do indeed have the Edit and Delete buttons.

This seems to be due to an incorrect conditional statement that we are using on many of the templates:

https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/blob/331666cbdd229d8c69bf7bb9cc66633e157b290d/nautobot_device_lifecycle_mgmt/templates/nautobot_device_lifecycle_mgmt/hardwarelcm.html#L18-L22

The Software Detail view seems to have the correct conditionals:

https://github.com/nautobot/nautobot-plugin-device-lifecycle-mgmt/blob/331666cbdd229d8c69bf7bb9cc66633e157b290d/nautobot_device_lifecycle_mgmt/templates/nautobot_device_lifecycle_mgmt/softwarelcm.html#L30-L38

Post Migrate signal sometimes fails "missing positional argument apps"

Environment

  • Python version: 3.8
  • Nautobot version: 1.2.8
  • nautobot-plugin-device-lifecycle-mgmt version: 1.0.0

Expected Behavior

Launching Nautobot or Nautobot tests works.

Observed Behavior

Nautobot tests are failing due to the TypeError: post_migrate_create_relationships() missing 1 required positional argument: 'apps'

Steps to Reproduce

Load other plugins with this in a Nautobot instance, try to run Nautobot.

I haven't narrowed down what scenarios cause the error, but the issue is that Django does not always sends apps as an argument in the function call.

Suggested Resolution

From Glenn Matthews
A thing I just discovered about the post_migrate signal, for those of us who are using it - the following signature is incorrect in some cases:
def my_post_migrate_signal(apps, **kwargs):
as apps is actually an optional keyword argument, not a positional arg. Instead, you should do:
from django.apps import apps as global_apps

def my_post_migrate_signal(apps=global_apps, **kwargs):

Deprecation Notices

Environment

  • Python version: 3.7
  • Nautobot version: 1.4
  • nautobot-plugin-device-lifecycle-mgmt version:

Expected Behavior

Plugin doesn't use deprecated models/forms

Observed Behavior

When running nautobot-server check there are several deprecated models in use:

Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving HardwareLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving HardwareLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving SoftwareLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving SoftwareLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving SoftwareImageLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving SoftwareImageLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving ValidatedSoftwareLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving ValidatedSoftwareLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving ValidatedSoftwareLCMFilterForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving ValidatedSoftwareLCMFilterForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving DeviceSoftwareValidationResultFilterForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving DeviceSoftwareValidationResultFilterForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving InventoryItemSoftwareValidationResultFilterForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving InventoryItemSoftwareValidationResultFilterForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving ContractLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving ContractLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving ProviderLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving ProviderLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving ContactLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class CustomFieldModelForm is deprecated, and will be removed in a future Nautobot release. Instead of deriving ContactLCMForm from CustomFieldModelForm, please migrate your code to inherit from class CustomFieldModelFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class StatusBulkEditFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving CVELCMForm from StatusBulkEditFormMixin, please migrate your code to inherit from class StatusModelBulkEditFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class StatusBulkEditFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving CVELCMForm from StatusBulkEditFormMixin, please migrate your code to inherit from class StatusModelBulkEditFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class StatusBulkEditFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving CVELCMBulkEditForm from StatusBulkEditFormMixin, please migrate your code to inherit from class StatusModelBulkEditFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class StatusBulkEditFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving CVELCMBulkEditForm from StatusBulkEditFormMixin, please migrate your code to inherit from class StatusModelBulkEditFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class StatusFilterFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving CVELCMFilterForm from StatusFilterFormMixin, please migrate your code to inherit from class StatusModelFilterFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class StatusFilterFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving CVELCMFilterForm from StatusFilterFormMixin, please migrate your code to inherit from class StatusModelFilterFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class StatusBulkEditFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving VulnerabilityLCMForm from StatusBulkEditFormMixin, please migrate your code to inherit from class StatusModelBulkEditFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class StatusBulkEditFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving VulnerabilityLCMForm from StatusBulkEditFormMixin, please migrate your code to inherit from class StatusModelBulkEditFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class StatusBulkEditFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving VulnerabilityLCMBulkEditForm from StatusBulkEditFormMixin, please migrate your code to inherit from class StatusModelBulkEditFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class StatusBulkEditFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving VulnerabilityLCMBulkEditForm from StatusBulkEditFormMixin, please migrate your code to inherit from class StatusModelBulkEditFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class StatusFilterFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving VulnerabilityLCMFilterForm from StatusFilterFormMixin, please migrate your code to inherit from class StatusModelFilterFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42
 Class StatusFilterFormMixin is deprecated, and will be removed in a future Nautobot release. Instead of deriving VulnerabilityLCMFilterForm from StatusFilterFormMixin, please migrate your code to inherit from class StatusModelFilterFormMixin instead. - nautobot.utilities.deprecation - deprecation - /usr/local/lib/python3.7/site-packages/nautobot/utilities/deprecation.py:42

Steps to Reproduce

Enhance ValidatedSoftware associations

Existing Functionality

The plugin allows for limited flexibility when working with ValidatedSoftware model instances.

The user is limited to create only one of the following per the single ValidatedSoftware instance:

  • one association to Device
  • one association to DeviceType
  • one association to InventoryItem

Proposed Functionality

While working with networks of hundreds or thousands of objects, it has been identified current way of managing the ValidatedSoftware is cumbersome.

Most likely, a given software release will be applicable to multiple Device(s) or multiple DeviceType(s) or multiple InventoryType(s) or Groups having the same lifecycle (valid from, valid until etc.).

Proposed functionality assumes following:
ValidatedSoftware instance pointing to a mix of Device, DeviceTypes and CustomGroups (nautobot/nautobot#896).

Use Case

As a Network Engineer, I want to have limited number of ValidatedSoftware to ease maintenance.

As a Network Engineer, I want to assign a ValidatedSoftware instance (one) for different and multiple types of objects (mix of Device, DeviceTypes and objects groups.)

CVE Modeling

Environment

  • Nautobot version: 1.2.x
  • nautobot-plugin-device-lifecycle-mgmt version: v0.3.0

Proposed Functionality

Add a method to which CVEs can be tracked and associated to assets within Nautobot.

The first model should be a standard CVE model that can be generalized CVE data with relationships to a software model. (Many to Many)
The second model would be a vulnerability model that would be created for a device/inventory-item <-> CVE basis to create a vulnerability for a given asset. The vulnerability model would need to support custom fields to allow notations and specific customizations depending on how the vulnerability will be handled.

Something like this, as an example:
Screen Shot 2022-01-12 at 10 45 26 AM

Use Case

As Sam the Network Security Engineer, I would like to extend the current functionality of the device llfecycle plugin to track CVEs and security vulnerabilities on a per-device, per-software basis. I think this could be accomplished with a basic CVE model within the plugin, along with an additional model to correlate a device/software to a CVE as a "vulnerability"

Feature Idea: Include Purchase Date / Depreciation Date

Environment

  • Nautobot version: N/A
  • nautobot-plugin-device-lifecycle-mgmt version: Early

Proposed Functionality

Possible to add a couple of more date fields for the model, to support:

  • Purchase Date
  • Depreciation date

Use Case

Purchase date to know when the purchase happens

For the depreciation date, this could be helpful for when the hardware is fully depreciated and may be good for replacement or if there would be depreciation costs.

This is an exploration of an idea, not for immediate design/implementation.

Software Feature License Management

Environment

  • Nautobot version: ^3.5
  • nautobot-plugin-device-lifecycle-mgmt version: ^1.0

Proposed Functionality

Many vendors use software licenses to manage the enablement of features on their platforms. Visibility of the licenses and their supported lifespan would be beneficial.

Reporting capability on the features in use and expiration dates would be very useful.

Use Case

Development Docs Updating

Environment

  • Current repo

Expected Behavior

  • Docs on how to do development

Observed Behavior

  • Missing the additional dependencies for the mysql library, how to install those (link to that)
  • Requirement of the python-dotenv library in the system Python for Invoke

Steps to Reproduce

  1. Clone repo
  2. Execute invoke build / poetry install
  3. See errors

Allow Software object to have multiple images/checksums

Proposed Functionality

Allow SoftwareLCM objects to have multiple image names, and corresponding checksums. Currently only one image is allowed per software version.

Some vendors have multiple software images for one software version. These could be device platform (model) dependent or have different feature sets.

User Story

As Austin the Network Engineer,
I want to be able to define multiple image names for given Software version. I want to be able to retrieve the correct Software object/image name combination given device type or potentially using other parameters.

Nautobot 1.5.2 is not compatible with plugin

Building and starting a container with Nautobot 1.5.2 and Lifecycle management 1.1.1 (I have tested 1.1.0 with the same result) I am seeing the following traceback preventing Nautobot from starting:

Traceback (most recent call last):
  File "/usr/local/bin/nautobot-server", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.10/site-packages/nautobot/core/cli.py", line 54, in main
    run_app(
  File "/usr/local/lib/python3.10/site-packages/nautobot/core/runner/runner.py", line 263, in run_app
    management.execute_from_command_line([runner_name, command] + command_args)
  File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 395, in execute
    django.setup()
  File "/usr/local/lib/python3.10/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/local/lib/python3.10/site-packages/django/apps/registry.py", line 122, in populate
    app_config.ready()
  File "/usr/local/lib/python3.10/site-packages/nautobot/circuits/apps.py", line 9, in ready
    super().ready()
  File "/usr/local/lib/python3.10/site-packages/nautobot/core/apps/__init__.py", line 50, in ready
    register_menu_items(menu_items)
  File "/usr/local/lib/python3.10/site-packages/nautobot/core/apps/__init__.py", line 84, in register_menu_items
    item.link = reverse(item.link, args=item.args, kwargs=item.kwargs)
  File "/usr/local/lib/python3.10/site-packages/django/urls/base.py", line 54, in reverse
    app_list = resolver.app_dict[ns]
  File "/usr/local/lib/python3.10/site-packages/django/urls/resolvers.py", line 530, in app_dict
    self._populate()
  File "/usr/local/lib/python3.10/site-packages/django/urls/resolvers.py", line 464, in _populate
    for url_pattern in reversed(self.url_patterns):
  File "/usr/local/lib/python3.10/site-packages/django/utils/functional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/usr/local/lib/python3.10/site-packages/django/urls/resolvers.py", line 602, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "/usr/local/lib/python3.10/site-packages/django/utils/functional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/usr/local/lib/python3.10/site-packages/django/urls/resolvers.py", line 595, in urlconf_module
    return import_module(self.urlconf_name)
  File "/usr/local/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/usr/local/lib/python3.10/site-packages/nautobot/core/urls.py", line 7, in <module>
    from nautobot.extras.plugins.urls import (
  File "/usr/local/lib/python3.10/site-packages/nautobot/extras/plugins/urls.py", line 37, in <module>
    urlpatterns = import_object(f"{plugin_path}.api.urls.urlpatterns")
  File "/usr/local/lib/python3.10/site-packages/nautobot/extras/plugins/utils.py", line 45, in import_object
    spec.loader.exec_module(module)
  File "/usr/local/lib/python3.10/site-packages/nautobot_device_lifecycle_mgmt/api/urls.py", line 4, in <module>
    from nautobot_device_lifecycle_mgmt.api.views import (
  File "/usr/local/lib/python3.10/site-packages/nautobot_device_lifecycle_mgmt/api/views.py", line 29, in <module>
    from .serializers import (
  File "/usr/local/lib/python3.10/site-packages/nautobot_device_lifecycle_mgmt/api/serializers.py", line 9, in <module>
    from nautobot.extras.api.serializers import (
ImportError: cannot import name 'CustomFieldModelSerializer' from 'nautobot.extras.api.serializers' (/usr/local/lib/python3.10/site-packages/nautobot/extras/api/serializers.py)

graphql in multiple places

Environment

  • Python version: 3.7
  • Nautobot version: 1.1.3
  • nautobot-plugin-device-lifecycle-mgmt version: 1?

Expected Behavior

A single implementation of graphql

Observed Behavior

Multiple implementations of graphql, which causes the below warning/error.

* DuplicateNodenameWarning: Received multiple replies from node name: celery@USOHWCPINNAF9-nafnautobotworker
* WARNING nautobot.graphql.schema
* Unable to load schema type for the model "nautobot_device_lifecycle_mgmt.contactlcm" as there is already another type registered under this name. If you are seeing this message during plugin development, check to make sure that you aren't using @extras_features("graphql") on the same model you're also defining a custom GraphQL type for.

I ran into same thing on golden config, see nautobot/nautobot-app-golden-config#112 and nautobot/nautobot-app-golden-config#106 for further information. The short of it, you do not need the graphql/types.py unless there is an abnormality, in which case, there should not be a graphql decorator on the model.

Steps to Reproduce

  1. Start Server
  2. View logs

Feature Request: Additional Fields for CVE

Environment

  • Nautobot version: N/A
  • nautobot-plugin-device-lifecycle-mgmt version: latest

Proposed Functionality

For CVE records there are some additional details that may be better included as part of the model rather than custom fields. These aren't necessarily part of the CVE record itself but are often retrievable from vendors in their advisories.

  1. A 2nd URL field to include a link to the machine readable version of the CVE from the vendor.
  2. A text field that can be used to include any tests that can validate exposure to the CVE.

Use Case

  1. eg Cisco provide a CVRF record for their advisories, along with the CVE details (https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20190925-httpserv-dos/cvrf/cisco-sa-20190925-httpserv-dos_cvrf.xml). Having this URL included with the CVE in Nautobot is handy as it can be used to pass this on to another tool.
  2. Some vendors provide additional information associated with their CVE records, using the same example above (https://www.cisco.com/c/en/us/support/docs/csa/cisco-sa-20190925-httpserv-dos.html), Cisco note tests that can be run to check exposure; "administrators can log in to the device and use the show running-config | include ip http server|secure-server command in the CLI to check for the presence of the ip http server command or the ip http secure-server command in the global configuration.". Including this in the CVE entry allows for automated testing to confirm exposure to a particular CVE.

Vendors portal_url field missing from serializer

Environment

  • Python version: 3.10
  • Nautobot version: 1.4.8
  • nautobot-plugin-device-lifecycle-mgmt version: 1.0.2

Expected Behavior

When created via REST API, vendor created with Portal URL displayed.

Observed Behavior

Vendor created successfully, but Portal URL is missing/ignored.

If a Vendor is created manually with a Portal URL, the URL displays in the GUI, but if you perform a REST GET operation on "/plugins/nautobot-device-lifecycle-mgmt/provider/" the portal_url property is not displayed.

Steps to Reproduce

  1. Using Python requests, perform a POST operation to "/plugins/nautobot-device-lifecycle-mgmt/provider/" with the payload:
{
    "name": "Cisco",
    "portal_url": "https://support.cisco.com"
}
  1. Navigate to Device Lifecycle --> Vendors
  2. Observe Vendor is created but Portal URL is missing

Feature Request: API Integration for device contract information

Environment

  • Nautobot version: latest
  • nautobot-plugin-device-lifecycle-mgmt version: latest

Proposed Functionality

Fetch device contract information from vendor supported APIs.

I think this can be broken into separate issues for each vendor when being implemented.

Use Case

Keep contracts up to date within the plugin based off information fetched from the vendor's API.

assign poc to multiple contracts

Environment

  • Nautobot version: 1.2.1
  • nautobot-plugin-device-lifecycle-mgmt version: 0.3.0

Proposed Functionality

It should be possible to assign a Contact to multiple Contracts

Use Case

We've different contracts with the same vendor, currently you've to recreate the contact for every new contract

Exceptions on plugin when using MySQL (MariaDB)

Environment

  • Python version: 3.9
  • Nautobot version: 1.1.2
  • nautobot-plugin-device-lifecycle-mgmt version: 0.2.1

Expected Behavior

Proper access to endpoints.

Observed Behavior

I am running nautobot with MySQL as the database backend. Plugin installation works fine. After installing the plugin, when attempting to create a Hardware LCM, I'm presented with the following error (running debug: true):

NotSupportedError at /plugins/device-lifecycle/hardware/add/
DISTINCT ON fields is not supported by this database backend
Request Method:	GET
Request URL:	https://nautobot.gcimbs.net/plugins/device-lifecycle/hardware/add/
Django Version:	3.1.13
Exception Type:	NotSupportedError
Exception Value:	
DISTINCT ON fields is not supported by this database backend
Exception Location:	/opt/nautobot/lib/python3.9/site-packages/django/db/backends/base/operations.py, line 176, in distinct_sql
Python Executable:	/usr/bin/python3.9
Python Version:	3.9.5
Python Path:	
['.',
 '',
 '/opt/nautobot',
 '/opt/nautobot/lib/python3.9/site-packages/git/ext/gitdb',
 '/opt/nautobot/bin',
 '/usr/lib/python39.zip',
 '/usr/lib/python3.9',
 '/usr/lib/python3.9/lib-dynload',
 '/opt/nautobot/lib/python3.9/site-packages',
 '/opt/nb_plugins/nautobot-routing-ospf',
 '/opt/nautobot/lib/python3.9/site-packages/gitdb/ext/smmap']
Server time:	Fri, 05 Nov 2021 08:45:39 -0800

Steps to Reproduce

  1. Install plugin
  2. Navigate to Hardware Notices URL - plugins/device-lifecycle/hardware/
  3. Click on the "Add" button

Validated Software not showing valid for "valid since" "today"

Environment

  • Python version: 3.9.12
  • Nautobot version: 1.2.10
  • nautobot-plugin-device-lifecycle-mgmt version: 1.0.2

Expected Behavior

When creating a new validated software object and setting the valid since field to today's date the valid now field should have a green check mark.

Observed Behavior

The valid now field shows a red X instead of a green check box.

Steps to Reproduce

  1. Create a new validated software
  2. Set valid since to the current date (today's date)
  3. Go to the validated software list to observe

Provide API Documentation

Environment

  • Nautobot version: 1.2.1
  • nautobot-plugin-device-lifecycle-mgmt version: 0.3.0

Expected Behavior

Documentation which shows how the plugin could be used via the REST API

Display matching Validated Software objects on the Device Type details page in GUI

Proposed Functionality

Add Validated Software template content for the Device Type object view. This should display ValidatedSoftwareLCM objects matching given Device Type similar to what is already in place for the Device view.

User Story

As Alison the Network Engineer,
I want to be able to see in GUI Validated Software definitions matching the Device Type.

I will know this is done when:

  • I can navigate to the detailed view for the Device Type in GUI and I can see matching Validated Software objects.

Request for new contract types: services (support/maintenance/project) and lease (circuits)

Environment

  • Nautobot version: 1.4.4
  • nautobot-plugin-device-lifecycle-mgmt version: 1.0.2

Proposed Functionality

Add two new contract types:

  • Services : this could be used for support/maintenance/integration type of services.
  • Lease: this could be used for circuits that are leased to an enterprise customer by an SP or by an SP leased to a customer/tenant.

Use Case

Please see above examples.

  • For example a contract may cover procurement and limited support of devices. After the first period a new contract could be assigned for extended support of those devices.
  • For circuits, a lease contract could be tied to those circuits linking to either Provider or tenant or both.

Enhance reporting functionality

Proposed Functionality

There is often need to have an overview of which Devices/Inventory Items are running valid software or have maintenance contracts in place. Furthermore, there should be a filtering functionality provided so that the reports can be generated on the fly for the subset of the Devices/Inventory Items selected across different dimensions.

These reports should be provided in graphical and tabular forms with the ability to download the images and export data in CSV, or similar, format.

User Story

As Nelly the Network Engineer,
I want to be able to see a summary of the software versions that are valid/invalid. I want to be able to filter the summary using attributes of Devices/Inventory Items and export the results in graphical and CSV forms.

I know this is done when:

  • I can go to a page called "Validated Software Reports" and can see overview with breakdown by device platforms/models etc.
  • I can apply filters by choosing device roles/devices/software version to generate reports of interest.
  • I can save charts by right clicking on the images and generate CSV exports by clicking on export button on the report page.

Tests Fail on 1.5.4

Environment

  • Python version: 3.9.x
  • Nautobot version: 1.5.4
  • nautobot-plugin-device-lifecycle-mgmt version: Latest

Expected Behavior

Tests to pass

Observed Behavior

Tests are failing on 1.5.4, but not 1.5.1

Steps to Reproduce

  1. Change "nautobot_ver": "1.5.4", from 1.5.1
  2. See the failure

Seen during #123

Software Images tab on Software page fails to render when there are no Image objects

Environment

  • Nautobot version: 1.2.8
  • nautobot-plugin-device-lifecycle-mgmt version: 1.0.0

Expected Behavior

Software Images tab on detailed Software page should show empty table if there are no associatd Software Image objects.

Observed Behavior

Software Images Tab fails to render and the exception is raised.

'NoneType' object has no attribute 'prefixed_order_by_field'

Steps to Reproduce

  1. Create Software object
  2. Navigate to the detailed view for the created Software
  3. Click on the Software Images tab

API Integration: Arista

Environment

  • Nautobot version: N/A
  • nautobot-plugin-device-lifecycle-mgmt version: latest

Proposed Functionality

It would be great to be able to provide a Nautobot job that will poll the Arista API and populate the necessary lifecycle models.

Use Case

Pull accurate data from Arista API and populate the necessary notices, etc. so users do not have to manually input or create a standalone integration between the Arista API and Nautobot.

Bug in the data migration from Software to Software Image

Environment

  • Nautobot version: 1.1.6
  • nautobot-plugin-device-lifecycle-mgmt version: 1.0.1

Expected Behavior

Automatic migration copies image checksum over from the Software object to the Software Image object.

Observed Behavior

Software image name is copied instead of the image checksum.

Steps to Reproduce

  1. Upgrade to version 1.0.0+ from pre 1.0.0 version of the plugin

GraphQL query for software validation results based on device causes error

Environment

  • Python version: 3.7.12
  • Nautobot version: 1.2.7
  • nautobot-plugin-device-lifecycle-mgmt version: 0.4.1

Expected Behavior

When running GraphQL query

query {
  devices {
    name
    id
    device_software_validation {
      id
    }
    rel_device_soft { version }
  }
}

Expect to see ID of software validation results

Observed Behavior

"errors": [
    {
      "message": "'DeviceSoftwareValidationResult' object has no attribute 'all'"

Steps to Reproduce

  1. See steps above

This seems to be related to Issue: nautobot/nautobot#1313

Error when having more than 57 softwares in the list

Environment

  • Python version: 3.6.8
  • Nautobot version: 1.1.5
  • nautobot-plugin-device-lifecycle-mgmt version: 0.2.2

Expected Behavior

When adding more then 57 softwares we get template error.

Observed Behavior

from debug output:
UnboundLocalError at /plugins/nautobot-device-lifecycle-mgmt/software/
local variable 'template' referenced before assignment
Request Method: GET
Request URL: https://...../plugins/nautobot-device-lifecycle-mgmt/software/
Django Version: 3.1.13
Exception Type: UnboundLocalError
Exception Value: local variable 'template' referenced before assignment
Exception Location: /opt/nautobot/lib64/python3.6/site-packages/nautobot/utilities/tables.py, line 371, in render
Python Executable: /usr/bin/python3.6
Python Version: 3.6.8
Python Path: ['.',
'',
'/opt/nautobot',
'/opt/nautobot/lib64/python3.6/site-packages/git/ext/gitdb',
'/opt/nautobot/bin',
'/usr/lib64/python36.zip',
'/usr/lib64/python3.6',
'/usr/lib64/python3.6/lib-dynload',
'/opt/nautobot/lib64/python3.6/site-packages',
'/opt/nautobot/lib/python3.6/site-packages',
'/opt/nautobot/lib64/python3.6/site-packages/gitdb/ext/smmap',
'/opt/nautobot/git/jobs/jobs']
Server time: Tue, 14 Dec 2021 09:54:54 +0100

Steps to Reproduce

  1. Have 57 softwares in the list
  2. Create one more software

Steps to recover

  1. remove the latest software created

Feature Request: Affected Hardware relationship for CVE

Environment

  • Nautobot version: N/A
  • nautobot-plugin-device-lifecycle-mgmt version: latest

Proposed Functionality

For CVE records, add a Affected Hardwares (device type) relationship. A lot of CVEs applies only to certain device types, even if they have the same OS as others belonging to the same manufacturer.

Use Case

Cisco published CVE-2022-20714. It only affects ASR 9000 series. If you have ASR 1000 series with the same IOS-XE version they will appear as affected.

Add local upload option to software image.

Environment

  • Nautobot version: 1.2+
  • nautobot-plugin-device-lifecycle-mgmt version: 1.0.0

Proposed Functionality

SoftwareImage should also include a upload field. This should upload the file locally to nautobot for use later.
This could use the django filed FileField and the upload_to which will save the find to the MEDIA_ROOT.

Use Case

Jim has requirements to use software files that are held by nautobot to upload them to network devices. This would allow DLM plugin to manange the software, but also provide local file access to be used by jobs etc if it's needed. It also allows for a option in more secure environments.

KeyError Triggered Viewing Reports

Environment

  • Python version: 3.8.10
  • Nautobot version: 1.2.10
  • nautobot-plugin-device-lifecycle-mgmt version: 1.0.2

Expected Behavior

When you click on reports you should have them displayed.

Observed Behavior

When you click on the report links you get a Nautobot error screen noting:

<class 'KeyError'>
'barchart_bar_width'
Python version: 3.8.10
Nautobot version: 1.2.10

Steps to Reproduce

  1. Install Nautobot and DLC plugin.
  2. Add DLC data.
  3. Click report links.

Reports: Remove from reports devices that do not have software

Environment

  • Nautobot version:
  • nautobot-plugin-device-lifecycle-mgmt version:

Proposed Functionality

  • Reports - Add in some capability to exclude devices (Such as patch panels)

Use Case

Hide patch panels and other devices without software from the reporting.

Feature Request - Add Tags to the List View for Software & Validated Software

Environment

  • Nautobot version: 1.4.5
  • nautobot-plugin-device-lifecycle-mgmt version: 1.0.2

Proposed Functionality

Add Tags to the List Views for Software and Validated Software

Use Case

As a user I indicate various arbitrary facts about a Software, or Validated Software using Tags. Currently these tags are only visible when opening the individual Software or Validated Software records. For ease of use it would be appreciated if the Tags could be selected & added to the List view (similar to CVE).

Availability of this plugin in demo.nautobot.com

Hi,
I have noticed that the demo.nautobot.com does not have this plugin installed. Is it possible to add it there?

Environment

demo Nautobot page

Expected Outcome

Device Lifecycle Management Plugin available in demo.nautobot.com

Missing views error

Environment

  • Python version: 3.7
  • Nautobot version: 1.3.5
  • nautobot-plugin-device-lifecycle-mgmt version: 1.0.2

Expected Behavior

The error isn't shown on the screen.

Observed Behavior

When you look at the Software List, Software Image List, Validated Software List, Device Software Validation Reports, and Inventory Item Software Validation Reports pages you get an error about missing various views.

Steps to Reproduce

  1. Setup Nautobot with Device Lifecycle plugin installed.
  2. View specified pages and look for the error in a red banner at the top.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.