From 8d9b53442321c3f95a84ddfb56c167ff8d84bf76 Mon Sep 17 00:00:00 2001 From: Brandon Minnix Date: Fri, 29 Mar 2024 14:57:07 -0400 Subject: [PATCH] Updating some functions with new names based on Ken's recommendation of using metadata. --- docs/user/include_jinja_list.md | 4 ++-- netutils/os_version.py | 28 ++++++++++++++-------------- netutils/platform_mapper.py | 18 +++++++++++------- netutils/utils.py | 4 ++-- 4 files changed, 29 insertions(+), 25 deletions(-) diff --git a/docs/user/include_jinja_list.md b/docs/user/include_jinja_list.md index 7fa4439c..876e0b55 100644 --- a/docs/user/include_jinja_list.md +++ b/docs/user/include_jinja_list.md @@ -63,8 +63,8 @@ | compare_version_loose | netutils.os_version.compare_version_loose | | compare_version_strict | netutils.os_version.compare_version_strict | | get_upgrade_path | netutils.os_version.get_upgrade_path | -| juniper_junos_version_parser | netutils.os_version.juniper_junos_version_parser | -| vendorize_version | netutils.os_version.vendorize_version | +| juniper_junos_metadata | netutils.os_version.juniper_junos_metadata | +| version_metadata | netutils.os_version.version_metadata | | compare_cisco_type5 | netutils.password.compare_cisco_type5 | | compare_cisco_type7 | netutils.password.compare_cisco_type7 | | compare_cisco_type9 | netutils.password.compare_cisco_type9 | diff --git a/netutils/os_version.py b/netutils/os_version.py index c626cd5b..e181064f 100644 --- a/netutils/os_version.py +++ b/netutils/os_version.py @@ -131,7 +131,7 @@ def compare_version_strict(current_version: str, comparison: str, target_version return _compare_version(current_version, comparison, target_version, "strict") -def juniper_junos_version_parser(version: str) -> t.Dict[str, t.Any]: +def juniper_junos_metadata(version: str) -> t.Dict[str, t.Any]: """Parses JunOS Version into usable bits matching JunOS Standards. Args: @@ -141,7 +141,7 @@ def juniper_junos_version_parser(version: str) -> t.Dict[str, t.Any]: A dictionary containing parsed version information Examples: - >>> juniper_junos_version_parser("12.3R4") + >>> juniper_junos_metadata("12.3R4") {'isservice': False, 'ismaintenance': True, 'isfrs': False, 'isspecial': False, 'service': None, 'service_build': None, 'service_respin': None, 'main': '12', 'minor': '3', 'type': 'R', 'build': '4'} """ # Use regex to group the main, minor, type and build into useable pieces @@ -214,14 +214,14 @@ def juniper_junos_version_parser(version: str) -> t.Dict[str, t.Any]: return parsed_version -os_version_parsers = { +version_metadata_parsers = { "juniper": { - "junos": juniper_junos_version_parser, + "junos": juniper_junos_metadata, } } -def vendorize_version(vendor: str, os_type: str, version: str) -> t.Dict[str, t.Any]: +def version_metadata(vendor: str, os_type: str, version: str) -> t.Dict[str, t.Any]: """If a custom version parser is avaialable, use it. Args: @@ -232,17 +232,17 @@ def vendorize_version(vendor: str, os_type: str, version: str) -> t.Dict[str, t. Returns: dict: Dict of broken down version into vendor standards. - Example: - >>> from netutils.os_version import vendorize_version - >>> vendorize_version("Cisco", "IOS", "15.5") - {'vendor': 'Cisco', 'os_type': 'IOS', 'version': '15.5', 'vendorized': False} - >>> vendorize_version("juniper", "junos", "12.4R") - {'isservice': False, 'ismaintenance': False, 'isfrs': True, 'isspecial': False, 'service': None, 'service_build': None, 'service_respin': None, 'main': '12', 'minor': '4', 'type': 'R', 'build': None, 'vendorized': True} + Examples: + >>> from netutils.os_version import version_metadata + >>> version_metadata("Cisco", "IOS", "15.5") + {'vendor': 'Cisco', 'os_type': 'IOS', 'version': '15.5', 'metadata': False} + >>> version_metadata("juniper", "junos", "12.4R") + {'isservice': False, 'ismaintenance': False, 'isfrs': True, 'isspecial': False, 'service': None, 'service_build': None, 'service_respin': None, 'main': '12', 'minor': '4', 'type': 'R', 'build': None, 'metadata': True} """ try: - parsed_version = os_version_parsers[vendor][os_type](version) - parsed_version.update({"vendorized": True}) + parsed_version = version_metadata_parsers[vendor][os_type](version) + parsed_version.update({"metadata": True}) except KeyError: - parsed_version = {"vendor": vendor, "os_type": os_type, "version": version, "vendorized": False} + parsed_version = {"vendor": vendor, "os_type": os_type, "version": version, "metadata": False} return parsed_version diff --git a/netutils/platform_mapper.py b/netutils/platform_mapper.py index b7f66779..ddb1a583 100644 --- a/netutils/platform_mapper.py +++ b/netutils/platform_mapper.py @@ -1,12 +1,13 @@ -"""Platform Mappers.""" -# The intent of this script is to take a given platform, determine the format, and reformat it for another purpose -# An example of this is a platform being formatted for NIST Database Query +"""Unified Services.""" +# The intent of this module is to offer common services for consumption by multiple platforms. +# An example of this is an os platform/version being set up for NIST NVD Query. + import abc import dataclasses import typing as t from netutils.nist import get_nist_url_funcs -from netutils.os_version import os_version_parsers +from netutils.os_version import version_metadata_parsers PLATFORM_FIELDS: t.Dict[str, t.Any] = { "default": [ @@ -61,16 +62,19 @@ def os_platform_object_builder(vendor: str, platform: str, version: str) -> obje """Creates a platform object relative to its need and definition. Args: - vendor + vendor (str): Name of vendor + platform (str): Name of os/other platform + version (str): Version value Returns: - A platform object + object: Platform object Examples: >>> jp = os_platform_object_builder("juniper", "junos", "12.1R3-S4.1") >>> jp.get_nist_urls() ['https://services.nvd.nist.gov/rest/json/cves/2.0?virtualMatchString=cpe:2.3:o:juniper:junos:12.1r3:s4.1:*:*:*:*:*:*', 'https://services.nvd.nist.gov/rest/json/cves/2.0?virtualMatchString=cpe:2.3:o:juniper:junos:12.1r3-s4.1:*:*:*:*:*:*:*'] """ + platform = platform.lower() vendor = vendor.lower() @@ -78,7 +82,7 @@ def os_platform_object_builder(vendor: str, platform: str, version: str) -> obje vendor_platform_fields = PLATFORM_FIELDS.get(vendor, {}).get(platform, []) class_fields.extend(vendor_platform_fields) - version_parser = os_version_parsers.get(vendor, {}).get(platform, None) + version_parser = version_metadata_parsers.get(vendor, {}).get(platform, None) field_values = { "vendor": vendor, "os_type": platform, diff --git a/netutils/utils.py b/netutils/utils.py index 10d39e38..c91c7c0a 100644 --- a/netutils/utils.py +++ b/netutils/utils.py @@ -94,8 +94,8 @@ "hash_data": "hash.hash_data", "get_ips_sorted": "ip.get_ips_sorted", "os_platform_object_builder": "platform_mapper.os_platform_object_builder", - "juniper_junos_version_parser": "os_version.juniper_junos_version_parser", - "vendorize_version": "os_version.vendorize_version", + "juniper_junos_metadata": "os_version.juniper_junos_metadata", + "version_metadata": "os_version.version_metadata", }