rbeapi 0.2.0 → 0.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.
- data/.gitignore +1 -0
- data/CHANGELOG.md +12 -0
- data/Gemfile +4 -0
- data/README.md +9 -9
- data/Rakefile +20 -0
- data/lib/rbeapi/api/bgp.rb +770 -0
- data/lib/rbeapi/api/dns.rb +32 -31
- data/lib/rbeapi/api/interfaces.rb +106 -87
- data/lib/rbeapi/api/ipinterfaces.rb +27 -42
- data/lib/rbeapi/api/logging.rb +9 -19
- data/lib/rbeapi/api/mlag.rb +60 -90
- data/lib/rbeapi/api/ntp.rb +12 -17
- data/lib/rbeapi/api/ospf.rb +9 -26
- data/lib/rbeapi/api/radius.rb +29 -43
- data/lib/rbeapi/api/snmp.rb +54 -83
- data/lib/rbeapi/api/staticroutes.rb +68 -21
- data/lib/rbeapi/api/stp.rb +41 -49
- data/lib/rbeapi/api/switchports.rb +41 -68
- data/lib/rbeapi/api/system.rb +6 -12
- data/lib/rbeapi/api/tacacs.rb +12 -21
- data/lib/rbeapi/api/varp.rb +25 -26
- data/lib/rbeapi/api/vlans.rb +19 -28
- data/lib/rbeapi/api.rb +30 -21
- data/lib/rbeapi/client.rb +3 -1
- data/lib/rbeapi/version.rb +1 -1
- data/rbeapi.spec.tmpl +4 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/system/api_ospf_interfaces_spec.rb +16 -0
- data/spec/system/api_ospf_spec.rb +14 -0
- data/spec/system/api_varp_interfaces_spec.rb +16 -0
- data/spec/system/rbeapi/api/dns_spec.rb +66 -0
- data/spec/system/rbeapi/api/interfaces_base_spec.rb +4 -4
- data/spec/system/rbeapi/api/interfaces_ethernet_spec.rb +6 -6
- data/spec/system/rbeapi/api/interfaces_portchannel_spec.rb +6 -6
- data/spec/system/rbeapi/api/interfaces_vxlan_spec.rb +4 -4
- data/spec/system/rbeapi/api/ipinterfaces_spec.rb +44 -0
- data/spec/system/rbeapi/api/logging_spec.rb +18 -2
- data/spec/system/rbeapi/api/mlag_spec.rb +94 -2
- data/spec/system/rbeapi/api/ntp_spec.rb +14 -0
- data/spec/system/rbeapi/api/snmp_spec.rb +105 -0
- data/spec/system/rbeapi/api/stp_interfaces_spec.rb +43 -6
- data/spec/system/rbeapi/api/stp_spec.rb +18 -6
- data/spec/system/rbeapi/api/switchports_spec.rb +75 -3
- data/spec/system/rbeapi/api/system_spec.rb +16 -0
- data/spec/system/rbeapi/api/vlans_spec.rb +28 -0
- data/spec/unit/rbeapi/api/bgp/bgp_neighbors_spec.rb +289 -0
- data/spec/unit/rbeapi/api/bgp/bgp_spec.rb +192 -0
- data/spec/unit/rbeapi/api/bgp/fixture_bgp.text +101 -0
- data/spec/unit/rbeapi/api/interfaces/base_spec.rb +7 -13
- data/spec/unit/rbeapi/api/interfaces/ethernet_spec.rb +3 -3
- data/spec/unit/rbeapi/api/interfaces/portchannel_spec.rb +11 -16
- data/spec/unit/rbeapi/api/interfaces/vxlan_spec.rb +15 -21
- data/spec/unit/rbeapi/api/mlag/default_spec.rb +13 -19
- data/spec/unit/rbeapi/api/staticroutes/default_spec.rb +138 -0
- data/spec/unit/rbeapi/api/staticroutes/fixture_staticroutes.text +5 -0
- data/spec/unit/rbeapi/api/vlans/default_spec.rb +4 -4
- metadata +15 -4
data/lib/rbeapi/api/vlans.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright (c) 2014, Arista Networks, Inc.
|
2
|
+
# Copyright (c) 2014,2015, Arista Networks, Inc.
|
3
3
|
# All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without
|
@@ -98,7 +98,7 @@ module Rbeapi
|
|
98
98
|
##
|
99
99
|
# parse_name scans the provided configuration block and parses the
|
100
100
|
# vlan name value. The vlan name should always return a value
|
101
|
-
# from the running
|
101
|
+
# from the running configuration. The return value is intended to
|
102
102
|
# be merged into the resource hash
|
103
103
|
#
|
104
104
|
# @api private
|
@@ -129,7 +129,7 @@ module Rbeapi
|
|
129
129
|
# parse_trunk_groups scans the provided configuration block and parses
|
130
130
|
# the trunk groups. If no trunk groups are found in the nodes
|
131
131
|
# running configuration then an empty array is returned as the value.
|
132
|
-
# The return hash is
|
132
|
+
# The return hash is intended to be merged into the resource hash.
|
133
133
|
#
|
134
134
|
# @api private
|
135
135
|
#
|
@@ -199,11 +199,11 @@ module Rbeapi
|
|
199
199
|
|
200
200
|
##
|
201
201
|
# set_name configures the name value for the specified vlan id in the
|
202
|
-
# nodes running configuration. If
|
202
|
+
# nodes running configuration. If enable is false in the
|
203
203
|
# opts keyword Hash then the name value is negated using the no
|
204
204
|
# keyword. If the default keyword is set to true, then the name value
|
205
205
|
# is defaulted using the default keyword. The default keyword takes
|
206
|
-
# precedence over the
|
206
|
+
# precedence over the enable keyword
|
207
207
|
#
|
208
208
|
# @eos_version 4.13.7M
|
209
209
|
#
|
@@ -211,7 +211,7 @@ module Rbeapi
|
|
211
211
|
# vlan <id>
|
212
212
|
# name <value>
|
213
213
|
# no name
|
214
|
-
#
|
214
|
+
# default name
|
215
215
|
#
|
216
216
|
# @param [String, Integer] :id The vlan id to apply the configuration
|
217
217
|
# to. The id value should be in the valid range of 1 to 4094
|
@@ -222,31 +222,26 @@ module Rbeapi
|
|
222
222
|
# to in the node configuration. The name parameter accepts a-z, 0-9
|
223
223
|
# and _.
|
224
224
|
#
|
225
|
+
# @option :opts [Boolean] :enable If false then the command is
|
226
|
+
# negated. Default is true.
|
227
|
+
#
|
225
228
|
# @option :opts [Boolean] :default Configure the vlan name value using
|
226
229
|
# the default keyword
|
227
230
|
#
|
228
231
|
# @return [Boolean] returns true if the command completed successfully
|
229
232
|
def set_name(id, opts = {})
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
cmds = ["vlan #{id}"]
|
234
|
-
case default
|
235
|
-
when true
|
236
|
-
cmds << 'default name'
|
237
|
-
when false
|
238
|
-
cmds << (value.nil? ? 'no name' : "name #{value}")
|
239
|
-
end
|
233
|
+
cmd = command_builder('name', opts)
|
234
|
+
cmds = ["vlan #{id}", cmd]
|
240
235
|
configure(cmds)
|
241
236
|
end
|
242
237
|
|
243
238
|
##
|
244
239
|
# set_state configures the state value for the specified vlan id in
|
245
|
-
# the nodes running configuration. If
|
240
|
+
# the nodes running configuration. If enable is set to false in
|
246
241
|
# the opts keyword Hash then the state value is negated using the no
|
247
242
|
# keyword. If the default keyword is set to true, then the state
|
248
243
|
# value is defaulted using the default keyword. The default keyword
|
249
|
-
# takes precedence over the
|
244
|
+
# takes precedence over the enable keyword
|
250
245
|
#
|
251
246
|
# @eos_version 4.13.7M
|
252
247
|
#
|
@@ -265,7 +260,10 @@ module Rbeapi
|
|
265
260
|
# to in the node's configuration. Accepted values are 'active' or
|
266
261
|
# 'suspend'
|
267
262
|
#
|
268
|
-
# @option :opts [Boolean] :
|
263
|
+
# @option :opts [Boolean] :enable If false then the command is
|
264
|
+
# negated. Default is true.
|
265
|
+
#
|
266
|
+
# @option :opts [Boolean] :default Configure the vlan state value using
|
269
267
|
# the default keyword
|
270
268
|
#
|
271
269
|
# @return [Boolean] returns true if the command completed successfully
|
@@ -274,19 +272,12 @@ module Rbeapi
|
|
274
272
|
# values
|
275
273
|
def set_state(id, opts = {})
|
276
274
|
value = opts[:value]
|
277
|
-
default = opts[:default] || false
|
278
|
-
|
279
275
|
unless ['active', 'suspend', nil].include?(value)
|
280
276
|
fail ArgumentError, 'state must be active, suspend or nil'
|
281
277
|
end
|
282
278
|
|
283
|
-
|
284
|
-
|
285
|
-
when true
|
286
|
-
cmds << 'default state'
|
287
|
-
when false
|
288
|
-
cmds << (value.nil? ? 'no state' : "state #{value}")
|
289
|
-
end
|
279
|
+
cmd = command_builder('state', opts)
|
280
|
+
cmds = ["vlan #{id}", cmd]
|
290
281
|
configure(cmds)
|
291
282
|
end
|
292
283
|
|
data/lib/rbeapi/api.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright (c) 2014, Arista Networks, Inc.
|
2
|
+
# Copyright (c) 2014,2015, Arista Networks, Inc.
|
3
3
|
# All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without
|
@@ -39,7 +39,7 @@ module Rbeapi
|
|
39
39
|
module Api
|
40
40
|
##
|
41
41
|
# The Entity class provides a base class implementation for building
|
42
|
-
# API modules. The Entity class is
|
42
|
+
# API modules. The Entity class is typically not instantiated directly
|
43
43
|
# but serves as a super class with convenience methods used to
|
44
44
|
# work with the node.
|
45
45
|
class Entity
|
@@ -58,7 +58,7 @@ module Rbeapi
|
|
58
58
|
|
59
59
|
##
|
60
60
|
# The Entity class provides a base class implementation for building
|
61
|
-
# API modules. The Entity class is
|
61
|
+
# API modules. The Entity class is typically not instantiated directly
|
62
62
|
# but serves as a super class with convenience methods used to
|
63
63
|
# work with the node.
|
64
64
|
#
|
@@ -84,7 +84,7 @@ module Rbeapi
|
|
84
84
|
# one exists) of the node's connection instance
|
85
85
|
#
|
86
86
|
# @return [Rbeapi::Eapilib::CommandError] An instance of CommandError
|
87
|
-
# that can be used to
|
87
|
+
# that can be used to further evaluate the root cause of an error
|
88
88
|
def error
|
89
89
|
@node.connection.error
|
90
90
|
end
|
@@ -133,29 +133,38 @@ module Rbeapi
|
|
133
133
|
end
|
134
134
|
|
135
135
|
##
|
136
|
-
#
|
137
|
-
#
|
138
|
-
#
|
139
|
-
#
|
140
|
-
#
|
136
|
+
# Method called to build the correct version of a command based on
|
137
|
+
# the modifier options. If value option is set then it is appended
|
138
|
+
# to the command. If the enable option is false then the 'no'
|
139
|
+
# keyword is prefixed to the command. If the default value is
|
140
|
+
# provided and set to true, then the default keyword is used. If
|
141
|
+
# both options are provided, then default option takes precedence.
|
141
142
|
#
|
142
|
-
# @
|
143
|
+
# @param [String, Array] :commands The commands to send to the node
|
144
|
+
# over the API connection to configure the system
|
145
|
+
# @param [Hash] :opts the options for the command
|
146
|
+
#
|
147
|
+
# @option :opts [String] :value Optional value that is
|
148
|
+
# appended to the command if set.
|
149
|
+
#
|
150
|
+
# @option :opts [Boolean] :enable Prefix the command with 'no'.
|
151
|
+
# Default is true.
|
152
|
+
#
|
153
|
+
# @option :opts [Boolean] :default Configure the command using
|
154
|
+
# the default keyword. Default is false.
|
155
|
+
#
|
156
|
+
# @return [String] Returns built command string
|
143
157
|
def command_builder(cmd, opts = {})
|
144
|
-
|
158
|
+
enable = opts.fetch(:enable, true)
|
145
159
|
default = opts.fetch(:default, false)
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
when nil, false then "no #{cmd}"
|
151
|
-
when true then cmd
|
152
|
-
else "#{cmd} #{value}"
|
153
|
-
end
|
154
|
-
end
|
160
|
+
cmd << " #{opts[:value]}" if opts[:value]
|
161
|
+
return "default #{cmd}" if default
|
162
|
+
return "no #{cmd}" unless enable
|
163
|
+
cmd
|
155
164
|
end
|
156
165
|
|
157
166
|
##
|
158
|
-
# configure_interface sends the commands over eAPI to the
|
167
|
+
# configure_interface sends the commands over eAPI to the destination
|
159
168
|
# node to configure a specific interface.
|
160
169
|
#
|
161
170
|
# @param [String] :name The interface name to apply the configuration
|
data/lib/rbeapi/client.rb
CHANGED
@@ -156,7 +156,7 @@ module Rbeapi
|
|
156
156
|
# The Config class holds the loaded configuration file data. It is a
|
157
157
|
# subclass of IniFile.
|
158
158
|
class Config < IniFile
|
159
|
-
CONFIG_SEARCH_PATH = ['
|
159
|
+
CONFIG_SEARCH_PATH = ['/mnt/flash/eapi.conf']
|
160
160
|
|
161
161
|
##
|
162
162
|
# The Config class will automatically search for a filename to load
|
@@ -182,6 +182,8 @@ module Rbeapi
|
|
182
182
|
# search path
|
183
183
|
def autoload(opts = {})
|
184
184
|
search_path = CONFIG_SEARCH_PATH.dup
|
185
|
+
# Add the home directory path if the HOME environement var is defined.
|
186
|
+
search_path.insert(0, '~/.eapi.conf') if ENV.key?('HOME')
|
185
187
|
search_path.insert(0, ENV['EAPI_CONF']) if ENV.key?('EAPI_CONF')
|
186
188
|
|
187
189
|
path = opts[:filename] || search_path
|
data/lib/rbeapi/version.rb
CHANGED
data/rbeapi.spec.tmpl
CHANGED
@@ -18,12 +18,16 @@ Requires: pe-rubygems
|
|
18
18
|
Requires: pe-ruby
|
19
19
|
Requires: pe-rubygem(net-http-unix)
|
20
20
|
Requires: pe-rubygem(inifile)
|
21
|
+
Requires: pe-rubygem(netaddr)
|
21
22
|
Provides: pe-rubygem(%{gem_name}) = %{version}
|
22
23
|
Provides: pe-rubygem-%{gem_name} = %{version}
|
23
24
|
%else
|
24
25
|
# Use these settings for all other installs
|
25
26
|
%global gem gem
|
26
27
|
Requires: ruby(abi) = %{rubyabi}
|
28
|
+
Requires: ruby(net-http-unix)
|
29
|
+
Requires: ruby(inifile)
|
30
|
+
Requires: ruby(netaddr)
|
27
31
|
Provides: ruby(%{gem_name}) = %{version}-%{release}
|
28
32
|
%endif
|
29
33
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'simplecov'
|
4
|
+
require 'simplecov-json'
|
5
|
+
require 'simplecov-rcov'
|
6
|
+
SimpleCov.formatters = [
|
7
|
+
SimpleCov::Formatter::HTMLFormatter,
|
8
|
+
SimpleCov::Formatter::JSONFormatter,
|
9
|
+
SimpleCov::Formatter::RcovFormatter
|
10
|
+
]
|
11
|
+
|
4
12
|
SimpleCov.start do
|
5
13
|
add_filter '/spec/'
|
6
14
|
add_filter '/.bundle/'
|
@@ -57,5 +57,21 @@ describe Rbeapi::Api::OspfInterfaces do
|
|
57
57
|
.to be_truthy
|
58
58
|
expect(subject.get('Ethernet1')['network_type']).to eq('point-to-point')
|
59
59
|
end
|
60
|
+
|
61
|
+
it 'negates the ospf interface type' do
|
62
|
+
expect(subject.set_network_type('Ethernet1', value: 'point-to-point'))
|
63
|
+
.to be_truthy
|
64
|
+
expect(subject.get('Ethernet1')['network_type']).to eq('point-to-point')
|
65
|
+
expect(subject.set_network_type('Ethernet1', enable: false)).to be_truthy
|
66
|
+
expect(subject.get('Ethernet1')['network_type']).to eq('broadcast')
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'defaults the ospf interface type' do
|
70
|
+
expect(subject.set_network_type('Ethernet1', value: 'point-to-point'))
|
71
|
+
.to be_truthy
|
72
|
+
expect(subject.get('Ethernet1')['network_type']).to eq('point-to-point')
|
73
|
+
expect(subject.set_network_type('Ethernet1', default: true)).to be_truthy
|
74
|
+
expect(subject.get('Ethernet1')['network_type']).to eq('broadcast')
|
75
|
+
end
|
60
76
|
end
|
61
77
|
end
|
@@ -53,6 +53,20 @@ describe Rbeapi::Api::Ospf do
|
|
53
53
|
expect(subject.set_router_id('1', value: '1.1.1.1')).to be_truthy
|
54
54
|
expect(subject.get('1')['router_id']).to eq('1.1.1.1')
|
55
55
|
end
|
56
|
+
|
57
|
+
it 'negates the router id' do
|
58
|
+
expect(subject.set_router_id('1', value: '1.1.1.1')).to be_truthy
|
59
|
+
expect(subject.get('1')['router_id']).to eq('1.1.1.1')
|
60
|
+
expect(subject.set_router_id('1', enable: false)).to be_truthy
|
61
|
+
expect(subject.get('1')['router_id']).to be_empty
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'defaults the router id' do
|
65
|
+
expect(subject.set_router_id('1', value: '1.1.1.1')).to be_truthy
|
66
|
+
expect(subject.get('1')['router_id']).to eq('1.1.1.1')
|
67
|
+
expect(subject.set_router_id('1', default: true)).to be_truthy
|
68
|
+
expect(subject.get('1')['router_id']).to be_empty
|
69
|
+
end
|
56
70
|
end
|
57
71
|
|
58
72
|
describe '#create' do
|
@@ -65,5 +65,21 @@ describe Rbeapi::Api::VarpInterfaces do
|
|
65
65
|
.to be_truthy
|
66
66
|
expect(subject.get('Vlan100')['addresses']).not_to include('99.99.99.98')
|
67
67
|
end
|
68
|
+
|
69
|
+
it 'negate the list of addresses' do
|
70
|
+
expect(subject.set_addresses('Vlan100', value: ['99.99.99.98']))
|
71
|
+
.to be_truthy
|
72
|
+
expect(subject.get('Vlan100')['addresses']).to include('99.99.99.98')
|
73
|
+
expect(subject.set_addresses('Vlan100', enable: false)).to be_truthy
|
74
|
+
expect(subject.get('Vlan100')['addresses']).to be_empty
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'default the list of addresses' do
|
78
|
+
expect(subject.set_addresses('Vlan100', value: ['99.99.99.98']))
|
79
|
+
.to be_truthy
|
80
|
+
expect(subject.get('Vlan100')['addresses']).to include('99.99.99.98')
|
81
|
+
expect(subject.set_addresses('Vlan100', default: true)).to be_truthy
|
82
|
+
expect(subject.get('Vlan100')['addresses']).to be_empty
|
83
|
+
end
|
68
84
|
end
|
69
85
|
end
|
@@ -27,6 +27,44 @@ describe Rbeapi::Api::Dns do
|
|
27
27
|
expect(subject.set_domain_name(value: 'arista.com')).to be_truthy
|
28
28
|
expect(subject.get[:domain_name]).to eq('arista.com')
|
29
29
|
end
|
30
|
+
|
31
|
+
it 'negates the domain name' do
|
32
|
+
expect(subject.set_domain_name(value: 'arista.com')).to be_truthy
|
33
|
+
expect(subject.get[:domain_name]).to eq('arista.com')
|
34
|
+
expect(subject.set_domain_name(enable: false)).to be_truthy
|
35
|
+
expect(subject.get[:domain_name]).to be_empty
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'defaults the domain name' do
|
39
|
+
expect(subject.set_domain_name(value: 'arista.com')).to be_truthy
|
40
|
+
expect(subject.get[:domain_name]).to eq('arista.com')
|
41
|
+
expect(subject.set_domain_name(default: true)).to be_truthy
|
42
|
+
expect(subject.get[:domain_name]).to be_empty
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#set_name_servers' do
|
47
|
+
let(:servers) { %w(1.2.3.4 5.6.7.8 9.10.11.12) }
|
48
|
+
|
49
|
+
before { node.config('no ip name-server') }
|
50
|
+
|
51
|
+
it 'add all the servers to the name servers list' do
|
52
|
+
expect(subject.get[:name_servers]).to be_empty
|
53
|
+
expect(subject.set_name_servers(value: servers)).to be_truthy
|
54
|
+
expect(subject.get[:name_servers]).to eq(servers)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'negate the name servers list' do
|
58
|
+
expect(subject.get[:name_servers]).to be_empty
|
59
|
+
expect(subject.set_name_servers(enable: false)).to be_truthy
|
60
|
+
expect(subject.get[:name_servers]).to be_empty
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'default the name servers list' do
|
64
|
+
expect(subject.get[:name_servers]).to be_empty
|
65
|
+
expect(subject.set_name_servers(default: true)).to be_truthy
|
66
|
+
expect(subject.get[:name_servers]).to be_empty
|
67
|
+
end
|
30
68
|
end
|
31
69
|
|
32
70
|
describe '#add_name_server' do
|
@@ -55,6 +93,34 @@ describe Rbeapi::Api::Dns do
|
|
55
93
|
end
|
56
94
|
end
|
57
95
|
|
96
|
+
describe '#set_domain_list' do
|
97
|
+
let(:servers) { %w(foo bar baz) }
|
98
|
+
|
99
|
+
before do
|
100
|
+
node.config(['no ip domain-list foo',
|
101
|
+
'no ip domain-list bar',
|
102
|
+
'no ip domain-list baz'])
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'add all the servers to the name servers list' do
|
106
|
+
expect(subject.get[:domain_list]).to be_empty
|
107
|
+
expect(subject.set_domain_list(value: servers)).to be_truthy
|
108
|
+
expect(subject.get[:domain_list]).to eq(servers)
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'negate the name servers list' do
|
112
|
+
expect(subject.get[:domain_list]).to be_empty
|
113
|
+
expect(subject.set_domain_list(enable: false)).to be_truthy
|
114
|
+
expect(subject.get[:domain_list]).to be_empty
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'default the name servers list' do
|
118
|
+
expect(subject.get[:domain_list]).to be_empty
|
119
|
+
expect(subject.set_domain_list(default: true)).to be_truthy
|
120
|
+
expect(subject.get[:domain_list]).to be_empty
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
58
124
|
describe '#add_domain_list' do
|
59
125
|
before { node.config(['no ip domain-list arista.net']) }
|
60
126
|
|
@@ -76,17 +76,17 @@ describe Rbeapi::Api::Interfaces do
|
|
76
76
|
end
|
77
77
|
|
78
78
|
describe '#set_shutdown' do
|
79
|
-
it '
|
79
|
+
it 'shutdown the interface' do
|
80
80
|
node.config(['interface Loopback0', 'no shutdown'])
|
81
81
|
expect(subject.get('Loopback0')[:shutdown]).to be_falsy
|
82
|
-
expect(subject.set_shutdown('Loopback0',
|
82
|
+
expect(subject.set_shutdown('Loopback0', enable: false)).to be_truthy
|
83
83
|
expect(subject.get('Loopback0')[:shutdown]).to be_truthy
|
84
84
|
end
|
85
85
|
|
86
|
-
it '
|
86
|
+
it 'enable the interface' do
|
87
87
|
node.config(['interface Loopback0', 'shutdown'])
|
88
88
|
expect(subject.get('Loopback0')[:shutdown]).to be_truthy
|
89
|
-
expect(subject.set_shutdown('Loopback0',
|
89
|
+
expect(subject.set_shutdown('Loopback0', enable: true)).to be_truthy
|
90
90
|
expect(subject.get('Loopback0')[:shutdown]).to be_falsy
|
91
91
|
end
|
92
92
|
end
|
@@ -70,17 +70,17 @@ describe Rbeapi::Api::Interfaces do
|
|
70
70
|
end
|
71
71
|
|
72
72
|
describe '#set_shutdown' do
|
73
|
-
it '
|
73
|
+
it 'shutdown the interface' do
|
74
74
|
node.config(['interface Ethernet1', 'no shutdown'])
|
75
75
|
expect(subject.get('Ethernet1')[:shutdown]).to be_falsy
|
76
|
-
expect(subject.set_shutdown('Ethernet1',
|
76
|
+
expect(subject.set_shutdown('Ethernet1', enable: false)).to be_truthy
|
77
77
|
expect(subject.get('Ethernet1')[:shutdown]).to be_truthy
|
78
78
|
end
|
79
79
|
|
80
|
-
it '
|
80
|
+
it 'enable the interface' do
|
81
81
|
node.config(['interface Ethernet1', :shutdown])
|
82
82
|
expect(subject.get('Ethernet1')[:shutdown]).to be_truthy
|
83
|
-
expect(subject.set_shutdown('Ethernet1',
|
83
|
+
expect(subject.set_shutdown('Ethernet1', enable: true)).to be_truthy
|
84
84
|
expect(subject.get('Ethernet1')[:shutdown]).to be_falsy
|
85
85
|
end
|
86
86
|
end
|
@@ -89,14 +89,14 @@ describe Rbeapi::Api::Interfaces do
|
|
89
89
|
it 'sets the sflow value to true' do
|
90
90
|
node.config(['interface Ethernet1', 'no sflow enable'])
|
91
91
|
expect(subject.get('Ethernet1')[:sflow]).to be_falsy
|
92
|
-
expect(subject.set_sflow('Ethernet1',
|
92
|
+
expect(subject.set_sflow('Ethernet1', enable: true)).to be_truthy
|
93
93
|
expect(subject.get('Ethernet1')[:sflow]).to be_truthy
|
94
94
|
end
|
95
95
|
|
96
96
|
it 'sets the sflow value to false' do
|
97
97
|
node.config(['interface Ethernet1', 'sflow enable'])
|
98
98
|
expect(subject.get('Ethernet1')[:sflow]).to be_truthy
|
99
|
-
expect(subject.set_sflow('Ethernet1',
|
99
|
+
expect(subject.set_sflow('Ethernet1', enable: false)).to be_truthy
|
100
100
|
expect(subject.get('Ethernet1')[:sflow]).to be_falsy
|
101
101
|
end
|
102
102
|
end
|
@@ -82,17 +82,17 @@ describe Rbeapi::Api::Interfaces do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
describe '#set_shutdown' do
|
85
|
-
it '
|
85
|
+
it 'shutdown the interface' do
|
86
86
|
node.config(['interface Port-Channel1', 'no shutdown'])
|
87
87
|
expect(subject.get('Port-Channel1')[:shutdown]).to be_falsy
|
88
|
-
expect(subject.set_shutdown('Port-Channel1',
|
88
|
+
expect(subject.set_shutdown('Port-Channel1', enable: false)).to be_truthy
|
89
89
|
expect(subject.get('Port-Channel1')[:shutdown]).to be_truthy
|
90
90
|
end
|
91
91
|
|
92
|
-
it '
|
93
|
-
node.config(['interface Port-Channel1',
|
92
|
+
it 'enable the interface' do
|
93
|
+
node.config(['interface Port-Channel1', 'shutdown'])
|
94
94
|
expect(subject.get('Port-Channel1')[:shutdown]).to be_truthy
|
95
|
-
expect(subject.set_shutdown('Port-Channel1',
|
95
|
+
expect(subject.set_shutdown('Port-Channel1', enable: true)).to be_truthy
|
96
96
|
expect(subject.get('Port-Channel1')[:shutdown]).to be_falsy
|
97
97
|
end
|
98
98
|
end
|
@@ -183,7 +183,7 @@ describe Rbeapi::Api::Interfaces do
|
|
183
183
|
node.config(['interface Port-Channel1',
|
184
184
|
'port-channel lacp fallback static'])
|
185
185
|
expect(subject.get('Port-Channel1')[:lacp_fallback]).to eq('static')
|
186
|
-
expect(subject.set_lacp_fallback('Port-Channel1',
|
186
|
+
expect(subject.set_lacp_fallback('Port-Channel1', enable: false))
|
187
187
|
.to be_truthy
|
188
188
|
expect(subject.get('Port-Channel1')[:lacp_fallback]).to eq('disabled')
|
189
189
|
end
|
@@ -77,17 +77,17 @@ describe Rbeapi::Api::Interfaces do
|
|
77
77
|
end
|
78
78
|
|
79
79
|
describe '#set_shutdown' do
|
80
|
-
it '
|
80
|
+
it 'shutdown the interface' do
|
81
81
|
node.config(['interface Vxlan1', 'no shutdown'])
|
82
82
|
expect(subject.get('Vxlan1')[:shutdown]).to be_falsy
|
83
|
-
expect(subject.set_shutdown('Vxlan1',
|
83
|
+
expect(subject.set_shutdown('Vxlan1', enable: false)).to be_truthy
|
84
84
|
expect(subject.get('Vxlan1')[:shutdown]).to be_truthy
|
85
85
|
end
|
86
86
|
|
87
|
-
it '
|
87
|
+
it 'enable the interface' do
|
88
88
|
node.config(['interface Vxlan1', 'shutdown'])
|
89
89
|
expect(subject.get('Vxlan1')[:shutdown]).to be_truthy
|
90
|
-
expect(subject.set_shutdown('Vxlan1',
|
90
|
+
expect(subject.set_shutdown('Vxlan1', enable: true)).to be_truthy
|
91
91
|
expect(subject.get('Vxlan1')[:shutdown]).to be_falsy
|
92
92
|
end
|
93
93
|
end
|
@@ -76,6 +76,22 @@ describe Rbeapi::Api::Ipinterfaces do
|
|
76
76
|
.to be_truthy
|
77
77
|
expect(subject.get('Ethernet1')[:address]).to eq('77.99.99.99/24')
|
78
78
|
end
|
79
|
+
|
80
|
+
it 'negates the address value' do
|
81
|
+
expect(subject.set_address('Ethernet1', value: '77.99.99.99/24'))
|
82
|
+
.to be_truthy
|
83
|
+
expect(subject.get('Ethernet1')[:address]).to eq('77.99.99.99/24')
|
84
|
+
expect(subject.set_address('Ethernet1', enable: false)).to be_truthy
|
85
|
+
expect(subject.get('Ethernet1')[:address]).to be_empty
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'defaults the address value' do
|
89
|
+
expect(subject.set_address('Ethernet1', value: '77.99.99.99/24'))
|
90
|
+
.to be_truthy
|
91
|
+
expect(subject.get('Ethernet1')[:address]).to eq('77.99.99.99/24')
|
92
|
+
expect(subject.set_address('Ethernet1', default: true)).to be_truthy
|
93
|
+
expect(subject.get('Ethernet1')[:address]).to be_empty
|
94
|
+
end
|
79
95
|
end
|
80
96
|
|
81
97
|
describe '#set_mtu' do
|
@@ -89,6 +105,20 @@ describe Rbeapi::Api::Ipinterfaces do
|
|
89
105
|
expect(subject.set_mtu('Ethernet1', value: '2000')).to be_truthy
|
90
106
|
expect(subject.get('Ethernet1')[:mtu]).to eq('2000')
|
91
107
|
end
|
108
|
+
|
109
|
+
it 'negates the mtu' do
|
110
|
+
expect(subject.set_mtu('Ethernet1', value: '2000')).to be_truthy
|
111
|
+
expect(subject.get('Ethernet1')[:mtu]).to eq('2000')
|
112
|
+
expect(subject.set_mtu('Ethernet1', enable: false)).to be_truthy
|
113
|
+
expect(subject.get('Ethernet1')[:mtu]).to eq('1500')
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'defaults the mtu' do
|
117
|
+
expect(subject.set_mtu('Ethernet1', value: '2000')).to be_truthy
|
118
|
+
expect(subject.get('Ethernet1')[:mtu]).to eq('2000')
|
119
|
+
expect(subject.set_mtu('Ethernet1', default: true)).to be_truthy
|
120
|
+
expect(subject.get('Ethernet1')[:mtu]).to eq('1500')
|
121
|
+
end
|
92
122
|
end
|
93
123
|
|
94
124
|
describe '#set_helper_addresses' do
|
@@ -106,5 +136,19 @@ describe Rbeapi::Api::Ipinterfaces do
|
|
106
136
|
expect(subject.get('Ethernet1')[:helper_addresses].sort)
|
107
137
|
.to eq(helpers.sort)
|
108
138
|
end
|
139
|
+
|
140
|
+
it 'negates the helper addresses on the interface' do
|
141
|
+
expect(subject.get('Ethernet1')[:helper_addresses]).to be_empty
|
142
|
+
expect(subject.set_helper_addresses('Ethernet1', enable: false))
|
143
|
+
.to be_truthy
|
144
|
+
expect(subject.get('Ethernet1')[:helper_addresses].sort).to be_empty
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'default the helper addresses on the interface' do
|
148
|
+
expect(subject.get('Ethernet1')[:helper_addresses]).to be_empty
|
149
|
+
expect(subject.set_helper_addresses('Ethernet1', default: true))
|
150
|
+
.to be_truthy
|
151
|
+
expect(subject.get('Ethernet1')[:helper_addresses].sort).to be_empty
|
152
|
+
end
|
109
153
|
end
|
110
154
|
end
|
@@ -31,16 +31,32 @@ describe Rbeapi::Api::Logging do
|
|
31
31
|
it 'configures global logging enabled' do
|
32
32
|
node.config('no logging on')
|
33
33
|
expect(subject.get[:enable]).to be_falsy
|
34
|
-
expect(subject.set_enable(
|
34
|
+
expect(subject.set_enable(enable: true)).to be_truthy
|
35
35
|
expect(subject.get[:enable]).to be_truthy
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'configures global logging disabled' do
|
39
39
|
node.config('logging on')
|
40
40
|
expect(subject.get[:enable]).to be_truthy
|
41
|
-
expect(subject.set_enable(
|
41
|
+
expect(subject.set_enable(enable: false)).to be_truthy
|
42
42
|
expect(subject.get[:enable]).to be_falsy
|
43
43
|
end
|
44
|
+
|
45
|
+
it 'defaults the global logging' do
|
46
|
+
# Default is on
|
47
|
+
|
48
|
+
# Validate the on case
|
49
|
+
node.config('logging on')
|
50
|
+
expect(subject.get[:enable]).to be_truthy
|
51
|
+
expect(subject.set_enable(default: true)).to be_truthy
|
52
|
+
expect(subject.get[:enable]).to be_truthy
|
53
|
+
|
54
|
+
# Validate the off case
|
55
|
+
node.config('no logging on')
|
56
|
+
expect(subject.get[:enable]).to be_falsy
|
57
|
+
expect(subject.set_enable(default: true)).to be_truthy
|
58
|
+
expect(subject.get[:enable]).to be_truthy
|
59
|
+
end
|
44
60
|
end
|
45
61
|
|
46
62
|
describe '#add_host' do
|