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,178 @@
|
|
|
1
|
+
# NXAPI implementation of BridgeDomain class
|
|
2
|
+
#
|
|
3
|
+
# February 2016, Rohan Gandhi Korlepara
|
|
4
|
+
#
|
|
5
|
+
# Copyright (c) 2015-2016 Cisco and/or its affiliates.
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
# you may not use this file except in compliance with the License.
|
|
9
|
+
# You may obtain a copy of the License at
|
|
10
|
+
#
|
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
#
|
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
# See the License for the specific language governing permissions and
|
|
17
|
+
# limitations under the License.
|
|
18
|
+
|
|
19
|
+
require_relative 'node_util'
|
|
20
|
+
require_relative 'feature'
|
|
21
|
+
|
|
22
|
+
module Cisco
|
|
23
|
+
# node_utils class for bridge_domain
|
|
24
|
+
class BridgeDomain < NodeUtil
|
|
25
|
+
attr_reader :bd_ids
|
|
26
|
+
|
|
27
|
+
def initialize(bds, instantiate=true)
|
|
28
|
+
# Spaces are removed as bridge-domain cli doesn't accept value with
|
|
29
|
+
# space
|
|
30
|
+
@bd_ids = bds.to_s.gsub(/\s+/, '')
|
|
31
|
+
fail 'bridge-domain value is empty' if @bd_ids.empty? # no empty strings
|
|
32
|
+
|
|
33
|
+
create if instantiate
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def to_s
|
|
37
|
+
"Bridge Domain #{bd_ids}"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# This will expand the string to a list of bds as integers
|
|
41
|
+
def self.bd_ids_to_array(bdid_string)
|
|
42
|
+
list = []
|
|
43
|
+
narray = bdid_string.split(',')
|
|
44
|
+
narray.each do |elem|
|
|
45
|
+
if elem.include?('-')
|
|
46
|
+
es = elem.gsub('-', '..')
|
|
47
|
+
ea = es.split('..').map { |d| Integer(d) }
|
|
48
|
+
er = ea[0]..ea[1]
|
|
49
|
+
list << er.to_a
|
|
50
|
+
else
|
|
51
|
+
list << elem.to_i
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
list.flatten
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# This method will generate a batched string if a list is passed as
|
|
58
|
+
# argument
|
|
59
|
+
# Input would be as [1,2,3,4,5,10,11,12,7,30,100,31,32]
|
|
60
|
+
# output will be 1-5,10-12,7,30,100,31-32
|
|
61
|
+
def self.bd_list_to_string(bd_list)
|
|
62
|
+
farray = bd_list.compact
|
|
63
|
+
lranges = []
|
|
64
|
+
unless farray.empty?
|
|
65
|
+
left = bd_list.first
|
|
66
|
+
right = nil
|
|
67
|
+
farray.each do |aelem|
|
|
68
|
+
if right && aelem != right.succ
|
|
69
|
+
if left == right
|
|
70
|
+
lranges << left
|
|
71
|
+
else
|
|
72
|
+
lranges << Range.new(left, right)
|
|
73
|
+
end
|
|
74
|
+
left = aelem
|
|
75
|
+
end
|
|
76
|
+
right = aelem
|
|
77
|
+
end
|
|
78
|
+
if left == right
|
|
79
|
+
lranges << left
|
|
80
|
+
else
|
|
81
|
+
lranges << Range.new(left, right)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
lranges.to_s.gsub('..', '-').delete('[').delete(']').delete(' ')
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def self.bds
|
|
88
|
+
hash = {}
|
|
89
|
+
bd_list = config_get('bridge_domain', 'all_bds')
|
|
90
|
+
return hash if bd_list.nil?
|
|
91
|
+
|
|
92
|
+
final_bd_list =
|
|
93
|
+
bd_list.map { |elem| BridgeDomain.bd_ids_to_array(elem) }
|
|
94
|
+
.flatten.uniq.sort
|
|
95
|
+
final_bd_list.each do |id|
|
|
96
|
+
hash[id.to_s] = BridgeDomain.new(id, false)
|
|
97
|
+
end
|
|
98
|
+
hash
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# This function will first add bds to the system bridge-domain and then
|
|
102
|
+
# create the bds. If bds already existing then just create. Else add the
|
|
103
|
+
# non added bds to system range first then create all. This is to avoid the
|
|
104
|
+
# idempotency issue as system add command throws error if a bd is already
|
|
105
|
+
# present in the system range.
|
|
106
|
+
def create
|
|
107
|
+
sys_bds_array = BridgeDomain.bd_ids_to_array(system_bridge_domain)
|
|
108
|
+
inp_bds_array = BridgeDomain.bd_ids_to_array(@bd_ids)
|
|
109
|
+
if (inp_bds_array - sys_bds_array).any?
|
|
110
|
+
add_bds = BridgeDomain.bd_list_to_string(inp_bds_array - sys_bds_array)
|
|
111
|
+
config_set('bridge_domain', 'system_bridge_domain', oper: 'add',
|
|
112
|
+
bd: add_bds)
|
|
113
|
+
end
|
|
114
|
+
config_set('bridge_domain', 'create', bd: @bd_ids)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def destroy
|
|
118
|
+
config_set('bridge_domain', 'destroy', bd: @bd_ids)
|
|
119
|
+
config_set('bridge_domain', 'system_bridge_domain', oper: 'remove',
|
|
120
|
+
bd: @bd_ids)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
########################################################
|
|
124
|
+
# PROPERTIES #
|
|
125
|
+
########################################################
|
|
126
|
+
|
|
127
|
+
def bd_name
|
|
128
|
+
config_get('bridge_domain', 'bd_name', bd: @bd_ids)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def bd_name=(str)
|
|
132
|
+
state = str.empty? ? 'no' : ''
|
|
133
|
+
config_set('bridge_domain', 'bd_name', bd: @bd_ids, state: state,
|
|
134
|
+
name: str)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# This default getter is a bit different them most. When a brige-domain
|
|
138
|
+
# gets created it gets a default name assigned that follows the pattern
|
|
139
|
+
# 'Bridge-DomainX' where X is the bridge domain id (@bd_ids).
|
|
140
|
+
def default_bd_name
|
|
141
|
+
'Bridge-Domain' + @bd_ids
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# This type property can be defined only for one bd
|
|
145
|
+
def fabric_control
|
|
146
|
+
match = config_get('bridge_domain', 'fabric_control', bd: @bd_ids)
|
|
147
|
+
match.to_s == @bd_ids ? true : false
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def fabric_control=(val)
|
|
151
|
+
state = (val) ? '' : 'no'
|
|
152
|
+
config_set('bridge_domain', 'fabric_control', bd: @bd_ids, state: state)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def default_fabric_control
|
|
156
|
+
config_get_default('bridge_domain', 'fabric_control')
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def shutdown
|
|
160
|
+
match = config_get('bridge_domain', 'shutdown', bd: @bd_ids)
|
|
161
|
+
match == 'Noshutdown' ? false : true
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def shutdown=(val)
|
|
165
|
+
state = (val) ? '' : 'no'
|
|
166
|
+
config_set('bridge_domain', 'shutdown', bd: @bd_ids, state: state)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def default_shutdown
|
|
170
|
+
config_get_default('bridge_domain', 'shutdown')
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# getter for system bridge-domain
|
|
174
|
+
def system_bridge_domain
|
|
175
|
+
config_get('bridge_domain', 'system_bridge_domain')
|
|
176
|
+
end
|
|
177
|
+
end # Class
|
|
178
|
+
end # Module
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# NXAPI implementation of BridgeDomainVNI class
|
|
2
|
+
#
|
|
3
|
+
# February 2016, Rohan Gandhi Korlepara
|
|
4
|
+
#
|
|
5
|
+
# Copyright (c) 2015-2016 Cisco and/or its affiliates.
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
# you may not use this file except in compliance with the License.
|
|
9
|
+
# You may obtain a copy of the License at
|
|
10
|
+
#
|
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
#
|
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
# See the License for the specific language governing permissions and
|
|
17
|
+
# limitations under the License.
|
|
18
|
+
|
|
19
|
+
require_relative 'node_util'
|
|
20
|
+
require_relative 'feature'
|
|
21
|
+
|
|
22
|
+
module Cisco
|
|
23
|
+
# node_utils class for bridge_domain_vni
|
|
24
|
+
class BridgeDomainVNI < NodeUtil
|
|
25
|
+
attr_reader :bd_ids, :bd_ids_list
|
|
26
|
+
|
|
27
|
+
def initialize(bds, instantiate=true)
|
|
28
|
+
# Spaces are removed as bridge-domain cli doesn't accept value with
|
|
29
|
+
# space
|
|
30
|
+
@bd_ids = bds.to_s.gsub(/\s+/, '')
|
|
31
|
+
fail 'bridge-domain value is empty' if @bd_ids.empty? # no empty strings
|
|
32
|
+
|
|
33
|
+
@bd_ids_list = BridgeDomainVNI.string_to_array(@bd_ids)
|
|
34
|
+
create if instantiate
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def to_s
|
|
38
|
+
"Bridge Domain #{bd_ids}"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.range_bds
|
|
42
|
+
hash = {}
|
|
43
|
+
bd_list = config_get('bridge_domain_vni', 'range_bds')
|
|
44
|
+
return hash if bd_list.nil?
|
|
45
|
+
|
|
46
|
+
bd_list.each do |id|
|
|
47
|
+
hash[id] = BridgeDomainVNI.new(id, false)
|
|
48
|
+
end
|
|
49
|
+
hash
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# This will expand the string to a list of bds as integers
|
|
53
|
+
def self.string_to_array(string)
|
|
54
|
+
list = []
|
|
55
|
+
narray = string.split(',')
|
|
56
|
+
narray.each do |elem|
|
|
57
|
+
if elem.include?('-')
|
|
58
|
+
es = elem.gsub('-', '..')
|
|
59
|
+
ea = es.split('..').map { |d| Integer(d) }
|
|
60
|
+
er = ea[0]..ea[1]
|
|
61
|
+
list << er.to_a
|
|
62
|
+
else
|
|
63
|
+
list << elem.to_i
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
list.flatten
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Example clis;
|
|
70
|
+
# system bridge-domain 101-200
|
|
71
|
+
# bridge-domain 101-200
|
|
72
|
+
# bridge-domain 101-110,120,141-145,180
|
|
73
|
+
# member vni 6001-6011,5041-5044,8000,9000
|
|
74
|
+
#
|
|
75
|
+
# config_get('bridge_domain_vni', 'member_vni')
|
|
76
|
+
# will get the current member vni in this case
|
|
77
|
+
# 6001-6011,5041-5044,8000,9000
|
|
78
|
+
#
|
|
79
|
+
# config_get('bridge_domain_vni', 'member_vni_bd')
|
|
80
|
+
# will get the current bd's mapped to member vni in this case
|
|
81
|
+
# 101-110,120,141-145,180
|
|
82
|
+
#
|
|
83
|
+
# The @bd_ids_list which is created when the BridgeDomainVNI object is
|
|
84
|
+
# initialized which could be 101-110 bd range.
|
|
85
|
+
# hash_map will have 101=>6001,102=>6002...120=>6011,141=>5041...180=>9000
|
|
86
|
+
# And the final_bd_vni hash will be based of the initialized list
|
|
87
|
+
# 101=>6001,102=>6002,103=>6003....110=>6010 only.
|
|
88
|
+
def curr_bd_vni_hash
|
|
89
|
+
final_bd_vni = {}
|
|
90
|
+
curr_vni = config_get('bridge_domain_vni', 'member_vni')
|
|
91
|
+
curr_bd_vni = config_get('bridge_domain_vni', 'member_vni_bd')
|
|
92
|
+
return final_bd_vni if curr_vni.empty? || curr_bd_vni.empty?
|
|
93
|
+
|
|
94
|
+
curr_vni_list = BridgeDomainVNI.string_to_array(curr_vni)
|
|
95
|
+
curr_bd_vni_list = BridgeDomainVNI.string_to_array(curr_bd_vni)
|
|
96
|
+
|
|
97
|
+
hash_map = Hash[curr_bd_vni_list.zip(curr_vni_list.map)]
|
|
98
|
+
@bd_ids_list.each do |bd|
|
|
99
|
+
final_bd_vni[bd.to_i] = hash_map[bd.to_i] if hash_map.key?(bd.to_i)
|
|
100
|
+
end
|
|
101
|
+
final_bd_vni
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# This function will first add bds to the system bridge-domain and then
|
|
105
|
+
# create the bds. If bds already existing then just create. Else add the
|
|
106
|
+
# non added bds to system range first then create all. This is to avoid the
|
|
107
|
+
# idempotency issue as system add command throws error if a bd is already
|
|
108
|
+
# present in the system range.
|
|
109
|
+
def create
|
|
110
|
+
sys_bds_array = BridgeDomainVNI.string_to_array(system_bridge_domain)
|
|
111
|
+
if (@bd_ids_list - sys_bds_array).any?
|
|
112
|
+
add_bds = Utils
|
|
113
|
+
.array_to_str((@bd_ids_list - sys_bds_array), false)
|
|
114
|
+
config_set('bridge_domain_vni', 'system_bridge_domain', oper: 'add',
|
|
115
|
+
bd: add_bds)
|
|
116
|
+
end
|
|
117
|
+
config_set('bridge_domain_vni', 'create', bd: @bd_ids)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def destroy
|
|
121
|
+
bd_vni = curr_bd_vni_hash
|
|
122
|
+
bd_val = bd_vni.keys.join(',')
|
|
123
|
+
vni_val = bd_vni.values.join(',')
|
|
124
|
+
return '' if vni_val.empty?
|
|
125
|
+
config_set('bridge_domain_vni', 'member_vni', bd: bd_val,
|
|
126
|
+
membstate: 'no', membvni: vni_val)
|
|
127
|
+
config_set('bridge_domain_vni', 'vni', state: 'no', vni: vni_val)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
########################################################
|
|
131
|
+
# PROPERTIES #
|
|
132
|
+
########################################################
|
|
133
|
+
|
|
134
|
+
# Bridge-Domain member vni assigning case
|
|
135
|
+
# Not all the bds created or initialized in this class context can have the
|
|
136
|
+
# member vni's mapped. So will get the vnis of the ones which are mapped to
|
|
137
|
+
# the bds.
|
|
138
|
+
# Eg: Suppose the bd mapping is as below on the switch
|
|
139
|
+
# bridge-domain 100,105,107-109,150
|
|
140
|
+
# member vni 5000, 8000, 5007-5008, 7000, 5050
|
|
141
|
+
# If puppet layer tries to get values of 100,105,107 bds as defined in
|
|
142
|
+
# manifest then the final_bd_vni map which is returned will contain only
|
|
143
|
+
# these mappings as below;
|
|
144
|
+
# '5000,8000,5007'
|
|
145
|
+
# This is also to handle the idempotence case, and if any mismatch then set
|
|
146
|
+
# the member_vni
|
|
147
|
+
def member_vni
|
|
148
|
+
bd_vni_hash = curr_bd_vni_hash
|
|
149
|
+
ret_list = []
|
|
150
|
+
@bd_ids_list.each do |bd|
|
|
151
|
+
ret_list << bd_vni_hash[bd]
|
|
152
|
+
end
|
|
153
|
+
Utils.array_to_str(ret_list, false)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# This member_vni mapping will be executed only when the val is not empty
|
|
157
|
+
# else it will be treated as a 'no' cli and executed as required.
|
|
158
|
+
# If the mappings do not match in any fashion then cli normally returns a
|
|
159
|
+
# failure which will be handled.
|
|
160
|
+
# During set of member vni we first see if any bd is mapped to some other
|
|
161
|
+
# vni, if yes then remove that one and apply the new vni.
|
|
162
|
+
# Eg: bridge-domain 100-110
|
|
163
|
+
# member vni 5100-5110
|
|
164
|
+
# Now the manifest is changed to 5100-5105,6106-6110, so hence first
|
|
165
|
+
# 5106-5110 mapping is removed and then 6106-6110 is applied.
|
|
166
|
+
def member_vni=(val)
|
|
167
|
+
val = val.to_s
|
|
168
|
+
Feature.vni_enable
|
|
169
|
+
bd_vni = curr_bd_vni_hash
|
|
170
|
+
if val.empty?
|
|
171
|
+
bd_val = bd_vni.keys.join(',')
|
|
172
|
+
vni_val = bd_vni.values.join(',')
|
|
173
|
+
return '' if vni_val.empty?
|
|
174
|
+
config_set('bridge_domain_vni', 'member_vni', bd: bd_val,
|
|
175
|
+
membstate: 'no', membvni: vni_val)
|
|
176
|
+
config_set('bridge_domain_vni', 'vni', state: 'no', vni: vni_val)
|
|
177
|
+
else
|
|
178
|
+
unless bd_vni.empty?
|
|
179
|
+
inp_vni_list = BridgeDomainVNI.string_to_array(val.to_s)
|
|
180
|
+
inp_bd_vni_hash = Hash[@bd_ids_list.zip(inp_vni_list)]
|
|
181
|
+
|
|
182
|
+
temp_hash = bd_vni.to_a.keep_if { |k, _v| inp_bd_vni_hash.key? k }
|
|
183
|
+
rem_hash = (temp_hash.to_a - inp_bd_vni_hash.to_a).to_h
|
|
184
|
+
|
|
185
|
+
rm_bd = rem_hash.keys.join(',')
|
|
186
|
+
rm_vni = rem_hash.values.join(',')
|
|
187
|
+
config_set('bridge_domain_vni', 'member_vni', bd: rm_bd,
|
|
188
|
+
membstate: 'no', membvni: rm_vni)
|
|
189
|
+
config_set('bridge_domain_vni', 'vni', state: 'no', vni: rm_vni)
|
|
190
|
+
end
|
|
191
|
+
config_set('bridge_domain_vni', 'vni', state: '', vni: val)
|
|
192
|
+
config_set('bridge_domain_vni', 'member_vni', bd: @bd_ids,
|
|
193
|
+
membstate: '', membvni: val)
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def default_member_vni
|
|
198
|
+
config_get_default('bridge_domain_vni', 'member_vni')
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# getter for system bridge-domain
|
|
202
|
+
def system_bridge_domain
|
|
203
|
+
config_get('bridge_domain_vni', 'system_bridge_domain')
|
|
204
|
+
end
|
|
205
|
+
end # Class
|
|
206
|
+
end # Module
|