cisco_node_utils 0.9.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 +7 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +3 -0
- data/.rubocop_todo.yml +293 -0
- data/CHANGELOG.md +5 -0
- data/CONTRIBUTING.md +31 -0
- data/Gemfile +4 -0
- data/LICENSE +201 -0
- data/README.md +113 -0
- data/Rakefile +4 -0
- data/cisco_node_utils.gemspec +30 -0
- data/lib/cisco_node_utils.rb +33 -0
- data/lib/cisco_node_utils/README_YAML.md +333 -0
- data/lib/cisco_node_utils/cisco_cmn_utils.rb +92 -0
- data/lib/cisco_node_utils/command_reference.rb +415 -0
- data/lib/cisco_node_utils/command_reference_common.yaml +845 -0
- data/lib/cisco_node_utils/command_reference_n3064.yaml +13 -0
- data/lib/cisco_node_utils/command_reference_n7k.yaml +48 -0
- data/lib/cisco_node_utils/command_reference_n9k.yaml +35 -0
- data/lib/cisco_node_utils/configparser_lib.rb +196 -0
- data/lib/cisco_node_utils/interface.rb +501 -0
- data/lib/cisco_node_utils/interface_ospf.rb +241 -0
- data/lib/cisco_node_utils/node.rb +673 -0
- data/lib/cisco_node_utils/platform.rb +184 -0
- data/lib/cisco_node_utils/platform_info.rb +58 -0
- data/lib/cisco_node_utils/platform_info.yaml +10 -0
- data/lib/cisco_node_utils/router_ospf.rb +96 -0
- data/lib/cisco_node_utils/router_ospf_vrf.rb +258 -0
- data/lib/cisco_node_utils/snmpcommunity.rb +91 -0
- data/lib/cisco_node_utils/snmpgroup.rb +55 -0
- data/lib/cisco_node_utils/snmpserver.rb +150 -0
- data/lib/cisco_node_utils/snmpuser.rb +342 -0
- data/lib/cisco_node_utils/tacacs_server.rb +175 -0
- data/lib/cisco_node_utils/tacacs_server_host.rb +128 -0
- data/lib/cisco_node_utils/version.rb +17 -0
- data/lib/cisco_node_utils/vlan.rb +153 -0
- data/lib/cisco_node_utils/vtp.rb +127 -0
- data/lib/cisco_node_utils/yum.rb +84 -0
- data/tests/basetest.rb +93 -0
- data/tests/ciscotest.rb +136 -0
- data/tests/cmd_config.yaml +51 -0
- data/tests/cmd_config_invalid.yaml +16 -0
- data/tests/test_all_cisco.rb +46 -0
- data/tests/test_command_config.rb +192 -0
- data/tests/test_command_reference.rb +222 -0
- data/tests/test_interface.rb +1017 -0
- data/tests/test_interface_ospf.rb +763 -0
- data/tests/test_interface_svi.rb +267 -0
- data/tests/test_interface_switchport.rb +722 -0
- data/tests/test_node.rb +108 -0
- data/tests/test_node_ext.rb +450 -0
- data/tests/test_platform.rb +188 -0
- data/tests/test_router_ospf.rb +164 -0
- data/tests/test_router_ospf_vrf.rb +753 -0
- data/tests/test_snmpcommunity.rb +344 -0
- data/tests/test_snmpgroup.rb +71 -0
- data/tests/test_snmpserver.rb +443 -0
- data/tests/test_snmpuser.rb +803 -0
- data/tests/test_tacacs_server.rb +388 -0
- data/tests/test_tacacs_server_host.rb +391 -0
- data/tests/test_vlan.rb +264 -0
- data/tests/test_vtp.rb +319 -0
- data/tests/test_yum.rb +106 -0
- metadata +188 -0
@@ -0,0 +1,127 @@
|
|
1
|
+
# VTP provider class
|
2
|
+
#
|
3
|
+
# Mike Wiebe, November 2014
|
4
|
+
#
|
5
|
+
# Copyright (c) 2014-2015 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 File.join(File.dirname(__FILE__), 'node')
|
20
|
+
|
21
|
+
module Cisco
|
22
|
+
class Vtp
|
23
|
+
attr_reader :name
|
24
|
+
|
25
|
+
MAX_VTP_DOMAIN_NAME_SIZE = 32
|
26
|
+
MAX_VTP_PASSWORD_SIZE = 64
|
27
|
+
|
28
|
+
@@node = Node.instance
|
29
|
+
|
30
|
+
# Constructor for Vtp
|
31
|
+
def initialize(instantiate=true)
|
32
|
+
enable if instantiate and not Vtp.enabled
|
33
|
+
end
|
34
|
+
|
35
|
+
def Vtp.enabled
|
36
|
+
not @@node.config_get("vtp", "feature").nil?
|
37
|
+
end
|
38
|
+
|
39
|
+
def enable
|
40
|
+
@@node.config_set("vtp", "feature", "")
|
41
|
+
end
|
42
|
+
|
43
|
+
# Disable vtp feature
|
44
|
+
def destroy
|
45
|
+
@@node.config_set("vtp", "feature", "no")
|
46
|
+
end
|
47
|
+
|
48
|
+
# Get vtp domain name
|
49
|
+
def Vtp.domain
|
50
|
+
@@node.config_get("vtp", "domain")
|
51
|
+
end
|
52
|
+
|
53
|
+
def domain
|
54
|
+
Vtp.domain
|
55
|
+
end
|
56
|
+
|
57
|
+
# Set vtp domain name
|
58
|
+
def domain=(domain)
|
59
|
+
raise ArgumentError unless domain and domain.is_a? String and
|
60
|
+
domain.length.between?(1, MAX_VTP_DOMAIN_NAME_SIZE)
|
61
|
+
begin
|
62
|
+
@@node.config_set("vtp", "domain", domain)
|
63
|
+
rescue Cisco::CliError => e
|
64
|
+
# cmd will syntax reject when setting name to same name
|
65
|
+
raise unless e.clierror =~ /ERROR: Domain name already set to /
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Get vtp password
|
70
|
+
def password
|
71
|
+
# Unfortunately nxapi returns "\\" when the password is not set
|
72
|
+
password = @@node.config_get("vtp", "password")
|
73
|
+
return '' if password.nil?
|
74
|
+
password.gsub(/\\/, '')
|
75
|
+
end
|
76
|
+
|
77
|
+
# Set vtp password
|
78
|
+
def password=(password)
|
79
|
+
raise TypeError if password.nil?
|
80
|
+
raise TypeError unless password.is_a? String
|
81
|
+
raise ArgumentError if password.length > MAX_VTP_PASSWORD_SIZE
|
82
|
+
password == default_password ?
|
83
|
+
@@node.config_set("vtp", "password", "no", "") :
|
84
|
+
@@node.config_set("vtp", "password", "", password)
|
85
|
+
end
|
86
|
+
|
87
|
+
# Get default vtp password
|
88
|
+
def default_password
|
89
|
+
@@node.config_get_default("vtp", "password")
|
90
|
+
end
|
91
|
+
|
92
|
+
# Get vtp filename
|
93
|
+
def filename
|
94
|
+
match = @@node.config_get("vtp", "filename")
|
95
|
+
match.nil? ? default_filename : match.first
|
96
|
+
end
|
97
|
+
|
98
|
+
# Set vtp filename
|
99
|
+
def filename=(uri)
|
100
|
+
raise TypeError if uri.nil?
|
101
|
+
uri.empty? ?
|
102
|
+
@@node.config_set("vtp", "filename", "no", "") :
|
103
|
+
@@node.config_set("vtp", "filename", "", uri)
|
104
|
+
end
|
105
|
+
|
106
|
+
# Get default vtp filename
|
107
|
+
def default_filename
|
108
|
+
@@node.config_get_default("vtp", "filename")
|
109
|
+
end
|
110
|
+
|
111
|
+
# Get vtp version
|
112
|
+
def version
|
113
|
+
match = @@node.config_get("vtp", "version")
|
114
|
+
match.nil? ? default_version : match.first.to_i
|
115
|
+
end
|
116
|
+
|
117
|
+
# Set vtp version
|
118
|
+
def version=(version)
|
119
|
+
@@node.config_set("vtp", "version", "#{version}")
|
120
|
+
end
|
121
|
+
|
122
|
+
# Get default vtp version
|
123
|
+
def default_version
|
124
|
+
@@node.config_get_default("vtp", "version")
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
#
|
2
|
+
# NXAPI implementation of Yum class
|
3
|
+
#
|
4
|
+
# April 2015, Alex Hunsberger
|
5
|
+
#
|
6
|
+
# Copyright (c) 2015 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 File.join(File.dirname(__FILE__), 'node')
|
21
|
+
|
22
|
+
module Cisco
|
23
|
+
# This Yum class provides cisco package management functions through nxapi.
|
24
|
+
class Yum
|
25
|
+
@@node = Cisco::Node.instance
|
26
|
+
|
27
|
+
def self.decompose_name(file_name)
|
28
|
+
# ex: chef-12.0.0alpha.2+20150319.git.1.b6f-1.el5.x86_64.rpm
|
29
|
+
name_ver_arch_regex = /^([\w\-\+]+)-(\d+\..*)\.(\w{4,})(?:\.rpm)?$/
|
30
|
+
|
31
|
+
# ex n9000_sample-1.0.0-7.0.3.x86_64.rpm
|
32
|
+
name_ver_arch_regex_nx = /^(.*)-([\d\.]+-[\d\.]+)\.(\w{4,})\.rpm$/
|
33
|
+
|
34
|
+
# ex: b+z-ip2.x64_64
|
35
|
+
name_arch_regex = /^([\w\-\+]+)\.(\w+)$/
|
36
|
+
|
37
|
+
file_name.match(name_ver_arch_regex) ||
|
38
|
+
file_name.match(name_ver_arch_regex_nx) ||
|
39
|
+
file_name.match(name_arch_regex)
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.validate(pkg)
|
43
|
+
file_name = pkg.strip.gsub(':', '/').split('/').last
|
44
|
+
pkg_info = Yum.decompose_name(file_name)
|
45
|
+
if pkg_info.nil?
|
46
|
+
query_name = file_name
|
47
|
+
else
|
48
|
+
if pkg_info[3].nil?
|
49
|
+
query_name = pkg_info[1]
|
50
|
+
else
|
51
|
+
query_name = "#{pkg_info[1]}.#{pkg_info[3]}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
should_ver = pkg_info[2] if pkg_info && pkg_info[3]
|
55
|
+
ver = self.query(query_name)
|
56
|
+
if ver.nil? || (!should_ver.nil? && should_ver != ver)
|
57
|
+
raise RuntimeError, "Failed to install the requested rpm"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.install(pkg)
|
62
|
+
@@node.config_set("yum", "install", pkg)
|
63
|
+
|
64
|
+
# HACK: The current nxos host installer is a multi-part command
|
65
|
+
# which may fail at a later stage yet return a false positive;
|
66
|
+
# therefore a post-validation check is needed here to verify the
|
67
|
+
# actual outcome.
|
68
|
+
self.validate(pkg)
|
69
|
+
end
|
70
|
+
|
71
|
+
# returns version of package, or false if package doesn't exist
|
72
|
+
def self.query(pkg)
|
73
|
+
raise TypeError unless pkg.is_a? String
|
74
|
+
raise ArgumentError if pkg.empty?
|
75
|
+
b = @@node.config_get("yum", "query", pkg)
|
76
|
+
raise "Multiple matching packages found for #{pkg}" if b and b.size > 1
|
77
|
+
b.nil? ? nil : b.first
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.remove(pkg)
|
81
|
+
@@node.config_set("yum", "remove", pkg)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/tests/basetest.rb
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Basic unit test case class.
|
4
|
+
# December 2014, Glenn F. Matthews
|
5
|
+
#
|
6
|
+
# Copyright (c) 2014-2015 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 'rubygems'
|
21
|
+
gem 'minitest', '>= 2.5.1', '< 5.0.0'
|
22
|
+
require 'minitest/autorun'
|
23
|
+
require 'net/telnet'
|
24
|
+
require 'test/unit'
|
25
|
+
begin
|
26
|
+
require 'cisco_nxapi'
|
27
|
+
rescue LoadError
|
28
|
+
require File.expand_path("../../../cisco_nxapi/lib/cisco_nxapi")
|
29
|
+
end
|
30
|
+
|
31
|
+
class TestCase < Test::Unit::TestCase
|
32
|
+
@@address = nil
|
33
|
+
@@username = nil
|
34
|
+
@@password = nil
|
35
|
+
|
36
|
+
def process_arguments
|
37
|
+
if ARGV.length != 3 and ARGV.length != 4
|
38
|
+
puts "Usage:"
|
39
|
+
puts " ruby test_nxapi.rb [options] -- <address> <username> <password> [debug]"
|
40
|
+
exit
|
41
|
+
end
|
42
|
+
|
43
|
+
# Record the version of Ruby we got invoked with.
|
44
|
+
puts "\nRuby Version - #{RUBY_VERSION}"
|
45
|
+
|
46
|
+
@@address = ARGV[0]
|
47
|
+
@@username = ARGV[1]
|
48
|
+
@@password = ARGV[2]
|
49
|
+
|
50
|
+
if ARGV.length == 4
|
51
|
+
if ARGV[3] == "debug"
|
52
|
+
CiscoLogger.debug_enable
|
53
|
+
else
|
54
|
+
puts "Only 'debug' is allowed"
|
55
|
+
exit
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# setup-once params
|
61
|
+
def address
|
62
|
+
process_arguments unless @@address
|
63
|
+
@@address
|
64
|
+
end
|
65
|
+
|
66
|
+
def username
|
67
|
+
process_arguments unless @@username
|
68
|
+
@@username
|
69
|
+
end
|
70
|
+
|
71
|
+
def password
|
72
|
+
process_arguments unless @@password
|
73
|
+
@@password
|
74
|
+
end
|
75
|
+
|
76
|
+
def setup
|
77
|
+
@device = Net::Telnet.new("Host" => address, "Timeout" => 240)
|
78
|
+
@device.login(username, password)
|
79
|
+
rescue Errno::ECONNREFUSED
|
80
|
+
puts "Connection refused - please check that the IP address is correct"
|
81
|
+
puts " and that you have enabled 'feature telnet' on the UUT"
|
82
|
+
exit
|
83
|
+
end
|
84
|
+
|
85
|
+
def teardown
|
86
|
+
@device.close unless @device.nil?
|
87
|
+
GC.start
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_placeholder
|
91
|
+
# needed so that we don't get a "no tests were specified" error
|
92
|
+
end
|
93
|
+
end
|
data/tests/ciscotest.rb
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
# Copyright (c) 2013-2015 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 File.join(File.dirname(__FILE__), 'basetest')
|
16
|
+
require File.expand_path("../../lib/cisco_node_utils/platform_info", __FILE__)
|
17
|
+
require File.expand_path("../../lib/cisco_node_utils/node", __FILE__)
|
18
|
+
|
19
|
+
include Cisco
|
20
|
+
|
21
|
+
Node.lazy_connect = true # we'll specify the connection info later
|
22
|
+
|
23
|
+
class CiscoTestCase < TestCase
|
24
|
+
@@node = nil
|
25
|
+
@@interfaces = nil
|
26
|
+
@@interfaces_id = nil
|
27
|
+
|
28
|
+
def node
|
29
|
+
unless @@node
|
30
|
+
@@node = Node.instance
|
31
|
+
@@node.connect(@@address, @@username, @@password)
|
32
|
+
@@node.cache_enable = true
|
33
|
+
@@node.cache_auto = true
|
34
|
+
puts "Node in CiscoTestCase Class: #{@@node}"
|
35
|
+
end
|
36
|
+
@@node
|
37
|
+
end
|
38
|
+
|
39
|
+
def process_arguments
|
40
|
+
super
|
41
|
+
node # Connect to device
|
42
|
+
# Record the platform we're running on
|
43
|
+
puts "Platform:"
|
44
|
+
puts " - name - #{@@node.host_name}"
|
45
|
+
puts " - type - #{@@node.product_id}"
|
46
|
+
puts " - image - #{@@node.system}\n\n"
|
47
|
+
end
|
48
|
+
|
49
|
+
def cmd_ref
|
50
|
+
node.cmd_ref
|
51
|
+
end
|
52
|
+
|
53
|
+
def interfaces
|
54
|
+
unless @@interfaces
|
55
|
+
# Build the platform_info, used for interface lookup
|
56
|
+
begin
|
57
|
+
platform_info = PlatformInfo.new(node.host_name)
|
58
|
+
@@interfaces = platform_info.get_value_from_key("interfaces")
|
59
|
+
rescue Exception => e
|
60
|
+
# If there is a problem reading platform_info.yaml, assign default values
|
61
|
+
default_interfaces = ["Ethernet1/1", "Ethernet1/2", "Ethernet1/10"]
|
62
|
+
puts "Caught exception: #{e}, assigning interfaces to default - #{default_interfaces}"
|
63
|
+
@@interfaces = default_interfaces
|
64
|
+
end
|
65
|
+
end
|
66
|
+
@@interfaces
|
67
|
+
end
|
68
|
+
|
69
|
+
def interfaces_id
|
70
|
+
unless @@interfaces_id
|
71
|
+
@@interfaces_id = []
|
72
|
+
interfaces.each { |interface|
|
73
|
+
id = interface.split("Ethernet")[1]
|
74
|
+
@@interfaces_id << id
|
75
|
+
}
|
76
|
+
end
|
77
|
+
@@interfaces_id
|
78
|
+
end
|
79
|
+
|
80
|
+
# Class method method to set the class variable 'debug_flag'
|
81
|
+
# Can be true or false.
|
82
|
+
def self.debug_flag=(flag)
|
83
|
+
@@debug_flag = flag
|
84
|
+
end
|
85
|
+
|
86
|
+
# Class method to set the class variable 'debug_method'
|
87
|
+
# Can be name of the method or "all"
|
88
|
+
def self.debug_method=(name)
|
89
|
+
@@debug_method = name
|
90
|
+
end
|
91
|
+
|
92
|
+
# Class method to set the class variable 'debug_group'
|
93
|
+
# Can be the name of the method or "all"
|
94
|
+
def self.debug_group=(group)
|
95
|
+
@@debug_group = group
|
96
|
+
end
|
97
|
+
|
98
|
+
# Class method to set the class variable 'debug_detail'
|
99
|
+
# Can be true or false
|
100
|
+
def self.debug_detail=(detail)
|
101
|
+
@@debug_detail = detail
|
102
|
+
end
|
103
|
+
|
104
|
+
# Class method to dump debug data.
|
105
|
+
# The passed in parameters will control what is printed and how.
|
106
|
+
# Parameters:
|
107
|
+
# method - Name of the method the debug belongs to.
|
108
|
+
# group - Name of the group the debug belongs to.
|
109
|
+
# indent - Indent controls the display of the data.
|
110
|
+
# detail - Detail controls if detail debugs should be displayed.
|
111
|
+
# data - Data to be displayed. Must be a fully formatted string.
|
112
|
+
def self.debug(method, group, indent, data)
|
113
|
+
if (@@debug_flag) &&
|
114
|
+
(((@@debug_method == method) || (@@debug_method == "all")) ||
|
115
|
+
((@@debug_group == group) || (@@debug_group == "all")))
|
116
|
+
indent_spaces = " " * indent
|
117
|
+
puts "#{indent_spaces}#{method} - #{data}"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# Class method to dump detailed debug data.
|
122
|
+
# The passed in parameters will control what is printed and how.
|
123
|
+
# Parameters:
|
124
|
+
# method - Name of the method the debug belongs to.
|
125
|
+
# group - Name of the group the debug belongs to.
|
126
|
+
# indent - Indent controls the display of the data.
|
127
|
+
# data - Data to be displayed. Must be a fully formatted string.
|
128
|
+
def self.debug_detail(method, group, indent, data)
|
129
|
+
if (@@debug_detail) &&
|
130
|
+
(((@@debug_method == method) || (@@debug_method == "all")) ||
|
131
|
+
((@@debug_group == group) || (@@debug_group == "all")))
|
132
|
+
indent_spaces = " " * indent
|
133
|
+
puts "#{indent_spaces}#{method} - #{data}"
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# test command config yaml file
|
2
|
+
---
|
3
|
+
feature-enable:
|
4
|
+
command: |
|
5
|
+
feature tacacs+
|
6
|
+
feature ospf
|
7
|
+
feature bgp
|
8
|
+
feature pim
|
9
|
+
feature msdp
|
10
|
+
feature private-vlan
|
11
|
+
feature udld
|
12
|
+
feature interface-vlan
|
13
|
+
feature hsrp
|
14
|
+
feature lacp
|
15
|
+
feature dhcp
|
16
|
+
feature vtp
|
17
|
+
|
18
|
+
feature-disable:
|
19
|
+
command: |
|
20
|
+
no feature tacacs+
|
21
|
+
no feature ospf
|
22
|
+
no feature bgp
|
23
|
+
no feature pim
|
24
|
+
no feature msdp
|
25
|
+
no feature private-vlan
|
26
|
+
no feature udld
|
27
|
+
no feature interface-vlan
|
28
|
+
no feature hsrp
|
29
|
+
no feature lacp
|
30
|
+
no feature dhcp
|
31
|
+
no feature vtp
|
32
|
+
|
33
|
+
feature-snmp-comm-acl-ro:
|
34
|
+
command: |
|
35
|
+
snmp-server community networkopercom group network-operator
|
36
|
+
snmp-server community networkopercom use-acl SNMP_RO
|
37
|
+
|
38
|
+
feature-snmp-comm-acl-rw:
|
39
|
+
command: |
|
40
|
+
snmp-server community admincom group network-admin
|
41
|
+
snmp-server community admincom use-acl SNMP_RW
|
42
|
+
|
43
|
+
feature-int-loopback:
|
44
|
+
command: >
|
45
|
+
interface loopback0
|
46
|
+
description testloopback
|
47
|
+
|
48
|
+
feature-int-portchannel:
|
49
|
+
command: >
|
50
|
+
interface port-channel100
|
51
|
+
description test-portchannel
|