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,545 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# August 2015, Richard Wellum
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2015-2016 Cisco and/or its affiliates.
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
|
|
18
|
+
require_relative 'cisco_cmn_utils'
|
|
19
|
+
require_relative 'node_util'
|
|
20
|
+
require_relative 'feature'
|
|
21
|
+
require_relative 'bgp'
|
|
22
|
+
require_relative 'logger'
|
|
23
|
+
|
|
24
|
+
module Cisco
|
|
25
|
+
# RouterBgpAF - node utility class for BGP address-family config management
|
|
26
|
+
class RouterBgpAF < NodeUtil
|
|
27
|
+
def initialize(asn, vrf, af, instantiate=true)
|
|
28
|
+
fail ArgumentError if vrf.to_s.empty? || af.to_s.empty?
|
|
29
|
+
err_msg = '"af" argument must be an array of two string values ' \
|
|
30
|
+
'containing an afi + safi tuple'
|
|
31
|
+
fail ArgumentError, err_msg unless af.is_a?(Array) || af.length == 2
|
|
32
|
+
err_msg = '"vrf" argument must be "default" for l2vpn address-family'
|
|
33
|
+
fail ArgumentError, err_msg if vrf != 'default' && af[1][/evpn/]
|
|
34
|
+
@asn = RouterBgp.validate_asnum(asn)
|
|
35
|
+
@vrf = vrf
|
|
36
|
+
@afi, @safi = af
|
|
37
|
+
set_args_keys_default
|
|
38
|
+
create if instantiate
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.afs
|
|
42
|
+
af_hash = {}
|
|
43
|
+
RouterBgp.routers.each do |asn, vrfs|
|
|
44
|
+
af_hash[asn] = {}
|
|
45
|
+
vrfs.keys.each do |vrf_name|
|
|
46
|
+
get_args = { asnum: asn }
|
|
47
|
+
get_args[:vrf] = vrf_name unless vrf_name == 'default'
|
|
48
|
+
# Call yaml and search for address-family statements
|
|
49
|
+
af_list = config_get('bgp_af', 'all_afs', get_args)
|
|
50
|
+
|
|
51
|
+
next if af_list.nil?
|
|
52
|
+
|
|
53
|
+
af_hash[asn][vrf_name] = {}
|
|
54
|
+
af_list.each do |af|
|
|
55
|
+
af_hash[asn][vrf_name][af] =
|
|
56
|
+
RouterBgpAF.new(asn, vrf_name, af, false)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
af_hash
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def create
|
|
64
|
+
if platform == :nexus
|
|
65
|
+
Feature.bgp_enable
|
|
66
|
+
Feature.nv_overlay_evpn_enable if @safi[/evpn/]
|
|
67
|
+
end
|
|
68
|
+
set_args_keys(state: '')
|
|
69
|
+
config_set('bgp', 'address_family', @set_args)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def destroy
|
|
73
|
+
set_args_keys(state: 'no')
|
|
74
|
+
config_set('bgp', 'address_family', @set_args)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
#
|
|
78
|
+
# Helper methods to delete @set_args hash keys
|
|
79
|
+
#
|
|
80
|
+
def set_args_keys_default
|
|
81
|
+
keys = { asnum: @asn, afi: @afi, safi: @safi }
|
|
82
|
+
keys[:vrf] = @vrf unless @vrf == 'default'
|
|
83
|
+
@get_args = @set_args = keys
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def set_args_keys(hash={}) # rubocop:disable Style/AccessorMethodName
|
|
87
|
+
set_args_keys_default
|
|
88
|
+
@set_args = @get_args.merge!(hash) unless hash.empty?
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
########################################################
|
|
92
|
+
# PROPERTIES #
|
|
93
|
+
########################################################
|
|
94
|
+
|
|
95
|
+
def fail_unsupported(callee)
|
|
96
|
+
fail Cisco::UnsupportedError.new('bgp_af', callee.to_s)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
#
|
|
100
|
+
# Client to client (Getter/Setter/Default)
|
|
101
|
+
#
|
|
102
|
+
|
|
103
|
+
def client_to_client=(state)
|
|
104
|
+
# IOS XR uses "client-to-client reflection disable",
|
|
105
|
+
# so turning it "on" means disabling it.
|
|
106
|
+
# Thus we invert the desired state before telling the CLI what to do:
|
|
107
|
+
state = !state if ios_xr?
|
|
108
|
+
set_args_keys(state: (state ? '' : 'no'))
|
|
109
|
+
config_set('bgp_af', 'client_to_client', @set_args)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
#
|
|
113
|
+
# Default Information (Getter/Setter/Default)
|
|
114
|
+
#
|
|
115
|
+
|
|
116
|
+
def default_information_originate
|
|
117
|
+
config_get('bgp_af', 'default_information_originate', @get_args)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
#
|
|
121
|
+
# Next Hop route map (Getter/Setter/Default)
|
|
122
|
+
#
|
|
123
|
+
def next_hop_route_map=(route_map)
|
|
124
|
+
route_map.strip!
|
|
125
|
+
if route_map.empty?
|
|
126
|
+
state = 'no'
|
|
127
|
+
# Dummy routemap required if not configured.
|
|
128
|
+
if next_hop_route_map.empty?
|
|
129
|
+
route_map = 'dummy_routemap'
|
|
130
|
+
else
|
|
131
|
+
route_map = next_hop_route_map
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
set_args_keys(state: state, route_map: route_map)
|
|
135
|
+
config_set('bgp_af', 'next_hop_route_map', @set_args)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
#
|
|
139
|
+
# additional paths (Getter/Setter/Default)
|
|
140
|
+
#
|
|
141
|
+
def additional_paths_selection=(route_map)
|
|
142
|
+
route_map.strip!
|
|
143
|
+
if route_map.empty?
|
|
144
|
+
state = 'no'
|
|
145
|
+
# Dummy routemap required if not configured.
|
|
146
|
+
if additional_paths_selection.empty?
|
|
147
|
+
route_map = 'dummy_routemap'
|
|
148
|
+
else
|
|
149
|
+
route_map = additional_paths_selection
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
set_args_keys(state: state, route_map: route_map, route_policy: route_map)
|
|
153
|
+
config_set('bgp_af', 'additional_paths_selection', @set_args)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# advertise_l2vpn_evpn
|
|
157
|
+
def advertise_l2vpn_evpn
|
|
158
|
+
config_get('bgp_af', 'advertise_l2vpn_evpn', @get_args)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def advertise_l2vpn_evpn=(state)
|
|
162
|
+
Feature.nv_overlay_evpn_enable if platform == :nexus
|
|
163
|
+
set_args_keys(state: (state ? '' : 'no'))
|
|
164
|
+
config_set('bgp_af', 'advertise_l2vpn_evpn', @set_args)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
#
|
|
168
|
+
# dampen_igp_metric (Getter/Setter/Default)
|
|
169
|
+
#
|
|
170
|
+
|
|
171
|
+
# dampen_igp_metric
|
|
172
|
+
def dampen_igp_metric
|
|
173
|
+
match = config_get('bgp_af', 'dampen_igp_metric', @get_args)
|
|
174
|
+
if match.is_a?(Array)
|
|
175
|
+
return nil if match[0] == 'no '
|
|
176
|
+
return match[1].to_i if match[1]
|
|
177
|
+
end
|
|
178
|
+
default_dampen_igp_metric
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def dampen_igp_metric=(val)
|
|
182
|
+
set_args_keys(state: (val.nil?) ? 'no' : '',
|
|
183
|
+
num: (val.nil?) ? '' : val)
|
|
184
|
+
config_set('bgp_af', 'dampen_igp_metric', @set_args)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
#
|
|
188
|
+
# dampening (Getter/Setter/Default)
|
|
189
|
+
#
|
|
190
|
+
|
|
191
|
+
# The data presented to or retrieved from the config_set and config_get
|
|
192
|
+
# for dampening is one of 4 possibilities:
|
|
193
|
+
#
|
|
194
|
+
# Value Meaning
|
|
195
|
+
# ----- -------
|
|
196
|
+
# nil Dampening is not configured
|
|
197
|
+
# [] Dampening is configured with no options
|
|
198
|
+
# [1,3,4,5,nil] Dampening + decay, reuse, suppress, suppress_max
|
|
199
|
+
# [nil,nil,nil,nil,'route-map'] Dampening + routemap
|
|
200
|
+
def dampening
|
|
201
|
+
data = config_get('bgp_af', 'dampening', @get_args)
|
|
202
|
+
return nil if data.nil? # no dampening
|
|
203
|
+
|
|
204
|
+
data = data.flatten
|
|
205
|
+
|
|
206
|
+
# dampening nil nil nil nil nil
|
|
207
|
+
val = []
|
|
208
|
+
|
|
209
|
+
if !data[4].nil?
|
|
210
|
+
# dampening nil nil nil nil route-map
|
|
211
|
+
val = data[4]
|
|
212
|
+
elsif !data[3].nil? && data[4].nil?
|
|
213
|
+
# dampening 1 2 3 4 nil
|
|
214
|
+
val = data[0..3]
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
val
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
# Return true if dampening is enabled, else false.
|
|
221
|
+
def dampening_state
|
|
222
|
+
!dampening.nil?
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
# For all of the following dampening getters, half_time, reuse_time,
|
|
226
|
+
# suppress_time, and max_suppress_time, return nil if dampening
|
|
227
|
+
# is not configured, but also return nil if a dampening routemap
|
|
228
|
+
# is configured because they are mutually exclusive.
|
|
229
|
+
def dampening_half_time
|
|
230
|
+
return nil if dampening.nil? || dampening_routemap_configured?
|
|
231
|
+
if dampening.is_a?(Array) && !dampening.empty?
|
|
232
|
+
dampening[0].to_i
|
|
233
|
+
else
|
|
234
|
+
default_dampening_half_time
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def dampening_reuse_time
|
|
239
|
+
return nil if dampening.nil? || dampening_routemap_configured?
|
|
240
|
+
if dampening.is_a?(Array) && !dampening.empty?
|
|
241
|
+
dampening[1].to_i
|
|
242
|
+
else
|
|
243
|
+
default_dampening_reuse_time
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def dampening_suppress_time
|
|
248
|
+
return nil if dampening.nil? || dampening_routemap_configured?
|
|
249
|
+
if dampening.is_a?(Array) && !dampening.empty?
|
|
250
|
+
dampening[2].to_i
|
|
251
|
+
else
|
|
252
|
+
default_dampening_suppress_time
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
def dampening_max_suppress_time
|
|
257
|
+
return nil if dampening.nil? || dampening_routemap_configured?
|
|
258
|
+
if dampening.is_a?(Array) && !dampening.empty?
|
|
259
|
+
dampening[3].to_i
|
|
260
|
+
else
|
|
261
|
+
default_dampening_max_suppress_time
|
|
262
|
+
end
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def dampening_routemap
|
|
266
|
+
if dampening.nil? || (dampening.is_a?(String) && dampening.size > 0)
|
|
267
|
+
return dampening
|
|
268
|
+
end
|
|
269
|
+
default_dampening_routemap
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
def dampening_routemap_configured?
|
|
273
|
+
if dampening_routemap.is_a?(String) && dampening_routemap.size > 0
|
|
274
|
+
true
|
|
275
|
+
else
|
|
276
|
+
false
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
def dampening=(damp_array)
|
|
281
|
+
fail ArgumentError if damp_array.kind_of?(Array) &&
|
|
282
|
+
!(damp_array.length == 4 ||
|
|
283
|
+
damp_array.length == 0)
|
|
284
|
+
|
|
285
|
+
# Set defaults args
|
|
286
|
+
state = ''
|
|
287
|
+
route_map = ''
|
|
288
|
+
decay = ''
|
|
289
|
+
reuse = ''
|
|
290
|
+
suppress = ''
|
|
291
|
+
suppress_max = ''
|
|
292
|
+
|
|
293
|
+
if damp_array.nil?
|
|
294
|
+
# 'no dampening ...' command - no dampening handles all cases
|
|
295
|
+
state = 'no'
|
|
296
|
+
Cisco::Logger.debug("Dampening 'no dampening'")
|
|
297
|
+
elsif damp_array.empty?
|
|
298
|
+
# 'dampening' command - nothing to do here
|
|
299
|
+
Cisco::Logger.debug("Dampening 'dampening'")
|
|
300
|
+
elsif damp_array.size == 4
|
|
301
|
+
# 'dampening dampening_decay dampening_reuse \
|
|
302
|
+
# dampening_suppress dampening_suppress_max' command
|
|
303
|
+
decay = damp_array[0]
|
|
304
|
+
reuse = damp_array[1]
|
|
305
|
+
suppress = damp_array[2]
|
|
306
|
+
suppress_max = damp_array[3]
|
|
307
|
+
Cisco::Logger.debug("Dampening 'dampening #{damp_array.join(' ')}''")
|
|
308
|
+
else
|
|
309
|
+
# 'dampening route-map WORD' command
|
|
310
|
+
route_map = "route-map #{damp_array}" if platform == :nexus
|
|
311
|
+
route_map = "route-policy #{damp_array}" if platform == :ios_xr
|
|
312
|
+
route_map.strip!
|
|
313
|
+
Cisco::Logger.debug("Dampening 'dampening route-map #{route_map}'")
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
# Set final args
|
|
317
|
+
set_args_keys(
|
|
318
|
+
state: state,
|
|
319
|
+
route_map: route_map,
|
|
320
|
+
decay: decay,
|
|
321
|
+
reuse: reuse,
|
|
322
|
+
suppress: suppress,
|
|
323
|
+
suppress_max: suppress_max,
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
Cisco::Logger.debug("Dampening args=#{@set_args}")
|
|
327
|
+
config_set('bgp_af', 'dampening', @set_args)
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
#
|
|
331
|
+
# Distance (Getter/Setter/Default)
|
|
332
|
+
#
|
|
333
|
+
def distance_set(ebgp, ibgp, local)
|
|
334
|
+
set_args_keys(state: '', ebgp: ebgp, ibgp: ibgp, local: local)
|
|
335
|
+
config_set('bgp_af', 'distance', @set_args)
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
def distance_ebgp
|
|
339
|
+
ebgp, _ibgp, _local = distance
|
|
340
|
+
return default_distance_ebgp if ebgp.nil?
|
|
341
|
+
ebgp.to_i
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
def distance_ibgp
|
|
345
|
+
_ebgp, ibgp, _local = distance
|
|
346
|
+
return default_distance_ibgp if ibgp.nil?
|
|
347
|
+
ibgp.to_i
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
def distance_local
|
|
351
|
+
_ebgp, _ibgp, local = distance
|
|
352
|
+
return default_distance_local if local.nil?
|
|
353
|
+
local.to_i
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
#
|
|
357
|
+
# default_metric (Getter/Setter/Default)
|
|
358
|
+
#
|
|
359
|
+
|
|
360
|
+
def default_metric
|
|
361
|
+
config_get('bgp_af', 'default_metric', @get_args)
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
def default_metric=(val)
|
|
365
|
+
# To remove the default_metric you can not use 'no default_metric'
|
|
366
|
+
# dummy metric to work around this
|
|
367
|
+
dummy_metric = 1
|
|
368
|
+
set_args_keys(state: (val == default_default_metric) ? 'no' : '',
|
|
369
|
+
num: (val == default_default_metric) ? dummy_metric : val)
|
|
370
|
+
config_set('bgp_af', 'default_metric', @set_args)
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
#
|
|
374
|
+
# inject_map (Getter/Setter/Default)
|
|
375
|
+
#
|
|
376
|
+
|
|
377
|
+
def inject_map
|
|
378
|
+
cmds = config_get('bgp_af', 'inject_map', @get_args)
|
|
379
|
+
cmds.nil? ? nil : cmds.each(&:compact!).sort
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
def inject_map=(should_list)
|
|
383
|
+
c = inject_map
|
|
384
|
+
fail_unsupported(__callee__) if c.nil?
|
|
385
|
+
delta_hash = Utils.delta_add_remove(should_list, c)
|
|
386
|
+
return if delta_hash.values.flatten.empty?
|
|
387
|
+
[:add, :remove].each do |action|
|
|
388
|
+
Cisco::Logger.debug("inject_map delta #{@get_args}\n #{action}: " \
|
|
389
|
+
"#{delta_hash[action]}")
|
|
390
|
+
delta_hash[action].each do |inject, exist, copy|
|
|
391
|
+
# inject & exist are mandatory, copy is optional
|
|
392
|
+
state = (action == :add) ? '' : 'no'
|
|
393
|
+
copy = 'copy-attributes' unless copy.nil?
|
|
394
|
+
set_args_keys(state: state, inject: inject, exist: exist, copy: copy)
|
|
395
|
+
config_set('bgp_af', 'inject_map', @set_args)
|
|
396
|
+
end
|
|
397
|
+
end
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
#
|
|
401
|
+
# maximum_paths (Getter/Setter/Default)
|
|
402
|
+
#
|
|
403
|
+
|
|
404
|
+
def maximum_paths=(val)
|
|
405
|
+
set_args_keys(state: (val == default_maximum_paths) ? 'no' : '',
|
|
406
|
+
num: (val == default_maximum_paths) ? '' : val)
|
|
407
|
+
config_set('bgp_af', 'maximum_paths', @set_args)
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
def maximum_paths_ibgp=(val)
|
|
411
|
+
set_args_keys(state: (val == default_maximum_paths_ibgp) ? 'no' : '',
|
|
412
|
+
num: (val == default_maximum_paths_ibgp) ? '' : val)
|
|
413
|
+
config_set('bgp_af', 'maximum_paths_ibgp', @set_args)
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
#
|
|
417
|
+
# Networks (Getter/Setter/Default)
|
|
418
|
+
#
|
|
419
|
+
|
|
420
|
+
# Build an array of all network commands currently on the device
|
|
421
|
+
def networks
|
|
422
|
+
c = config_get('bgp_af', 'networks', @get_args)
|
|
423
|
+
c.nil? ? nil : c.each(&:compact!)
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
# networks setter.
|
|
427
|
+
# Processes a hash of network commands from delta_add_remove().
|
|
428
|
+
def networks=(should_list)
|
|
429
|
+
delta_hash = Utils.delta_add_remove(should_list, networks)
|
|
430
|
+
return if delta_hash.values.flatten.empty?
|
|
431
|
+
[:add, :remove].each do |action|
|
|
432
|
+
Cisco::Logger.debug("networks delta #{@get_args}\n #{action}: " \
|
|
433
|
+
"#{delta_hash[action]}")
|
|
434
|
+
delta_hash[action].each do |network, route_map_policy|
|
|
435
|
+
state = (action == :add) ? '' : 'no'
|
|
436
|
+
network = Utils.process_network_mask(network)
|
|
437
|
+
unless route_map_policy.nil?
|
|
438
|
+
route_map = "route-map #{route_map_policy}"
|
|
439
|
+
route_policy = "route-policy #{route_map_policy}"
|
|
440
|
+
end
|
|
441
|
+
set_args_keys(state: state, network: network, route_map: route_map,
|
|
442
|
+
route_policy: route_policy)
|
|
443
|
+
config_set('bgp_af', 'networks', @set_args)
|
|
444
|
+
end
|
|
445
|
+
end
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
#
|
|
449
|
+
# Redistribute (Getter/Setter/Default)
|
|
450
|
+
#
|
|
451
|
+
|
|
452
|
+
# Build an array of all redistribute commands currently on the device
|
|
453
|
+
def redistribute
|
|
454
|
+
c = config_get('bgp_af', 'redistribute', @get_args)
|
|
455
|
+
c.nil? ? nil : c.each(&:compact!).sort
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
# redistribute setter.
|
|
459
|
+
# Process a hash of redistribute commands from delta_add_remove().
|
|
460
|
+
def redistribute=(should)
|
|
461
|
+
delta_hash = Utils.delta_add_remove(should, redistribute)
|
|
462
|
+
return if delta_hash.values.flatten.empty?
|
|
463
|
+
[:add, :remove].each do |action|
|
|
464
|
+
Cisco::Logger.debug("redistribute delta #{@get_args}\n #{action}: " \
|
|
465
|
+
"#{delta_hash[action]}")
|
|
466
|
+
delta_hash[action].each do |protocol, policy|
|
|
467
|
+
state = (action == :add) ? '' : 'no'
|
|
468
|
+
set_args_keys(state: state, protocol: protocol, policy: policy)
|
|
469
|
+
|
|
470
|
+
# route-map/policy may be optional on some platforms
|
|
471
|
+
cmd = policy.nil? ? 'redistribute' : 'redistribute_policy'
|
|
472
|
+
config_set('bgp_af', cmd, @set_args)
|
|
473
|
+
end
|
|
474
|
+
end
|
|
475
|
+
end
|
|
476
|
+
|
|
477
|
+
def default_redistribute
|
|
478
|
+
config_get_default('bgp_af', 'redistribute')
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
#
|
|
482
|
+
# Table Map (Getter/Setter/Default)
|
|
483
|
+
#
|
|
484
|
+
|
|
485
|
+
def table_map_set(map, filter=false)
|
|
486
|
+
# To remove table map we can not use 'no table-map'
|
|
487
|
+
# Dummy-map specified to work around this
|
|
488
|
+
if filter
|
|
489
|
+
attr = 'table_map_filter'
|
|
490
|
+
else
|
|
491
|
+
attr = 'table_map'
|
|
492
|
+
end
|
|
493
|
+
dummy_map = 'dummy'
|
|
494
|
+
if map == default_table_map
|
|
495
|
+
@set_args[:state] = 'no'
|
|
496
|
+
@set_args[:map] = dummy_map
|
|
497
|
+
else
|
|
498
|
+
@set_args[:state] = ''
|
|
499
|
+
@set_args[:map] = map
|
|
500
|
+
end
|
|
501
|
+
config_set('bgp_af', attr, @set_args)
|
|
502
|
+
set_args_keys_default
|
|
503
|
+
end
|
|
504
|
+
|
|
505
|
+
##########################################
|
|
506
|
+
# Universal Getter, Default Getter, and Setter
|
|
507
|
+
#
|
|
508
|
+
def method_missing(*args)
|
|
509
|
+
name = args[0].to_s
|
|
510
|
+
if args.length == 1 # Getter
|
|
511
|
+
if name =~ /^default_(.*)$/
|
|
512
|
+
config_get_default('bgp_af', Regexp.last_match(1))
|
|
513
|
+
else
|
|
514
|
+
config_get('bgp_af', name, @get_args)
|
|
515
|
+
end
|
|
516
|
+
elsif args.length == 2 && name =~ /^(.*)=$/ # Setter
|
|
517
|
+
set_args_keys(state: args[1] ? '' : 'no')
|
|
518
|
+
config_set('bgp_af', Regexp.last_match(1), @set_args)
|
|
519
|
+
else
|
|
520
|
+
super
|
|
521
|
+
end
|
|
522
|
+
end
|
|
523
|
+
|
|
524
|
+
# Is the given name available in the YAML?
|
|
525
|
+
def respond_to?(method_sym, _include_private=false)
|
|
526
|
+
name = method_sym.to_s
|
|
527
|
+
key = :getter?
|
|
528
|
+
if name =~ /^(.*)=$/
|
|
529
|
+
name = Regexp.last_match(1)
|
|
530
|
+
# Use table_map_set() to set these properties
|
|
531
|
+
return false if name == 'table_map' || name == 'table_map_filter'
|
|
532
|
+
key = :setter?
|
|
533
|
+
elsif name =~ /^default_(.*)$/
|
|
534
|
+
name = Regexp.last_match(1)
|
|
535
|
+
key = :default_value?
|
|
536
|
+
end
|
|
537
|
+
begin
|
|
538
|
+
ref = node.cmd_ref.lookup('bgp_af', name)
|
|
539
|
+
ref.send(key)
|
|
540
|
+
rescue IndexError
|
|
541
|
+
super
|
|
542
|
+
end
|
|
543
|
+
end
|
|
544
|
+
end
|
|
545
|
+
end
|