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,466 @@
|
|
|
1
|
+
#
|
|
2
|
+
# NXAPI implementation of vpc domain class
|
|
3
|
+
#
|
|
4
|
+
# November 2015, Deepak Cherian
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2014-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
|
+
require_relative 'interface'
|
|
22
|
+
require_relative 'fabricpath_global'
|
|
23
|
+
|
|
24
|
+
# Add vpc-specific constants to Cisco namespace
|
|
25
|
+
module Cisco
|
|
26
|
+
# Vpc - node utility class for VTP configuration management
|
|
27
|
+
class Vpc < NodeUtil
|
|
28
|
+
attr_reader :domain
|
|
29
|
+
# Constructor for Vpc
|
|
30
|
+
def initialize(domain_id, instantiate=true)
|
|
31
|
+
@domain = domain_id
|
|
32
|
+
|
|
33
|
+
create if instantiate
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self.domains
|
|
37
|
+
hash = {}
|
|
38
|
+
return hash unless Vpc.enabled
|
|
39
|
+
my_domain = config_get('vpc', 'domain')
|
|
40
|
+
hash[my_domain] = Vpc.new(my_domain, false) unless my_domain.nil?
|
|
41
|
+
hash
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.enabled
|
|
45
|
+
config_get('vpc', 'feature')
|
|
46
|
+
rescue Cisco::CliError => e
|
|
47
|
+
# cmd will syntax reject when feature is not enabled
|
|
48
|
+
raise unless e.clierror =~ /Syntax error/
|
|
49
|
+
return false
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def create
|
|
53
|
+
enable unless Vpc.enabled
|
|
54
|
+
config_set('vpc', 'domain', state: '', domain: @domain)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def destroy
|
|
58
|
+
config_set('vpc', 'feature', state: 'no')
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def enable
|
|
62
|
+
config_set('vpc', 'feature', state: '')
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def set_args_keys_default
|
|
66
|
+
keys = { domain: @domain }
|
|
67
|
+
@get_args = @set_args = keys
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# rubocop:disable Style/AccessorMethodName
|
|
71
|
+
def set_args_keys(hash={})
|
|
72
|
+
set_args_keys_default
|
|
73
|
+
@set_args = @get_args.merge!(hash) unless hash.empty?
|
|
74
|
+
end
|
|
75
|
+
# rubocop:enable Style/AccessorMethodNamefor
|
|
76
|
+
|
|
77
|
+
########################################################
|
|
78
|
+
# PROPERTIES #
|
|
79
|
+
########################################################
|
|
80
|
+
|
|
81
|
+
def auto_recovery
|
|
82
|
+
val = config_get('vpc', 'auto_recovery')
|
|
83
|
+
val.nil? ? false : val
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def auto_recovery=(val)
|
|
87
|
+
set_args_keys(state: val ? '' : 'no')
|
|
88
|
+
config_set('vpc', 'auto_recovery', @set_args)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def default_auto_recovery
|
|
92
|
+
config_get_default('vpc', 'auto_recovery')
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def auto_recovery_reload_delay
|
|
96
|
+
config_get('vpc', 'auto_recovery_reload_delay')
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def auto_recovery_reload_delay=(val)
|
|
100
|
+
set_args_keys(delay: val)
|
|
101
|
+
config_set('vpc', 'auto_recovery_reload_delay', @set_args)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def default_auto_recovery_reload_delay
|
|
105
|
+
config_get_default('vpc', 'auto_recovery_reload_delay')
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def delay_restore
|
|
109
|
+
config_get('vpc', 'delay_restore')
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def delay_restore=(delay)
|
|
113
|
+
set_args_keys(delay: delay)
|
|
114
|
+
config_set('vpc', 'delay_restore', @set_args)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def default_delay_restore
|
|
118
|
+
config_get_default('vpc', 'delay_restore')
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def delay_restore_interface_vlan
|
|
122
|
+
config_get('vpc', 'delay_restore_interface_vlan')
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def delay_restore_interface_vlan=(delay)
|
|
126
|
+
set_args_keys(delay: delay)
|
|
127
|
+
config_set('vpc', 'delay_restore_interface_vlan', @set_args)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def default_delay_restore_interface_vlan
|
|
131
|
+
config_get_default('vpc', 'delay_restore_interface_vlan')
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def dual_active_exclude_interface_vlan_bridge_domain
|
|
135
|
+
config_get('vpc', 'dual_active_exclude_interface_vlan_bridge_domain')
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def dual_active_exclude_interface_vlan_bridge_domain=(val)
|
|
139
|
+
set_args_keys(state: val ? '' : 'no', range: val)
|
|
140
|
+
config_set('vpc', 'dual_active_exclude_interface_vlan_bridge_domain',
|
|
141
|
+
@set_args)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def default_dual_active_exclude_interface_vlan_bridge_domain
|
|
145
|
+
config_get_default('vpc',
|
|
146
|
+
'dual_active_exclude_interface_vlan_bridge_domain')
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def fabricpath_emulated_switch_id
|
|
150
|
+
config_get('vpc', 'fabricpath_emulated_switch_id')
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def fabricpath_emulated_switch_id=(switch_id)
|
|
154
|
+
FabricpathGlobal.fabricpath_enable
|
|
155
|
+
set_args_keys(state: switch_id ? '' : 'no',
|
|
156
|
+
swid: switch_id ? switch_id : '')
|
|
157
|
+
config_set('vpc', 'fabricpath_emulated_switch_id', @set_args)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def default_fabricpath_emulated_switch_id
|
|
161
|
+
config_get_default('vpc', 'fabricpath_emulated_switch_id')
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# Note: fabricpath_multicast_load_balance also requires
|
|
165
|
+
# fabricpath_emulated_switch_id before it will be functional but it
|
|
166
|
+
# will config & nvgen independently.
|
|
167
|
+
def fabricpath_multicast_load_balance
|
|
168
|
+
config_get('vpc', 'fabricpath_multicast_load_balance')
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def fabricpath_multicast_load_balance=(state)
|
|
172
|
+
FabricpathGlobal.fabricpath_enable
|
|
173
|
+
set_args_keys(state: state ? '' : 'no')
|
|
174
|
+
config_set('vpc', 'fabricpath_multicast_load_balance', @set_args)
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
def default_fabricpath_multicast_load_balance
|
|
178
|
+
config_get_default('vpc', 'fabricpath_multicast_load_balance')
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def graceful_consistency_check
|
|
182
|
+
val = config_get('vpc', 'graceful_consistency_check')
|
|
183
|
+
val.nil? ? false : val
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def graceful_consistency_check=(val)
|
|
187
|
+
set_args_keys(state: val ? '' : 'no')
|
|
188
|
+
config_set('vpc', 'graceful_consistency_check', @set_args)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def default_graceful_consistency_check
|
|
192
|
+
config_get_default('vpc', 'graceful_consistency_check')
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def layer3_peer_routing
|
|
196
|
+
config_get('vpc', 'layer3_peer_routing')
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def layer3_peer_routing=(val)
|
|
200
|
+
return if val == layer3_peer_routing
|
|
201
|
+
set_args_keys(state: val ? '' : 'no')
|
|
202
|
+
# This requires peer_gateway to be set first
|
|
203
|
+
self.peer_gateway = true if !peer_gateway && val
|
|
204
|
+
config_set('vpc', 'layer3_peer_routing', @set_args)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def default_layer3_peer_routing
|
|
208
|
+
config_get_default('vpc', 'layer3_peer_routing')
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# peer keepalive
|
|
212
|
+
def peer_keepalive_dest
|
|
213
|
+
config_get('vpc', 'peer_keepalive_dest')
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def default_peer_keepalive_dest
|
|
217
|
+
config_get_default('vpc', 'peer_keepalive_dest')
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
def peer_keepalive_hold_timeout
|
|
221
|
+
config_get('vpc', 'peer_keepalive_hold_timeout')
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def default_peer_keepalive_hold_timeout
|
|
225
|
+
config_get_default('vpc', 'peer_keepalive_hold_timeout')
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
def peer_keepalive_interval
|
|
229
|
+
config_get('vpc', 'peer_keepalive_interval')
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def default_peer_keepalive_interval
|
|
233
|
+
config_get_default('vpc', 'peer_keepalive_interval')
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def peer_keepalive_interval_timeout
|
|
237
|
+
config_get('vpc', 'peer_keepalive_timeout')
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def default_peer_keepalive_interval_timeout
|
|
241
|
+
config_get_default('vpc', 'peer_keepalive_timeout')
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def peer_keepalive_precedence
|
|
245
|
+
config_get('vpc', 'peer_keepalive_precedence')
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
def default_peer_keepalive_precedence
|
|
249
|
+
config_get_default('vpc', 'peer_keepalive_precedence')
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def peer_keepalive_src
|
|
253
|
+
config_get('vpc', 'peer_keepalive_src')
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
def default_peer_keepalive_src
|
|
257
|
+
config_get_default('vpc', 'peer_keepalive_src')
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def peer_keepalive_udp_port
|
|
261
|
+
config_get('vpc', 'peer_keepalive_udp_port')
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
def default_peer_keepalive_udp_port
|
|
265
|
+
config_get_default('vpc', 'peer_keepalive_udp_port')
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
def peer_keepalive_vrf
|
|
269
|
+
config_get('vpc', 'peer_keepalive_vrf')
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
def default_peer_keepalive_vrf
|
|
273
|
+
config_get_default('vpc', 'peer_keepalive_vrf')
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
# common setter
|
|
277
|
+
def peer_keepalive_set(dest, src, udp_port, vrf, interval, timeout,
|
|
278
|
+
prec, hold_timeout)
|
|
279
|
+
set_args_keys(dest: dest, src: src, port_num: udp_port, vrf: vrf,
|
|
280
|
+
interval: interval, timeout: timeout,
|
|
281
|
+
precedence: prec, hold_timeout: hold_timeout)
|
|
282
|
+
config_set('vpc', 'peer_keepalive_set', @set_args)
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
def peer_gateway
|
|
286
|
+
config_get('vpc', 'peer_gateway')
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
def peer_gateway=(val)
|
|
290
|
+
set_args_keys(state: val ? '' : 'no')
|
|
291
|
+
# disable layer3 routing first
|
|
292
|
+
self.layer3_peer_routing = false if !val && layer3_peer_routing
|
|
293
|
+
config_set('vpc', 'peer_gateway', @set_args)
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
def peer_switch
|
|
297
|
+
config_get('vpc', 'peer_switch')
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
def peer_switch=(val)
|
|
301
|
+
set_args_keys(state: val ? '' : 'no')
|
|
302
|
+
config_set('vpc', 'peer_switch', @set_args)
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def arp_synchronize
|
|
306
|
+
config_get('vpc', 'arp_synchronize')
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
def arp_synchronize=(val)
|
|
310
|
+
set_args_keys(state: val ? '' : 'no')
|
|
311
|
+
config_set('vpc', 'arp_synchronize', @set_args)
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
def nd_synchronize
|
|
315
|
+
config_get('vpc', 'nd_synchronize')
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
def nd_synchronize=(val)
|
|
319
|
+
set_args_keys(state: val ? '' : 'no')
|
|
320
|
+
config_set('vpc', 'nd_synchronize', @set_args)
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
def default_peer_gateway
|
|
324
|
+
config_get_default('vpc', 'peer_gateway')
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
def default_peer_switch
|
|
328
|
+
config_get_default('vpc', 'peer_switch')
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
def default_arp_synchronize
|
|
332
|
+
config_get_default('vpc', 'arp_synchronize')
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
def default_nd_synchronize
|
|
336
|
+
config_get_default('vpc', 'nd_synchronize')
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
def peer_gateway_exclude_bridge_domain
|
|
340
|
+
config_get('vpc', 'peer_gateway_exclude_bridge_domain')
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
def peer_gateway_exclude_bridge_domain=(val)
|
|
344
|
+
set_args_keys(state: val ? '' : 'no', range: val)
|
|
345
|
+
config_set('vpc', 'peer_gateway_exclude_bridge_domain', @set_args)
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
def default_peer_gateway_exclude_bridge_domain
|
|
349
|
+
config_get_default('vpc', 'peer_gateway_exclude_bridge_domain')
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
def peer_gateway_exclude_vlan
|
|
353
|
+
config_get('vpc', 'peer_gateway_exclude_vlan')
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
def peer_gateway_exclude_vlan=(val)
|
|
357
|
+
set_args_keys(state: val ? '' : 'no', range: val)
|
|
358
|
+
config_set('vpc', 'peer_gateway_exclude_vlan', @set_args)
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
def default_peer_gateway_exclude_vlan
|
|
362
|
+
config_get_default('vpc', 'peer_gateway_exclude_vlan')
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
def port_channel_limit
|
|
366
|
+
val = config_get('vpc', 'port_channel_limit')
|
|
367
|
+
val.nil? ? false : val
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
def port_channel_limit=(val)
|
|
371
|
+
set_args_keys(state: val ? '' : 'no')
|
|
372
|
+
# This requires fabricpath_emulated_switch_id to be set first
|
|
373
|
+
fail 'fabricpath_switch_id configuration is required in the vPC domain' if
|
|
374
|
+
!fabricpath_emulated_switch_id && !val
|
|
375
|
+
config_set('vpc', 'port_channel_limit', @set_args)
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
def default_port_channel_limit
|
|
379
|
+
config_get_default('vpc', 'port_channel_limit')
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
def role_priority
|
|
383
|
+
config_get('vpc', 'role_priority')
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
def role_priority=(priority)
|
|
387
|
+
set_args_keys(priority: priority)
|
|
388
|
+
config_set('vpc', 'role_priority', @set_args)
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
def default_role_priority
|
|
392
|
+
config_get_default('vpc', 'role_priority')
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
def self_isolation
|
|
396
|
+
val = config_get('vpc', 'self_isolation')
|
|
397
|
+
val.nil? ? false : val
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
def self_isolation=(val)
|
|
401
|
+
set_args_keys(state: val ? '' : 'no')
|
|
402
|
+
config_set('vpc', 'self_isolation', @set_args)
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
def default_self_isolation
|
|
406
|
+
config_get_default('vpc', 'self_isolation')
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
def shutdown
|
|
410
|
+
config_get('vpc', 'shutdown')
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
def shutdown=(val)
|
|
414
|
+
set_args_keys(state: val ? '' : 'no')
|
|
415
|
+
config_set('vpc', 'shutdown', @set_args)
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
def default_shutdown
|
|
419
|
+
config_get_default('vpc', 'shutdown')
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
def system_mac
|
|
423
|
+
config_get('vpc', 'system_mac')
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
def system_mac=(mac_addr)
|
|
427
|
+
set_args_keys(state: mac_addr.empty? ? 'no' : '', mac_addr: mac_addr)
|
|
428
|
+
config_set('vpc', 'system_mac', @set_args)
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
def default_system_mac
|
|
432
|
+
config_get_default('vpc', 'system_mac')
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
def system_priority
|
|
436
|
+
config_get('vpc', 'system_priority')
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
def system_priority=(priority)
|
|
440
|
+
set_args_keys(priority: priority)
|
|
441
|
+
config_set('vpc', 'system_priority', @set_args)
|
|
442
|
+
end
|
|
443
|
+
|
|
444
|
+
def default_system_priority
|
|
445
|
+
config_get_default('vpc', 'system_priority')
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
def track
|
|
449
|
+
config_get('vpc', 'track')
|
|
450
|
+
end
|
|
451
|
+
|
|
452
|
+
def track=(val)
|
|
453
|
+
unless val.nil?
|
|
454
|
+
fail ArgumentError, 'track must be an Integer' unless
|
|
455
|
+
val.is_a?(Integer)
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
set_args_keys(state: (val == track) ? 'no' : '', val: val)
|
|
459
|
+
config_set('vpc', 'track', @set_args)
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
def default_track
|
|
463
|
+
config_get_default('vpc', 'track')
|
|
464
|
+
end
|
|
465
|
+
end # class Vpc
|
|
466
|
+
end # module Cisco
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# VRF provider class
|
|
2
|
+
#
|
|
3
|
+
# Jie Yang, July 2015
|
|
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
|
+
# Vrf - node utility class for VRF configuration management
|
|
24
|
+
class Vrf < NodeUtil
|
|
25
|
+
attr_reader :name
|
|
26
|
+
|
|
27
|
+
def initialize(name, instantiate=true)
|
|
28
|
+
fail TypeError unless name.is_a?(String)
|
|
29
|
+
@name = name.downcase.strip
|
|
30
|
+
create if instantiate
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def to_s
|
|
34
|
+
"VRF #{@name}"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.vrfs
|
|
38
|
+
hash = {}
|
|
39
|
+
vrf_list = config_get('vrf', 'all_vrfs')
|
|
40
|
+
return hash if vrf_list.nil?
|
|
41
|
+
|
|
42
|
+
vrf_list.each do |id|
|
|
43
|
+
id = id.downcase.strip
|
|
44
|
+
hash[id] = Vrf.new(id, false)
|
|
45
|
+
end
|
|
46
|
+
hash
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def create
|
|
50
|
+
config_set('vrf', 'create', vrf: @name)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def destroy
|
|
54
|
+
config_set('vrf', 'destroy', vrf: @name)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
########################################################
|
|
58
|
+
# PROPERTIES #
|
|
59
|
+
########################################################
|
|
60
|
+
|
|
61
|
+
def description
|
|
62
|
+
config_get('vrf', 'description', vrf: @name)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def description=(desc)
|
|
66
|
+
fail TypeError unless desc.is_a?(String)
|
|
67
|
+
desc.strip!
|
|
68
|
+
no_cmd = desc.empty? ? 'no' : ''
|
|
69
|
+
config_set('vrf', 'description', vrf: @name, state: no_cmd, desc: desc)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def default_description
|
|
73
|
+
config_get_default('vrf', 'description')
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def mhost_ipv4_default_interface
|
|
77
|
+
config_get('vrf', 'mhost_default_interface', vrf: @name, afi: 'ipv4')
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def mhost_ipv4_default_interface=(val)
|
|
81
|
+
mhost_default_interface_setter_helper('ipv4', val)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def default_mhost_ipv4_default_interface
|
|
85
|
+
config_get_default('vrf', 'mhost_default_interface')
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def mhost_ipv6_default_interface
|
|
89
|
+
config_get('vrf', 'mhost_default_interface', vrf: @name, afi: 'ipv6')
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def mhost_ipv6_default_interface=(val)
|
|
93
|
+
mhost_default_interface_setter_helper('ipv6', val)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def default_mhost_ipv6_default_interface
|
|
97
|
+
config_get_default('vrf', 'mhost_default_interface')
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def mhost_default_interface_setter_helper(afi, val)
|
|
101
|
+
val.strip!
|
|
102
|
+
no_cmd = val.empty? ? 'no' : ''
|
|
103
|
+
config_set('vrf', 'mhost_default_interface', vrf: @name,
|
|
104
|
+
state: no_cmd, afi: afi, intf: val)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def remote_route_filtering
|
|
108
|
+
config_get('vrf', 'remote_route_filtering', vrf: @name)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def remote_route_filtering=(val)
|
|
112
|
+
no_cmd = val ? 'no' : ''
|
|
113
|
+
config_set('vrf', 'remote_route_filtering', vrf: @name,
|
|
114
|
+
state: no_cmd, remote_route_filtering: val)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def default_remote_route_filtering
|
|
118
|
+
config_get_default('vrf', 'remote_route_filtering')
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def shutdown
|
|
122
|
+
config_get('vrf', 'shutdown', vrf: @name)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def shutdown=(val)
|
|
126
|
+
no_cmd = (val) ? '' : 'no'
|
|
127
|
+
config_set('vrf', 'shutdown', vrf: @name, state: no_cmd)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def default_shutdown
|
|
131
|
+
config_get_default('vrf', 'shutdown')
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# route_distinguisher
|
|
135
|
+
# Note that this property is supported by both bgp and vrf providers.
|
|
136
|
+
def route_distinguisher
|
|
137
|
+
config_get('vrf', 'route_distinguisher', vrf: @name)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def route_distinguisher=(rd)
|
|
141
|
+
# feature bgp and nv overlay required for rd cli in NXOS
|
|
142
|
+
if platform == :nexus
|
|
143
|
+
Feature.bgp_enable
|
|
144
|
+
Feature.nv_overlay_enable if Feature.nv_overlay_supported?
|
|
145
|
+
Feature.nv_overlay_evpn_enable if Feature.nv_overlay_evpn_supported?
|
|
146
|
+
end
|
|
147
|
+
if rd == default_route_distinguisher
|
|
148
|
+
state = 'no'
|
|
149
|
+
# I2 images require an rd for removal
|
|
150
|
+
rd = route_distinguisher
|
|
151
|
+
return if rd.to_s.empty?
|
|
152
|
+
else
|
|
153
|
+
state = ''
|
|
154
|
+
end
|
|
155
|
+
config_set('vrf', 'route_distinguisher', state: state, vrf: @name, rd: rd)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def default_route_distinguisher
|
|
159
|
+
config_get_default('vrf', 'route_distinguisher')
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Vni (Getter/Setter/Default)
|
|
163
|
+
def vni
|
|
164
|
+
config_get('vrf', 'vni', vrf: @name)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def vni=(id)
|
|
168
|
+
Feature.vn_segment_vlan_based_enable if platform == :nexus
|
|
169
|
+
no_cmd = (id) ? '' : 'no'
|
|
170
|
+
id = (id) ? id : vni
|
|
171
|
+
config_set('vrf', 'vni', vrf: @name, state: no_cmd, id: id)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def default_vni
|
|
175
|
+
config_get_default('vrf', 'vni')
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def vpn_id
|
|
179
|
+
config_get('vrf', 'vpn_id', vrf: @name)
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def vpn_id=(val)
|
|
183
|
+
val.strip!
|
|
184
|
+
no_cmd = val.empty? ? 'no' : ''
|
|
185
|
+
config_set('vrf', 'vpn_id', vrf: @name, state: no_cmd, vpnid: val)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def default_vpn_id
|
|
189
|
+
config_get_default('vrf', 'vpn_id')
|
|
190
|
+
end
|
|
191
|
+
end # class
|
|
192
|
+
end # module
|