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,86 @@
|
|
|
1
|
+
# NTP Server provider class
|
|
2
|
+
#
|
|
3
|
+
# Jonathan Tripathy et al., September 2015
|
|
4
|
+
#
|
|
5
|
+
# Copyright (c) 2014-2017 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 'node'
|
|
20
|
+
require_relative 'interface'
|
|
21
|
+
require 'resolv'
|
|
22
|
+
|
|
23
|
+
module Cisco
|
|
24
|
+
# NtpServer - node utility class for NTP Server configuration management
|
|
25
|
+
class NtpServer < NodeUtil
|
|
26
|
+
attr_reader :key, :maxpoll, :minpoll, :prefer, :vrf
|
|
27
|
+
|
|
28
|
+
def initialize(opts, instantiate=true)
|
|
29
|
+
@ntpserver_id = opts['name']
|
|
30
|
+
@key = opts['key']
|
|
31
|
+
@minpoll = opts['minpoll']
|
|
32
|
+
@maxpoll = opts['maxpoll']
|
|
33
|
+
@prefer = opts['prefer'].nil? ? false : true
|
|
34
|
+
@vrf = opts['vrf'].nil? ? 'default' : opts['vrf']
|
|
35
|
+
|
|
36
|
+
hostname_regex = /^(?=.{1,255}$)[0-9A-Za-z]
|
|
37
|
+
(?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?
|
|
38
|
+
(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/x
|
|
39
|
+
|
|
40
|
+
unless @ntpserver_id =~ Resolv::AddressRegex ||
|
|
41
|
+
@ntpserver_id =~ hostname_regex
|
|
42
|
+
fail ArgumentError,
|
|
43
|
+
"Invalid value '#{@ntpserver_id}' \
|
|
44
|
+
(Must be valid IPv4/IPv6 address or hostname)"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
create if instantiate
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def self.ntpservers
|
|
51
|
+
keys = %w(name prefer vrf key minpoll maxpoll)
|
|
52
|
+
hash = {}
|
|
53
|
+
ntpservers_list = config_get('ntp_server', 'server')
|
|
54
|
+
return hash if ntpservers_list.empty?
|
|
55
|
+
|
|
56
|
+
ntpservers_list.each do |id|
|
|
57
|
+
hash[id[0]] = NtpServer.new(Hash[keys.zip(id)], false)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
hash
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def ==(other)
|
|
64
|
+
name == other.name && prefer == other.prefer
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def create
|
|
68
|
+
config_set('ntp_server', 'server', state: '', ip: @ntpserver_id,
|
|
69
|
+
prefer: (['true', true].include? @prefer) ? 'prefer' : '',
|
|
70
|
+
vrf: @vrf ? "use-vrf #{@vrf}" : '',
|
|
71
|
+
key: @key ? "key #{@key}" : '',
|
|
72
|
+
minpoll: @minpoll ? "minpoll #{@minpoll}" : '',
|
|
73
|
+
maxpoll: @maxpoll ? "maxpoll #{@maxpoll}" : '')
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def destroy
|
|
77
|
+
config_set('ntp_server', 'server',
|
|
78
|
+
state: 'no', ip: @ntpserver_id, prefer: '', vrf: '',
|
|
79
|
+
key: '', minpoll: '', maxpoll: '')
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def name
|
|
83
|
+
@ntpserver_id
|
|
84
|
+
end
|
|
85
|
+
end # class
|
|
86
|
+
end # module
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#
|
|
2
|
+
# May 2017, Sai Chintalapudi
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2017 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 'node_util'
|
|
19
|
+
require_relative 'acl'
|
|
20
|
+
|
|
21
|
+
module Cisco
|
|
22
|
+
# node_utils class for object_group
|
|
23
|
+
class ObjectGroup < NodeUtil
|
|
24
|
+
attr_reader :afi, :type, :grp_name
|
|
25
|
+
|
|
26
|
+
def initialize(afi, type, name, instantiate=true)
|
|
27
|
+
fail TypeError unless name.is_a?(String)
|
|
28
|
+
fail ArgumentError unless type[/address|port/]
|
|
29
|
+
@afi = Acl.afi_cli(afi)
|
|
30
|
+
@type = type
|
|
31
|
+
@grp_name = name
|
|
32
|
+
|
|
33
|
+
set_args_keys_default
|
|
34
|
+
create if instantiate
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Helper method to delete @set_args hash keys
|
|
38
|
+
def set_args_keys_default
|
|
39
|
+
@set_args = { afi: @afi, type: @type, grp_name: @grp_name }
|
|
40
|
+
@get_args = @set_args
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# rubocop:disable Style/AccessorMethodName
|
|
44
|
+
def set_args_keys(hash={})
|
|
45
|
+
set_args_keys_default
|
|
46
|
+
@set_args = @get_args.merge!(hash) unless hash.empty?
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def create
|
|
50
|
+
config_set('object_group', 'create', @set_args)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def destroy
|
|
54
|
+
config_set('object_group', 'destroy', @set_args)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def ==(other)
|
|
58
|
+
grp_name == other.grp_name && afi == other.afi && type == other.type
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def self.object_groups
|
|
62
|
+
hash = {}
|
|
63
|
+
grps = config_get('object_group', 'all_object_groups')
|
|
64
|
+
return hash if grps.nil?
|
|
65
|
+
grps.each do |afi, type, name|
|
|
66
|
+
lafi = afi
|
|
67
|
+
lafi = 'ipv4' if afi == 'ip'
|
|
68
|
+
hash[lafi] ||= {}
|
|
69
|
+
hash[lafi][type] ||= {}
|
|
70
|
+
hash[lafi][type][name] = ObjectGroup.new(lafi, type, name, false)
|
|
71
|
+
end
|
|
72
|
+
hash
|
|
73
|
+
end
|
|
74
|
+
end # class
|
|
75
|
+
end # module
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
#
|
|
2
|
+
# May 2017, Sai Chintalapudi
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2017 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 'node_util'
|
|
19
|
+
require_relative 'acl'
|
|
20
|
+
require_relative 'object_group'
|
|
21
|
+
|
|
22
|
+
module Cisco
|
|
23
|
+
# node_utils class for object_group_entry
|
|
24
|
+
class ObjectGroupEntry < NodeUtil
|
|
25
|
+
attr_reader :afi, :type, :grp_name
|
|
26
|
+
|
|
27
|
+
def initialize(afi, type, name, seqno)
|
|
28
|
+
fail TypeError unless name.is_a?(String)
|
|
29
|
+
fail ArgumentError unless type[/address|port/]
|
|
30
|
+
@afi = Acl.afi_cli(afi)
|
|
31
|
+
@type = type
|
|
32
|
+
@grp_name = name
|
|
33
|
+
@seqno = seqno
|
|
34
|
+
og = ObjectGroup.object_groups[afi.to_s][type.to_s][name.to_s]
|
|
35
|
+
fail "ObjectGroup #{afi} #{type} #{name} does not exist" if
|
|
36
|
+
og.nil?
|
|
37
|
+
set_args_keys_default
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Helper method to delete @set_args hash keys
|
|
41
|
+
def set_args_keys_default
|
|
42
|
+
@set_args = { afi: @afi, type: @type, grp_name: @grp_name, seqno: @seqno }
|
|
43
|
+
@get_args = @set_args
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# rubocop:disable Style/AccessorMethodName
|
|
47
|
+
def set_args_keys(hash={})
|
|
48
|
+
set_args_keys_default
|
|
49
|
+
@set_args = @get_args.merge!(hash) unless hash.empty?
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def destroy
|
|
53
|
+
config_set('object_group', 'entry_destroy', @set_args)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def self.object_group_entries
|
|
57
|
+
hash = {}
|
|
58
|
+
grps = config_get('object_group', 'all_object_groups')
|
|
59
|
+
return hash if grps.nil?
|
|
60
|
+
grps.each do |afi, type, name|
|
|
61
|
+
lafi = afi
|
|
62
|
+
lafi = 'ipv4' if afi == 'ip'
|
|
63
|
+
hash[lafi] ||= {}
|
|
64
|
+
hash[lafi][type] ||= {}
|
|
65
|
+
hash[lafi][type][name] ||= {}
|
|
66
|
+
entries = config_get('object_group', 'all_entries',
|
|
67
|
+
afi: Acl.afi_cli(lafi),
|
|
68
|
+
type: type,
|
|
69
|
+
grp_name: name)
|
|
70
|
+
next if entries.nil?
|
|
71
|
+
entries.each do |seqno|
|
|
72
|
+
hash[lafi][type][name][seqno] =
|
|
73
|
+
ObjectGroupEntry.new(lafi, type, name, seqno)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
hash
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def entry_get
|
|
80
|
+
str = config_get('object_group', 'entry', @get_args)
|
|
81
|
+
return nil if str.nil?
|
|
82
|
+
str = str.strip
|
|
83
|
+
|
|
84
|
+
# rubocop:disable Metrics/LineLength
|
|
85
|
+
regexp = Regexp.new('(?<seqno>\d+)'\
|
|
86
|
+
' *(?<address>host \S+|[:\.0-9a-fA-F]+ [:\.0-9a-fA-F]+|[:\.0-9a-fA-F]+\/\d+)?'\
|
|
87
|
+
' *(?<port>range \S+ \S+|(lt|eq|gt|neq) \S+)?')
|
|
88
|
+
# rubocop:enable Metrics/LineLength
|
|
89
|
+
regexp.match(str)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def entry_set(attrs)
|
|
93
|
+
if attrs.empty?
|
|
94
|
+
attrs[:state] = 'no'
|
|
95
|
+
else
|
|
96
|
+
destroy if seqno
|
|
97
|
+
attrs[:state] = ''
|
|
98
|
+
end
|
|
99
|
+
set_args_keys_default
|
|
100
|
+
set_args_keys(attrs)
|
|
101
|
+
[:address,
|
|
102
|
+
:port,
|
|
103
|
+
].each do |p|
|
|
104
|
+
attrs[p] = '' if attrs[p].nil?
|
|
105
|
+
send(p.to_s + '=', attrs[p])
|
|
106
|
+
end
|
|
107
|
+
@get_args = @set_args
|
|
108
|
+
config_set('object_group', 'entry', @set_args)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# PROPERTIES
|
|
112
|
+
# ----------
|
|
113
|
+
def seqno
|
|
114
|
+
match = entry_get
|
|
115
|
+
return nil if match.nil?
|
|
116
|
+
match.names.include?('seqno') ? match[:seqno] : nil
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def address
|
|
120
|
+
match = entry_get
|
|
121
|
+
return nil if match.nil?
|
|
122
|
+
addr = match[:address]
|
|
123
|
+
return nil if addr.nil?
|
|
124
|
+
# Normalize addr. Some platforms zero_pad ipv6 addrs.
|
|
125
|
+
addr.gsub!(/^0*/, '').gsub!(/:0*/, ':')
|
|
126
|
+
addr
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def address=(address)
|
|
130
|
+
@set_args[:address] = address
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def port
|
|
134
|
+
match = entry_get
|
|
135
|
+
return nil if match.nil?
|
|
136
|
+
match.names.include?('port') ? match[:port] : nil
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def port=(port)
|
|
140
|
+
@set_args[:port] = port
|
|
141
|
+
end
|
|
142
|
+
end # class
|
|
143
|
+
end # module
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# VXLAN global provider class
|
|
2
|
+
# Provides configuration of anycast gateways and duplicate host IP and
|
|
3
|
+
# mac detection
|
|
4
|
+
#
|
|
5
|
+
# Alok Aggarwal, October 2015
|
|
6
|
+
#
|
|
7
|
+
# Copyright (c) 2014-2016 Cisco and/or its affiliates.
|
|
8
|
+
#
|
|
9
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
# you may not use this file except in compliance with the License.
|
|
11
|
+
# You may obtain a copy of the License at
|
|
12
|
+
#
|
|
13
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
#
|
|
15
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
|
|
21
|
+
require_relative 'cisco_cmn_utils'
|
|
22
|
+
require_relative 'feature'
|
|
23
|
+
require_relative 'node_util'
|
|
24
|
+
|
|
25
|
+
module Cisco
|
|
26
|
+
# node_utils class for overlay_global
|
|
27
|
+
class OverlayGlobal < NodeUtil
|
|
28
|
+
# ----------
|
|
29
|
+
# PROPERTIES
|
|
30
|
+
# ----------
|
|
31
|
+
|
|
32
|
+
# dup-host-ip-addr-detection
|
|
33
|
+
def dup_host_ip_addr_detection
|
|
34
|
+
match = config_get('overlay_global', 'dup_host_ip_addr_detection')
|
|
35
|
+
if match.nil?
|
|
36
|
+
default_dup_host_ip_addr_detection
|
|
37
|
+
else
|
|
38
|
+
match.collect(&:to_i)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def dup_host_ip_addr_detection_host_moves
|
|
43
|
+
host_moves, _timeout = dup_host_ip_addr_detection
|
|
44
|
+
host_moves
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def dup_host_ip_addr_detection_timeout
|
|
48
|
+
_host_moves, timeout = dup_host_ip_addr_detection
|
|
49
|
+
timeout
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def dup_host_ip_addr_detection_set(host_moves, timeout)
|
|
53
|
+
Feature.fabric_forwarding_enable
|
|
54
|
+
Feature.nv_overlay_evpn_enable
|
|
55
|
+
if host_moves == default_dup_host_ip_addr_detection_host_moves &&
|
|
56
|
+
timeout == default_dup_host_ip_addr_detection_timeout
|
|
57
|
+
state = 'no'
|
|
58
|
+
else
|
|
59
|
+
state = ''
|
|
60
|
+
end
|
|
61
|
+
set_args = { state: state, host_moves: host_moves, timeout: timeout }
|
|
62
|
+
config_set('overlay_global', 'dup_host_ip_addr_detection', set_args)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def default_dup_host_ip_addr_detection
|
|
66
|
+
[default_dup_host_ip_addr_detection_host_moves,
|
|
67
|
+
default_dup_host_ip_addr_detection_timeout]
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def default_dup_host_ip_addr_detection_host_moves
|
|
71
|
+
config_get_default('overlay_global',
|
|
72
|
+
'dup_host_ip_addr_detection_host_moves')
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def default_dup_host_ip_addr_detection_timeout
|
|
76
|
+
config_get_default('overlay_global', 'dup_host_ip_addr_detection_timeout')
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# dup-host-mac-detection
|
|
80
|
+
def dup_host_mac_detection
|
|
81
|
+
match = config_get('overlay_global', 'dup_host_mac_detection')
|
|
82
|
+
if match.nil?
|
|
83
|
+
default_dup_host_mac_detection
|
|
84
|
+
else
|
|
85
|
+
match.collect(&:to_i)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def dup_host_mac_detection_host_moves
|
|
90
|
+
host_moves, _timeout = dup_host_mac_detection
|
|
91
|
+
host_moves
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def dup_host_mac_detection_timeout
|
|
95
|
+
_host_moves, timeout = dup_host_mac_detection
|
|
96
|
+
timeout
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def dup_host_mac_detection_set(host_moves, timeout)
|
|
100
|
+
set_args = { host_moves: host_moves, timeout: timeout }
|
|
101
|
+
config_set('overlay_global', 'dup_host_mac_detection', set_args)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def default_dup_host_mac_detection
|
|
105
|
+
[default_dup_host_mac_detection_host_moves,
|
|
106
|
+
default_dup_host_mac_detection_timeout]
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def default_dup_host_mac_detection_host_moves
|
|
110
|
+
config_get_default('overlay_global', 'dup_host_mac_detection_host_moves')
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def default_dup_host_mac_detection_timeout
|
|
114
|
+
config_get_default('overlay_global', 'dup_host_mac_detection_timeout')
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# anycast-gateway-mac
|
|
118
|
+
def anycast_gateway_mac
|
|
119
|
+
mac = config_get('overlay_global', 'anycast_gateway_mac')
|
|
120
|
+
mac.nil? || mac.empty? ? default_anycast_gateway_mac : mac.downcase
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def anycast_gateway_mac=(mac_addr)
|
|
124
|
+
fail TypeError unless mac_addr.is_a?(String)
|
|
125
|
+
|
|
126
|
+
Feature.nv_overlay_evpn_enable
|
|
127
|
+
Feature.fabric_forwarding_enable
|
|
128
|
+
if mac_addr == default_anycast_gateway_mac
|
|
129
|
+
state = 'no'
|
|
130
|
+
mac_addr = ''
|
|
131
|
+
else
|
|
132
|
+
state = ''
|
|
133
|
+
end
|
|
134
|
+
config_set('overlay_global', 'anycast_gateway_mac',
|
|
135
|
+
state: state, mac_addr: mac_addr)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def default_anycast_gateway_mac
|
|
139
|
+
config_get_default('overlay_global', 'anycast_gateway_mac')
|
|
140
|
+
end
|
|
141
|
+
end # class
|
|
142
|
+
end # module
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
#
|
|
2
|
+
# NXAPI implementation of PIM class
|
|
3
|
+
#
|
|
4
|
+
# Smitha Gopalan, November 2015
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2015-2016 Cisco and/or its affiliates.
|
|
7
|
+
#
|
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
# See the License for the specific language governing permissions and
|
|
18
|
+
# limitations under the License.
|
|
19
|
+
|
|
20
|
+
require_relative 'node_util'
|
|
21
|
+
|
|
22
|
+
module Cisco
|
|
23
|
+
# node_utils class for Pim
|
|
24
|
+
class Pim < NodeUtil
|
|
25
|
+
attr_reader :vrf, :afi
|
|
26
|
+
|
|
27
|
+
# Constructor with vrf
|
|
28
|
+
# ---------------------
|
|
29
|
+
def initialize(afi, vrf, instantiate=true)
|
|
30
|
+
fail ArgumentError unless vrf.is_a?(String) || vrf.length > 0
|
|
31
|
+
@vrf = vrf
|
|
32
|
+
@afi = Pim.afi_cli(afi)
|
|
33
|
+
set_args_keys_default
|
|
34
|
+
|
|
35
|
+
Feature.pim_enable if instantiate
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# self.pims returns a hash of all current pim objects.
|
|
39
|
+
# There will be one object for each vrf. This method has slightly different
|
|
40
|
+
# behavior than most of the other "get all objects" methods because the
|
|
41
|
+
# pim properties are standalone and do not reside in a "pim" container;
|
|
42
|
+
# therefore, this method simply returns a pim object for each vrf
|
|
43
|
+
# regardless of whether there are any specific pim properties currently
|
|
44
|
+
# defined for the context.
|
|
45
|
+
def self.pims
|
|
46
|
+
afis = %w(ipv4) # TBD: No support for ipv6 at this time
|
|
47
|
+
hash_final = {}
|
|
48
|
+
return hash_final unless Feature.pim_enabled?
|
|
49
|
+
afis.each do |afi|
|
|
50
|
+
hash_final[afi] = {}
|
|
51
|
+
default_vrf = 'default'
|
|
52
|
+
hash_final[afi][default_vrf] = Pim.new(afi, default_vrf, false)
|
|
53
|
+
|
|
54
|
+
# Now the vrf's
|
|
55
|
+
vrf_ids = config_get('vrf', 'all_vrfs')
|
|
56
|
+
vrf_ids.delete_if { |vrf_id| vrf_id == 'management' }
|
|
57
|
+
vrf_ids.each do |vrf|
|
|
58
|
+
hash_final[afi][vrf] = Pim.new(afi, vrf, false)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
hash_final
|
|
62
|
+
rescue Cisco::CliError => e
|
|
63
|
+
# cmd will syntax reject when feature is not enabled
|
|
64
|
+
raise unless e.clierror =~ /Syntax error/
|
|
65
|
+
return {}
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def self.afi_cli(afi)
|
|
69
|
+
# Add ipv6 support later
|
|
70
|
+
fail ArgumentError, "Argument afi must be 'ipv4'" unless
|
|
71
|
+
afi[/(ipv4)/]
|
|
72
|
+
afi[/ipv4/] ? 'ip' : afi
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def set_args_keys_default
|
|
76
|
+
keys = { afi: @afi }
|
|
77
|
+
keys[:vrf] = @vrf unless @vrf == 'default'
|
|
78
|
+
@get_args = @set_args = keys
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def set_args_keys(hash={}) # rubocop:disable Style/AccessorMethodName
|
|
82
|
+
set_args_keys_default
|
|
83
|
+
@set_args = @get_args.merge!(hash) unless hash.empty?
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# This destroy method is different than most because pim does not have a
|
|
87
|
+
# "container" for properties, they simply exist in a given vrf context.
|
|
88
|
+
# For that reason destroy needs to explicitly set each property
|
|
89
|
+
# to its default state.
|
|
90
|
+
def destroy
|
|
91
|
+
return unless Feature.pim_enabled?
|
|
92
|
+
self.ssm_range = ''
|
|
93
|
+
self.bfd = false
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
#-----------
|
|
97
|
+
# Properties
|
|
98
|
+
#-----------
|
|
99
|
+
def ssm_range
|
|
100
|
+
config_get('pim', 'ssm_range', @get_args)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def ssm_range=(range)
|
|
104
|
+
if range.empty?
|
|
105
|
+
state = 'no'
|
|
106
|
+
range = ssm_range
|
|
107
|
+
return if range.nil?
|
|
108
|
+
else
|
|
109
|
+
state = ''
|
|
110
|
+
end
|
|
111
|
+
set_args_keys(state: state, ssm_range: range)
|
|
112
|
+
config_set('pim', 'ssm_range', @set_args)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def bfd
|
|
116
|
+
config_get('pim', 'bfd', @get_args)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def bfd=(val)
|
|
120
|
+
return if val == bfd
|
|
121
|
+
state = val ? '' : 'no'
|
|
122
|
+
set_args_keys(state: state)
|
|
123
|
+
Feature.bfd_enable if val
|
|
124
|
+
config_set('pim', 'bfd', @set_args)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def default_bfd
|
|
128
|
+
config_get_default('pim', 'bfd')
|
|
129
|
+
end
|
|
130
|
+
end # Class
|
|
131
|
+
end # Module
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# NXAPI implementation of the PimGroupList class
|
|
2
|
+
#
|
|
3
|
+
# Smitha Gopalan, November 2015
|
|
4
|
+
#
|
|
5
|
+
# Copyright (c) 2014-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 'node_util'
|
|
20
|
+
require_relative 'pim'
|
|
21
|
+
|
|
22
|
+
module Cisco
|
|
23
|
+
# node_utils class for pim grouplist
|
|
24
|
+
class PimGroupList < NodeUtil
|
|
25
|
+
attr_reader :afi, :rp_addr, :group, :vrf
|
|
26
|
+
|
|
27
|
+
# Constructor with grouplist and vrf
|
|
28
|
+
# ----------------------------------
|
|
29
|
+
def initialize(afi, vrf, rp_addr, group, instantiate=true)
|
|
30
|
+
fail ArgumentError unless vrf.is_a?(String) || vrf.length > 0
|
|
31
|
+
@afi = Pim.afi_cli(afi)
|
|
32
|
+
@rp_addr = rp_addr
|
|
33
|
+
@group = group
|
|
34
|
+
@vrf = vrf
|
|
35
|
+
set_args_keys_default
|
|
36
|
+
|
|
37
|
+
create if instantiate
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Create a hash of [afi][vrf][rp-addr,grouplist]
|
|
41
|
+
# --------------------------------------------------
|
|
42
|
+
def self.group_lists
|
|
43
|
+
afis = %w(ipv4) # TBD ipv6
|
|
44
|
+
hash = {}
|
|
45
|
+
return hash unless Feature.pim_enabled?
|
|
46
|
+
afis.each do |afi|
|
|
47
|
+
hash[afi] = {}
|
|
48
|
+
default_vrf = 'default'
|
|
49
|
+
get_args = { afi: Pim.afi_cli(afi) }
|
|
50
|
+
rp_addrs = config_get('pim', 'all_group_lists', get_args)
|
|
51
|
+
unless rp_addrs.nil?
|
|
52
|
+
rp_addrs.each do |addr_and_group|
|
|
53
|
+
addr, group = addr_and_group
|
|
54
|
+
hash[afi][default_vrf] ||= {}
|
|
55
|
+
hash[afi][default_vrf][addr_and_group] =
|
|
56
|
+
PimGroupList.new(afi, default_vrf, addr, group, false)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
vrf_ids = config_get('vrf', 'all_vrfs')
|
|
60
|
+
vrf_ids.each do |vrf|
|
|
61
|
+
get_args = { vrf: vrf, afi: Pim.afi_cli(afi) }
|
|
62
|
+
rp_addrs = config_get('pim', 'all_group_lists', get_args)
|
|
63
|
+
next if rp_addrs.nil?
|
|
64
|
+
rp_addrs.each do |addr_and_group|
|
|
65
|
+
hash[afi][vrf] ||= {}
|
|
66
|
+
addr, group = addr_and_group
|
|
67
|
+
hash[afi][vrf][addr_and_group] =
|
|
68
|
+
PimGroupList.new(afi, vrf, addr, group, false)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
hash
|
|
73
|
+
rescue Cisco::CliError => e
|
|
74
|
+
# cmd will syntax reject when feature is not enabled
|
|
75
|
+
raise unless e.clierror =~ /Syntax error/
|
|
76
|
+
return {}
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# set_args_keys_default
|
|
80
|
+
# ---------------------
|
|
81
|
+
def set_args_keys_default
|
|
82
|
+
keys = { afi: @afi, addr: @rp_addr, group: @group }
|
|
83
|
+
keys[:vrf] = @vrf unless @vrf == 'default'
|
|
84
|
+
@get_args = @set_args = keys
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# set_args_key
|
|
88
|
+
# -------------
|
|
89
|
+
def set_args_keys(hash={}) # rubocop:disable Style/AccessorMethodName
|
|
90
|
+
set_args_keys_default
|
|
91
|
+
@set_args = @get_args.merge!(hash) unless hash.empty?
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Create pim grouplist instance
|
|
95
|
+
# ---------------------------------
|
|
96
|
+
def create
|
|
97
|
+
Feature.pim_enable
|
|
98
|
+
set_args_keys(state: '')
|
|
99
|
+
config_set('pim', 'group_list', @set_args)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Destroy pim grouplist instance
|
|
103
|
+
# ----------------------------------
|
|
104
|
+
def destroy
|
|
105
|
+
set_args_keys(state: 'no')
|
|
106
|
+
config_set('pim', 'group_list', @set_args)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|