rbeapi 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|