cisco_node_utils_mgx 2.1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.rubocop.yml +96 -0
- data/.travis.yml +17 -0
- data/CHANGELOG.md +676 -0
- data/CONTRIBUTING.md +43 -0
- data/Gemfile +10 -0
- data/LICENSE +201 -0
- data/README.md +246 -0
- data/Rakefile +44 -0
- data/SUPPORT.md +3 -0
- data/bin/.rubocop.yml +18 -0
- data/bin/check_metric_limits.rb +109 -0
- data/bin/git/hooks/commit-msg/enforce_style +89 -0
- data/bin/git/hooks/hook_lib +115 -0
- data/bin/git/hooks/hooks-wrapper +38 -0
- data/bin/git/hooks/post-flow-hotfix-start/update-version +24 -0
- data/bin/git/hooks/post-flow-release-finish/update-version +29 -0
- data/bin/git/hooks/post-flow-release-start/update-version +19 -0
- data/bin/git/hooks/post-merge/update-hooks +6 -0
- data/bin/git/hooks/post-rewrite/update-hooks +6 -0
- data/bin/git/hooks/pre-commit/check_unstaged_changes +18 -0
- data/bin/git/hooks/pre-commit/rubocop +25 -0
- data/bin/git/hooks/pre-commit/validate-diffs +45 -0
- data/bin/git/hooks/pre-commit/validate-yaml +18 -0
- data/bin/git/hooks/pre-push/check-changelog +24 -0
- data/bin/git/hooks/pre-push/rubocop +7 -0
- data/bin/git/update-hooks +123 -0
- data/bin/show_running_yang.rb +233 -0
- data/cisco_node_utils.gemspec +41 -0
- data/docs/README-develop-best-practices.md +521 -0
- data/docs/README-develop-node-utils-APIs.md +570 -0
- data/docs/README-maintainers.md +77 -0
- data/docs/README-test-execution.md +57 -0
- data/docs/README-utilities.md +14 -0
- data/docs/agent_files.png +0 -0
- data/docs/cisco_node_utils.yaml.example +36 -0
- data/docs/template-router.rb +123 -0
- data/docs/template-test_router.rb +104 -0
- data/ext/mkrf_conf.rb +63 -0
- data/lib/.rubocop.yml +18 -0
- data/lib/cisco_node_utils/aaa_authentication_login.rb +95 -0
- data/lib/cisco_node_utils/aaa_authentication_login_service.rb +138 -0
- data/lib/cisco_node_utils/aaa_authorization_service.rb +156 -0
- data/lib/cisco_node_utils/ace.rb +467 -0
- data/lib/cisco_node_utils/acl.rb +101 -0
- data/lib/cisco_node_utils/banner.rb +63 -0
- data/lib/cisco_node_utils/bfd_global.rb +305 -0
- data/lib/cisco_node_utils/bgp.rb +988 -0
- data/lib/cisco_node_utils/bgp_af.rb +545 -0
- data/lib/cisco_node_utils/bgp_af_aggr_addr.rb +207 -0
- data/lib/cisco_node_utils/bgp_neighbor.rb +527 -0
- data/lib/cisco_node_utils/bgp_neighbor_af.rb +780 -0
- data/lib/cisco_node_utils/bridge_domain.rb +178 -0
- data/lib/cisco_node_utils/bridge_domain_vni.rb +206 -0
- data/lib/cisco_node_utils/cisco_cmn_utils.rb +444 -0
- data/lib/cisco_node_utils/client/client.rb +238 -0
- data/lib/cisco_node_utils/client/grpc/client.rb +395 -0
- data/lib/cisco_node_utils/client/grpc/ems.proto +148 -0
- data/lib/cisco_node_utils/client/grpc/ems.rb +111 -0
- data/lib/cisco_node_utils/client/grpc/ems_services.rb +49 -0
- data/lib/cisco_node_utils/client/grpc.rb +33 -0
- data/lib/cisco_node_utils/client/nxapi/client.rb +368 -0
- data/lib/cisco_node_utils/client/nxapi.rb +31 -0
- data/lib/cisco_node_utils/client/utils.rb +180 -0
- data/lib/cisco_node_utils/client.rb +35 -0
- data/lib/cisco_node_utils/cmd_ref/README_YAML.md +590 -0
- data/lib/cisco_node_utils/cmd_ref/aaa_auth_login_service.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/aaa_authentication_login.yaml +38 -0
- data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +40 -0
- data/lib/cisco_node_utils/cmd_ref/acl.yaml +48 -0
- data/lib/cisco_node_utils/cmd_ref/banner.yaml +11 -0
- data/lib/cisco_node_utils/cmd_ref/bfd_global.yaml +117 -0
- data/lib/cisco_node_utils/cmd_ref/bgp.yaml +383 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +223 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_af_aa.yaml +38 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +174 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +236 -0
- data/lib/cisco_node_utils/cmd_ref/bridge_domain.yaml +49 -0
- data/lib/cisco_node_utils/cmd_ref/bridge_domain_vni.yaml +33 -0
- data/lib/cisco_node_utils/cmd_ref/dhcp_relay_global.yaml +128 -0
- data/lib/cisco_node_utils/cmd_ref/dnsclient.yaml +55 -0
- data/lib/cisco_node_utils/cmd_ref/encapsulation.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_multicast.yaml +12 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_multisite.yaml +18 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_stormcontrol.yaml +18 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_vni.yaml +48 -0
- data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +183 -0
- data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +40 -0
- data/lib/cisco_node_utils/cmd_ref/feature.yaml +126 -0
- data/lib/cisco_node_utils/cmd_ref/hostname.yaml +8 -0
- data/lib/cisco_node_utils/cmd_ref/hsrp_global.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/images.yaml +8 -0
- data/lib/cisco_node_utils/cmd_ref/interface.yaml +781 -0
- data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +45 -0
- data/lib/cisco_node_utils/cmd_ref/interface_evpn_multisite.yaml +17 -0
- data/lib/cisco_node_utils/cmd_ref/interface_hsrp_group.yaml +120 -0
- data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +112 -0
- data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +87 -0
- data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +42 -0
- data/lib/cisco_node_utils/cmd_ref/inventory.yaml +45 -0
- data/lib/cisco_node_utils/cmd_ref/ip_multicast.yaml +22 -0
- data/lib/cisco_node_utils/cmd_ref/itd_device_group.yaml +83 -0
- data/lib/cisco_node_utils/cmd_ref/itd_service.yaml +119 -0
- data/lib/cisco_node_utils/cmd_ref/memory.yaml +24 -0
- data/lib/cisco_node_utils/cmd_ref/ntp_auth_key.yaml +10 -0
- data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +27 -0
- data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +34 -0
- data/lib/cisco_node_utils/cmd_ref/object_group.yaml +32 -0
- data/lib/cisco_node_utils/cmd_ref/ospf.yaml +91 -0
- data/lib/cisco_node_utils/cmd_ref/ospf_area.yaml +91 -0
- data/lib/cisco_node_utils/cmd_ref/ospf_area_vlink.yaml +88 -0
- data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +37 -0
- data/lib/cisco_node_utils/cmd_ref/pim.yaml +43 -0
- data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +86 -0
- data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +37 -0
- data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +100 -0
- data/lib/cisco_node_utils/cmd_ref/radius_server_group.yaml +19 -0
- data/lib/cisco_node_utils/cmd_ref/route_map.yaml +601 -0
- data/lib/cisco_node_utils/cmd_ref/show_system.yaml +9 -0
- data/lib/cisco_node_utils/cmd_ref/show_version.yaml +84 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +81 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_group.yaml +9 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +74 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +91 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +57 -0
- data/lib/cisco_node_utils/cmd_ref/snmpnotification.yaml +23 -0
- data/lib/cisco_node_utils/cmd_ref/span_session.yaml +65 -0
- data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +235 -0
- data/lib/cisco_node_utils/cmd_ref/syslog_facility.yaml +10 -0
- data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +34 -0
- data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +45 -0
- data/lib/cisco_node_utils/cmd_ref/system.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/tacacs_global.yaml +37 -0
- data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +63 -0
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_group.yaml +45 -0
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +64 -0
- data/lib/cisco_node_utils/cmd_ref/upgrade.yaml +38 -0
- data/lib/cisco_node_utils/cmd_ref/vdc.yaml +52 -0
- data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +8 -0
- data/lib/cisco_node_utils/cmd_ref/vlan.yaml +106 -0
- data/lib/cisco_node_utils/cmd_ref/vpc.yaml +233 -0
- data/lib/cisco_node_utils/cmd_ref/vrf.yaml +86 -0
- data/lib/cisco_node_utils/cmd_ref/vrf_af.yaml +139 -0
- data/lib/cisco_node_utils/cmd_ref/vtp.yaml +32 -0
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +114 -0
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +71 -0
- data/lib/cisco_node_utils/cmd_ref/yang.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/yum.yaml +68 -0
- data/lib/cisco_node_utils/command_reference.rb +724 -0
- data/lib/cisco_node_utils/configparser_lib.rb +195 -0
- data/lib/cisco_node_utils/constants.rb +40 -0
- data/lib/cisco_node_utils/dhcp_relay_global.rb +302 -0
- data/lib/cisco_node_utils/dns_domain.rb +93 -0
- data/lib/cisco_node_utils/domain_name.rb +82 -0
- data/lib/cisco_node_utils/encapsulation.rb +112 -0
- data/lib/cisco_node_utils/environment.rb +110 -0
- data/lib/cisco_node_utils/evpn_multicast.rb +66 -0
- data/lib/cisco_node_utils/evpn_multisite.rb +96 -0
- data/lib/cisco_node_utils/evpn_stormcontrol.rb +84 -0
- data/lib/cisco_node_utils/evpn_vni.rb +159 -0
- data/lib/cisco_node_utils/exceptions.rb +140 -0
- data/lib/cisco_node_utils/fabricpath_global.rb +405 -0
- data/lib/cisco_node_utils/fabricpath_topology.rb +137 -0
- data/lib/cisco_node_utils/feature.rb +377 -0
- data/lib/cisco_node_utils/hostname.rb +62 -0
- data/lib/cisco_node_utils/hsrp_global.rb +97 -0
- data/lib/cisco_node_utils/interface.rb +2128 -0
- data/lib/cisco_node_utils/interface_channel_group.rb +142 -0
- data/lib/cisco_node_utils/interface_evpn_multisite.rb +72 -0
- data/lib/cisco_node_utils/interface_hsrp_group.rb +557 -0
- data/lib/cisco_node_utils/interface_ospf.rb +378 -0
- data/lib/cisco_node_utils/interface_portchannel.rb +180 -0
- data/lib/cisco_node_utils/interface_service_vni.rb +132 -0
- data/lib/cisco_node_utils/ip_multicast.rb +90 -0
- data/lib/cisco_node_utils/itd_device_group.rb +228 -0
- data/lib/cisco_node_utils/itd_device_group_node.rb +144 -0
- data/lib/cisco_node_utils/itd_service.rb +511 -0
- data/lib/cisco_node_utils/logger.rb +78 -0
- data/lib/cisco_node_utils/name_server.rb +64 -0
- data/lib/cisco_node_utils/node.rb +443 -0
- data/lib/cisco_node_utils/node_util.rb +111 -0
- data/lib/cisco_node_utils/ntp_auth_key.rb +67 -0
- data/lib/cisco_node_utils/ntp_config.rb +83 -0
- data/lib/cisco_node_utils/ntp_server.rb +86 -0
- data/lib/cisco_node_utils/object_group.rb +75 -0
- data/lib/cisco_node_utils/object_group_entry.rb +143 -0
- data/lib/cisco_node_utils/overlay_global.rb +142 -0
- data/lib/cisco_node_utils/pim.rb +131 -0
- data/lib/cisco_node_utils/pim_group_list.rb +109 -0
- data/lib/cisco_node_utils/pim_rp_address.rb +103 -0
- data/lib/cisco_node_utils/platform.rb +217 -0
- data/lib/cisco_node_utils/portchannel_global.rb +347 -0
- data/lib/cisco_node_utils/radius_global.rb +165 -0
- data/lib/cisco_node_utils/radius_server.rb +421 -0
- data/lib/cisco_node_utils/radius_server_group.rb +117 -0
- data/lib/cisco_node_utils/route_map.rb +2540 -0
- data/lib/cisco_node_utils/router_ospf.rb +77 -0
- data/lib/cisco_node_utils/router_ospf_area.rb +416 -0
- data/lib/cisco_node_utils/router_ospf_area_vlink.rb +313 -0
- data/lib/cisco_node_utils/router_ospf_vrf.rb +342 -0
- data/lib/cisco_node_utils/snmp_notification_receiver.rb +176 -0
- data/lib/cisco_node_utils/snmpcommunity.rb +109 -0
- data/lib/cisco_node_utils/snmpgroup.rb +54 -0
- data/lib/cisco_node_utils/snmpnotification.rb +57 -0
- data/lib/cisco_node_utils/snmpserver.rb +132 -0
- data/lib/cisco_node_utils/snmpuser.rb +403 -0
- data/lib/cisco_node_utils/span_session.rb +149 -0
- data/lib/cisco_node_utils/stp_global.rb +676 -0
- data/lib/cisco_node_utils/syslog_facility.rb +64 -0
- data/lib/cisco_node_utils/syslog_server.rb +146 -0
- data/lib/cisco_node_utils/syslog_settings.rb +174 -0
- data/lib/cisco_node_utils/tacacs_global.rb +137 -0
- data/lib/cisco_node_utils/tacacs_server.rb +173 -0
- data/lib/cisco_node_utils/tacacs_server_group.rb +149 -0
- data/lib/cisco_node_utils/tacacs_server_host.rb +216 -0
- data/lib/cisco_node_utils/upgrade.rb +122 -0
- data/lib/cisco_node_utils/vdc.rb +118 -0
- data/lib/cisco_node_utils/version.rb +21 -0
- data/lib/cisco_node_utils/vlan.rb +301 -0
- data/lib/cisco_node_utils/vpc.rb +466 -0
- data/lib/cisco_node_utils/vrf.rb +192 -0
- data/lib/cisco_node_utils/vrf_af.rb +327 -0
- data/lib/cisco_node_utils/vtp.rb +125 -0
- data/lib/cisco_node_utils/vxlan_vtep.rb +286 -0
- data/lib/cisco_node_utils/vxlan_vtep_vni.rb +331 -0
- data/lib/cisco_node_utils/yang.rb +160 -0
- data/lib/cisco_node_utils/yum.rb +213 -0
- data/lib/cisco_node_utils.rb +21 -0
- data/lib/minitest/environment_plugin.rb +31 -0
- data/lib/minitest/log_level_plugin.rb +41 -0
- data/spec/client_spec.rb +7 -0
- data/spec/environment_spec.rb +384 -0
- data/spec/grpc_client_spec.rb +23 -0
- data/spec/isolate/all_clients_spec.rb +9 -0
- data/spec/isolate/grpc_only_spec.rb +16 -0
- data/spec/isolate/no_clients_spec.rb +26 -0
- data/spec/isolate/nxapi_only_spec.rb +16 -0
- data/spec/nxapi_client_spec.rb +42 -0
- data/spec/schema.yaml +82 -0
- data/spec/shared_examples_for_clients.rb +14 -0
- data/spec/spec_helper.rb +91 -0
- data/spec/whitespace_spec.rb +10 -0
- data/spec/yaml_spec.rb +42 -0
- data/tests/.rubocop.yml +18 -0
- data/tests/CSCuxdublin-1.0.0-7.0.3.I3.1.lib32_n9000.rpm +0 -0
- data/tests/basetest.rb +243 -0
- data/tests/ciscotest.rb +577 -0
- data/tests/cmd_config.yaml +75 -0
- data/tests/cmd_config_invalid.yaml +16 -0
- data/tests/n9000_sample-1.0.0-7.0.3.x86_64.rpm +0 -0
- data/tests/noop.rb +7 -0
- data/tests/platform_info.rb +63 -0
- data/tests/tacacs_server.yaml.example +6 -0
- data/tests/test_aaa_authentication_login.rb +243 -0
- data/tests/test_aaa_authentication_login_service.rb +761 -0
- data/tests/test_aaa_authorization_service.rb +874 -0
- data/tests/test_ace.rb +304 -0
- data/tests/test_acl.rb +185 -0
- data/tests/test_banner.rb +85 -0
- data/tests/test_bfd_global.rb +272 -0
- data/tests/test_bgp_af.rb +875 -0
- data/tests/test_bgp_af_aa.rb +108 -0
- data/tests/test_bgp_neighbor.rb +596 -0
- data/tests/test_bgp_neighbor_af.rb +781 -0
- data/tests/test_bridge_domain.rb +198 -0
- data/tests/test_bridge_domain_vni.rb +109 -0
- data/tests/test_client_utils.rb +111 -0
- data/tests/test_cmn_utils.rb +76 -0
- data/tests/test_command_config.rb +206 -0
- data/tests/test_command_reference.rb +669 -0
- data/tests/test_dhcp_relay_global.rb +286 -0
- data/tests/test_dns_domain.rb +123 -0
- data/tests/test_domain_name.rb +96 -0
- data/tests/test_encapsulation.rb +75 -0
- data/tests/test_evpn_multicast.rb +65 -0
- data/tests/test_evpn_multisite.rb +70 -0
- data/tests/test_evpn_stormcontrol.rb +56 -0
- data/tests/test_evpn_vni.rb +131 -0
- data/tests/test_fabricpath_global.rb +246 -0
- data/tests/test_fabricpath_topology.rb +77 -0
- data/tests/test_feature.rb +272 -0
- data/tests/test_grpc.rb +166 -0
- data/tests/test_hostname.rb +64 -0
- data/tests/test_hsrp_global.rb +79 -0
- data/tests/test_interface.rb +1958 -0
- data/tests/test_interface_bdi.rb +80 -0
- data/tests/test_interface_channel_group.rb +131 -0
- data/tests/test_interface_evpn_multisite.rb +94 -0
- data/tests/test_interface_hsrp.rb +134 -0
- data/tests/test_interface_hsrp_group.rb +570 -0
- data/tests/test_interface_ospf.rb +820 -0
- data/tests/test_interface_portchannel.rb +135 -0
- data/tests/test_interface_private_vlan.rb +365 -0
- data/tests/test_interface_service_vni.rb +203 -0
- data/tests/test_interface_svi.rb +210 -0
- data/tests/test_interface_switchport.rb +468 -0
- data/tests/test_ip_multicast.rb +80 -0
- data/tests/test_itd_device_group.rb +145 -0
- data/tests/test_itd_device_group_node.rb +199 -0
- data/tests/test_itd_service.rb +314 -0
- data/tests/test_logger.rb +43 -0
- data/tests/test_name_server.rb +94 -0
- data/tests/test_node.rb +50 -0
- data/tests/test_node_ext.rb +406 -0
- data/tests/test_node_util.rb +119 -0
- data/tests/test_ntp_auth_key.rb +77 -0
- data/tests/test_ntp_config.rb +100 -0
- data/tests/test_ntp_server.rb +146 -0
- data/tests/test_nxapi.rb +236 -0
- data/tests/test_object_group.rb +122 -0
- data/tests/test_overlay_global.rb +108 -0
- data/tests/test_pim.rb +203 -0
- data/tests/test_pim_group_list.rb +147 -0
- data/tests/test_pim_rp_address.rb +155 -0
- data/tests/test_platform.rb +254 -0
- data/tests/test_portchannel_global.rb +322 -0
- data/tests/test_radius_global.rb +108 -0
- data/tests/test_radius_server.rb +377 -0
- data/tests/test_radius_server_group.rb +151 -0
- data/tests/test_route_map.rb +1479 -0
- data/tests/test_router_bgp.rb +1325 -0
- data/tests/test_router_ospf.rb +56 -0
- data/tests/test_router_ospf_area.rb +433 -0
- data/tests/test_router_ospf_area_vlink.rb +298 -0
- data/tests/test_router_ospf_vrf.rb +690 -0
- data/tests/test_snmp_notification_receiver.rb +169 -0
- data/tests/test_snmpcommunity.rb +422 -0
- data/tests/test_snmpgroup.rb +71 -0
- data/tests/test_snmpnotification.rb +91 -0
- data/tests/test_snmpserver.rb +251 -0
- data/tests/test_snmpuser.rb +666 -0
- data/tests/test_span_session.rb +155 -0
- data/tests/test_stp_global.rb +575 -0
- data/tests/test_syslog_facility.rb +80 -0
- data/tests/test_syslog_server.rb +119 -0
- data/tests/test_syslog_settings.rb +123 -0
- data/tests/test_tacacs_global.rb +109 -0
- data/tests/test_tacacs_server.rb +436 -0
- data/tests/test_tacacs_server_group.rb +434 -0
- data/tests/test_tacacs_server_host.rb +427 -0
- data/tests/test_upgrade.rb +105 -0
- data/tests/test_vdc.rb +64 -0
- data/tests/test_vlan.rb +386 -0
- data/tests/test_vlan_private.rb +656 -0
- data/tests/test_vpc.rb +548 -0
- data/tests/test_vrf.rb +248 -0
- data/tests/test_vrf_af.rb +288 -0
- data/tests/test_vtp.rb +278 -0
- data/tests/test_vxlan_vtep.rb +327 -0
- data/tests/test_vxlan_vtep_vni.rb +326 -0
- data/tests/test_yang.rb +369 -0
- data/tests/test_yum.rb +109 -0
- data/tests/upgrade_info.yaml.example +3 -0
- data/tests/yum_package.yaml +94 -0
- metadata +534 -0
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
# Copyright (c) 2014-2016 Cisco and/or its affiliates.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
require_relative 'ciscotest'
|
|
16
|
+
require_relative '../lib/cisco_node_utils/tacacs_server'
|
|
17
|
+
|
|
18
|
+
# TestTacacsServer - Minitest for TacacsServer node utility
|
|
19
|
+
class TestTacacsServer < CiscoTestCase
|
|
20
|
+
@skip_unless_supported = 'tacacs_server'
|
|
21
|
+
|
|
22
|
+
def assert_tacacsserver_feature
|
|
23
|
+
assert_show_match(command: 'show run all | no-more',
|
|
24
|
+
pattern: /feature tacacs\+/) if platform == :nexus
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def refute_tacacsserver_feature
|
|
28
|
+
refute_show_match(command: 'show run all | no-more',
|
|
29
|
+
pattern: /feature tacacs\+/) if platform == :nexus
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def setup
|
|
33
|
+
super
|
|
34
|
+
if platform == :nexus
|
|
35
|
+
# Most commands appear under 'show run tacacs all' but the
|
|
36
|
+
# 'directed-request' command is under 'show run aaa all'
|
|
37
|
+
@default_show_command = 'show run tacacs all | no-more ; ' \
|
|
38
|
+
'show run aaa all | no-more'
|
|
39
|
+
config_no_warn('no feature tacacs+')
|
|
40
|
+
|
|
41
|
+
elsif platform == :ios_xr
|
|
42
|
+
@default_show_command = 'show running-config tacacs-server'
|
|
43
|
+
no_tacacs_global
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def teardown
|
|
48
|
+
config_no_warn('no feature tacacs+') if platform == :nexus
|
|
49
|
+
super
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def no_tacacs_global
|
|
53
|
+
# Turn the feature off for a clean test.
|
|
54
|
+
config('no tacacs-server timeout 2')
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def test_create_valid
|
|
58
|
+
tacacs = TacacsServer.new
|
|
59
|
+
assert_tacacsserver_feature
|
|
60
|
+
tacacs.destroy
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_get_encryption_type
|
|
64
|
+
if platform == :nexus
|
|
65
|
+
config_no_warn('feature tacacs+')
|
|
66
|
+
|
|
67
|
+
# The tacacs-server key is 'sticky'.
|
|
68
|
+
# If a key is configured it will remain configured even if
|
|
69
|
+
# the tacacs feature is disabled so to be safe go ahead
|
|
70
|
+
# and remove any key that might exist before the test.d
|
|
71
|
+
config_no_warn('no tacacs-server key')
|
|
72
|
+
|
|
73
|
+
encryption_type = TACACS_SERVER_ENC_UNKNOWN
|
|
74
|
+
# Get encryption password when not configured
|
|
75
|
+
tacacs = TacacsServer.new
|
|
76
|
+
assert_equal(encryption_type,
|
|
77
|
+
tacacs.encryption_type,
|
|
78
|
+
'Error: Tacacs Server, encryption type incorrect')
|
|
79
|
+
tacacs.destroy
|
|
80
|
+
|
|
81
|
+
# Get encryption password when configured
|
|
82
|
+
encryption_type = TACACS_SERVER_ENC_NONE
|
|
83
|
+
# This one is needed since the 'sh run' will always display the type
|
|
84
|
+
# differently than the used encryption config type.
|
|
85
|
+
sh_run_encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
|
|
86
|
+
config('feature tacacs+', "tacacs-server key #{encryption_type} TEST")
|
|
87
|
+
|
|
88
|
+
tacacs = TacacsServer.new
|
|
89
|
+
assert_equal(sh_run_encryption_type,
|
|
90
|
+
tacacs.encryption_type,
|
|
91
|
+
'Error: Tacacs Server, encryption type incorrect')
|
|
92
|
+
|
|
93
|
+
encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
|
|
94
|
+
config("tacacs-server key #{encryption_type} TEST")
|
|
95
|
+
|
|
96
|
+
assert_equal(sh_run_encryption_type,
|
|
97
|
+
tacacs.encryption_type,
|
|
98
|
+
'Error: Tacacs Server, encryption type incorrect')
|
|
99
|
+
tacacs.destroy
|
|
100
|
+
elsif platform == :ios_xr
|
|
101
|
+
encryption_type = TACACS_SERVER_ENC_NONE
|
|
102
|
+
sh_run_encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
|
|
103
|
+
config("tacacs-server key #{encryption_type} TEST")
|
|
104
|
+
|
|
105
|
+
tacacs = TacacsServer.new
|
|
106
|
+
assert_equal(sh_run_encryption_type,
|
|
107
|
+
tacacs.encryption_type,
|
|
108
|
+
'Error: Tacacs Server, encryption type incorrect')
|
|
109
|
+
tacacs.destroy
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def test_get_default_encryption
|
|
114
|
+
# Ruby can use defines, but only they're not initialized from an enum
|
|
115
|
+
assert_equal(TACACS_SERVER_ENC_NONE,
|
|
116
|
+
TacacsServer.default_encryption_type,
|
|
117
|
+
'Error: Tacacs Server, default encryption incorrect')
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def test_get_encryption_password
|
|
121
|
+
config('no tacacs-server key') if platform == :ios_xr
|
|
122
|
+
|
|
123
|
+
tacacs = TacacsServer.new
|
|
124
|
+
assert_equal(node.config_get_default('tacacs_server',
|
|
125
|
+
'encryption_password'),
|
|
126
|
+
tacacs.encryption_password,
|
|
127
|
+
'Error: Tacacs Server, encryption password incorrect')
|
|
128
|
+
tacacs.destroy
|
|
129
|
+
|
|
130
|
+
# Get encryption password when configured
|
|
131
|
+
sh_run_encryption_password = 'WAWY'
|
|
132
|
+
encryption_type = TACACS_SERVER_ENC_NONE
|
|
133
|
+
# This one is needed since the 'sh run' will always display the password
|
|
134
|
+
# differently than the used encryption config type.
|
|
135
|
+
if platform == :nexus
|
|
136
|
+
config('feature tacacs+', "tacacs-server key #{encryption_type} TEST")
|
|
137
|
+
elsif platform == :ios_xr
|
|
138
|
+
config("tacacs-server key #{encryption_type} TEST")
|
|
139
|
+
end
|
|
140
|
+
tacacs = TacacsServer.new
|
|
141
|
+
|
|
142
|
+
if platform == :nexus
|
|
143
|
+
assert_match(/#{sh_run_encryption_password}/,
|
|
144
|
+
tacacs.encryption_password,
|
|
145
|
+
'Error: Tacacs Server, encryption password incorrect')
|
|
146
|
+
elsif platform == :ios_xr
|
|
147
|
+
# When a password is set on ios_xr it is always encrypted,
|
|
148
|
+
# even as a return value, hence here checking for not nil.
|
|
149
|
+
assert(!tacacs.encryption_password.nil?)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
tacacs.destroy
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def test_get_default_encryption_password
|
|
156
|
+
assert_equal(node.config_get_default('tacacs_server',
|
|
157
|
+
'encryption_password'),
|
|
158
|
+
TacacsServer.default_encryption_password,
|
|
159
|
+
'Error: Tacacs Server, default encryption password incorrect')
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def test_key_set
|
|
163
|
+
enc_type = TACACS_SERVER_ENC_NONE
|
|
164
|
+
# This one is needed since the 'sh run' will always display the type
|
|
165
|
+
# differently than the used encryption config type.
|
|
166
|
+
sh_run_encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
|
|
167
|
+
password = 'TEST_NEW'
|
|
168
|
+
|
|
169
|
+
tacacs = TacacsServer.new
|
|
170
|
+
tacacs.encryption_key_set(enc_type, password)
|
|
171
|
+
# Get the password from the running config since its encoded
|
|
172
|
+
if platform == :nexus
|
|
173
|
+
line = assert_show_match(
|
|
174
|
+
pattern: /tacacs-server key\s#{sh_run_encryption_type}\s".*"/,
|
|
175
|
+
msg: 'Error: Tacacs Server, key not configured')
|
|
176
|
+
elsif platform == :ios_xr
|
|
177
|
+
line = assert_show_match(
|
|
178
|
+
pattern: /tacacs-server key\s#{sh_run_encryption_type}\s.*/,
|
|
179
|
+
msg: 'Error: Tacacs Server, key not configured')
|
|
180
|
+
end
|
|
181
|
+
# Extract encrypted password, and git rid of the "" around the pasword
|
|
182
|
+
md = line.to_s
|
|
183
|
+
encrypted_password = md.to_s.split(' ').last.tr('\"', '')
|
|
184
|
+
# Extract encryption type
|
|
185
|
+
md = /tacacs-server\skey\s\d/.match(line.to_s)
|
|
186
|
+
encrypted_type = md.to_s.split(' ').last.to_i
|
|
187
|
+
assert_equal(encrypted_type, tacacs.encryption_type,
|
|
188
|
+
'Error: Tacacs Server, encryption type incorrect')
|
|
189
|
+
assert_match(/#{encrypted_password}/, tacacs.encryption_password,
|
|
190
|
+
'Error: Tacacs Server, encryption password incorrect')
|
|
191
|
+
tacacs.destroy
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def test_key_unconfigure
|
|
195
|
+
enc_type = TACACS_SERVER_ENC_NONE
|
|
196
|
+
# This one is needed since the 'sh run' will always display the type
|
|
197
|
+
# differently than the used encryption config type.
|
|
198
|
+
sh_run_encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
|
|
199
|
+
password = 'TEST_NEW'
|
|
200
|
+
|
|
201
|
+
tacacs = TacacsServer.new
|
|
202
|
+
tacacs.encryption_key_set(enc_type, password)
|
|
203
|
+
if platform == :nexus
|
|
204
|
+
assert_show_match(
|
|
205
|
+
pattern: /tacacs-server key\s#{sh_run_encryption_type}\s".*"/,
|
|
206
|
+
msg: 'Error: Tacacs Server, key not configured')
|
|
207
|
+
elsif platform == :ios_xr
|
|
208
|
+
assert_show_match(
|
|
209
|
+
pattern: /tacacs-server key\s#{sh_run_encryption_type}\s.*/,
|
|
210
|
+
msg: 'Error: Tacacs Server, key not configured')
|
|
211
|
+
end
|
|
212
|
+
enc_type = TACACS_SERVER_ENC_UNKNOWN
|
|
213
|
+
password = ''
|
|
214
|
+
tacacs.encryption_key_set(enc_type, password)
|
|
215
|
+
if platform == :nexus
|
|
216
|
+
refute_show_match(
|
|
217
|
+
pattern: /tacacs-server key\s#{sh_run_encryption_type}\s".*"/,
|
|
218
|
+
msg: 'Error: Tacacs Server, key configured')
|
|
219
|
+
elsif platform == :ios_xr
|
|
220
|
+
refute_show_match(
|
|
221
|
+
pattern: /tacacs-server key\s#{sh_run_encryption_type}\s.*/,
|
|
222
|
+
msg: 'Error: Tacacs Server, key configured')
|
|
223
|
+
end
|
|
224
|
+
tacacs.destroy
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def test_get_timeout
|
|
228
|
+
tacacs = TacacsServer.new
|
|
229
|
+
timeout = node.config_get_default('tacacs_server', 'timeout')
|
|
230
|
+
assert_equal(timeout, tacacs.timeout,
|
|
231
|
+
'Error: Tacacs Server, timeout not default')
|
|
232
|
+
|
|
233
|
+
timeout = 35
|
|
234
|
+
config("tacacs-server timeout #{timeout}")
|
|
235
|
+
assert_equal(timeout, tacacs.timeout,
|
|
236
|
+
'Error: Tacacs Server, timeout not configured')
|
|
237
|
+
tacacs.destroy
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def test_get_default_timeout
|
|
241
|
+
assert_equal(node.config_get_default('tacacs_server', 'timeout'),
|
|
242
|
+
TacacsServer.default_timeout,
|
|
243
|
+
'Error: Tacacs Server, default timeout incorrect')
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def test_set_timeout
|
|
247
|
+
timeout = 45
|
|
248
|
+
|
|
249
|
+
tacacs = TacacsServer.new
|
|
250
|
+
tacacs.timeout = timeout
|
|
251
|
+
line = assert_show_match(pattern: /tacacs-server timeout\s.*/,
|
|
252
|
+
msg: 'Error: timeout not configured')
|
|
253
|
+
# Extract timeout
|
|
254
|
+
md = /tacacs-server\stimeout\s\d*/.match(line.to_s)
|
|
255
|
+
sh_run_timeout = md.to_s.split(' ').last.to_i
|
|
256
|
+
# Need a better way to extract the timeout
|
|
257
|
+
assert_equal(sh_run_timeout, tacacs.timeout,
|
|
258
|
+
'Error: Tacacs Server, timeout value incorrect')
|
|
259
|
+
|
|
260
|
+
# Invalid case
|
|
261
|
+
timeout = 80 if platform == :nexus
|
|
262
|
+
timeout = 80_000 if platform == :ios_xr
|
|
263
|
+
|
|
264
|
+
assert_raises(Cisco::CliError) do
|
|
265
|
+
tacacs.timeout = timeout
|
|
266
|
+
end
|
|
267
|
+
tacacs.destroy
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
def test_get_deadtime
|
|
271
|
+
return if validate_property_excluded?('tacacs_server', 'deadtime')
|
|
272
|
+
|
|
273
|
+
tacacs = TacacsServer.new
|
|
274
|
+
deadtime = node.config_get_default('tacacs_server', 'deadtime')
|
|
275
|
+
assert_equal(deadtime, tacacs.deadtime,
|
|
276
|
+
'Error: Tacacs Server, deadtime not default')
|
|
277
|
+
|
|
278
|
+
deadtime = 850
|
|
279
|
+
config("tacacs-server deadtime #{deadtime}")
|
|
280
|
+
assert_equal(deadtime, tacacs.deadtime,
|
|
281
|
+
'Error: Tacacs Server, deadtime not configured')
|
|
282
|
+
tacacs.destroy
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
def test_get_default_deadtime
|
|
286
|
+
return if validate_property_excluded?('tacacs_server', 'deadtime')
|
|
287
|
+
|
|
288
|
+
assert_equal(node.config_get_default('tacacs_server', 'deadtime'),
|
|
289
|
+
TacacsServer.default_deadtime,
|
|
290
|
+
'Error: Tacacs Server, default deadtime incorrect')
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
def test_set_deadtime
|
|
294
|
+
return if validate_property_excluded?('tacacs_server', 'deadtime')
|
|
295
|
+
deadtime = 1250
|
|
296
|
+
|
|
297
|
+
tacacs = TacacsServer.new
|
|
298
|
+
tacacs.deadtime = deadtime
|
|
299
|
+
line = assert_show_match(pattern: /tacacs-server deadtime\s.*/,
|
|
300
|
+
msg: 'Error: deadtime not configured')
|
|
301
|
+
# Extract deadtime
|
|
302
|
+
md = /tacacs-server\sdeadtime\s\d*/.match(line.to_s)
|
|
303
|
+
sh_run_deadtime = md.to_s.split(' ').last.to_i
|
|
304
|
+
assert_equal(sh_run_deadtime, tacacs.deadtime,
|
|
305
|
+
'Error: Tacacs Server, deadtime incorrect')
|
|
306
|
+
# Invalid case
|
|
307
|
+
deadtime = 2450
|
|
308
|
+
assert_raises(Cisco::CliError) do
|
|
309
|
+
tacacs.deadtime = deadtime
|
|
310
|
+
end
|
|
311
|
+
tacacs.destroy
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
def test_get_directed_request
|
|
315
|
+
return if validate_property_excluded?('tacacs_server', 'deadtime')
|
|
316
|
+
|
|
317
|
+
config('feature tacacs', 'tacacs-server directed-request')
|
|
318
|
+
tacacs = TacacsServer.new
|
|
319
|
+
assert(tacacs.directed_request?,
|
|
320
|
+
'Error: Tacacs Server, directed-request not set')
|
|
321
|
+
|
|
322
|
+
config('no tacacs-server directed-request')
|
|
323
|
+
refute(tacacs.directed_request?,
|
|
324
|
+
'Error: Tacacs Server, directed-request set')
|
|
325
|
+
tacacs.destroy
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
def test_get_default_directed_request
|
|
329
|
+
return if validate_property_excluded?('tacacs_server', 'deadtime')
|
|
330
|
+
assert_equal(node.config_get_default('tacacs_server', 'directed_request'),
|
|
331
|
+
TacacsServer.default_directed_request,
|
|
332
|
+
'Error: Tacacs Server, default directed-request incorrect')
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
def test_set_directed_request
|
|
336
|
+
return if validate_property_excluded?('tacacs_server', 'deadtime')
|
|
337
|
+
config('feature tacacs', 'tacacs-server directed-request')
|
|
338
|
+
state = true
|
|
339
|
+
tacacs = TacacsServer.new
|
|
340
|
+
tacacs.directed_request = state
|
|
341
|
+
assert_show_match(pattern: /tacacs-server directed-request/,
|
|
342
|
+
msg: 'directed-request not configured')
|
|
343
|
+
assert(tacacs.directed_request?,
|
|
344
|
+
'Error: Tacacs Server, directed-request not set')
|
|
345
|
+
|
|
346
|
+
# Turn it off
|
|
347
|
+
config('no tacacs-server directed-request')
|
|
348
|
+
refute(tacacs.directed_request?,
|
|
349
|
+
'Error: Tacacs Server, directed-request set')
|
|
350
|
+
|
|
351
|
+
# Turn it back on then go to default
|
|
352
|
+
config('no tacacs-server directed-request')
|
|
353
|
+
state = node.config_get_default('tacacs_server', 'directed_request')
|
|
354
|
+
tacacs.directed_request = state
|
|
355
|
+
line = assert_show_match(pattern: /no tacacs-server directed-request/,
|
|
356
|
+
msg: 'default directed-request not configed')
|
|
357
|
+
|
|
358
|
+
# Extract the state of directed-request
|
|
359
|
+
sh_run_directed_request = line.to_s.split(' ').first
|
|
360
|
+
assert_equal('no', sh_run_directed_request,
|
|
361
|
+
'Error: Tacacs Server, directed-request not unconfigured')
|
|
362
|
+
|
|
363
|
+
refute(tacacs.directed_request?,
|
|
364
|
+
'Error: Tacacs Server, directed-request set')
|
|
365
|
+
|
|
366
|
+
# Invalid case
|
|
367
|
+
state = 'TEST'
|
|
368
|
+
assert_raises(TypeError) do
|
|
369
|
+
tacacs.directed_request = state
|
|
370
|
+
end
|
|
371
|
+
tacacs.destroy
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
def test_get_source_interface
|
|
375
|
+
return if validate_property_excluded?('tacacs_server', 'deadtime')
|
|
376
|
+
|
|
377
|
+
config_no_warn('no ip tacacs source-interface')
|
|
378
|
+
tacacs = TacacsServer.new
|
|
379
|
+
intf = node.config_get_default('tacacs_server', 'source_interface')
|
|
380
|
+
assert_equal(intf, tacacs.source_interface,
|
|
381
|
+
'Error: Tacacs Server, source-interface set')
|
|
382
|
+
|
|
383
|
+
intf = 'loopback41'
|
|
384
|
+
config("ip tacacs source-interface #{intf}")
|
|
385
|
+
assert_equal(intf, tacacs.source_interface,
|
|
386
|
+
'Error: Tacacs Server, source-interface not correct')
|
|
387
|
+
tacacs.destroy
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
def test_get_default_source_interface
|
|
391
|
+
return if validate_property_excluded?('tacacs_server', 'deadtime')
|
|
392
|
+
|
|
393
|
+
assert_equal(node.config_get_default('tacacs_server', 'source_interface'),
|
|
394
|
+
TacacsServer.default_source_interface,
|
|
395
|
+
'Error: Tacacs Server, default source-interface incorrect')
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
def test_set_source_interface
|
|
399
|
+
return if validate_property_excluded?('tacacs_server', 'deadtime')
|
|
400
|
+
|
|
401
|
+
config('feature tacacs+', 'no ip tacacs source-int')
|
|
402
|
+
intf = node.config_get_default('tacacs_server', 'source_interface')
|
|
403
|
+
tacacs = TacacsServer.new
|
|
404
|
+
assert_equal(intf, tacacs.source_interface,
|
|
405
|
+
'Error: Tacacs Server, source-interface set')
|
|
406
|
+
|
|
407
|
+
intf = 'loopback41'
|
|
408
|
+
tacacs.source_interface = intf
|
|
409
|
+
line = assert_show_match(pattern: /ip tacacs source-interface #{intf}/,
|
|
410
|
+
msg: 'source-interface not configured')
|
|
411
|
+
# Extract source-interface
|
|
412
|
+
sh_run_source_interface = line.to_s.split(' ').last
|
|
413
|
+
assert_equal(sh_run_source_interface, tacacs.source_interface,
|
|
414
|
+
'Error: Tacacs Server, source-interface not correct')
|
|
415
|
+
|
|
416
|
+
# Now bring it back to default
|
|
417
|
+
intf = node.config_get_default('tacacs_server', 'source_interface')
|
|
418
|
+
tacacs.source_interface = intf
|
|
419
|
+
assert_show_match(pattern: /no ip tacacs source-interface/,
|
|
420
|
+
msg: 'source-interface not default')
|
|
421
|
+
|
|
422
|
+
# Invalid case
|
|
423
|
+
state = true
|
|
424
|
+
assert_raises(TypeError) do
|
|
425
|
+
tacacs.source_interface = state
|
|
426
|
+
end
|
|
427
|
+
tacacs.destroy
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
def test_destroy
|
|
431
|
+
tacacs = TacacsServer.new
|
|
432
|
+
assert_tacacsserver_feature
|
|
433
|
+
tacacs.destroy
|
|
434
|
+
refute_tacacsserver_feature
|
|
435
|
+
end
|
|
436
|
+
end
|