cisco_node_utils 1.2.0 → 1.3.0
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 +4 -4
- data/.gitignore +2 -0
- data/.rspec +2 -0
- data/.rubocop.yml +13 -0
- data/.travis.yml +4 -1
- data/CHANGELOG.md +81 -2
- data/CONTRIBUTING.md +2 -17
- data/Gemfile +5 -0
- data/README.md +92 -47
- data/Rakefile +23 -1
- data/bin/git/hooks/hook_lib +7 -0
- data/bin/git/hooks/pre-commit/check_unstaged_changes +18 -0
- data/bin/git/hooks/pre-commit/rubocop +7 -2
- data/bin/git/hooks/pre-commit/validate-diffs +18 -4
- data/bin/git/hooks/pre-commit/validate-yaml +18 -0
- data/bin/git/update-hooks +64 -6
- data/cisco_node_utils.gemspec +9 -6
- data/docs/README-develop-best-practices.md +149 -50
- data/docs/README-develop-node-utils-APIs.md +92 -42
- data/docs/README-maintainers.md +7 -4
- data/docs/README-test-execution.md +57 -0
- data/docs/cisco_node_utils.yaml.example +30 -0
- data/docs/template-router.rb +4 -0
- data/ext/mkrf_conf.rb +63 -0
- data/lib/.rubocop.yml +2 -2
- data/lib/cisco_node_utils.rb +5 -0
- data/lib/cisco_node_utils/aaa_authentication_login.rb +5 -6
- data/lib/cisco_node_utils/aaa_authorization_service.rb +1 -1
- data/lib/cisco_node_utils/ace.rb +165 -12
- data/lib/cisco_node_utils/acl.rb +2 -1
- data/lib/cisco_node_utils/bgp.rb +184 -21
- data/lib/cisco_node_utils/bgp_af.rb +94 -249
- data/lib/cisco_node_utils/bgp_neighbor.rb +94 -14
- data/lib/cisco_node_utils/bgp_neighbor_af.rb +75 -8
- data/lib/cisco_node_utils/bridge_domain.rb +183 -0
- data/lib/cisco_node_utils/bridge_domain_vni.rb +206 -0
- data/lib/cisco_node_utils/cisco_cmn_utils.rb +85 -2
- data/lib/cisco_node_utils/client.rb +35 -0
- data/lib/cisco_node_utils/client/client.rb +234 -0
- data/lib/cisco_node_utils/client/grpc.rb +33 -0
- data/lib/cisco_node_utils/client/grpc/client.rb +311 -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/nxapi.rb +31 -0
- data/lib/cisco_node_utils/client/nxapi/client.rb +305 -0
- data/lib/cisco_node_utils/client/utils.rb +164 -0
- data/lib/cisco_node_utils/cmd_ref/README_YAML.md +222 -254
- data/lib/cisco_node_utils/cmd_ref/aaa_auth_login_service.yaml +11 -8
- data/lib/cisco_node_utils/cmd_ref/aaa_authentication_login.yaml +22 -15
- data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +11 -8
- data/lib/cisco_node_utils/cmd_ref/acl.yaml +21 -16
- data/lib/cisco_node_utils/cmd_ref/bgp.yaml +239 -109
- data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +114 -55
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +76 -52
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +106 -62
- data/lib/cisco_node_utils/cmd_ref/bridge_domain.yaml +71 -0
- data/lib/cisco_node_utils/cmd_ref/bridge_domain_vni.yaml +33 -0
- data/lib/cisco_node_utils/cmd_ref/dnsclient.yaml +35 -14
- data/lib/cisco_node_utils/cmd_ref/encapsulation.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_vni.yaml +23 -17
- data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +94 -83
- data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +22 -17
- data/lib/cisco_node_utils/cmd_ref/feature.yaml +76 -26
- data/lib/cisco_node_utils/cmd_ref/images.yaml +3 -2
- data/lib/cisco_node_utils/cmd_ref/interface.yaml +381 -153
- data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +21 -11
- data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +21 -21
- data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +30 -21
- data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +18 -13
- data/lib/cisco_node_utils/cmd_ref/inventory.yaml +26 -31
- 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 +17 -6
- data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +10 -3
- data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +17 -5
- data/lib/cisco_node_utils/cmd_ref/ospf.yaml +33 -29
- data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +12 -10
- data/lib/cisco_node_utils/cmd_ref/pim.yaml +16 -19
- data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +40 -25
- data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +17 -12
- data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +71 -35
- data/lib/cisco_node_utils/cmd_ref/radius_server_group.yaml +10 -5
- data/lib/cisco_node_utils/cmd_ref/show_system.yaml +6 -2
- data/lib/cisco_node_utils/cmd_ref/show_version.yaml +47 -43
- data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +13 -11
- data/lib/cisco_node_utils/cmd_ref/snmp_group.yaml +4 -2
- data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +23 -21
- data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +26 -22
- data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +19 -17
- data/lib/cisco_node_utils/cmd_ref/snmpnotification.yaml +18 -6
- data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +234 -0
- data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +24 -9
- data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +5 -3
- data/lib/cisco_node_utils/cmd_ref/system.yaml +4 -3
- data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +22 -20
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_group.yaml +27 -15
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +45 -16
- data/lib/cisco_node_utils/cmd_ref/vdc.yaml +21 -11
- data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +3 -2
- data/lib/cisco_node_utils/cmd_ref/vlan.yaml +60 -32
- data/lib/cisco_node_utils/cmd_ref/vpc.yaml +118 -101
- data/lib/cisco_node_utils/cmd_ref/vrf.yaml +54 -58
- data/lib/cisco_node_utils/cmd_ref/vrf_af.yaml +118 -0
- data/lib/cisco_node_utils/cmd_ref/vtp.yaml +19 -25
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +28 -18
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +34 -17
- data/lib/cisco_node_utils/cmd_ref/yum.yaml +6 -4
- data/lib/cisco_node_utils/command_reference.rb +261 -142
- data/lib/cisco_node_utils/constants.rb +33 -0
- data/lib/cisco_node_utils/encapsulation.rb +112 -0
- data/lib/cisco_node_utils/environment.rb +102 -0
- data/lib/cisco_node_utils/evpn_vni.rb +5 -3
- data/lib/cisco_node_utils/exceptions.rb +111 -0
- data/lib/cisco_node_utils/fabricpath_global.rb +52 -35
- data/lib/cisco_node_utils/fabricpath_topology.rb +44 -57
- data/lib/cisco_node_utils/feature.rb +165 -3
- data/lib/cisco_node_utils/interface.rb +1051 -260
- data/lib/cisco_node_utils/interface_channel_group.rb +11 -10
- data/lib/cisco_node_utils/interface_ospf.rb +1 -2
- data/lib/cisco_node_utils/interface_portchannel.rb +4 -12
- data/lib/cisco_node_utils/interface_service_vni.rb +7 -7
- data/lib/cisco_node_utils/itd_device_group.rb +248 -0
- data/lib/cisco_node_utils/itd_device_group_node.rb +144 -0
- data/lib/cisco_node_utils/itd_service.rb +523 -0
- data/lib/cisco_node_utils/logger.rb +75 -0
- data/lib/cisco_node_utils/node.rb +62 -192
- data/lib/cisco_node_utils/node_util.rb +56 -10
- data/lib/cisco_node_utils/overlay_global.rb +2 -2
- data/lib/cisco_node_utils/pim.rb +2 -13
- data/lib/cisco_node_utils/pim_group_list.rb +1 -1
- data/lib/cisco_node_utils/pim_rp_address.rb +1 -1
- data/lib/cisco_node_utils/platform.rb +52 -21
- data/lib/cisco_node_utils/portchannel_global.rb +89 -19
- data/lib/cisco_node_utils/radius_server.rb +168 -37
- data/lib/cisco_node_utils/router_ospf.rb +20 -35
- data/lib/cisco_node_utils/router_ospf_vrf.rb +4 -4
- data/lib/cisco_node_utils/snmpserver.rb +1 -6
- data/lib/cisco_node_utils/snmpuser.rb +6 -4
- data/lib/cisco_node_utils/stp_global.rb +676 -0
- data/lib/cisco_node_utils/syslog_server.rb +77 -18
- data/lib/cisco_node_utils/syslog_settings.rb +1 -1
- data/lib/cisco_node_utils/tacacs_server_group.rb +8 -4
- data/lib/cisco_node_utils/tacacs_server_host.rb +115 -25
- data/lib/cisco_node_utils/vdc.rb +12 -0
- data/lib/cisco_node_utils/version.rb +1 -1
- data/lib/cisco_node_utils/vlan.rb +147 -29
- data/lib/cisco_node_utils/vpc.rb +55 -3
- data/lib/cisco_node_utils/vrf.rb +72 -11
- data/lib/cisco_node_utils/vrf_af.rb +114 -29
- data/lib/cisco_node_utils/vtp.rb +34 -52
- data/lib/cisco_node_utils/vxlan_vtep.rb +34 -8
- data/lib/cisco_node_utils/vxlan_vtep_vni.rb +36 -4
- 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 +263 -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 +75 -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 +2 -2
- data/tests/CSCuxdublin-1.0.0-7.0.3.I3.1.lib32_n9000.rpm +0 -0
- data/tests/basetest.rb +96 -36
- data/tests/ciscotest.rb +220 -12
- data/tests/cmd_config.yaml +71 -49
- data/tests/cmd_config_invalid.yaml +1 -1
- data/tests/test_aaa_authentication_login.rb +1 -0
- data/tests/test_aaa_authentication_login_service.rb +9 -0
- data/tests/test_aaa_authorization_service.rb +173 -367
- data/tests/test_ace.rb +171 -100
- data/tests/test_acl.rb +10 -1
- data/tests/test_bgp_af.rb +395 -728
- data/tests/test_bgp_neighbor.rb +274 -115
- data/tests/test_bgp_neighbor_af.rb +178 -77
- data/tests/test_bridge_domain.rb +191 -0
- data/tests/test_bridge_domain_vni.rb +116 -0
- data/tests/test_client_utils.rb +111 -0
- data/tests/test_command_config.rb +9 -5
- data/tests/test_command_reference.rb +380 -102
- data/tests/test_dns_domain.rb +13 -3
- data/tests/test_domain_name.rb +13 -3
- data/tests/test_encapsulation.rb +77 -0
- data/tests/test_evpn_vni.rb +25 -7
- data/tests/test_fabricpath_global.rb +167 -163
- data/tests/test_fabricpath_topology.rb +12 -33
- data/tests/test_feature.rb +215 -0
- data/tests/test_grpc.rb +166 -0
- data/tests/test_interface.rb +585 -344
- data/tests/test_interface_bdi.rb +80 -0
- data/tests/test_interface_channel_group.rb +6 -3
- data/tests/test_interface_ospf.rb +26 -24
- data/tests/test_interface_portchannel.rb +1 -0
- data/tests/test_interface_private_vlan.rb +724 -0
- data/tests/test_interface_service_vni.rb +37 -66
- data/tests/test_interface_svi.rb +98 -101
- data/tests/test_interface_switchport.rb +419 -549
- 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 +298 -0
- data/tests/test_logger.rb +43 -0
- data/tests/test_name_server.rb +11 -2
- data/tests/test_node.rb +16 -75
- data/tests/test_node_ext.rb +174 -163
- data/tests/test_node_util.rb +119 -0
- data/tests/test_ntp_config.rb +5 -1
- data/tests/test_ntp_server.rb +2 -2
- data/tests/test_nxapi.rb +221 -0
- data/tests/test_overlay_global.rb +47 -38
- data/tests/test_pim.rb +2 -0
- data/tests/test_pim_group_list.rb +2 -0
- data/tests/test_pim_rp_address.rb +2 -0
- data/tests/test_platform.rb +86 -39
- data/tests/test_portchannel_global.rb +211 -135
- data/tests/test_radius_global.rb +13 -5
- data/tests/test_radius_server.rb +256 -104
- data/tests/test_radius_server_group.rb +2 -0
- data/tests/test_router_bgp.rb +781 -485
- data/tests/test_router_ospf.rb +26 -103
- data/tests/test_router_ospf_vrf.rb +52 -57
- data/tests/test_snmp_notification_receiver.rb +2 -0
- data/tests/test_snmpcommunity.rb +2 -0
- data/tests/test_snmpgroup.rb +2 -0
- data/tests/test_snmpnotification.rb +40 -21
- data/tests/test_snmpserver.rb +2 -0
- data/tests/test_snmpuser.rb +2 -0
- data/tests/test_stp_global.rb +563 -0
- data/tests/test_syslog_server.rb +32 -8
- data/tests/test_syslog_settings.rb +22 -9
- data/tests/test_tacacs_server.rb +32 -27
- data/tests/test_tacacs_server_group.rb +100 -45
- data/tests/test_tacacs_server_host.rb +135 -43
- data/tests/test_vdc.rb +2 -16
- data/tests/test_vlan.rb +106 -54
- data/tests/test_vlan_mt_full.rb +11 -21
- data/tests/test_vlan_private.rb +669 -0
- data/tests/test_vpc.rb +312 -159
- data/tests/test_vrf.rb +122 -113
- data/tests/test_vrf_af.rb +238 -0
- data/tests/test_vtp.rb +58 -102
- data/tests/test_vxlan_vtep.rb +38 -17
- data/tests/test_vxlan_vtep_vni.rb +61 -9
- data/tests/test_yum.rb +49 -25
- metadata +122 -36
- data/lib/cisco_node_utils/cmd_ref/fex.yaml +0 -9
- data/lib/cisco_node_utils/cmd_ref/vni.yaml +0 -76
- data/lib/cisco_node_utils/vni.rb +0 -227
- data/tests/test_vni.rb +0 -106
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
# vni
|
|
2
|
-
---
|
|
3
|
-
_exclude: [/N(5|6)/]
|
|
4
|
-
all_vnis:
|
|
5
|
-
multiple:
|
|
6
|
-
/N7/:
|
|
7
|
-
# MT-full only
|
|
8
|
-
config_get: 'show vni'
|
|
9
|
-
config_get_token: '/^(\d+)\s/'
|
|
10
|
-
/N(3|9)/:
|
|
11
|
-
# MT-lite only
|
|
12
|
-
config_get: 'show running vlan'
|
|
13
|
-
config_get_token: '/vn-segment (\d+)/'
|
|
14
|
-
|
|
15
|
-
bridge_domain:
|
|
16
|
-
# MT-full only
|
|
17
|
-
config_get: 'show vni'
|
|
18
|
-
config_get_token: [ '/^%d\s+\S+\s+(\d+)/' ]
|
|
19
|
-
config_set: ['bridge-domain <domain>', '<state> member vni <vni>', 'end']
|
|
20
|
-
default_value: ~
|
|
21
|
-
|
|
22
|
-
bridge_domain_activate:
|
|
23
|
-
config_set: ['<state> system bridge-domain add <domain>', 'end']
|
|
24
|
-
|
|
25
|
-
create:
|
|
26
|
-
config_set: ['vni <vni>' , 'end']
|
|
27
|
-
|
|
28
|
-
destroy:
|
|
29
|
-
/N7/:
|
|
30
|
-
# MT-full only
|
|
31
|
-
config_set: 'no vni <vni>'
|
|
32
|
-
/N(3|9)/:
|
|
33
|
-
# MT-lite only
|
|
34
|
-
config_set: ['vlan <vlan>', 'no vn-segment <vni> ; end']
|
|
35
|
-
|
|
36
|
-
encap_dot1q:
|
|
37
|
-
config_set: ["encapsulation profile vni %s", "%s dot1q %s vni %s", "end"]
|
|
38
|
-
default_value: ~
|
|
39
|
-
|
|
40
|
-
feature:
|
|
41
|
-
config_get: 'show running | i ^feature'
|
|
42
|
-
/N7/:
|
|
43
|
-
# MT-Full only
|
|
44
|
-
config_get_token: '/^feature vni$/'
|
|
45
|
-
config_set: 'feature vni'
|
|
46
|
-
/N(3|9)/:
|
|
47
|
-
# MT-lite only
|
|
48
|
-
config_get_token: '/^feature vn-segment-vlan-based$/'
|
|
49
|
-
config_set: 'feature vn-segment-vlan-based'
|
|
50
|
-
|
|
51
|
-
mt_full_support:
|
|
52
|
-
# This is only used for determining support for Multi-Tenancy Full
|
|
53
|
-
kind: boolean
|
|
54
|
-
/N7/:
|
|
55
|
-
default_only: true
|
|
56
|
-
else:
|
|
57
|
-
# this feature is always off on these platforms and cannot be changed
|
|
58
|
-
default_only: false
|
|
59
|
-
|
|
60
|
-
mt_lite_support:
|
|
61
|
-
# This is only used for determining support for Multi-Tenancy Lite
|
|
62
|
-
kind: boolean
|
|
63
|
-
/N(3|9)/:
|
|
64
|
-
default_only: true
|
|
65
|
-
else:
|
|
66
|
-
# this feature is always off on these platforms and cannot be changed
|
|
67
|
-
default_only: false
|
|
68
|
-
|
|
69
|
-
shutdown:
|
|
70
|
-
# MT-Full only
|
|
71
|
-
/N7/:
|
|
72
|
-
kind: boolean
|
|
73
|
-
config_get: 'show vni'
|
|
74
|
-
config_get_token: '/^<vni> +Down/'
|
|
75
|
-
config_set: ['vni <vni>', '<state> shutdown', 'end']
|
|
76
|
-
default_value: false
|
data/lib/cisco_node_utils/vni.rb
DELETED
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
# VNI provider class
|
|
2
|
-
#
|
|
3
|
-
# Deepak Cherian, September 2015
|
|
4
|
-
#
|
|
5
|
-
# Copyright (c) 2014-2016 Cisco and/or its affiliates.
|
|
6
|
-
#
|
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
-
# you may not use this file except in compliance with the License.
|
|
9
|
-
# You may obtain a copy of the License at
|
|
10
|
-
#
|
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
#
|
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
-
# See the License for the specific language governing permissions and
|
|
17
|
-
# limitations under the License.
|
|
18
|
-
#
|
|
19
|
-
# ----
|
|
20
|
-
# This provider supports both MT-full (N7K) and MT-lite (N3K/N9K),
|
|
21
|
-
# each of which have their own feature requirements and clis.
|
|
22
|
-
#
|
|
23
|
-
# MT-full cli: MT-lite cli:
|
|
24
|
-
# feature nv overlay feature nv overlay
|
|
25
|
-
# feature nvi feature vn-segment-vlan-based
|
|
26
|
-
# system bridge-domain 100-113
|
|
27
|
-
# bridge-domain 100
|
|
28
|
-
# member vni 100
|
|
29
|
-
# vni 10001 vlan 100
|
|
30
|
-
# shutdown vn-segment 10001
|
|
31
|
-
#
|
|
32
|
-
require_relative 'node_util'
|
|
33
|
-
require_relative 'feature'
|
|
34
|
-
|
|
35
|
-
module Cisco
|
|
36
|
-
# node_utils class for Vni
|
|
37
|
-
class Vni < NodeUtil
|
|
38
|
-
attr_reader :name, :vni_id
|
|
39
|
-
|
|
40
|
-
def initialize(vni_id, instantiate=true)
|
|
41
|
-
@vni_id = vni_id.to_s
|
|
42
|
-
fail ArgumentError,
|
|
43
|
-
'Invalid value(non-numeric VNI id)' unless @vni_id[/^\d+$/]
|
|
44
|
-
create if instantiate
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def self.vnis
|
|
48
|
-
hash = {}
|
|
49
|
-
vni_list = config_get('vni', 'all_vnis')
|
|
50
|
-
return hash if vni_list.nil?
|
|
51
|
-
|
|
52
|
-
vni_list.each do |id|
|
|
53
|
-
hash[id] = Vni.new(id, false)
|
|
54
|
-
end
|
|
55
|
-
hash
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# feature vni
|
|
59
|
-
def self.feature_vni_enabled
|
|
60
|
-
config_get('vni', 'feature')
|
|
61
|
-
rescue Cisco::CliError => e
|
|
62
|
-
# cmd will syntax reject when feature is not enabled
|
|
63
|
-
raise unless e.clierror =~ /Syntax error/
|
|
64
|
-
return false
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def self.feature_vni_enable # TBD: move this to feature.rb
|
|
68
|
-
Feature.nv_overlay_enable
|
|
69
|
-
config_set('vni', 'feature')
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def self.mt_full_support
|
|
73
|
-
config_get('vni', 'mt_full_support')
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
def self.mt_lite_support
|
|
77
|
-
config_get('vni', 'mt_lite_support')
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def create
|
|
81
|
-
Vni.feature_vni_enable unless Vni.feature_vni_enabled
|
|
82
|
-
config_set('vni', 'create', vni: @vni_id) if Vni.mt_full_support
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def destroy
|
|
86
|
-
config_set('vni', 'destroy', vni: @vni_id)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def cli_error_check(result)
|
|
90
|
-
# The NXOS vni cli does not raise an exception in some conditions and
|
|
91
|
-
# instead just displays a STDOUT error message; thus NXAPI does not detect
|
|
92
|
-
# the failure and we must catch it by inspecting the "body" hash entry
|
|
93
|
-
# returned by NXAPI. This cli behavior is unlikely to change.
|
|
94
|
-
fail result[2]['body'] if /ERROR:/.match(result[2]['body'].to_s)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
# TODO: This method will be refactored as part of US52662
|
|
98
|
-
# def encap_dot1q
|
|
99
|
-
# final_hash = {}
|
|
100
|
-
# show = show("sh encapsulation profile | inc 'vni [0-9,]*' p 1")
|
|
101
|
-
# debug("show class is #{show.class} and show op is #{show}")
|
|
102
|
-
# return final_hash if show == {}
|
|
103
|
-
# match_pat = /vni (\S+).*dot1q\s+([ 0-9,\-]+)vni ([ 0-9,\-]+)/m
|
|
104
|
-
# split_pat = /encapsulation profile /
|
|
105
|
-
# pair_arr = show.split(split_pat)
|
|
106
|
-
# pair_arr.each do |pair|
|
|
107
|
-
# match_arr = match_pat.match(pair)
|
|
108
|
-
# next if match_arr.nil?
|
|
109
|
-
# debug "match arr 1 : #{match_arr[1]} 2: #{match_arr[2]} " \
|
|
110
|
-
# "3: #{match_arr[3]}"
|
|
111
|
-
# key_arr = (match_arr[3].split(/,/)).map do |x|
|
|
112
|
-
# x.strip!
|
|
113
|
-
# if /-/.match(x)
|
|
114
|
-
# x.gsub!('-', '..')
|
|
115
|
-
# else
|
|
116
|
-
# x
|
|
117
|
-
# end
|
|
118
|
-
# end
|
|
119
|
-
# val_arr = (match_arr[2].split(/,/)).map do |x|
|
|
120
|
-
# x.strip!
|
|
121
|
-
# if /-/.match(x)
|
|
122
|
-
# x.gsub!('-', '..')
|
|
123
|
-
# else
|
|
124
|
-
# x
|
|
125
|
-
# end
|
|
126
|
-
# end
|
|
127
|
-
#
|
|
128
|
-
# debug "key_arr = #{key_arr} val_arr = #{val_arr}"
|
|
129
|
-
#
|
|
130
|
-
# index = 0
|
|
131
|
-
# value = nil
|
|
132
|
-
# key_arr.each do |key|
|
|
133
|
-
# # puts "checking |#{key}| against |#{@vni_id}|"
|
|
134
|
-
# # puts "checking #{key.class} against #{my_vni.class}"
|
|
135
|
-
# if /\.\./.match(key)
|
|
136
|
-
# range = eval(key) ###################### *MUSTFIX* REMOVE eval
|
|
137
|
-
# if range.include?(@vni_id.to_i)
|
|
138
|
-
# val_range = eval(val_arr[index]) ##### *MUSTFIX* REMOVE eval
|
|
139
|
-
# position = @vni_id.to_i - range.begin
|
|
140
|
-
# value = val_range.begin + position
|
|
141
|
-
# value = value.to_s
|
|
142
|
-
# debug "matched #{@vni_id} value is #{value}"
|
|
143
|
-
# break
|
|
144
|
-
# end
|
|
145
|
-
# elsif key == @vni_id
|
|
146
|
-
# value = val_arr[index]
|
|
147
|
-
# debug "matched #{key} value is #{value}"
|
|
148
|
-
# end
|
|
149
|
-
# index += 1
|
|
150
|
-
# end
|
|
151
|
-
# unless value.nil?
|
|
152
|
-
# # final_hash[match_arr[1]] = value.to_i
|
|
153
|
-
# final_hash[match_arr[1]] = value
|
|
154
|
-
# end
|
|
155
|
-
# end # pair.each
|
|
156
|
-
# final_hash
|
|
157
|
-
# end # end of encap_dot1q
|
|
158
|
-
|
|
159
|
-
def encap_dot1q=(val, prev_val=nil) # TBD REFACTOR
|
|
160
|
-
debug "val is of class #{val.class} and is #{val} prev is #{prev_val}"
|
|
161
|
-
# When prev_val is nil, HashDiff doesn't do a `+' on each element, so this
|
|
162
|
-
if prev_val.nil?
|
|
163
|
-
val.each do |fresh_profile, fresh_dot1q|
|
|
164
|
-
config_set('vni', 'encap_dot1q', fresh_profile, '',
|
|
165
|
-
fresh_dot1q, @vni_id)
|
|
166
|
-
end
|
|
167
|
-
return
|
|
168
|
-
end
|
|
169
|
-
require 'hashdiff'
|
|
170
|
-
hash_diff = HashDiff.diff(prev_val, val)
|
|
171
|
-
debug "hsh diff ; #{hash_diff}"
|
|
172
|
-
return if hash_diff == []
|
|
173
|
-
hash_diff.each do |diff|
|
|
174
|
-
result =
|
|
175
|
-
case diff[0]
|
|
176
|
-
when /\+/
|
|
177
|
-
config_set('vni', 'encap_dot1q', diff[1], '', diff[2], @vni_id)
|
|
178
|
-
when /\-/
|
|
179
|
-
config_set('vni', 'encap_dot1q', diff[1], 'no', diff[2], @vni_id)
|
|
180
|
-
when /~/
|
|
181
|
-
config_set('vni', 'encap_dot1q', diff[1], 'no', diff[2], @vni_id)
|
|
182
|
-
config_set('vni', 'encap_dot1q', diff[1], '', diff[3], @vni_id)
|
|
183
|
-
end
|
|
184
|
-
cli_error_check(result)
|
|
185
|
-
end
|
|
186
|
-
rescue CliError => e
|
|
187
|
-
raise "[vni #{@vni_id}] '#{e.command}' : #{e.clierror}"
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
def default_encap_dot1q
|
|
191
|
-
config_get_default('vni', 'encap_dot1q')
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
def bridge_domain
|
|
195
|
-
bd_arr = config_get('vni', 'bridge_domain', vni: @vni_id)
|
|
196
|
-
bd_arr.first.to_i
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
def bridge_domain=(domain)
|
|
200
|
-
# TBD: ACTIVATE SHOULD BE SEPARATE SETTER AND POSSIBLY RENAMED
|
|
201
|
-
state = (domain) ? '' : 'no'
|
|
202
|
-
config_set('vni', 'bridge_domain_activate', state: state, domain: domain)
|
|
203
|
-
config_set('vni', 'bridge_domain', state: state, domain: domain,
|
|
204
|
-
vni: @vni_id)
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
def default_bridge_domain
|
|
208
|
-
config_get_default('vni', 'bridge_domain')
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
def shutdown
|
|
212
|
-
config_get('vni', 'shutdown', vni: @vni_id)
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
def shutdown=(state)
|
|
216
|
-
state = (state) ? '' : 'no'
|
|
217
|
-
result = config_set('vni', 'shutdown', state: state, vni: @vni_id)
|
|
218
|
-
cli_error_check(result)
|
|
219
|
-
rescue CliError => e
|
|
220
|
-
raise "[vni #{@vni_id}] '#{e.command}' : #{e.clierror}"
|
|
221
|
-
end
|
|
222
|
-
|
|
223
|
-
def default_shutdown
|
|
224
|
-
config_get_default('vni', 'shutdown')
|
|
225
|
-
end
|
|
226
|
-
end # class
|
|
227
|
-
end # module
|
data/tests/test_vni.rb
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2013-2016 Cisco and/or its affiliates.
|
|
2
|
-
#
|
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
# you may not use this file except in compliance with the License.
|
|
5
|
-
# You may obtain a copy of the License at
|
|
6
|
-
#
|
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
#
|
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
# See the License for the specific language governing permissions and
|
|
13
|
-
# limitations under the License.
|
|
14
|
-
|
|
15
|
-
require_relative 'ciscotest'
|
|
16
|
-
require_relative '../lib/cisco_node_utils/feature'
|
|
17
|
-
require_relative '../lib/cisco_node_utils/vni'
|
|
18
|
-
require_relative '../lib/cisco_node_utils/vdc'
|
|
19
|
-
|
|
20
|
-
include Cisco
|
|
21
|
-
|
|
22
|
-
# TestVni - Minitest for Vni node utility
|
|
23
|
-
class TestVni < CiscoTestCase
|
|
24
|
-
def setup
|
|
25
|
-
super
|
|
26
|
-
skip('Platform does not support MT-full or MT-lite') unless
|
|
27
|
-
Vni.mt_full_support || Vni.mt_lite_support
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def teardown
|
|
31
|
-
return unless Vdc.vdc_support
|
|
32
|
-
# Reset the vdc module type back to default
|
|
33
|
-
v = Vdc.new('default')
|
|
34
|
-
v.limit_resource_module_type = '' if v.limit_resource_module_type == 'f3'
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def compatible_interface?
|
|
38
|
-
# This test requires specific linecards; find a compatible linecard
|
|
39
|
-
# and create an appropriate interface name from it.
|
|
40
|
-
# Example 'show mod' output to match against:
|
|
41
|
-
# '9 12 10/40 Gbps Ethernet Module N7K-F312FQ-25 ok'
|
|
42
|
-
sh_mod = @device.cmd("sh mod | i '^[0-9]+.*N7K-F3'")[/^(\d+)\s.*N7K-F3/]
|
|
43
|
-
slot = sh_mod.nil? ? nil : Regexp.last_match[1]
|
|
44
|
-
skip('Unable to find compatible interface in chassis') if slot.nil?
|
|
45
|
-
|
|
46
|
-
"ethernet#{slot}/1"
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def mt_full_env_setup
|
|
50
|
-
skip('Platform does not support MT-full') unless Vni.mt_full_support
|
|
51
|
-
compatible_interface?
|
|
52
|
-
v = Vdc.new('default')
|
|
53
|
-
v.limit_resource_module_type = 'f3' unless
|
|
54
|
-
v.limit_resource_module_type == 'f3'
|
|
55
|
-
config('no feature vni')
|
|
56
|
-
config('no feature nv overlay')
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def mt_lite_env_setup
|
|
60
|
-
skip('Platform does not support MT-lite') unless Vni.mt_lite_support
|
|
61
|
-
config('no feature vn-segment-vlan-based')
|
|
62
|
-
config('no feature nv overlay')
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def test_mt_full_vni_create_destroy
|
|
66
|
-
mt_full_env_setup
|
|
67
|
-
|
|
68
|
-
v1 = Vni.new(10_001)
|
|
69
|
-
v2 = Vni.new(10_002)
|
|
70
|
-
v3 = Vni.new(10_003)
|
|
71
|
-
assert_equal(3, Vni.vnis.keys.count)
|
|
72
|
-
|
|
73
|
-
v2.destroy
|
|
74
|
-
assert_equal(2, Vni.vnis.keys.count)
|
|
75
|
-
|
|
76
|
-
v1.destroy
|
|
77
|
-
v3.destroy
|
|
78
|
-
assert_equal(0, Vni.vnis.keys.count)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
# def test_mt_full_encapsulation_dot1q
|
|
82
|
-
# TBD
|
|
83
|
-
# mt_full_env_setup
|
|
84
|
-
# end
|
|
85
|
-
|
|
86
|
-
# def test_mt_full_mapped_bd
|
|
87
|
-
# TBD
|
|
88
|
-
# mt_full_env_setup
|
|
89
|
-
# end
|
|
90
|
-
|
|
91
|
-
def test_mt_full_shutdown
|
|
92
|
-
mt_full_env_setup
|
|
93
|
-
vni = Vni.new(10_000)
|
|
94
|
-
vni.shutdown = true
|
|
95
|
-
assert(vni.shutdown)
|
|
96
|
-
|
|
97
|
-
vni.shutdown = false
|
|
98
|
-
refute(vni.shutdown)
|
|
99
|
-
|
|
100
|
-
vni.shutdown = !vni.default_shutdown
|
|
101
|
-
assert_equal(!vni.default_shutdown, vni.shutdown)
|
|
102
|
-
|
|
103
|
-
vni.shutdown = vni.default_shutdown
|
|
104
|
-
assert_equal(vni.default_shutdown, vni.shutdown)
|
|
105
|
-
end
|
|
106
|
-
end
|