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,82 @@
|
|
|
1
|
+
# Domain Name provider class
|
|
2
|
+
#
|
|
3
|
+
# October 2015, Bryan Jen
|
|
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
|
+
|
|
21
|
+
module Cisco
|
|
22
|
+
# DomainName- node utility class for domain name configuration
|
|
23
|
+
class DomainName < NodeUtil
|
|
24
|
+
attr_reader :name, :vrf
|
|
25
|
+
|
|
26
|
+
def initialize(name, vrf=nil, instantiate=true)
|
|
27
|
+
@name = name
|
|
28
|
+
@vrf = vrf
|
|
29
|
+
create if instantiate
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.domainnames(vrf=nil)
|
|
33
|
+
hash = {}
|
|
34
|
+
if vrf.nil?
|
|
35
|
+
domain = config_get('dnsclient', 'domain_name')
|
|
36
|
+
else
|
|
37
|
+
domain = config_get('dnsclient', 'domain_name_vrf', vrf: vrf)
|
|
38
|
+
end
|
|
39
|
+
hash[domain] = DomainName.new(domain, vrf, false) unless domain.empty?
|
|
40
|
+
hash
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def ==(other)
|
|
44
|
+
(name == other.name) && (vrf == other.vrf)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def create
|
|
48
|
+
if @vrf.nil?
|
|
49
|
+
config_set('dnsclient', 'domain_name',
|
|
50
|
+
state: '', name: @name)
|
|
51
|
+
else
|
|
52
|
+
# On some platforms attempts to create a new domain results
|
|
53
|
+
# in the error. 'ERROR: Deletion of VRF test in progresswait
|
|
54
|
+
# for it to complete'. We handle this by trying up to 10 times
|
|
55
|
+
# with a 1 second delay between attempts before giving up.
|
|
56
|
+
tries = 10
|
|
57
|
+
begin
|
|
58
|
+
config_set('dnsclient', 'domain_name_vrf',
|
|
59
|
+
state: '', name: @name, vrf: @vrf)
|
|
60
|
+
rescue Cisco::CliError => e
|
|
61
|
+
if /ERROR: Deletion of VRF .* in progress/.match(e.to_s)
|
|
62
|
+
sleep 1
|
|
63
|
+
tries -= 1
|
|
64
|
+
# rubocop:disable Metrics/BlockNesting
|
|
65
|
+
retry if tries > 0
|
|
66
|
+
# rubocop:enable Metrics/BlockNesting
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def destroy
|
|
73
|
+
if @vrf.nil?
|
|
74
|
+
config_set('dnsclient', 'domain_name',
|
|
75
|
+
state: 'no', name: @name)
|
|
76
|
+
else
|
|
77
|
+
config_set('dnsclient', 'domain_name_vrf',
|
|
78
|
+
state: 'no', name: @name, vrf: @vrf)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# NXAPI implementation of encapsulation profile class
|
|
2
|
+
#
|
|
3
|
+
# March 2016, Rohan Gandhi Korlepara
|
|
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 'feature'
|
|
21
|
+
|
|
22
|
+
module Cisco
|
|
23
|
+
# Encapsulation - node utility class for Encapsulation config mgmt.
|
|
24
|
+
class Encapsulation < NodeUtil
|
|
25
|
+
attr_reader :encap_name
|
|
26
|
+
|
|
27
|
+
# name: name of the encap instance
|
|
28
|
+
# instantiate: true = create encap instance
|
|
29
|
+
def initialize(name, instantiate=true)
|
|
30
|
+
fail ArgumentError unless name.length > 0
|
|
31
|
+
@encap_name = name
|
|
32
|
+
create if instantiate
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def to_s
|
|
36
|
+
"Encapsulation #{encap_name}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Create a hash of all current encap instances.
|
|
40
|
+
def self.encaps
|
|
41
|
+
return {} unless Feature.vni_enabled?
|
|
42
|
+
instances = config_get('encapsulation', 'all_encaps')
|
|
43
|
+
return {} if instances.nil?
|
|
44
|
+
hash = {}
|
|
45
|
+
instances.each do |name|
|
|
46
|
+
hash[name] = Encapsulation.new(name, false)
|
|
47
|
+
end
|
|
48
|
+
hash
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# This will expand the string to a list of bds as integers
|
|
52
|
+
def self.string_to_array(string)
|
|
53
|
+
list = []
|
|
54
|
+
narray = string.split(',')
|
|
55
|
+
narray.each do |elem|
|
|
56
|
+
if elem.include?('-')
|
|
57
|
+
es = elem.gsub('-', '..')
|
|
58
|
+
ea = es.split('..').map { |d| Integer(d) }
|
|
59
|
+
er = ea[0]..ea[1]
|
|
60
|
+
list << er.to_a
|
|
61
|
+
else
|
|
62
|
+
list << elem.to_i
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
list.flatten
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Enable feature and create encap instance
|
|
69
|
+
def create
|
|
70
|
+
Feature.vni_enable
|
|
71
|
+
config_set('encapsulation', 'create', profile: @encap_name)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Destroy an encap instance
|
|
75
|
+
def destroy
|
|
76
|
+
config_set('encapsulation', 'destroy', profile: @encap_name)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# ----------
|
|
80
|
+
# PROPERTIES
|
|
81
|
+
# ----------
|
|
82
|
+
|
|
83
|
+
def range_summarize(string)
|
|
84
|
+
Utils.array_to_str(Encapsulation.string_to_array(string.to_s), false)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def dot1q_map
|
|
88
|
+
result = config_get('encapsulation', 'dot1q_map', profile: @encap_name)
|
|
89
|
+
return default_dot1q_map if result.empty?
|
|
90
|
+
|
|
91
|
+
result[0] = range_summarize(result[0])
|
|
92
|
+
result[1] = range_summarize(result[1])
|
|
93
|
+
result
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def dot1q_map=(map)
|
|
97
|
+
state = ''
|
|
98
|
+
if map.empty?
|
|
99
|
+
state = 'no'
|
|
100
|
+
map = dot1q_map
|
|
101
|
+
return if map.empty?
|
|
102
|
+
end
|
|
103
|
+
vlans, vnis = map
|
|
104
|
+
config_set('encapsulation', 'dot1q_map', profile: @encap_name,
|
|
105
|
+
state: state, vlans: vlans, vnis: vnis)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def default_dot1q_map
|
|
109
|
+
config_get_default('encapsulation', 'dot1q_map')
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# August 2018
|
|
2
|
+
# March 2016, Glenn F. Matthews
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2016-2018 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 'yaml'
|
|
19
|
+
require_relative 'logger'
|
|
20
|
+
|
|
21
|
+
module Cisco
|
|
22
|
+
# Class representing the configuration environment
|
|
23
|
+
class Environment
|
|
24
|
+
@environments = {}
|
|
25
|
+
@default_environment_name = 'default'
|
|
26
|
+
|
|
27
|
+
# Autogenerate Cisco::Environment.default_environment_name and
|
|
28
|
+
# Cisco::Environment.default_environment_name= class methods.
|
|
29
|
+
class << self
|
|
30
|
+
attr_accessor :default_environment_name
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# We have three tiers of configuration:
|
|
34
|
+
# 1) default (defined in this file)
|
|
35
|
+
# 2) System-wide gem configuration in /etc/cisco_node_utils.yaml
|
|
36
|
+
# 3) User configuration in ~/cisco_node_utils.yaml
|
|
37
|
+
|
|
38
|
+
DEFAULT_ENVIRONMENT = {
|
|
39
|
+
host: nil, # localhost by default
|
|
40
|
+
port: nil, # only applicable to gRPC
|
|
41
|
+
username: nil,
|
|
42
|
+
password: nil,
|
|
43
|
+
cookie: nil, # only applicable to nxapi
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
def self.environments
|
|
47
|
+
if @environments.empty?
|
|
48
|
+
@environments = merge_config('/etc/cisco_node_utils.yaml',
|
|
49
|
+
@environments)
|
|
50
|
+
@environments = merge_config('~/cisco_node_utils.yaml',
|
|
51
|
+
@environments)
|
|
52
|
+
@environments.each do |name, config|
|
|
53
|
+
Cisco::Logger.debug("Environment '#{name}': #{config}")
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
@environments
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def self.merge_config(path, current_config)
|
|
60
|
+
data = data_from_file(path)
|
|
61
|
+
data.each do |name, config|
|
|
62
|
+
# in case config is nil:
|
|
63
|
+
config ||= {}
|
|
64
|
+
# in case current_config has no entry for this name:
|
|
65
|
+
current_config[name] ||= DEFAULT_ENVIRONMENT.clone
|
|
66
|
+
# merge it on in!
|
|
67
|
+
current_config[name].merge!(strings_to_symbols(config))
|
|
68
|
+
end
|
|
69
|
+
current_config
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def self.data_from_file(path)
|
|
73
|
+
begin
|
|
74
|
+
path = File.expand_path(path)
|
|
75
|
+
rescue ArgumentError => e
|
|
76
|
+
# Can happen if path includes '~' but $HOME is not defined
|
|
77
|
+
Cisco::Logger.debug "Failed to load #{path}: #{e}"
|
|
78
|
+
return {}
|
|
79
|
+
end
|
|
80
|
+
unless File.file?(path)
|
|
81
|
+
Cisco::Logger.debug "No file found at #{path}"
|
|
82
|
+
return {}
|
|
83
|
+
end
|
|
84
|
+
unless File.readable?(path)
|
|
85
|
+
Cisco::Logger.debug "No permissions to read #{path}"
|
|
86
|
+
return {}
|
|
87
|
+
end
|
|
88
|
+
YAML.load_file(path)
|
|
89
|
+
rescue Psych::SyntaxError => e
|
|
90
|
+
Cisco::Logger.error("Error loading #{path}: #{e}")
|
|
91
|
+
{}
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def self.add_env(env_name, env_hash)
|
|
95
|
+
fail ArgumentError, 'empty environment name' if env_name.empty?
|
|
96
|
+
fail TypeError, 'invalid environment hash' unless env_hash.is_a?(Hash)
|
|
97
|
+
@environments[env_name] = env_hash
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def self.strings_to_symbols(hash)
|
|
101
|
+
Hash[hash.map { |k, v| [k.to_sym, v] }]
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def self.environment(name=nil)
|
|
105
|
+
name ||= @default_environment_name
|
|
106
|
+
Cisco::Logger.debug("Getting environment '#{name}'")
|
|
107
|
+
environments.fetch(name, DEFAULT_ENVIRONMENT)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# January 2018, Rahul Shenoy
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2018 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 'cisco_cmn_utils'
|
|
18
|
+
require_relative 'node_util'
|
|
19
|
+
require_relative 'feature'
|
|
20
|
+
|
|
21
|
+
module Cisco
|
|
22
|
+
# node_utils class for evpn_multisite
|
|
23
|
+
class EvpnMulticast < NodeUtil
|
|
24
|
+
def initialize
|
|
25
|
+
@get_args = @set_args = {}
|
|
26
|
+
create
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def create
|
|
30
|
+
return unless multicast == default_multicast
|
|
31
|
+
Feature.ngmvpn_enable
|
|
32
|
+
config_set('feature', 'nv_overlay', state: '')
|
|
33
|
+
@set_args[:state] = ''
|
|
34
|
+
config_set('evpn_multicast', 'multicast', @set_args)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def destroy
|
|
38
|
+
@set_args[:state] = 'no'
|
|
39
|
+
config_set('evpn_multicast', 'multicast', @set_args)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.multicast
|
|
43
|
+
config_get('evpn_multicast', 'multicast')
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def multicast
|
|
47
|
+
config_get('evpn_multicast', 'multicast')
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def multicast=(bool)
|
|
51
|
+
fail TypeError unless [true, false].include?(bool)
|
|
52
|
+
@set_args[:state] = bool ? '' : 'no'
|
|
53
|
+
if @set_args[:state] == 'no'
|
|
54
|
+
unless multicast == default_multicast
|
|
55
|
+
config_set('evpn_multicast', 'multicast', @set_args)
|
|
56
|
+
end
|
|
57
|
+
else
|
|
58
|
+
config_set('evpn_multicast', 'multicast', @set_args)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def default_multicast
|
|
63
|
+
config_get_default('evpn_multicast', 'multicast')
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# October 2017, Rahul Shenoy
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2017 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 'cisco_cmn_utils'
|
|
18
|
+
require_relative 'node_util'
|
|
19
|
+
require_relative 'feature'
|
|
20
|
+
|
|
21
|
+
module Cisco
|
|
22
|
+
# node_utils class for evpn_multisite
|
|
23
|
+
class EvpnMultisite < NodeUtil
|
|
24
|
+
attr_reader :multisiteid, :time
|
|
25
|
+
|
|
26
|
+
def initialize(multisiteid, instantiate=true)
|
|
27
|
+
err_msg = "multisiteid must be either a 'String' or an" \
|
|
28
|
+
" 'Integer' object"
|
|
29
|
+
fail ArgumentError, err_msg unless multisiteid.is_a?(Integer) ||
|
|
30
|
+
multisiteid.is_a?(String)
|
|
31
|
+
@multisiteid = multisiteid.to_i
|
|
32
|
+
@get_args = @set_args = { multisiteid: @multisiteid }
|
|
33
|
+
create if instantiate
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def create
|
|
37
|
+
# There is an issue with EX platform using
|
|
38
|
+
# Feature.nv_overlay_enable generating error code '400'
|
|
39
|
+
# Using config_set for enabling nv overlay
|
|
40
|
+
config_set('feature', 'nv_overlay', state: '')
|
|
41
|
+
sleep 1
|
|
42
|
+
@set_args[:state] = ''
|
|
43
|
+
config_set('evpn_multisite', 'multisite', @set_args)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def destroy
|
|
47
|
+
@set_args[:state] = 'no'
|
|
48
|
+
# HACK: set time to a dummy value
|
|
49
|
+
@set_args[:time] = 30
|
|
50
|
+
config_set('evpn_multisite', 'delay_restore', @set_args)
|
|
51
|
+
config_set('evpn_multisite', 'multisite', @set_args)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def self.multisite
|
|
55
|
+
nu_obj = nil
|
|
56
|
+
ms_id = config_get('evpn_multisite', 'multisite')
|
|
57
|
+
nu_obj = EvpnMultisite.new(ms_id, false) if ms_id
|
|
58
|
+
nu_obj
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def multisite
|
|
62
|
+
config_get('evpn_multisite', 'multisite')
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def multisite=(multisiteid)
|
|
66
|
+
err_msg = "multisiteid must be either a 'String' or an" \
|
|
67
|
+
" 'Integer' object"
|
|
68
|
+
fail ArgumentError, err_msg unless multisiteid.is_a?(Integer) ||
|
|
69
|
+
multisiteid.is_a?(String)
|
|
70
|
+
@multisiteid = multisiteid.to_i
|
|
71
|
+
@set_args[:multisiteid] = @multisiteid
|
|
72
|
+
config_set('evpn_multisite', 'multisite', @set_args)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def delay_restore
|
|
76
|
+
config_get('evpn_multisite', 'delay_restore', @get_args)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def delay_restore=(time)
|
|
80
|
+
# HACK: set a dummy time value when removing the property
|
|
81
|
+
dummy_time = 30
|
|
82
|
+
if time == default_delay_restore
|
|
83
|
+
@set_args[:state] = 'no'
|
|
84
|
+
@set_args[:time] = dummy_time
|
|
85
|
+
else
|
|
86
|
+
@set_args[:time] = time
|
|
87
|
+
@set_args[:state] = '' unless @set_args[:state]
|
|
88
|
+
end
|
|
89
|
+
config_set('evpn_multisite', 'delay_restore', @set_args)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def default_delay_restore
|
|
93
|
+
config_get_default('evpn_multisite', 'delay_restore')
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# October 2017, Rahul Shenoy
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2017 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 'cisco_cmn_utils'
|
|
18
|
+
require_relative 'node_util'
|
|
19
|
+
require_relative 'feature'
|
|
20
|
+
|
|
21
|
+
module Cisco
|
|
22
|
+
# node_utils class for evpn_stormcontrol
|
|
23
|
+
class EvpnStormcontrol < NodeUtil
|
|
24
|
+
attr_reader :stormcontrol_type, :level
|
|
25
|
+
|
|
26
|
+
def initialize(stormcontrol_type, level, instantiate=true)
|
|
27
|
+
err_msg = 'storm control type must be one of the following:' \
|
|
28
|
+
' broadcast, multicast or unicast'
|
|
29
|
+
type_list = %w(broadcast multicast unicast)
|
|
30
|
+
fail ArgumentError, err_msg unless type_list.include?(stormcontrol_type)
|
|
31
|
+
@stormcontrol_type = stormcontrol_type
|
|
32
|
+
|
|
33
|
+
err_msg = "level must be either a 'String' or an" \
|
|
34
|
+
" 'Integer' object"
|
|
35
|
+
fail ArgumentError, err_msg unless level.is_a?(Integer) ||
|
|
36
|
+
level.is_a?(String)
|
|
37
|
+
@level = level.to_i
|
|
38
|
+
@get_args = @set_args = { stormcontrol_type: @stormcontrol_type,
|
|
39
|
+
level: @level }
|
|
40
|
+
create if instantiate
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def config_stormcontrol
|
|
44
|
+
stormcontrol_type = @set_args[:stormcontrol_type]
|
|
45
|
+
config_set('evpn_stormcontrol', stormcontrol_type, @set_args)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def create
|
|
49
|
+
@set_args[:state] = ''
|
|
50
|
+
config_stormcontrol
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def destroy
|
|
54
|
+
@set_args[:state] = 'no'
|
|
55
|
+
config_stormcontrol
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Create a hash of all stormcontrol instances
|
|
59
|
+
def self.stormcontrol
|
|
60
|
+
hash = {}
|
|
61
|
+
type_list = %w(broadcast multicast unicast)
|
|
62
|
+
type_list.each do |type|
|
|
63
|
+
level = config_get('evpn_stormcontrol', type)
|
|
64
|
+
hash[type] = EvpnStormcontrol.new(type, level, false) if level
|
|
65
|
+
end
|
|
66
|
+
hash
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def level
|
|
70
|
+
config_get('evpn_stormcontrol', @get_args[:stormcontrol_type])
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def level=(level)
|
|
74
|
+
err_msg = "level must be either a 'String' or an" \
|
|
75
|
+
" 'Integer' object"
|
|
76
|
+
fail ArgumentError, err_msg unless level.is_a?(Integer) ||
|
|
77
|
+
level.is_a?(String)
|
|
78
|
+
@level = level.to_i
|
|
79
|
+
@set_args[:level] = @level
|
|
80
|
+
@set_args[:state] = ''
|
|
81
|
+
config_stormcontrol
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|