diff --git a/development_scripts.py b/development_scripts.py index 1ca53dab..3290f1ba 100644 --- a/development_scripts.py +++ b/development_scripts.py @@ -46,6 +46,18 @@ "_dict": lib_mapper.ANSIBLE_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/ansible_reverse.md", }, + "hierconfig": { + "header_src": "HIERCONFIG", + "header_dst": "NORMALIZED", + "_dict": lib_mapper.HIERCONFIG_LIB_MAPPER, + "_file": "docs/user/lib_mapper/hierconfig.md", + }, + "hierconfig_reverse": { + "header_src": "NORMALIZED", + "header_dst": "HIERCONFIG", + "_dict": lib_mapper.HIERCONFIG_LIB_MAPPER_REVERSE, + "_file": "docs/user/lib_mapper/hierconfig_reverse.md", + }, "napalm": { "header_src": "NAPALM", "header_dst": "NORMALIZED", @@ -58,6 +70,30 @@ "_dict": lib_mapper.NAPALM_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/napalm_reverse.md", }, + "netmiko": { + "header_src": "NETMIKO", + "header_dst": "NORMALIZED", + "_dict": lib_mapper.NETMIKO_LIB_MAPPER, + "_file": "docs/user/lib_mapper/netmiko.md", + }, + "netmiko_reverse": { + "header_src": "NORMALIZED", + "header_dst": "NETMIKO", + "_dict": lib_mapper.NETMIKO_LIB_MAPPER_REVERSE, + "_file": "docs/user/lib_mapper/netmiko_reverse.md", + }, + "netutilsparser": { + "header_src": "NETUTILSPARSER", + "header_dst": "NORMALIZED", + "_dict": lib_mapper.NETUTILSPARSER_LIB_MAPPER, + "_file": "docs/user/lib_mapper/netutilsparser.md", + }, + "netutilsparser_reverse": { + "header_src": "NORMALIZED", + "header_dst": "NETUTILSPARSER", + "_dict": lib_mapper.NETUTILSPARSER_LIB_MAPPER_REVERSE, + "_file": "docs/user/lib_mapper/netutilsparser_reverse.md", + }, "ntctemplates": { "header_src": "NTCTEMPLATES", "header_dst": "NORMALIZED", @@ -106,18 +142,6 @@ "_dict": lib_mapper.SCRAPLI_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/scrapli_reverse.md", }, - "hierconfig": { - "header_src": "HIERCONFIG", - "header_dst": "NORMALIZED", - "_dict": lib_mapper.HIERCONFIG_LIB_MAPPER, - "_file": "docs/user/lib_mapper/hierconfig.md", - }, - "hierconfig_reverse": { - "header_src": "NORMALIZED", - "header_dst": "HIERCONFIG", - "_dict": lib_mapper.HIERCONFIG_LIB_MAPPER_REVERSE, - "_file": "docs/user/lib_mapper/hierconfig_reverse.md", - }, }, "PARSER_MAPPER_TEMPLATE": { "default": { diff --git a/docs/dev/dev_config.md b/docs/dev/dev_config.md index 86901d56..e21d1481 100644 --- a/docs/dev/dev_config.md +++ b/docs/dev/dev_config.md @@ -71,6 +71,9 @@ There are a series of considerations documented below, when developing a new par - The class must provide a `self.config_lines` that is a list of `ConfigLine` named tuples. - Build tests for the `tests/unit/mock/config/compliance/compliance/{os_name}/*` and `tests/unit/mock/config/parser/base/{os_name}/*`. - Add to `netutils/config/compliance.py` the `parser_map`, that maps the name of the parser to the Plugin. + - Ensure that the key name is based on `netutils.lib_mapper.MAIN_LIB_MAPPER_LIB_MAPPER` definitions. + - Ensure that it is alpha sorted. + - Ensure that it the key is added to `netutils.lib_mapper.NETUTILSPARSER_LIB_MAPPER` and `netutils.lib_mapper.NETUTILSPARSER_LIB_MAPPER_REVERSE`. - Fill out docstrings in the class and methods within the class that describe the parameters and an Example that compiles. - The following tips will generally be applicable. - Generally a class method should provide a `comment_chars` and `banner_start` as well as sometimes `banner_end`. diff --git a/docs/user/lib_mapper/netmiko.md b/docs/user/lib_mapper/netmiko.md new file mode 100644 index 00000000..36610fbf --- /dev/null +++ b/docs/user/lib_mapper/netmiko.md @@ -0,0 +1,110 @@ +| NETMIKO | | NORMALIZED | +| ---------- | -- | ------ | +| a10 | → | a10 | +| accedian | → | accedian | +| adtran_os | → | adtran_os | +| alcatel_aos | → | alcatel_aos | +| alcatel_sros | → | alcatel_sros | +| allied_telesis_awplus | → | allied_telesis_awplus | +| apresia_aeos | → | apresia_aeos | +| arista_eos | → | arista_eos | +| aruba_os | → | aruba_os | +| aruba_osswitch | → | aruba_osswitch | +| aruba_procurve | → | aruba_procurve | +| avaya_ers | → | avaya_ers | +| avaya_vsp | → | avaya_vsp | +| broadcom_icos | → | broadcom_icos | +| brocade_fastiron | → | brocade_fastiron | +| brocade_fos | → | brocade_fos | +| brocade_netiron | → | brocade_netiron | +| brocade_nos | → | brocade_nos | +| brocade_vdx | → | brocade_vdx | +| brocade_vyos | → | brocade_vyos | +| calix_b6 | → | calix_b6 | +| centec_os | → | centec_os | +| checkpoint_gaia | → | checkpoint_gaia | +| ciena_saos | → | ciena_saos | +| cisco_asa | → | cisco_asa | +| cisco_ftd | → | cisco_ftd | +| cisco_ios | → | cisco_ios | +| cisco_nxos | → | cisco_nxos | +| cisco_s300 | → | cisco_s300 | +| cisco_tp | → | cisco_tp | +| cisco_wlc | → | cisco_wlc | +| cisco_xe | → | cisco_xe | +| cisco_xr | → | cisco_xr | +| cloudgenix_ion | → | cloudgenix_ion | +| coriant | → | coriant | +| dell_dnos9 | → | dell_dnos9 | +| dell_force10 | → | dell_force10 | +| dell_isilon | → | dell_isilon | +| dell_os10 | → | dell_os10 | +| dell_os6 | → | dell_os6 | +| dell_os9 | → | dell_os9 | +| dell_powerconnect | → | dell_powerconnect | +| dlink_ds | → | dlink_ds | +| eltex | → | eltex | +| eltex_esr | → | eltex_esr | +| endace | → | endace | +| enterasys | → | enterasys | +| ericsson_ipos | → | ericsson_ipos | +| extreme | → | extreme | +| extreme_ers | → | extreme_ers | +| extreme_exos | → | extreme_exos | +| extreme_netiron | → | extreme_netiron | +| extreme_nos | → | extreme_nos | +| extreme_slx | → | extreme_slx | +| extreme_vdx | → | extreme_vdx | +| extreme_vsp | → | extreme_vsp | +| extreme_wing | → | extreme_wing | +| f5_linux | → | f5_linux | +| f5_ltm | → | f5_ltm | +| f5_tmsh | → | f5_tmsh | +| flexvnf | → | flexvnf | +| fortinet | → | fortinet | +| generic | → | generic | +| generic_termserver | → | generic_termserver | +| hp_comware | → | hp_comware | +| hp_procurve | → | hp_procurve | +| huawei | → | huawei | +| huawei_olt | → | huawei_olt | +| huawei_smartax | → | huawei_smartax | +| huawei_vrpv8 | → | huawei_vrpv8 | +| ipinfusion_ocnos | → | ipinfusion_ocnos | +| juniper | → | juniper | +| juniper_junos | → | juniper_junos | +| juniper_screenos | → | juniper_screenos | +| keymile | → | keymile | +| keymile_nos | → | keymile_nos | +| linux | → | linux | +| mellanox | → | mellanox | +| mellanox_mlnxos | → | mellanox_mlnxos | +| mikrotik_routeros | → | mikrotik_routeros | +| mikrotik_switchos | → | mikrotik_switchos | +| mrv_lx | → | mrv_lx | +| mrv_optiswitch | → | mrv_optiswitch | +| netapp_cdot | → | netapp_cdot | +| netgear_prosafe | → | netgear_prosafe | +| netscaler | → | netscaler | +| nokia_sros | → | nokia_sros | +| oneaccess_oneos | → | oneaccess_oneos | +| ovs_linux | → | ovs_linux | +| paloalto_panos | → | paloalto_panos | +| pluribus | → | pluribus | +| quanta_mesh | → | quanta_mesh | +| rad_etx | → | rad_etx | +| raisecom_roap | → | raisecom_roap | +| ruckus_fastiron | → | ruckus_fastiron | +| ruijie_os | → | ruijie_os | +| sixwind_os | → | sixwind_os | +| sophos_sfos | → | sophos_sfos | +| tplink_jetstream | → | tplink_jetstream | +| ubiquiti_edge | → | ubiquiti_edge | +| ubiquiti_edgerouter | → | ubiquiti_edgerouter | +| ubiquiti_edgeswitch | → | ubiquiti_edgeswitch | +| ubiquiti_unifiswitch | → | ubiquiti_unifiswitch | +| vyatta_vyos | → | vyatta_vyos | +| vyos | → | vyos | +| watchguard_fireware | → | watchguard_fireware | +| yamaha | → | yamaha | +| zte_zxros | → | zte_zxros | \ No newline at end of file diff --git a/docs/user/lib_mapper/netmiko_reverse.md b/docs/user/lib_mapper/netmiko_reverse.md new file mode 100644 index 00000000..9a9bd6c4 --- /dev/null +++ b/docs/user/lib_mapper/netmiko_reverse.md @@ -0,0 +1,110 @@ +| NORMALIZED | | NETMIKO | +| ---------- | -- | ------ | +| a10 | → | a10 | +| accedian | → | accedian | +| adtran_os | → | adtran_os | +| alcatel_aos | → | alcatel_aos | +| alcatel_sros | → | alcatel_sros | +| allied_telesis_awplus | → | allied_telesis_awplus | +| apresia_aeos | → | apresia_aeos | +| arista_eos | → | arista_eos | +| aruba_os | → | aruba_os | +| aruba_osswitch | → | aruba_osswitch | +| aruba_procurve | → | aruba_procurve | +| avaya_ers | → | avaya_ers | +| avaya_vsp | → | avaya_vsp | +| broadcom_icos | → | broadcom_icos | +| brocade_fastiron | → | brocade_fastiron | +| brocade_fos | → | brocade_fos | +| brocade_netiron | → | brocade_netiron | +| brocade_nos | → | brocade_nos | +| brocade_vdx | → | brocade_vdx | +| brocade_vyos | → | brocade_vyos | +| calix_b6 | → | calix_b6 | +| centec_os | → | centec_os | +| checkpoint_gaia | → | checkpoint_gaia | +| ciena_saos | → | ciena_saos | +| cisco_asa | → | cisco_asa | +| cisco_ftd | → | cisco_ftd | +| cisco_ios | → | cisco_ios | +| cisco_nxos | → | cisco_nxos | +| cisco_s300 | → | cisco_s300 | +| cisco_tp | → | cisco_tp | +| cisco_wlc | → | cisco_wlc | +| cisco_xe | → | cisco_xe | +| cisco_xr | → | cisco_xr | +| cloudgenix_ion | → | cloudgenix_ion | +| coriant | → | coriant | +| dell_dnos9 | → | dell_dnos9 | +| dell_force10 | → | dell_force10 | +| dell_isilon | → | dell_isilon | +| dell_os10 | → | dell_os10 | +| dell_os6 | → | dell_os6 | +| dell_os9 | → | dell_os9 | +| dell_powerconnect | → | dell_powerconnect | +| dlink_ds | → | dlink_ds | +| eltex | → | eltex | +| eltex_esr | → | eltex_esr | +| endace | → | endace | +| enterasys | → | enterasys | +| ericsson_ipos | → | ericsson_ipos | +| extreme | → | extreme | +| extreme_ers | → | extreme_ers | +| extreme_exos | → | extreme_exos | +| extreme_netiron | → | extreme_netiron | +| extreme_nos | → | extreme_nos | +| extreme_slx | → | extreme_slx | +| extreme_vdx | → | extreme_vdx | +| extreme_vsp | → | extreme_vsp | +| extreme_wing | → | extreme_wing | +| f5_linux | → | f5_linux | +| f5_ltm | → | f5_ltm | +| f5_tmsh | → | f5_tmsh | +| flexvnf | → | flexvnf | +| fortinet | → | fortinet | +| generic | → | generic | +| generic_termserver | → | generic_termserver | +| hp_comware | → | hp_comware | +| hp_procurve | → | hp_procurve | +| huawei | → | huawei | +| huawei_olt | → | huawei_olt | +| huawei_smartax | → | huawei_smartax | +| huawei_vrpv8 | → | huawei_vrpv8 | +| ipinfusion_ocnos | → | ipinfusion_ocnos | +| juniper | → | juniper | +| juniper_junos | → | juniper_junos | +| juniper_screenos | → | juniper_screenos | +| keymile | → | keymile | +| keymile_nos | → | keymile_nos | +| linux | → | linux | +| mellanox | → | mellanox | +| mellanox_mlnxos | → | mellanox_mlnxos | +| mikrotik_routeros | → | mikrotik_routeros | +| mikrotik_switchos | → | mikrotik_switchos | +| mrv_lx | → | mrv_lx | +| mrv_optiswitch | → | mrv_optiswitch | +| netapp_cdot | → | netapp_cdot | +| netgear_prosafe | → | netgear_prosafe | +| netscaler | → | netscaler | +| nokia_sros | → | nokia_sros | +| oneaccess_oneos | → | oneaccess_oneos | +| ovs_linux | → | ovs_linux | +| paloalto_panos | → | paloalto_panos | +| pluribus | → | pluribus | +| quanta_mesh | → | quanta_mesh | +| rad_etx | → | rad_etx | +| raisecom_roap | → | raisecom_roap | +| ruckus_fastiron | → | ruckus_fastiron | +| ruijie_os | → | ruijie_os | +| sixwind_os | → | sixwind_os | +| sophos_sfos | → | sophos_sfos | +| tplink_jetstream | → | tplink_jetstream | +| ubiquiti_edge | → | ubiquiti_edge | +| ubiquiti_edgerouter | → | ubiquiti_edgerouter | +| ubiquiti_edgeswitch | → | ubiquiti_edgeswitch | +| ubiquiti_unifiswitch | → | ubiquiti_unifiswitch | +| vyatta_vyos | → | vyatta_vyos | +| vyos | → | vyos | +| watchguard_fireware | → | watchguard_fireware | +| yamaha | → | yamaha | +| zte_zxros | → | zte_zxros | \ No newline at end of file diff --git a/docs/user/lib_mapper/netutilsparser.md b/docs/user/lib_mapper/netutilsparser.md new file mode 100644 index 00000000..76a04101 --- /dev/null +++ b/docs/user/lib_mapper/netutilsparser.md @@ -0,0 +1,21 @@ +| NETUTILSPARSER | | NORMALIZED | +| ---------- | -- | ------ | +| arista_eos | → | arista_eos | +| aruba_aoscx | → | aruba_aoscx | +| bigip_f5 | → | bigip_f5 | +| cisco_aireos | → | cisco_aireos | +| cisco_asa | → | cisco_asa | +| cisco_ios | → | cisco_ios | +| cisco_iosxr | → | cisco_iosxr | +| cisco_nxos | → | cisco_nxos | +| citrix_netscaler | → | citrix_netscaler | +| extreme_netiron | → | extreme_netiron | +| fortinet_fortios | → | fortinet_fortios | +| juniper_junos | → | juniper_junos | +| linux | → | linux | +| mikrotik_routeros | → | mikrotik_routeros | +| mrv_optiswitch | → | mrv_optiswitch | +| netscaler | → | netscaler | +| nokia_sros | → | nokia_sros | +| paloalto_panos | → | paloalto_panos | +| ruckus_fastiron | → | ruckus_fastiron | \ No newline at end of file diff --git a/docs/user/lib_mapper/netutilsparser_reverse.md b/docs/user/lib_mapper/netutilsparser_reverse.md new file mode 100644 index 00000000..c1916d78 --- /dev/null +++ b/docs/user/lib_mapper/netutilsparser_reverse.md @@ -0,0 +1,21 @@ +| NORMALIZED | | NETUTILSPARSER | +| ---------- | -- | ------ | +| arista_eos | → | arista_eos | +| aruba_aoscx | → | aruba_aoscx | +| bigip_f5 | → | bigip_f5 | +| cisco_aireos | → | cisco_aireos | +| cisco_asa | → | cisco_asa | +| cisco_ios | → | cisco_ios | +| cisco_iosxr | → | cisco_iosxr | +| cisco_nxos | → | cisco_nxos | +| citrix_netscaler | → | citrix_netscaler | +| extreme_netiron | → | extreme_netiron | +| fortinet_fortios | → | fortinet_fortios | +| juniper_junos | → | juniper_junos | +| linux | → | linux | +| mikrotik_routeros | → | mikrotik_routeros | +| mrv_optiswitch | → | mrv_optiswitch | +| netscaler | → | netscaler | +| nokia_sros | → | nokia_sros | +| paloalto_panos | → | paloalto_panos | +| ruckus_fastiron | → | ruckus_fastiron | \ No newline at end of file diff --git a/docs/user/lib_use_cases_lib_mapper.md b/docs/user/lib_use_cases_lib_mapper.md index 8987d1de..3ae96c22 100644 --- a/docs/user/lib_use_cases_lib_mapper.md +++ b/docs/user/lib_use_cases_lib_mapper.md @@ -47,6 +47,14 @@ Another use case could be using an example like the above in an Ansible filter. --8<-- "docs/user/lib_mapper/ansible_reverse.md" +## Hier Config Mapper + +--8<-- "docs/user/lib_mapper/hierconfig.md" + +## Reverse Hier Config Mapper + +--8<-- "docs/user/lib_mapper/hierconfig_reverse.md" + ## Napalm Mapper --8<-- "docs/user/lib_mapper/napalm.md" @@ -55,6 +63,23 @@ Another use case could be using an example like the above in an Ansible filter. --8<-- "docs/user/lib_mapper/napalm_reverse.md" +## Netmiko Mapper + +--8<-- "docs/user/lib_mapper/netmiko.md" + +## Reverse Netmiko Mapper + +--8<-- "docs/user/lib_mapper/netmiko_reverse.md" + + +## Netutils Parser Mapper + +--8<-- "docs/user/lib_mapper/netutilsparser.md" + +## Reverse Netutils Parser Mapper + +--8<-- "docs/user/lib_mapper/netutilsparser_reverse.md" + ## NTC Templates Mapper --8<-- "docs/user/lib_mapper/ntctemplates.md" @@ -84,10 +109,5 @@ Another use case could be using an example like the above in an Ansible filter. --8<-- "docs/user/lib_mapper/scrapli.md" ## Reverse Scrapli Mapper ---8<-- "docs/user/lib_mapper/scrapli_reverse.md" -## Hier Config Mapper ---8<-- "docs/user/lib_mapper/hierconfig.md" - -## Reverse Hier Config Mapper ---8<-- "docs/user/lib_mapper/hierconfig_reverse.md" \ No newline at end of file +--8<-- "docs/user/lib_mapper/scrapli_reverse.md" \ No newline at end of file diff --git a/netutils/config/compliance.py b/netutils/config/compliance.py index fc1370ed..6e9c52eb 100644 --- a/netutils/config/compliance.py +++ b/netutils/config/compliance.py @@ -8,23 +8,23 @@ parser_map: t.Dict[str, t.Type[parser.BaseConfigParser]] = { "arista_eos": parser.EOSConfigParser, + "aruba_aoscx": parser.ArubaConfigParser, + "bigip_f5": parser.F5ConfigParser, + "cisco_aireos": parser.AIREOSConfigParser, + "cisco_asa": parser.ASAConfigParser, "cisco_ios": parser.IOSConfigParser, "cisco_iosxr": parser.IOSXRConfigParser, "cisco_nxos": parser.NXOSConfigParser, - "cisco_aireos": parser.AIREOSConfigParser, "citrix_netscaler": parser.NetscalerConfigParser, - "linux": parser.LINUXConfigParser, - "bigip_f5": parser.F5ConfigParser, - "juniper_junos": parser.JunosConfigParser, - "cisco_asa": parser.ASAConfigParser, + "extreme_netiron": parser.NetironConfigParser, "fortinet_fortios": parser.FortinetConfigParser, - "nokia_sros": parser.NokiaConfigParser, - "netscaler": parser.NetscalerConfigParser, - "aruba_aoscx": parser.ArubaConfigParser, + "juniper_junos": parser.JunosConfigParser, + "linux": parser.LINUXConfigParser, + "mikrotik_routeros": parser.RouterOSConfigParser, "mrv_optiswitch": parser.OptiswitchConfigParser, - "extreme_netiron": parser.NetironConfigParser, + "netscaler": parser.NetscalerConfigParser, + "nokia_sros": parser.NokiaConfigParser, "paloalto_panos": parser.PaloAltoNetworksConfigParser, - "mikrotik_routeros": parser.RouterOSConfigParser, "ruckus_fastiron": parser.FastironConfigParser, } diff --git a/netutils/lib_mapper.py b/netutils/lib_mapper.py index 076deaff..bc453970 100644 --- a/netutils/lib_mapper.py +++ b/netutils/lib_mapper.py @@ -114,70 +114,70 @@ "yamaha": {}, } # netmiko is the base name, so every key is a value, this ensure that. -NETMIKO_LIB_MAPPER = {} -for key in list(_NETMIKO_LIB_MAPPER.keys()): - NETMIKO_LIB_MAPPER[key] = key +NETMIKO_LIB_MAPPER = {key: key for key in sorted(_NETMIKO_LIB_MAPPER)} # ntc templates is primarily based on netmiko, so a copy is in order -NTCTEMPLATES_LIB_MAPPER = copy.deepcopy(NETMIKO_LIB_MAPPER) -NTCTEMPLATES_LIB_MAPPER["watchguard_firebox"] = "watchguard_firebox" -NTCTEMPLATES_LIB_MAPPER["huawei_vrp"] = "huawei_vrp" -NTCTEMPLATES_LIB_MAPPER["vmware_nsxv"] = "vmware_nsxv" -NTCTEMPLATES_LIB_MAPPER["aruba_aoscx"] = "aruba_aoscx" +_NTCTEMPLATES_LIB_MAPPER = copy.deepcopy(NETMIKO_LIB_MAPPER) +_NTCTEMPLATES_LIB_MAPPER["aruba_aoscx"] = "aruba_aoscx" +_NTCTEMPLATES_LIB_MAPPER["huawei_vrp"] = "huawei_vrp" +_NTCTEMPLATES_LIB_MAPPER["vmware_nsxv"] = "vmware_nsxv" +_NTCTEMPLATES_LIB_MAPPER["watchguard_firebox"] = "watchguard_firebox" +NTCTEMPLATES_LIB_MAPPER = {key: _NTCTEMPLATES_LIB_MAPPER[key] for key in sorted(_NTCTEMPLATES_LIB_MAPPER)} NAPALM_LIB_MAPPER = { + "aoscx": "aruba_aoscx", "asa": "cisco_asa", "cisco_wlc_ssh": "cisco_wlc", "eos": "arista_eos", "fortios": "fortinet", "huawei": "huawei_vrp", "ios": "cisco_ios", - "nxos_ssh": "cisco_nxos", - "nxos": "cisco_nxos", "iosxr": "cisco_xr", "junos": "juniper_junos", + "nxos": "cisco_nxos", + "nxos_ssh": "cisco_nxos", "panos": "paloalto_panos", + "ros": "mikrotik_routeros", "sros": "nokia_sros", "vyos": "brocade_vyos", - "aoscx": "aruba_aoscx", - "ros": "mikrotik_routeros", } PYNTC_LIB_MAPPER = { - "cisco_asa_ssh": "cisco_asa", "arista_eos_eapi": "arista_eos", - "f5_tmos_icontrol": "f5_tmsh", + "cisco_aireos_ssh": "cisco_wlc", + "cisco_asa_ssh": "cisco_asa", "cisco_ios_ssh": "cisco_ios", - "juniper_junos_netconf": "juniper_junos", "cisco_nxos_nxapi": "cisco_nxos", - "cisco_aireos_ssh": "cisco_wlc", + "f5_tmos_icontrol": "f5_tmsh", + "juniper_junos_netconf": "juniper_junos", } + ANSIBLE_LIB_MAPPER = { "arista.eos.eos": "arista_eos", + "arubanetworks.aoscx": "aruba_aoscx", "ciena.saos6.saos6": "ciena_saos", "cisco.asa.asa": "cisco_asa", "cisco.ios.ios": "cisco_ios", "cisco.iosxr.iosxr": "cisco_xr", "cisco.nxos.nxos": "cisco_nxos", "community.network.ce": "huawei", - "dellemc.os6.os6": "dell_os6", - "dellemc.os9.os9": "dell_os9", - "dellemc.os10.0s10": "dell_os10", + "community.network.cnos": "lenovo_cnos", + "community.network.enos": "lenovo_enos", "community.network.eric_eccli": "ericsson_ipos", "community.network.exos": "extreme_exos", + "community.network.icx": "ruckus_icx", "community.network.ironware": "extreme_netiron", + "community.network.netvisor": "pluribus", "community.network.nos": "extreme_nos", + "community.network.routeros": "mikrotik_routeros", "community.network.slxos": "extreme_slx", + "community.network.sros": "nokia_sros", "community.network.voss": "extreme_vsp", + "dellemc.os10.0s10": "dell_os10", + "dellemc.os6.os6": "dell_os6", + "dellemc.os9.os9": "dell_os9", "junipernetworks.junos.junos": "juniper_junos", - "community.network.cnos": "lenovo_cnos", - "community.network.enos": "lenovo_enos", - "community.network.routeros": "mikrotik_routeros", - "community.network.netvisor": "pluribus", - "community.network.icx": "ruckus_icx", - "community.network.sros": "nokia_sros", "vyos.vyos.vyos": "vyos", - "arubanetworks.aoscx": "aruba_aoscx", } PYATS_LIB_MAPPER = { @@ -195,66 +195,90 @@ } SCRAPLI_LIB_MAPPER = { + "arista_eos": "arista_eos", + "aruba_aoscx": "aruba_aoscx", "cisco_iosxe": "cisco_ios", "cisco_iosxr": "cisco_xr", "cisco_nxos": "cisco_nxos", - "arista_eos": "arista_eos", "juniper_junos": "juniper_junos", - "aruba_aoscx": "aruba_aoscx", } HIERCONFIG_LIB_MAPPER = { + "eos": "arista_eos", + "fastiron": "ruckus_fastiron", "ios": "cisco_ios", "iosxe": "cisco_xe", "iosxr": "cisco_xr", "nxos": "cisco_nxos", - "eos": "arista_eos", - "fastiron": "ruckus_fastiron", +} + +NETUTILSPARSER_LIB_MAPPER = { + "arista_eos": "arista_eos", + "aruba_aoscx": "aruba_aoscx", + "bigip_f5": "bigip_f5", + "cisco_aireos": "cisco_aireos", + "cisco_asa": "cisco_asa", + "cisco_ios": "cisco_ios", + "cisco_iosxr": "cisco_iosxr", + "cisco_nxos": "cisco_nxos", + "citrix_netscaler": "citrix_netscaler", + "extreme_netiron": "extreme_netiron", + "fortinet_fortios": "fortinet_fortios", + "juniper_junos": "juniper_junos", + "linux": "linux", + "mikrotik_routeros": "mikrotik_routeros", + "mrv_optiswitch": "mrv_optiswitch", + "netscaler": "netscaler", + "nokia_sros": "nokia_sros", + "paloalto_panos": "paloalto_panos", + "ruckus_fastiron": "ruckus_fastiron", } NAPALM_LIB_MAPPER_REVERSE = { "arista_eos": "eos", + "aruba_aoscx": "aoscx", "brocade_vyos": "vyos", "cisco_asa": "asa", "cisco_ios": "ios", "cisco_nxos": "nxos", - "cisco_xr": "iosxr", "cisco_wlc": "cisco_wlc_ssh", + "cisco_xr": "iosxr", "fortinet": "fortios", "huawei_vrp": "huawei", "juniper_junos": "junos", - "paloalto_panos": "panos", - "nokia_sros": "sros", - "aruba_aoscx": "aoscx", "mikrotik_routeros": "ros", + "nokia_sros": "sros", + "paloalto_panos": "panos", } PYNTC_LIB_MAPPER_REVERSE = { - "cisco_asa": "cisco_asa_ssh", "arista_eos": "arista_eos_eapi", - "f5_tmsh": "f5_tmos_icontrol", + "cisco_asa": "cisco_asa_ssh", "cisco_ios": "cisco_ios_ssh", - "juniper_junos": "juniper_junos_netconf", "cisco_nxos": "cisco_nxos_nxapi", "cisco_wlc": "cisco_aireos_ssh", + "f5_tmsh": "f5_tmos_icontrol", + "juniper_junos": "juniper_junos_netconf", } + ANSIBLE_LIB_MAPPER_REVERSE = { "arista_eos": "arista.eos.eos", + "aruba_aoscx": "arubanetworks.aoscx", "ciena_saos": "ciena.saos6.saos6", "cisco_asa": "cisco.asa.asa", "cisco_ios": "cisco.ios.ios", - "cisco_xr": "cisco.iosxr.iosxr", "cisco_nxos": "cisco.nxos.nxos", - "huawei": "community.network.ce", + "cisco_xr": "cisco.iosxr.iosxr", + "dell_os10": "dellemc.os10.0s10", "dell_os6": "dellemc.os6.os6", "dell_os9": "dellemc.os9.os9", - "dell_os10": "dellemc.os10.0s10", "ericsson_ipos": "community.network.eric_eccli", "extreme_exos": "community.network.exos", "extreme_netiron": "community.network.ironware", "extreme_nos": "community.network.nos", "extreme_slx": "community.network.slxos", "extreme_vsp": "community.network.voss", + "huawei": "community.network.ce", "juniper_junos": "junipernetworks.junos.junos", "lenovo_cnos": "community.network.cnos", "lenovo_enos": "community.network.enos", @@ -263,53 +287,75 @@ "pluribus": "community.network.netvisor", "ruckus_icx": "community.network.icx", "vyos": "vyos.vyos.vyos", - "aruba_aoscx": "arubanetworks.aoscx", } PYATS_LIB_MAPPER_REVERSE = { "cisco_asa": "asa", - "f5_tmsh": "bigip", "cisco_dnac": "dnac", "cisco_ios": "iosxe", + "cisco_nxos": "nxos", + "cisco_viptella": "viptela", "cisco_xr": "iosxr", + "f5_tmsh": "bigip", "juniper_junos": "junos", "linux": "linux", - "cisco_nxos": "nxos", "nokia_sros": "sros", - "cisco_viptella": "viptela", } SCRAPLI_LIB_MAPPER_REVERSE = { + "arista_eos": "arista_eos", + "aruba_aoscx": "aruba_aoscx", "cisco_ios": "cisco_iosxe", - "cisco_xr": "cisco_iosxr", "cisco_nxos": "cisco_nxos", - "arista_eos": "arista_eos", + "cisco_xr": "cisco_iosxr", "juniper_junos": "juniper_junos", - "aruba_aoscx": "aruba_aoscx", } HIERCONFIG_LIB_MAPPER_REVERSE = { + "arista_eos": "eos", "cisco_ios": "ios", + "cisco_nxos": "nxos", "cisco_xe": "iosxe", "cisco_xr": "iosxr", - "cisco_nxos": "nxos", - "arista_eos": "eos", "ruckus_fastiron": "fastiron", } +NETUTILSPARSER_LIB_MAPPER_REVERSE = { + "arista_eos": "arista_eos", + "aruba_aoscx": "aruba_aoscx", + "bigip_f5": "bigip_f5", + "cisco_aireos": "cisco_aireos", + "cisco_asa": "cisco_asa", + "cisco_ios": "cisco_ios", + "cisco_iosxr": "cisco_iosxr", + "cisco_nxos": "cisco_nxos", + "citrix_netscaler": "citrix_netscaler", + "extreme_netiron": "extreme_netiron", + "fortinet_fortios": "fortinet_fortios", + "juniper_junos": "juniper_junos", + "linux": "linux", + "mikrotik_routeros": "mikrotik_routeros", + "mrv_optiswitch": "mrv_optiswitch", + "netscaler": "netscaler", + "nokia_sros": "nokia_sros", + "paloalto_panos": "paloalto_panos", + "ruckus_fastiron": "ruckus_fastiron", +} + # Deep copy the reverse, where there is no actual translation happening. NETMIKO_LIB_MAPPER_REVERSE = copy.deepcopy(NETMIKO_LIB_MAPPER) NTCTEMPLATES_LIB_MAPPER_REVERSE = copy.deepcopy(NTCTEMPLATES_LIB_MAPPER) # Deep copy the reverse, where there is no actual translation happening with special # consideration for OS's not in netmiko. -MAIN_LIB_MAPPER = copy.deepcopy(NETMIKO_LIB_MAPPER) -MAIN_LIB_MAPPER["cisco_dnac"] = "cisco_dnac" -MAIN_LIB_MAPPER["cisco_viptella"] = "cisco_viptella" -MAIN_LIB_MAPPER["huawei_vrp"] = "huawei_vrp" -MAIN_LIB_MAPPER["lenovo_cnos"] = "lenovo_cnos" -MAIN_LIB_MAPPER["lenovo_enos"] = "lenovo_enos" -MAIN_LIB_MAPPER["ruckus_icx"] = "ruckus_icx" -MAIN_LIB_MAPPER["vmware_nsxv"] = "vmware_nsxv" -MAIN_LIB_MAPPER["watchguard_firebox"] = "watchguard_firebox" -MAIN_LIB_MAPPER["aruba_aoscx"] = "aruba_aoscx" +_MAIN_LIB_MAPPER = copy.deepcopy(NETMIKO_LIB_MAPPER) +_MAIN_LIB_MAPPER["aruba_aoscx"] = "aruba_aoscx" +_MAIN_LIB_MAPPER["cisco_dnac"] = "cisco_dnac" +_MAIN_LIB_MAPPER["cisco_viptella"] = "cisco_viptella" +_MAIN_LIB_MAPPER["huawei_vrp"] = "huawei_vrp" +_MAIN_LIB_MAPPER["lenovo_cnos"] = "lenovo_cnos" +_MAIN_LIB_MAPPER["lenovo_enos"] = "lenovo_enos" +_MAIN_LIB_MAPPER["ruckus_icx"] = "ruckus_icx" +_MAIN_LIB_MAPPER["vmware_nsxv"] = "vmware_nsxv" +_MAIN_LIB_MAPPER["watchguard_firebox"] = "watchguard_firebox" +MAIN_LIB_MAPPER = {key: _MAIN_LIB_MAPPER[key] for key in sorted(_MAIN_LIB_MAPPER)} diff --git a/tests/unit/test_lib_mapper.py b/tests/unit/test_lib_mapper.py index e0fa2e5c..d6dae27d 100644 --- a/tests/unit/test_lib_mapper.py +++ b/tests/unit/test_lib_mapper.py @@ -2,7 +2,9 @@ import pytest from netutils import lib_mapper +from netutils.config.compliance import parser_map +LIBRARIES = ["ANSIBLE", "NETMIKO", "NTCTEMPLATES", "NAPALM", "PYATS", "PYNTC", "HIERCONFIG", "NETUTILSPARSER"] def test_lib_mapper(): assert len(lib_mapper.MAIN_LIB_MAPPER.keys()) > 40 @@ -13,6 +15,7 @@ def test_lib_mapper(): assert len(lib_mapper.PYATS_LIB_MAPPER.keys()) > 10 assert len(lib_mapper.PYNTC_LIB_MAPPER.keys()) > 5 assert len(lib_mapper.HIERCONFIG_LIB_MAPPER.keys()) > 4 + assert len(lib_mapper.NETUTILSPARSER_LIB_MAPPER.keys()) > 10 assert lib_mapper.ANSIBLE_LIB_MAPPER["cisco.ios.ios"] == "cisco_ios" assert lib_mapper.NAPALM_LIB_MAPPER["ios"] == "cisco_ios" assert lib_mapper.PYNTC_LIB_MAPPER["arista_eos_eapi"] == "arista_eos" @@ -21,8 +24,26 @@ def test_lib_mapper(): assert lib_mapper.HIERCONFIG_LIB_MAPPER_REVERSE[lib_mapper.HIERCONFIG_LIB_MAPPER["ios"]] == "ios" -@pytest.mark.parametrize("lib", ["ANSIBLE", "NETMIKO", "NTCTEMPLATES", "NAPALM", "PYATS", "PYNTC", "HIERCONFIG"]) +@pytest.mark.parametrize("lib", LIBRARIES) def test_lib_mapper_reverse(lib): - mapper = dict((v, k) for k, v in getattr(lib_mapper, f"{lib}_LIB_MAPPER").items()) + _mapper = getattr(lib_mapper, f"{lib}_LIB_MAPPER").copy() + if lib == "NAPALM": + _mapper.pop("nxos_ssh") + mapper = dict((v, k) for k, v in _mapper.items()) rev_mapper = getattr(lib_mapper, f"{lib}_LIB_MAPPER_REVERSE") assert mapper == rev_mapper + +@pytest.mark.parametrize("lib", LIBRARIES) +def test_lib_mapper_alpha(lib): + original = list(getattr(lib_mapper, f"{lib}_LIB_MAPPER").keys()) + sorted_keys = sorted(original) + rev_original = list(getattr(lib_mapper, f"{lib}_LIB_MAPPER_REVERSE").keys()) + rev_sorted_keys = sorted(rev_original) + assert original == sorted_keys + assert rev_original == rev_sorted_keys + + +def test_netutils_parser(): + """Test that the paser_map in compliance have been added to NETUTILSPARSER lib mappers.""" + assert parser_map.keys() == lib_mapper.NETUTILSPARSER_LIB_MAPPER.keys() + assert list(parser_map.keys()) == sorted(list(lib_mapper.NETUTILSPARSER_LIB_MAPPER.keys()))