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,327 @@
|
|
|
1
|
+
# VRF_AF provider class
|
|
2
|
+
#
|
|
3
|
+
# January 2016, Chris Van Heuveln
|
|
4
|
+
#
|
|
5
|
+
# Copyright (c) 2015-2016 Cisco and/or its affiliates.
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
# you may not use this file except in compliance with the License.
|
|
9
|
+
# You may obtain a copy of the License at
|
|
10
|
+
#
|
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
#
|
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
# See the License for the specific language governing permissions and
|
|
17
|
+
# limitations under the License.
|
|
18
|
+
|
|
19
|
+
require_relative 'cisco_cmn_utils'
|
|
20
|
+
require_relative 'node_util'
|
|
21
|
+
require_relative 'feature'
|
|
22
|
+
|
|
23
|
+
module Cisco
|
|
24
|
+
# VrfAF - node utility class for VRF Address-Family configuration
|
|
25
|
+
class VrfAF < NodeUtil
|
|
26
|
+
def initialize(vrf, af, instantiate=true)
|
|
27
|
+
validate_args(vrf, af)
|
|
28
|
+
create if instantiate
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def to_s
|
|
32
|
+
"VRF #{@vrf} afi #{@afi} safi #{@safi}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.afs
|
|
36
|
+
hash = {}
|
|
37
|
+
vrfs = config_get('vrf', 'all_vrfs')
|
|
38
|
+
vrfs.each do |vrf|
|
|
39
|
+
hash[vrf] = {}
|
|
40
|
+
afs = config_get('vrf_af', 'all_afs', vrf: vrf)
|
|
41
|
+
|
|
42
|
+
next if afs.nil?
|
|
43
|
+
afs.each do |af|
|
|
44
|
+
hash[vrf][af] = VrfAF.new(vrf, af, false)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
hash
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def create
|
|
51
|
+
config_set('vrf', 'address_family', set_args_keys(state: ''))
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def destroy
|
|
55
|
+
config_set('vrf', 'address_family', set_args_keys(state: 'no'))
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def validate_args(vrf, af)
|
|
59
|
+
fail ArgumentError unless vrf.is_a?(String) && (vrf.length > 0)
|
|
60
|
+
fail ArgumentError, "'af' must be an array specifying afi and safi" unless
|
|
61
|
+
af.is_a?(Array) || af.length == 2
|
|
62
|
+
@vrf = vrf.downcase
|
|
63
|
+
@afi, @safi = af
|
|
64
|
+
set_args_keys_default
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def set_args_keys_default
|
|
68
|
+
keys = { afi: @afi, safi: @safi }
|
|
69
|
+
keys[:vrf] = @vrf unless @vrf == 'default'
|
|
70
|
+
@get_args = @set_args = keys
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def set_args_keys(hash={}) # rubocop:disable Style/AccessorMethodName
|
|
74
|
+
set_args_keys_default
|
|
75
|
+
@set_args = @get_args.merge!(hash) unless hash.empty?
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def route_target_feature_enable(require_nv_overlay=nil, require_ngmvpn=nil)
|
|
79
|
+
return unless platform == :nexus
|
|
80
|
+
|
|
81
|
+
# All NX route-target properties require feature bgp
|
|
82
|
+
Feature.bgp_enable
|
|
83
|
+
|
|
84
|
+
# Some platforms/versions also require nv overlay for some properties
|
|
85
|
+
if require_nv_overlay
|
|
86
|
+
Feature.nv_overlay_enable if Feature.nv_overlay_supported?
|
|
87
|
+
Feature.nv_overlay_evpn_enable if Feature.nv_overlay_evpn_supported?
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# ngmvpn feature is required for 'mvpn' enablement
|
|
91
|
+
Feature.ngmvpn_enable if require_ngmvpn
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
########################################################
|
|
95
|
+
# PROPERTIES #
|
|
96
|
+
########################################################
|
|
97
|
+
|
|
98
|
+
def route_policy_export
|
|
99
|
+
config_get('vrf_af', 'route_policy_export', @get_args)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def route_policy_export=(name)
|
|
103
|
+
Feature.bgp_enable if platform == :nexus
|
|
104
|
+
# Nexus requires passing in <policy_name> in "no export map" command.
|
|
105
|
+
if name
|
|
106
|
+
set_args_keys(state: '', policy_name: name)
|
|
107
|
+
else
|
|
108
|
+
remove_name = config_get('vrf_af', 'route_policy_export', @get_args)
|
|
109
|
+
return nil if remove_name.nil?
|
|
110
|
+
set_args_keys(state: 'no', policy_name: remove_name)
|
|
111
|
+
end
|
|
112
|
+
config_set('vrf_af', 'route_policy_export', @set_args)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def default_route_policy_export
|
|
116
|
+
config_get_default('vrf_af', 'route_policy_export')
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def route_policy_import
|
|
120
|
+
config_get('vrf_af', 'route_policy_import', @get_args)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def route_policy_import=(name)
|
|
124
|
+
Feature.bgp_enable if platform == :nexus
|
|
125
|
+
# Nexus requires passing in <policy_name> in "no import map" command.
|
|
126
|
+
if name
|
|
127
|
+
set_args_keys(state: '', policy_name: name)
|
|
128
|
+
else
|
|
129
|
+
remove_name = config_get('vrf_af', 'route_policy_import', @get_args)
|
|
130
|
+
return nil if remove_name.nil?
|
|
131
|
+
set_args_keys(state: 'no', policy_name: remove_name)
|
|
132
|
+
end
|
|
133
|
+
config_set('vrf_af', 'route_policy_import', @set_args)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def default_route_policy_import
|
|
137
|
+
config_get_default('vrf_af', 'route_policy_import')
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# --------------------------
|
|
141
|
+
def route_target_both_auto
|
|
142
|
+
config_get('vrf_af', 'route_target_both_auto', @get_args)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def route_target_both_auto=(state)
|
|
146
|
+
route_target_feature_enable(:require_nv_overlay)
|
|
147
|
+
set_args_keys(state: (state ? '' : 'no'))
|
|
148
|
+
config_set('vrf_af', 'route_target_both_auto', @set_args)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def default_route_target_both_auto
|
|
152
|
+
config_get_default('vrf_af', 'route_target_both_auto')
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# --------------------------
|
|
156
|
+
def route_target_both_auto_evpn
|
|
157
|
+
config_get('vrf_af', 'route_target_both_auto_evpn', @get_args)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def route_target_both_auto_evpn=(state)
|
|
161
|
+
route_target_feature_enable(:require_nv_overlay)
|
|
162
|
+
set_args_keys(state: (state ? '' : 'no'))
|
|
163
|
+
config_set('vrf_af', 'route_target_both_auto_evpn', @set_args)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def default_route_target_both_auto_evpn
|
|
167
|
+
config_get_default('vrf_af', 'route_target_both_auto_evpn')
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# --------------------------
|
|
171
|
+
def route_target_both_auto_mvpn
|
|
172
|
+
config_get('vrf_af', 'route_target_both_auto_mvpn', @get_args)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def route_target_both_auto_mvpn=(state)
|
|
176
|
+
route_target_feature_enable(nil, :require_ngmvpn)
|
|
177
|
+
set_args_keys(state: (state ? '' : 'no'))
|
|
178
|
+
config_set('vrf_af', 'route_target_both_auto_mvpn', @set_args)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def default_route_target_both_auto_mvpn
|
|
182
|
+
config_get_default('vrf_af', 'route_target_both_auto_mvpn')
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
# --------------------------
|
|
186
|
+
def route_target_export
|
|
187
|
+
cmds = config_get('vrf_af', 'route_target_export', @get_args)
|
|
188
|
+
cmds.nil? ? nil : cmds.sort
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def route_target_export=(should)
|
|
192
|
+
route_target_feature_enable
|
|
193
|
+
route_target_delta(should, route_target_export, 'route_target_export')
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def default_route_target_export
|
|
197
|
+
config_get_default('vrf_af', 'route_target_export')
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
# --------------------------
|
|
201
|
+
def route_target_export_evpn
|
|
202
|
+
cmds = config_get('vrf_af', 'route_target_export_evpn', @get_args)
|
|
203
|
+
cmds.nil? ? nil : cmds.sort
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def route_target_export_evpn=(should)
|
|
207
|
+
route_target_feature_enable(:require_nv_overlay)
|
|
208
|
+
route_target_delta(should, route_target_export_evpn,
|
|
209
|
+
'route_target_export_evpn')
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def default_route_target_export_evpn
|
|
213
|
+
config_get_default('vrf_af', 'route_target_export_evpn')
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# --------------------------
|
|
217
|
+
def route_target_export_mvpn
|
|
218
|
+
cmds = config_get('vrf_af', 'route_target_export_mvpn', @get_args)
|
|
219
|
+
cmds.nil? ? nil : cmds.sort
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def route_target_export_mvpn=(should)
|
|
223
|
+
route_target_feature_enable(nil, :require_ngmvpn)
|
|
224
|
+
route_target_delta(should, route_target_export_mvpn,
|
|
225
|
+
'route_target_export_mvpn')
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
def default_route_target_export_mvpn
|
|
229
|
+
config_get_default('vrf_af', 'route_target_export_mvpn')
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
# --------------------------
|
|
233
|
+
def route_target_export_stitching
|
|
234
|
+
cmds = config_get('vrf_af', 'route_target_export_stitching', @get_args)
|
|
235
|
+
cmds.nil? ? nil : cmds.sort
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def route_target_export_stitching=(should)
|
|
239
|
+
route_target_delta(should, route_target_export_stitching,
|
|
240
|
+
'route_target_export_stitching')
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
def default_route_target_export_stitching
|
|
244
|
+
config_get_default('vrf_af', 'route_target_export_stitching')
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
# --------------------------
|
|
248
|
+
def route_target_import
|
|
249
|
+
cmds = config_get('vrf_af', 'route_target_import', @get_args)
|
|
250
|
+
cmds.nil? ? nil : cmds.sort
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def route_target_import=(should)
|
|
254
|
+
route_target_feature_enable
|
|
255
|
+
route_target_delta(should, route_target_import, 'route_target_import')
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
def default_route_target_import
|
|
259
|
+
config_get_default('vrf_af', 'route_target_import')
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
# --------------------------
|
|
263
|
+
def route_target_import_evpn
|
|
264
|
+
cmds = config_get('vrf_af', 'route_target_import_evpn', @get_args)
|
|
265
|
+
cmds.nil? ? nil : cmds.sort
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
def route_target_import_evpn=(should)
|
|
269
|
+
route_target_feature_enable(:require_nv_overlay)
|
|
270
|
+
route_target_delta(should, route_target_import_evpn,
|
|
271
|
+
'route_target_import_evpn')
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
def default_route_target_import_evpn
|
|
275
|
+
config_get_default('vrf_af', 'route_target_import_evpn')
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
# --------------------------
|
|
279
|
+
def route_target_import_mvpn
|
|
280
|
+
cmds = config_get('vrf_af', 'route_target_import_mvpn', @get_args)
|
|
281
|
+
cmds.nil? ? nil : cmds.sort
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
def route_target_import_mvpn=(should)
|
|
285
|
+
route_target_feature_enable(nil, :require_ngmvpn)
|
|
286
|
+
route_target_delta(should, route_target_import_mvpn,
|
|
287
|
+
'route_target_import_mvpn')
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
def default_route_target_import_mvpn
|
|
291
|
+
config_get_default('vrf_af', 'route_target_import_mvpn')
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
# --------------------------
|
|
295
|
+
def route_target_import_stitching
|
|
296
|
+
cmds = config_get('vrf_af', 'route_target_import_stitching', @get_args)
|
|
297
|
+
cmds.nil? ? nil : cmds.sort
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
def route_target_import_stitching=(should)
|
|
301
|
+
route_target_delta(should, route_target_import_stitching,
|
|
302
|
+
'route_target_import_stitching')
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def default_route_target_import_stitching
|
|
306
|
+
config_get_default('vrf_af', 'route_target_import_stitching')
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
# --------------------------
|
|
310
|
+
# route_target_delta is a common helper function for the route_target
|
|
311
|
+
# properties. It walks the delta hash and adds/removes each target cli.
|
|
312
|
+
def route_target_delta(should, is, prop)
|
|
313
|
+
fail Cisco::UnsupportedError.new('vrf_af', prop) if is.nil?
|
|
314
|
+
delta_hash = Utils.delta_add_remove(should, is)
|
|
315
|
+
return if delta_hash.values.flatten.empty?
|
|
316
|
+
[:add, :remove].each do |action|
|
|
317
|
+
Cisco::Logger.debug("#{prop}" \
|
|
318
|
+
"#{@get_args}\n #{action}: #{delta_hash[action]}")
|
|
319
|
+
delta_hash[action].each do |community|
|
|
320
|
+
state = (action == :add) ? '' : 'no'
|
|
321
|
+
set_args_keys(state: state, community: community)
|
|
322
|
+
config_set('vrf_af', prop, @set_args)
|
|
323
|
+
end
|
|
324
|
+
end
|
|
325
|
+
end
|
|
326
|
+
end # class
|
|
327
|
+
end # module
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Mike Wiebe, November 2014
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2014-2016 Cisco and/or its affiliates.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
require_relative 'node_util'
|
|
18
|
+
require_relative 'logger'
|
|
19
|
+
|
|
20
|
+
module Cisco
|
|
21
|
+
# Vtp - node utility class for VTP configuration management
|
|
22
|
+
class Vtp < NodeUtil
|
|
23
|
+
attr_reader :name
|
|
24
|
+
|
|
25
|
+
MAX_VTP_DOMAIN_NAME_SIZE = 32
|
|
26
|
+
MAX_VTP_PASSWORD_SIZE = 64
|
|
27
|
+
|
|
28
|
+
# Constructor for Vtp
|
|
29
|
+
def initialize(instantiate=true)
|
|
30
|
+
Feature.vtp_enable if instantiate
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Get vtp domain name
|
|
34
|
+
def self.domain
|
|
35
|
+
dom_def = config_get_default('vtp', 'domain')
|
|
36
|
+
if Feature.vtp_enabled?
|
|
37
|
+
dom = config_get('vtp', 'domain')
|
|
38
|
+
return dom == '-' ? dom_def : dom
|
|
39
|
+
else
|
|
40
|
+
dom_def
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# The only way to remove a vtp domain is to turn the vtp
|
|
45
|
+
# feature off.
|
|
46
|
+
def destroy
|
|
47
|
+
Feature.vtp_disable
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def domain
|
|
51
|
+
Vtp.domain
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Set vtp domain name
|
|
55
|
+
def domain=(d)
|
|
56
|
+
d = d.to_s
|
|
57
|
+
fail ArgumentError unless d.length.between?(1, MAX_VTP_DOMAIN_NAME_SIZE)
|
|
58
|
+
config_set('vtp', 'domain', domain: d)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Get vtp password
|
|
62
|
+
def password
|
|
63
|
+
# Unfortunately nxapi returns "\\" when the password is not set
|
|
64
|
+
password = config_get('vtp', 'password') if Feature.vtp_enabled?
|
|
65
|
+
return '' if password.nil? || password == '\\'
|
|
66
|
+
password
|
|
67
|
+
rescue Cisco::RequestNotSupported => e
|
|
68
|
+
# Certain platforms generate a Cisco::RequestNotSupported when the
|
|
69
|
+
# vtp password is not set. We catch this specific error and
|
|
70
|
+
# return empty '' for the password.
|
|
71
|
+
return '' if e.message[/Structured output not supported/]
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Set vtp password
|
|
75
|
+
def password=(password)
|
|
76
|
+
fail TypeError if password.nil?
|
|
77
|
+
fail TypeError unless password.is_a? String
|
|
78
|
+
fail ArgumentError if password.length > MAX_VTP_PASSWORD_SIZE
|
|
79
|
+
Feature.vtp_enable
|
|
80
|
+
state = (password == default_password) ? 'no' : ''
|
|
81
|
+
config_set('vtp', 'password', state: state, password: password)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Get default vtp password
|
|
85
|
+
def default_password
|
|
86
|
+
config_get_default('vtp', 'password')
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Get vtp filename
|
|
90
|
+
def filename
|
|
91
|
+
filename = config_get('vtp', 'filename') if Feature.vtp_enabled?
|
|
92
|
+
filename.nil? ? default_filename : filename
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Set vtp filename
|
|
96
|
+
def filename=(uri)
|
|
97
|
+
fail TypeError if uri.nil?
|
|
98
|
+
Feature.vtp_enable
|
|
99
|
+
uri = uri.to_s
|
|
100
|
+
state = uri.empty? ? 'no' : ''
|
|
101
|
+
config_set('vtp', 'filename', state: state, uri: uri)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Get default vtp filename
|
|
105
|
+
def default_filename
|
|
106
|
+
config_get_default('vtp', 'filename')
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Get vtp version
|
|
110
|
+
def version
|
|
111
|
+
Feature.vtp_enabled? ? config_get('vtp', 'version') : default_version
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Set vtp version
|
|
115
|
+
def version=(v)
|
|
116
|
+
Feature.vtp_enable
|
|
117
|
+
config_set('vtp', 'version', version: v)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Get default vtp version
|
|
121
|
+
def default_version
|
|
122
|
+
config_get_default('vtp', 'version')
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|