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/radius.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
|
@@ -46,7 +46,7 @@ module Rbeapi
|
|
46
46
|
|
47
47
|
# Regular expression to extract a radius server's attributes from the
|
48
48
|
# running-configuration text. The explicit [ ] spaces enable line
|
49
|
-
#
|
49
|
+
# wrapping and indentation with the /x flag.
|
50
50
|
SERVER_REGEXP = /radius-server[ ]host[ ](.*?)
|
51
51
|
(?:[ ]vrf[ ]([^\s]+))?
|
52
52
|
(?:[ ]auth-port[ ](\d+))?
|
@@ -62,7 +62,7 @@ module Rbeapi
|
|
62
62
|
# method.
|
63
63
|
#
|
64
64
|
# The resource hash returned contains the following information:
|
65
|
-
# * key: (String) the key either in
|
65
|
+
# * key: (String) the key either in plain text or hashed format
|
66
66
|
# * key_format: (Fixnum) e.g. 0 or 7
|
67
67
|
# * timeout: (Fixnum) seconds before the timeout period ends
|
68
68
|
# * retransmit: (Fixnum), e.g. 3, attempts after first timeout expiry.
|
@@ -81,7 +81,7 @@ module Rbeapi
|
|
81
81
|
end
|
82
82
|
|
83
83
|
##
|
84
|
-
# parse_time scans the nodes current
|
84
|
+
# parse_time scans the nodes current configuration and parse the
|
85
85
|
# radius-server timeout value. The timeout value is expected to always
|
86
86
|
# be present in the config
|
87
87
|
#
|
@@ -96,7 +96,7 @@ module Rbeapi
|
|
96
96
|
|
97
97
|
##
|
98
98
|
# parse_retransmit scans the cnodes current configuration and parses the
|
99
|
-
# radius-server retransmit value. the
|
99
|
+
# radius-server retransmit value. the retransmit value is expected to
|
100
100
|
# always be present in the config
|
101
101
|
#
|
102
102
|
# @api private
|
@@ -134,7 +134,7 @@ module Rbeapi
|
|
134
134
|
# The resource hash returned contains the following information:
|
135
135
|
# * hostname: hostname or ip address
|
136
136
|
# * vrf: (String) vrf name
|
137
|
-
# * key: (String) the key either in
|
137
|
+
# * key: (String) the key either in plain text or hashed format
|
138
138
|
# * key_format: (Fixnum) e.g. 0 or 7
|
139
139
|
# * timeout: (Fixnum) seconds before the timeout period ends
|
140
140
|
# * retransmit: (Integer), e.g. 3, attempts after first timeout expiry.
|
@@ -164,8 +164,8 @@ module Rbeapi
|
|
164
164
|
private :parse_servers
|
165
165
|
|
166
166
|
##
|
167
|
-
# set_global_key configures the global radius-server key. If the
|
168
|
-
# option is
|
167
|
+
# set_global_key configures the global radius-server key. If the enable
|
168
|
+
# option is false, radius-server key is configured using the no
|
169
169
|
# keyword. If the default option is specified, radius-server key is
|
170
170
|
# configured using the default keyword. If both options are specified,
|
171
171
|
# the default keyword option takes precedence.
|
@@ -181,15 +181,19 @@ module Rbeapi
|
|
181
181
|
# in the nodes running configuration
|
182
182
|
#
|
183
183
|
# @option [Fixnum] :key_format The format of the key to be passed to the
|
184
|
-
# nodes running configuration. Valid values are 0 (
|
184
|
+
# nodes running configuration. Valid values are 0 (clear text) or 7
|
185
185
|
# (encrypted). The default value is 0 if format is not provided.
|
186
186
|
#
|
187
|
+
# @option :opts [Boolean] :enable If false then the command is
|
188
|
+
# negated. Default is true.
|
189
|
+
#
|
187
190
|
# @option [Boolean] :default Configures the radius-server key using the
|
188
191
|
# default keyword argument
|
189
192
|
#
|
190
193
|
# @return [Boolean] returns true if the commands complete successfully
|
191
194
|
def set_global_key(opts = {})
|
192
195
|
value = opts[:value]
|
196
|
+
enable = opts.fetch(:enable, true)
|
193
197
|
key_format = opts[:key_format] || 0
|
194
198
|
default = opts[:default] || false
|
195
199
|
|
@@ -197,7 +201,7 @@ module Rbeapi
|
|
197
201
|
when true
|
198
202
|
cmds = 'default radius-server key'
|
199
203
|
when false
|
200
|
-
if
|
204
|
+
if enable
|
201
205
|
cmds = "radius-server key #{key_format} #{value}"
|
202
206
|
else
|
203
207
|
cmds = 'no radius-server key'
|
@@ -208,7 +212,7 @@ module Rbeapi
|
|
208
212
|
|
209
213
|
##
|
210
214
|
# set_global_timeout configures the radius-server timeout value. If the
|
211
|
-
#
|
215
|
+
# enable option is false, then radius-server timeout is configured
|
212
216
|
# using the no keyword. If the default option is specified, radius-server
|
213
217
|
# timeout is configured using the default keyword. If both options are
|
214
218
|
# specified then the default keyword takes precedence.
|
@@ -224,30 +228,21 @@ module Rbeapi
|
|
224
228
|
# radius-server timeout value to. This value should be in the range of
|
225
229
|
# 1 to 1000
|
226
230
|
#
|
231
|
+
# @option :opts [Boolean] :enable If false then the command is
|
232
|
+
# negated. Default is true.
|
233
|
+
#
|
227
234
|
# @option [Boolean] :default Configures the radius-server timeout value
|
228
235
|
# using the default keyword.
|
229
236
|
#
|
230
237
|
# @return [Boolean] returns true if the commands complete successfully
|
231
238
|
def set_global_timeout(opts = {})
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
case default
|
236
|
-
when true
|
237
|
-
cmds = 'default radius-server timeout'
|
238
|
-
when false
|
239
|
-
if value
|
240
|
-
cmds = "radius-server timeout #{value}"
|
241
|
-
else
|
242
|
-
cmds = 'no radius-server timeout'
|
243
|
-
end
|
244
|
-
end
|
245
|
-
configure cmds
|
239
|
+
cmd = command_builder('radius-server timeout', opts)
|
240
|
+
configure cmd
|
246
241
|
end
|
247
242
|
|
248
243
|
##
|
249
|
-
# set_global_retransmit configures the global radius-server
|
250
|
-
# value. If the
|
244
|
+
# set_global_retransmit configures the global radius-server retransmit
|
245
|
+
# value. If the enable option is false, then the radius-server retransmit
|
251
246
|
# value is configured using the no keyword. If the default option is
|
252
247
|
# specified, the radius-server retransmit value is configured using the
|
253
248
|
# default keyword. If both options are specified then the default keyword
|
@@ -258,31 +253,22 @@ module Rbeapi
|
|
258
253
|
# @commands
|
259
254
|
# radius-server retransmit <value>
|
260
255
|
# no radius-server retransmit
|
261
|
-
# default radius-server
|
256
|
+
# default radius-server retransmit
|
262
257
|
#
|
263
|
-
# @option [String, Fixnum] :value The
|
258
|
+
# @option [String, Fixnum] :value The value to set the global
|
264
259
|
# radius-server retransmit value to. This value should be in the range
|
265
260
|
# of 1 to 100
|
266
261
|
#
|
262
|
+
# @option :opts [Boolean] :enable If false then the command is
|
263
|
+
# negated. Default is true.
|
264
|
+
#
|
267
265
|
# @option [Boolean] :default Configures the radius-server retransmit
|
268
266
|
# value using the default keyword
|
269
267
|
#
|
270
268
|
# @return [Boolean] returns true if the commands complete successfully
|
271
269
|
def set_global_retransmit(opts = {})
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
case default
|
276
|
-
when true
|
277
|
-
cmds = 'default radius-server retransmit'
|
278
|
-
when false
|
279
|
-
if value
|
280
|
-
cmds = "radius-server retransmit #{value}"
|
281
|
-
else
|
282
|
-
cmds = 'no radius-server retransmit'
|
283
|
-
end
|
284
|
-
end
|
285
|
-
configure cmds
|
270
|
+
cmd = command_builder('radius-server retransmit', opts)
|
271
|
+
configure cmd
|
286
272
|
end
|
287
273
|
|
288
274
|
##
|
data/lib/rbeapi/api/snmp.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,11 +39,9 @@ module Rbeapi
|
|
39
39
|
module Api
|
40
40
|
##
|
41
41
|
# The Snmp class provides a class implementation for working with the
|
42
|
-
# nodes SNMP
|
42
|
+
# nodes SNMP configuration entity. This class presents an abstraction
|
43
43
|
# of the node's snmp configuration from the running config.
|
44
44
|
#
|
45
|
-
# rubocop:disable Metrics/ClassLength
|
46
|
-
#
|
47
45
|
# @eos_version 4.13.7M
|
48
46
|
class Snmp < Entity
|
49
47
|
DEFAULT_SNMP_LOCATION = ''
|
@@ -145,7 +143,7 @@ module Rbeapi
|
|
145
143
|
##
|
146
144
|
# parse_communities scans the running config from the node and parses all
|
147
145
|
# of the configure snmp community strings. If there are no configured
|
148
|
-
# snmp community strings, the
|
146
|
+
# snmp community strings, the community value is set to an empty array.
|
149
147
|
# The returned hash is intended to be merged into the global snmp
|
150
148
|
# resource hash
|
151
149
|
#
|
@@ -164,8 +162,8 @@ module Rbeapi
|
|
164
162
|
|
165
163
|
##
|
166
164
|
# parse_notifications scans the running configuration and parses all of
|
167
|
-
# the snmp trap
|
168
|
-
# configuration is in the running config. The returned hash is
|
165
|
+
# the snmp trap notifications configuration. It is expected the trap
|
166
|
+
# configuration is in the running config. The returned hash is intended
|
169
167
|
# to be merged into the resource hash
|
170
168
|
def parse_notifications
|
171
169
|
traps = config.scan(/(default|no)?[ ]?snmp-server enable traps (.+)$/)
|
@@ -181,7 +179,7 @@ module Rbeapi
|
|
181
179
|
private :parse_notifications
|
182
180
|
|
183
181
|
##
|
184
|
-
# set_notification configures the snmp trap
|
182
|
+
# set_notification configures the snmp trap notification for the
|
185
183
|
# specified trap. The name option accepts the snmp trap name to
|
186
184
|
# configure or the keyword all to globally enable or disable
|
187
185
|
# notifications. If the optional state argument is not provided then the
|
@@ -210,11 +208,10 @@ module Rbeapi
|
|
210
208
|
|
211
209
|
##
|
212
210
|
# set_location updates the snmp location value in the nodes running
|
213
|
-
# configuration. If
|
214
|
-
#
|
215
|
-
#
|
216
|
-
#
|
217
|
-
# precedence over the value keyword.
|
211
|
+
# configuration. If enable is false, then the snmp location value is
|
212
|
+
# negated using the no keyword. If the default keyword is set to true,
|
213
|
+
# then the snmp location value is defaulted using the default keyword.
|
214
|
+
# The default parameter takes precedence over the enable keyword.
|
218
215
|
#
|
219
216
|
# @eos_version 4.13.7M
|
220
217
|
#
|
@@ -227,34 +224,25 @@ module Rbeapi
|
|
227
224
|
#
|
228
225
|
# @option opts [string] :value The snmp location value to configure
|
229
226
|
#
|
227
|
+
# @option :opts [Boolean] :enable If false then the command is
|
228
|
+
# negated. Default is true.
|
229
|
+
#
|
230
230
|
# @option opts [Boolean] :default Configure the snmp location value
|
231
231
|
# using the default keyword
|
232
232
|
#
|
233
233
|
# @return [Boolean] returns true if the command completed successfully
|
234
234
|
def set_location(opts = {})
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
case default
|
239
|
-
when true
|
240
|
-
cmds = ['default snmp-server location']
|
241
|
-
when false
|
242
|
-
if value.nil?
|
243
|
-
cmds = 'no snmp-server location'
|
244
|
-
else
|
245
|
-
cmds = "snmp-server location #{value}"
|
246
|
-
end
|
247
|
-
end
|
248
|
-
configure(cmds)
|
235
|
+
cmd = command_builder('snmp-server location', opts)
|
236
|
+
configure(cmd)
|
249
237
|
end
|
250
238
|
|
251
239
|
##
|
252
240
|
# set_contact updates the snmp contact value in the nodes running
|
253
|
-
# configuration. If
|
241
|
+
# configuration. If enable is false in the opts Hash then
|
254
242
|
# the snmp contact value is negated using the no keyword. If the
|
255
243
|
# default keyword is set to true, then the snmp contact value is
|
256
244
|
# defaulted using the default keyword. The default parameter takes
|
257
|
-
# precedence over the
|
245
|
+
# precedence over the enable keyword.
|
258
246
|
#
|
259
247
|
# @eos_version 4.13.7M
|
260
248
|
#
|
@@ -267,34 +255,25 @@ module Rbeapi
|
|
267
255
|
#
|
268
256
|
# @option opts [string] :value The snmp contact value to configure
|
269
257
|
#
|
258
|
+
# @option :opts [Boolean] :enable If false then the command is
|
259
|
+
# negated. Default is true.
|
260
|
+
#
|
270
261
|
# @option opts [Boolean] :default Configures the snmp contact value
|
271
262
|
# using the default keyword
|
272
263
|
#
|
273
264
|
# @return [Boolean] returns true if the command completed successfully
|
274
265
|
def set_contact(opts = {})
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
case default
|
279
|
-
when true
|
280
|
-
cmds = ['default snmp-server contact']
|
281
|
-
when false
|
282
|
-
if value.nil?
|
283
|
-
cmds = 'no snmp-server contact'
|
284
|
-
else
|
285
|
-
cmds = "snmp-server contact #{value}"
|
286
|
-
end
|
287
|
-
end
|
288
|
-
configure(cmds)
|
266
|
+
cmd = command_builder('snmp-server contact', opts)
|
267
|
+
configure(cmd)
|
289
268
|
end
|
290
269
|
|
291
270
|
##
|
292
271
|
# set_chassis_id updates the snmp chassis id value in the nodes
|
293
|
-
# running configuration. If
|
272
|
+
# running configuration. If enable is false in the opts
|
294
273
|
# Hash then the snmp chassis id value is negated using the no
|
295
274
|
# keyword. If the default keyword is set to true, then the snmp
|
296
275
|
# chassis id value is defaulted using the default keyword. The default
|
297
|
-
# keyword takes precedence over the
|
276
|
+
# keyword takes precedence over the enable keyword.
|
298
277
|
#
|
299
278
|
# @eos_version 4.13.7M
|
300
279
|
#
|
@@ -307,34 +286,25 @@ module Rbeapi
|
|
307
286
|
#
|
308
287
|
# @option opts [string] :value The snmp chassis id value to configure
|
309
288
|
#
|
289
|
+
# @option :opts [Boolean] :enable If false then the command is
|
290
|
+
# negated. Default is true.
|
291
|
+
#
|
310
292
|
# @option opts [Boolean] :default Configures the snmp chassis id value
|
311
293
|
# using the default keyword
|
312
294
|
#
|
313
295
|
# @return [Boolean] returns true if the command completed successfully
|
314
296
|
def set_chassis_id(opts = {})
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
case default
|
319
|
-
when true
|
320
|
-
cmds = 'default snmp-server chassis-id'
|
321
|
-
when false
|
322
|
-
if value.nil?
|
323
|
-
cmds = 'no snmp-server chassis-id'
|
324
|
-
else
|
325
|
-
cmds = "snmp-server chassis-id #{value}"
|
326
|
-
end
|
327
|
-
end
|
328
|
-
configure(cmds)
|
297
|
+
cmd = command_builder('snmp-server chassis-id', opts)
|
298
|
+
configure(cmd)
|
329
299
|
end
|
330
300
|
|
331
301
|
##
|
332
302
|
# set_source_interface updates the snmp source interface value in the
|
333
|
-
# nodes running configuration. If
|
303
|
+
# nodes running configuration. If enable is false in the opts
|
334
304
|
# Hash then the snmp source interface is negated using the no keyword.
|
335
|
-
# If the
|
336
|
-
# value is defaulted using the default keyword. The
|
337
|
-
# takes precedence over the
|
305
|
+
# If the default keyword is set to true, then the snmp source interface
|
306
|
+
# value is defaulted using the default keyword. The default keyword
|
307
|
+
# takes precedence over the enable keyword.
|
338
308
|
#
|
339
309
|
# @eos_version 4.13.7M
|
340
310
|
#
|
@@ -348,25 +318,15 @@ module Rbeapi
|
|
348
318
|
# @option opts [string] :value The snmp source interface value to
|
349
319
|
# configure. This method will not ensure the interface is present
|
350
320
|
# in the configuration
|
321
|
+
# @option :opts [Boolean] :enable If false then the command is
|
322
|
+
# negated. Default is true.
|
351
323
|
# @option opts [Boolean] :default Configures the snmp source interface
|
352
324
|
# value using the default keyword
|
353
325
|
#
|
354
326
|
# @return [Boolean] returns true if the command completed successfully
|
355
327
|
def set_source_interface(opts = {})
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
case default
|
360
|
-
when true
|
361
|
-
cmds = ['default snmp-server source-interface']
|
362
|
-
when false
|
363
|
-
if value.nil?
|
364
|
-
cmds = 'no snmp-server source-interface'
|
365
|
-
else
|
366
|
-
cmds = "snmp-server source-interface #{value}"
|
367
|
-
end
|
368
|
-
end
|
369
|
-
configure(cmds)
|
328
|
+
cmd = command_builder('snmp-server source-interface', opts)
|
329
|
+
configure(cmd)
|
370
330
|
end
|
371
331
|
|
372
332
|
##
|
@@ -407,8 +367,8 @@ module Rbeapi
|
|
407
367
|
|
408
368
|
##
|
409
369
|
# set_community_acl configures the acl to apply to the specified
|
410
|
-
# community name.
|
411
|
-
#
|
370
|
+
# community name. When enable is true, it will remove the
|
371
|
+
# the named community and then add the new acl entry.
|
412
372
|
#
|
413
373
|
# @eos_version 4.13.7M
|
414
374
|
#
|
@@ -419,16 +379,27 @@ module Rbeapi
|
|
419
379
|
# @param [String] :name The name of the snmp community to add to the
|
420
380
|
# nodes running configuration.
|
421
381
|
#
|
422
|
-
# @
|
423
|
-
#
|
382
|
+
# @param [Hash] opts The configuration parameters
|
383
|
+
#
|
384
|
+
# @option opts [String] :value The name of the acl to apply to the snmp
|
385
|
+
# community in the nodes config. If nil, then the community name
|
386
|
+
# allows access to all objects.
|
387
|
+
# @option opts [Boolean] :enable If false then the command is
|
388
|
+
# negated. Default is true.
|
389
|
+
# @option opts [Boolean] :default Configure the snmp community name
|
390
|
+
# using the default keyword. Default takes precedence over enable.
|
424
391
|
#
|
425
392
|
# @return [Boolean] returns true if the command completed successfully
|
426
393
|
def set_community_acl(name, opts = {})
|
427
394
|
value = opts[:value]
|
395
|
+
enable = opts.fetch(:enable, true)
|
396
|
+
default = opts.fetch(:default, false)
|
397
|
+
# Default is same as negate for this command
|
398
|
+
enable = default ? false : enable
|
428
399
|
communities = parse_communities[:communities]
|
429
400
|
access = communities[name][:access] if communities.include?(name)
|
430
|
-
cmds = ["no snmp-server community #{name}"
|
431
|
-
|
401
|
+
cmds = ["no snmp-server community #{name}"]
|
402
|
+
cmds << "snmp-server community #{name} #{access} #{value}" if enable
|
432
403
|
configure cmds
|
433
404
|
end
|
434
405
|
|
@@ -38,51 +38,98 @@ module Rbeapi
|
|
38
38
|
# Rbeapi::Api
|
39
39
|
module Api
|
40
40
|
##
|
41
|
-
# The
|
41
|
+
# The Staticroutes class provides a configuration instance for working
|
42
42
|
# with static routes in EOS.
|
43
43
|
#
|
44
|
-
class
|
44
|
+
class Staticroutes < Entity
|
45
45
|
##
|
46
46
|
# Returns the static routes configured on the node
|
47
47
|
#
|
48
48
|
# @example
|
49
49
|
# {
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
50
|
+
# [
|
51
|
+
# {
|
52
|
+
# destination: <route_dest/masklen>,
|
53
|
+
# nexthop: next_hop>,
|
54
|
+
# distance: <integer>,
|
55
|
+
# tag: <integer, nil>,
|
56
|
+
# name: <string, nil>
|
57
|
+
# },
|
58
|
+
# ...
|
59
|
+
# ]
|
54
60
|
# }
|
55
61
|
#
|
56
|
-
# @returns [Hash
|
57
|
-
# configured static routes on the node as a Ruby
|
62
|
+
# @returns [Array<Hash, Hash>] The method will return all of the
|
63
|
+
# configured static routes on the node as a Ruby array object
|
64
|
+
# containing a list of hashes with each hash describing a route. If
|
58
65
|
# there are no static routes configured, this method will return
|
59
|
-
# an empty
|
66
|
+
# an empty array.
|
60
67
|
def getall
|
61
68
|
regex = /
|
62
69
|
(?<=^ip\sroute\s)
|
63
|
-
([^\s]+)\s #
|
64
|
-
([^\s$]+) #
|
65
|
-
(
|
66
|
-
(
|
70
|
+
([^\s]+)\s # capture destination
|
71
|
+
([^\s$]+) # capture next hop IP or egress interface
|
72
|
+
[\s|$](\d+) # capture metric (distance)
|
73
|
+
[\s|$]{1}(?:tag\s(\d+))? # catpure route tag
|
67
74
|
[\s|$]{1}(?:name\s(.+))? # capture route name
|
68
75
|
/x
|
69
76
|
|
70
77
|
routes = config.scan(regex)
|
71
78
|
|
72
|
-
routes.each_with_object(
|
73
|
-
|
74
|
-
|
79
|
+
routes.each_with_object([]) do |route, arry|
|
80
|
+
arry << { destination: route[0],
|
81
|
+
nexthop: route[1],
|
82
|
+
distance: route[2],
|
83
|
+
tag: route[3],
|
84
|
+
name: route[4] }
|
75
85
|
end
|
76
86
|
end
|
77
87
|
|
78
|
-
|
79
|
-
|
80
|
-
|
88
|
+
##
|
89
|
+
# Creates a static route in EOS. May add or overwrite an existing route.
|
90
|
+
#
|
91
|
+
# @commands
|
92
|
+
# ip route <destination> <nexthop> [router_ip] [distance] [tag <tag>]
|
93
|
+
# [name <name>]
|
94
|
+
#
|
95
|
+
# @param [String] :destination The destination and prefix matching the
|
96
|
+
# route(s). Ex '192.168.0.2/24'.
|
97
|
+
# @param [String] :nexthop The nexthop for this entry, which may an IP
|
98
|
+
# address or interface name.
|
99
|
+
# @param [Hash] :opts Additional options for the route entry.
|
100
|
+
# @option :opts [String] :router_ip If nexthop is an egress interface,
|
101
|
+
# router_ip specifies the router to which traffic will be forwarded
|
102
|
+
# @option :opts [String] :distance The administrative distance (metric)
|
103
|
+
# @option :opts [String] :tag The route tag
|
104
|
+
# @option :opts [String] :name A route name
|
105
|
+
#
|
106
|
+
# @return [Boolean] returns true on success
|
107
|
+
def create(destination, nexthop, opts = {})
|
108
|
+
cmd = "ip route #{destination} #{nexthop}"
|
109
|
+
cmd << " #{opts[:router_ip]}" if opts[:router_ip]
|
110
|
+
cmd << " #{opts[:distance]}" if opts[:distance]
|
111
|
+
cmd << " tag #{opts[:tag]}" if opts[:tag]
|
112
|
+
cmd << " name #{opts[:name]}" if opts[:name]
|
81
113
|
configure cmd
|
82
114
|
end
|
83
115
|
|
84
|
-
|
85
|
-
|
116
|
+
##
|
117
|
+
# Removes a given route from EOS. May remove multiple routes if nexthop
|
118
|
+
# is not specified.
|
119
|
+
#
|
120
|
+
# @commands
|
121
|
+
# no ip route <destination> [nexthop]
|
122
|
+
#
|
123
|
+
# @param [String] :destination The destination and prefix matching the
|
124
|
+
# route(s). Ex '192.168.0.2/24'.
|
125
|
+
# @param [String] :nexthop The nexthop for this entry, which may an IP
|
126
|
+
# address or interface name.
|
127
|
+
#
|
128
|
+
# @return [Boolean] returns true on success
|
129
|
+
def delete(destination, nexthop = nil)
|
130
|
+
cmd = "no ip route #{destination}"
|
131
|
+
cmd << " #{nexthop}" if nexthop
|
132
|
+
configure cmd
|
86
133
|
end
|
87
134
|
end
|
88
135
|
end
|