rbeapi 0.1.0 → 0.2.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.
Files changed (77) hide show
  1. data/.gitignore +5 -0
  2. data/.rubocop.yml +21 -0
  3. data/CHANGELOG.md +24 -0
  4. data/Gemfile +3 -1
  5. data/Guardfile +3 -3
  6. data/README.md +92 -17
  7. data/Rakefile +99 -4
  8. data/gems/README.rst +4 -0
  9. data/gems/inifile/.gitignore +2 -0
  10. data/gems/inifile/README.rst +5 -0
  11. data/gems/inifile/inifile.spec.tmpl +84 -0
  12. data/gems/net_http_unix/.gitignore +2 -0
  13. data/gems/net_http_unix/README.rst +5 -0
  14. data/gems/net_http_unix/net_http_unix.spec.tmpl +54 -0
  15. data/gems/netaddr/README.rst +5 -0
  16. data/gems/netaddr/netaddr.spec.tmpl +50 -0
  17. data/lib/rbeapi/api/aaa.rb +14 -17
  18. data/lib/rbeapi/api/acl.rb +276 -0
  19. data/lib/rbeapi/api/dns.rb +7 -4
  20. data/lib/rbeapi/api/interfaces.rb +239 -239
  21. data/lib/rbeapi/api/ipinterfaces.rb +5 -3
  22. data/lib/rbeapi/api/logging.rb +8 -5
  23. data/lib/rbeapi/api/mlag.rb +45 -127
  24. data/lib/rbeapi/api/ntp.rb +1 -4
  25. data/lib/rbeapi/api/ospf.rb +16 -13
  26. data/lib/rbeapi/api/prefixlists.rb +4 -4
  27. data/lib/rbeapi/api/radius.rb +34 -25
  28. data/lib/rbeapi/api/routemaps.rb +16 -10
  29. data/lib/rbeapi/api/snmp.rb +26 -13
  30. data/lib/rbeapi/api/staticroutes.rb +6 -5
  31. data/lib/rbeapi/api/stp.rb +77 -18
  32. data/lib/rbeapi/api/switchports.rb +20 -12
  33. data/lib/rbeapi/api/system.rb +6 -6
  34. data/lib/rbeapi/api/tacacs.rb +9 -6
  35. data/lib/rbeapi/api/varp.rb +15 -10
  36. data/lib/rbeapi/api/vlans.rb +5 -6
  37. data/lib/rbeapi/api.rb +56 -16
  38. data/lib/rbeapi/client.rb +85 -50
  39. data/lib/rbeapi/eapilib.rb +95 -56
  40. data/lib/rbeapi/netdev/snmp.rb +7 -16
  41. data/lib/rbeapi/utils.rb +3 -5
  42. data/lib/rbeapi/version.rb +1 -1
  43. data/rbeapi.gemspec +4 -2
  44. data/rbeapi.spec.tmpl +72 -0
  45. data/spec/support/fixtures.rb +6 -4
  46. data/spec/support/shared_examples_for_api_modules.rb +3 -18
  47. data/spec/system/api_acl_spec.rb +128 -0
  48. data/spec/system/api_ospf_interfaces_spec.rb +17 -14
  49. data/spec/system/api_ospf_spec.rb +8 -8
  50. data/spec/system/api_varp_interfaces_spec.rb +22 -13
  51. data/spec/system/api_varp_spec.rb +1 -4
  52. data/spec/system/rbeapi/api/interfaces_base_spec.rb +3 -4
  53. data/spec/system/rbeapi/api/interfaces_ethernet_spec.rb +13 -9
  54. data/spec/system/rbeapi/api/interfaces_portchannel_spec.rb +43 -26
  55. data/spec/system/rbeapi/api/interfaces_vxlan_spec.rb +7 -6
  56. data/spec/system/rbeapi/api/ipinterfaces_spec.rb +34 -21
  57. data/spec/system/rbeapi/api/mlag_interfaces_spec.rb +15 -38
  58. data/spec/system/rbeapi/api/mlag_spec.rb +26 -30
  59. data/spec/system/rbeapi/api/snmp_spec.rb +0 -3
  60. data/spec/system/rbeapi/api/stp_instances_spec.rb +20 -12
  61. data/spec/system/rbeapi/api/stp_interfaces_spec.rb +1 -3
  62. data/spec/system/rbeapi/api/switchports_spec.rb +14 -12
  63. data/spec/system/rbeapi/api/system_spec.rb +0 -3
  64. data/spec/system/rbeapi/api/vlans_spec.rb +19 -9
  65. data/spec/unit/rbeapi/api/acl/default_spec.rb +158 -0
  66. data/spec/unit/rbeapi/api/acl/fixture_acl_standard.text +22 -0
  67. data/spec/unit/rbeapi/api/interfaces/base_spec.rb +123 -0
  68. data/spec/unit/rbeapi/api/interfaces/ethernet_spec.rb +89 -0
  69. data/spec/unit/rbeapi/api/interfaces/fixture_interfaces.text +219 -0
  70. data/spec/unit/rbeapi/api/interfaces/portchannel_spec.rb +149 -0
  71. data/spec/unit/rbeapi/api/interfaces/vxlan_spec.rb +243 -0
  72. data/spec/unit/rbeapi/api/mlag/default_spec.rb +218 -0
  73. data/spec/unit/rbeapi/api/mlag/fixture_mlag.text +238 -0
  74. data/spec/unit/rbeapi/api/vlans/default_spec.rb +135 -0
  75. data/spec/unit/rbeapi/api/vlans/fixture_vlans.text +5 -0
  76. metadata +79 -4
  77. data/lib/rbeapi/api/radius.rb.old +0 -399
@@ -31,14 +31,16 @@
31
31
  #
32
32
  require 'rbeapi/api'
33
33
 
34
+ ##
35
+ # Rbeapi toplevel namespace
34
36
  module Rbeapi
35
-
37
+ ##
38
+ # Rbeapi::Api
36
39
  module Api
37
40
  #
38
41
  # The Ipinterface class provides an instance for managing logical
39
42
  # IP interfaces configured using eAPI.
40
43
  class Ipinterfaces < Entity
41
-
42
44
  DEFAULT_ADDRESS = ''
43
45
 
44
46
  ##
@@ -125,7 +127,7 @@ module Rbeapi
125
127
  # @return [Hash<Symbol, Object>] resource hash attribute
126
128
  def parse_mtu(config)
127
129
  mdata = /(?<=mtu\s)(\d+)$/.match(config)
128
- { mtu: mdata.nil? ? '': mdata[1] }
130
+ { mtu: mdata.nil? ? '' : mdata[1] }
129
131
  end
130
132
  private :parse_mtu
131
133
 
@@ -31,12 +31,15 @@
31
31
  #
32
32
  require 'rbeapi/api'
33
33
 
34
+ ##
35
+ # Rbeapi toplevel namespace
34
36
  module Rbeapi
35
-
37
+ ##
38
+ # Rbeapi::Api
36
39
  module Api
37
-
40
+ ##
41
+ # The Logging class manages logging settings on an EOS node.
38
42
  class Logging < Entity
39
-
40
43
  ##
41
44
  # get returns the current logging configuration hash extracted from the
42
45
  # nodes running configuration.
@@ -97,8 +100,8 @@ module Rbeapi
97
100
  #
98
101
  # @param [Hash] :opts Optional keyword arguments
99
102
  #
100
- # @option :opts [Boolean] :value Enables logging globally if value is true or
101
- # disabled logging glboally if value is false
103
+ # @option :opts [Boolean] :value Enables logging globally if value is true
104
+ # or disabled logging glboally if value is false
102
105
  #
103
106
  # @option :opts [Boolean] :default Configure the ip address value using
104
107
  # the default keyword
@@ -31,48 +31,51 @@
31
31
  #
32
32
  require 'rbeapi/api'
33
33
 
34
+ ##
35
+ # Rbeapi toplevel namespace
34
36
  module Rbeapi
35
-
37
+ ##
38
+ # Rbeapi::Api
36
39
  module Api
37
-
38
40
  ##
39
41
  # The Mlag class provides a configuration instance for working with
40
42
  # the global MLAG configuration of the node
41
43
  class Mlag < Entity
42
-
43
44
  DEFAULT_DOMAIN_ID = ''
44
45
  DEFAULT_LOCAL_INTF = ''
45
46
  DEFAULT_PEER_ADDR = ''
46
47
  DEFAULT_PEER_LINK = ''
47
48
 
48
49
  ##
49
- # get returns the mlag configuration from the node as a resource hash
50
+ # get scans the current nodes configuration and returns the values as
51
+ # a Hash descriping the current state.
50
52
  #
51
- # @example
52
- # {
53
- # domain_id: <string>
54
- # local_interface: <string>
55
- # peer_address: <string>
56
- # peer_link: <string>
57
- # shutdown: [true, false]
58
- # interfaces: {...}
59
- # }
53
+ # The resource hash returned contains the following:
54
+ # * domain_id: (String) The MLAG domain-id value
55
+ # * local_interface: (String) The MLAG local-interface value
56
+ # * peer_address: (String) The IP address of the MLAG peer
57
+ # * peer_link: (String) The MLAG transit peer-link value
58
+ # * shutdown: (Boolean) The administrative staet of the mlag
59
+ # configuration
60
+ # * interfaces: (Hash) The list of configured MLAG interfaces. (See
61
+ # parse_interfaces for the Hash details)
60
62
  #
61
- # @see MlagInterfaces interface resource message
63
+ # @see parse_interfaces
62
64
  #
63
65
  # @return [nil, Hash<Symbol, Object] returns the nodes current running
64
66
  # configuration as a Hash. If mlag is not configured on the node this
65
67
  # method will return nil
66
- def get()
68
+ def get
67
69
  config = get_block('mlag configuration')
68
- response = {}
69
- response.merge!(parse_domain_id(config))
70
- response.merge!(parse_local_interface(config))
71
- response.merge!(parse_peer_address(config))
72
- response.merge!(parse_peer_link(config))
73
- response.merge!(parse_shutdown(config))
74
- response[:interfaces] = interfaces.getall
75
- response
70
+
71
+ global = {}
72
+ global.merge!(parse_domain_id(config))
73
+ global.merge!(parse_local_interface(config))
74
+ global.merge!(parse_peer_address(config))
75
+ global.merge!(parse_peer_link(config))
76
+ global.merge!(parse_shutdown(config))
77
+
78
+ { global: global, interfaces: parse_interfaces }
76
79
  end
77
80
 
78
81
  ##
@@ -166,18 +169,27 @@ module Rbeapi
166
169
  private :parse_shutdown
167
170
 
168
171
  ##
169
- # interfaces returns a memoized instance of MlagInterfaces that provide
170
- # an api for working with mlag interfaces in the nodes current
171
- # configuration.
172
+ # parse_interfaces scans the global configuraiton and returns all of the
173
+ # configured MLAG interfaces. Each interface returns the configured MLAG
174
+ # identifier for establishing a MLAG peer. The return value is intended
175
+ # to be merged into the resource Hash
172
176
  #
173
- # @see MlagInterfaces
177
+ # The resource Hash attribute returned contains:
178
+ # * mlag_id: (Fixnum) The configured MLAG identifier
174
179
  #
175
- # @return [Object] returns an instance of MlagInterfaces
176
- def interfaces
177
- return @interfaces if @interfaces
178
- @interfaces = MlagInterfaces.new(node)
179
- @interfaces
180
+ # @api private
181
+ #
182
+ # @return [Hash<Symbol, Object>] resource Hash attribute
183
+ def parse_interfaces
184
+ names = config.scan(/(?<=^interface\s)Po.+/)
185
+ names.each_with_object({}) do |name, hsh|
186
+ config = get_block("^interface #{name}")
187
+ next unless config
188
+ id = config.scan(/(?<=mlag )\d+/)
189
+ hsh[name] = { mlag_id: id.first.to_i } unless id.empty?
190
+ end
180
191
  end
192
+ private :parse_interfaces
181
193
 
182
194
  ##
183
195
  # set_domain_id configures the mlag domain-id value in the current nodes
@@ -377,100 +389,6 @@ module Rbeapi
377
389
  end
378
390
  configure(cmds)
379
391
  end
380
- end
381
-
382
- class MlagInterfaces < Entity
383
-
384
- ##
385
- # get returns the mlag interface configuration as a hash object. If the
386
- # specified interface name is not configured as an mlag interface this
387
- # method will return nil
388
- #
389
- # @example
390
- # {
391
- # mlag_id: <string>
392
- # }
393
- #
394
- # @param [String] :name The full interface name of the interface to
395
- # return the mlag interface hash for.
396
- #
397
- # @return [nil, Hash<Symbol, Object>] returns the interface configuration
398
- # as a resource hash. If the interface is not configured as an mlag
399
- # interface nil is returned.
400
- def get(name)
401
- config = get_block("^interface #{name}")
402
- return nil unless config
403
- mdata = /(?<=\s{3}mlag\s)(.+)$/.match(config)
404
- return nil unless mdata
405
- { mlag_id: mdata[1] }
406
- end
407
-
408
- ##
409
- # getall scans the nodes current running configuration and returns a
410
- # hash of all mlag interfaces keyed by the interface name. If no
411
- # interfaces are configured, an empty hash object is returned
412
- #
413
- # @see get Interface resource example
414
- #
415
- # @return [Hash<String, Hash>] returns the nodes mlag interface
416
- # configurations as a hash
417
- def getall
418
- names = config.scan(/(?<=^interface\s)Po.+/)
419
- names.each_with_object({}) do |name, response|
420
- data = get name
421
- response[name] = data if data
422
- end
423
- end
424
-
425
- ##
426
- # create adds a new mlag interface to the nodes current running
427
- # configuration. If the specified interface already exists, then this
428
- # method will return successfully with the updated mlag id.
429
- #
430
- # @see set_mlag_id
431
- #
432
- # @param [String] :name The name of of the interface to create. The name
433
- # must be the full interface name. The value of name is expected to
434
- # be a Port-Channel interface.
435
- #
436
- # @param [String, Integer] :id The value of the mlag id to configure for
437
- # the specified interface. Valid mlag ids are in the range of 1 to
438
- # 2000.
439
- #
440
- # @return [Boolean] returns true if the command completed successfully
441
- def create(name, id)
442
- set_mlag_id(name, value: id)
443
- end
444
-
445
- ##
446
- # delete removes a mlag interface from the nodes current running
447
- # configuration. If the specified interface does not exist as a mlag
448
- # interface this method will return successfully
449
- #
450
- # @see set_mlag_id
451
- #
452
- # @param [String] :name The name of of the interface to remove. The name
453
- # must be the full interface name.
454
- #
455
- # @return [Boolean] returns true if the command completed successfully
456
- def delete(name)
457
- set_mlag_id(name)
458
- end
459
-
460
- ##
461
- # default configures a mlag interface using the default keyword. If the
462
- # specified interface does not exist as a mlag interface this method
463
- # will return successfully
464
- #
465
- # @see set_mlag_id
466
- #
467
- # @param [String] :name The name of of the interface to create. The name
468
- # must be the full interface name.
469
- #
470
- # @return [Boolean] returns true if the command completed successfully
471
- def default(name)
472
- set_mlag_id(name, default: true)
473
- end
474
392
 
475
393
  ##
476
394
  # set_mlag_id configures the mlag id on the interface in the nodes
@@ -510,7 +428,7 @@ module Rbeapi
510
428
  when true
511
429
  cmds << 'default mlag'
512
430
  when false
513
- cmds << (value ? "mlag #{value}" : 'no mlag')
431
+ cmds << (value ? "mlag #{value}" : 'no mlag')
514
432
  end
515
433
  configure(cmds)
516
434
  end
@@ -37,12 +37,10 @@ module Rbeapi
37
37
  ##
38
38
  # Api is module namesapce for working with the EOS command API
39
39
  module Api
40
-
41
40
  ##
42
41
  # The Ntp class provides an intstance for working with the nodes
43
42
  # NTP configuraiton.
44
43
  class Ntp < Entity
45
-
46
44
  DEFAULT_SRC_INTF = ''
47
45
 
48
46
  ##
@@ -130,8 +128,7 @@ module Rbeapi
130
128
  when true
131
129
  cmds = 'default ntp source'
132
130
  when false
133
- cmds = (value ? "ntp source #{value}" : \
134
- 'no ntp source')
131
+ cmds = (value ? "ntp source #{value}" : 'no ntp source')
135
132
  end
136
133
  configure(cmds)
137
134
  end
@@ -31,18 +31,21 @@
31
31
  #
32
32
  require 'rbeapi/api'
33
33
 
34
+ ##
35
+ # Rbeapi toplevel namespace
34
36
  module Rbeapi
35
-
37
+ ##
38
+ # Rbeapi::Api
36
39
  module Api
37
-
38
40
  ##
39
41
  # The Ospf class is a global class that provides an instance for working
40
42
  # with the node's OSPF configuration
41
43
  class Ospf < Entity
42
-
43
44
  ##
44
45
  # Returns the global OSPF configuration from the node
45
46
  #
47
+ # rubocop:disable Metrics/MethodLength
48
+ #
46
49
  # @example
47
50
  # {
48
51
  # "router_id": <string>
@@ -58,11 +61,10 @@ module Rbeapi
58
61
  config = get_block("router ospf #{inst}")
59
62
  return nil unless config
60
63
 
61
- resp = {}
64
+ response = {}
62
65
  mdata = /(?<=^\s{3}router-id\s)(.+)$/.match(config)
63
- resp['router_id'] = mdata.nil? ? '' : mdata[0]
66
+ response['router_id'] = mdata.nil? ? '' : mdata[0]
64
67
 
65
- mdata = /^\s{3}network\s(.+)\sarea\s(.+)$/.match(config)
66
68
  networks = config.scan(/^\s{3}network\s(.+)\sarea\s(.+)$/)
67
69
  areas = networks.each_with_object({}) do |cfg, hsh|
68
70
  net, area = cfg
@@ -72,14 +74,15 @@ module Rbeapi
72
74
  hsh[area] = [net]
73
75
  end
74
76
  end
75
- resp['areas'] = areas
77
+ response['areas'] = areas
76
78
 
77
- values = config.scan(/(?<=^\s{3}redistribute\s)(\w+)[\s|$]*(route-map\s(.+))?/)
79
+ values = \
80
+ config.scan(/(?<=^\s{3}redistribute\s)(\w+)[\s|$]*(route-map\s(.+))?/)
78
81
 
79
- resp['redistribute'] = values.each_with_object({}) do |value, hsh|
82
+ response['redistribute'] = values.each_with_object({}) do |value, hsh|
80
83
  hsh[value[0]] = { 'route_map' => value[2] }
81
84
  end
82
- resp
85
+ response
83
86
  end
84
87
 
85
88
  ##
@@ -91,8 +94,6 @@ module Rbeapi
91
94
  # "interfaces": {...}
92
95
  # }
93
96
  def getall
94
- response = {}
95
-
96
97
  instances = config.scan(/(?<=^router\sospf\s)\d+$/)
97
98
  response = instances.each_with_object({}) do |inst, hsh|
98
99
  hsh[inst] = get inst
@@ -145,8 +146,10 @@ module Rbeapi
145
146
  end
146
147
  end
147
148
 
149
+ ##
150
+ # The OspfInterfaces class is a global class that provides an instance
151
+ # for working with the node's OSPF interface configuration
148
152
  class OspfInterfaces < Entity
149
-
150
153
  ##
151
154
  # Returns a single MLAG interface configuration
152
155
  #
@@ -31,16 +31,17 @@
31
31
  #
32
32
  require 'rbeapi/api'
33
33
 
34
+ ##
35
+ # Rbeapi toplevel namespace
34
36
  module Rbeapi
35
-
37
+ ##
38
+ # Rbeapi::Api
36
39
  module Api
37
-
38
40
  ##
39
41
  # The Prefixlists class provides a configuration instance for working
40
42
  # with static routes in EOS.
41
43
  #
42
44
  class Prefixlists < Entity
43
-
44
45
  ##
45
46
  # Returns the static routes configured on the node
46
47
  #
@@ -92,7 +93,6 @@ module Rbeapi
92
93
  cmd << " seq #{seq}" if seq
93
94
  configure cmd
94
95
  end
95
-
96
96
  end
97
97
  end
98
98
  end
@@ -31,16 +31,16 @@
31
31
  #
32
32
  require 'rbeapi/api'
33
33
 
34
-
34
+ ##
35
+ # Rbeapi toplevel namespace
35
36
  module Rbeapi
36
37
  ##
37
- # Eos is module namesapce for working with the EOS command API
38
+ # Rbeapi::Api
38
39
  module Api
39
40
  ##
40
41
  # Radius provides instance methods to retrieve and set radius configuration
41
42
  # values.
42
43
  class Radius < Entity
43
-
44
44
  DEFAULT_KEY_FORMAT = 0
45
45
  DEFAULT_KEY = nil
46
46
 
@@ -164,11 +164,11 @@ module Rbeapi
164
164
  private :parse_servers
165
165
 
166
166
  ##
167
- # set_global_key configures the global radius-server key. If the value option
168
- # is not specified, radius-server key is configured using the no keyword.
169
- # If the default option is specified, radius-server key is configured
170
- # using the default keyword. If both options are specified, the default
171
- # keyword option takes precedence.
167
+ # set_global_key configures the global radius-server key. If the value
168
+ # option is not specified, radius-server key is configured using the no
169
+ # keyword. If the default option is specified, radius-server key is
170
+ # configured using the default keyword. If both options are specified,
171
+ # the default keyword option takes precedence.
172
172
  #
173
173
  # @eos_version 4.13.7M
174
174
  #
@@ -197,18 +197,21 @@ module Rbeapi
197
197
  when true
198
198
  cmds = 'default radius-server key'
199
199
  when false
200
- cmds = value ? "radius-server key #{key_format} #{value}" :
201
- 'no radius-server key'
200
+ if value
201
+ cmds = "radius-server key #{key_format} #{value}"
202
+ else
203
+ cmds = 'no radius-server key'
204
+ end
202
205
  end
203
206
  configure cmds
204
207
  end
205
208
 
206
209
  ##
207
- # set_global_timeout configures the radius-server timeout value. If the value
208
- # options is not specified, radius-server timeout is configured using the
209
- # no keyword. If the default option is specified, radius-server timeout
210
- # is configured using the default keyword. If both options are specified
211
- # then the default keyword takes precedence.
210
+ # set_global_timeout configures the radius-server timeout value. If the
211
+ # value # options is not specified, radius-server timeout is configured
212
+ # using the no keyword. If the default option is specified, radius-server
213
+ # timeout is configured using the default keyword. If both options are
214
+ # specified then the default keyword takes precedence.
212
215
  #
213
216
  # @eos_version 4.13.7M
214
217
  #
@@ -233,19 +236,22 @@ module Rbeapi
233
236
  when true
234
237
  cmds = 'default radius-server timeout'
235
238
  when false
236
- cmds = value ? "radius-server timeout #{value}" :
237
- 'no radius-server timeout'
239
+ if value
240
+ cmds = "radius-server timeout #{value}"
241
+ else
242
+ cmds = 'no radius-server timeout'
243
+ end
238
244
  end
239
245
  configure cmds
240
246
  end
241
247
 
242
248
  ##
243
- # set_global_retransmit configures the global radius-server restransmit value.
244
- # If the value is not specified, the radius-server retransmist value is
245
- # configured using the no keyword. If the default option is specified,
246
- # the radius-server retransmit value is configured using the default
247
- # keyword. If both options are specified then the default keyword taks
248
- # precedence
249
+ # set_global_retransmit configures the global radius-server restransmit
250
+ # value. If the value is not specified, the radius-server retransmist
251
+ # value is configured using the no keyword. If the default option is
252
+ # specified, the radius-server retransmit value is configured using the
253
+ # default keyword. If both options are specified then the default keyword
254
+ # takes precedence
249
255
  #
250
256
  # @eos_version 4.13.7M
251
257
  #
@@ -270,8 +276,11 @@ module Rbeapi
270
276
  when true
271
277
  cmds = 'default radius-server retransmit'
272
278
  when false
273
- cmds = value ? "radius-server retransmit #{value}" :
274
- 'no radius-server retransmit'
279
+ if value
280
+ cmds = "radius-server retransmit #{value}"
281
+ else
282
+ cmds = 'no radius-server retransmit'
283
+ end
275
284
  end
276
285
  configure cmds
277
286
  end
@@ -31,12 +31,21 @@
31
31
  #
32
32
  require 'rbeapi/api'
33
33
 
34
+ ##
35
+ # Rbeapi toplevel namespace
34
36
  module Rbeapi
35
-
37
+ ##
38
+ # Rbeapi::Api
36
39
  module Api
37
-
40
+ ##
41
+ # The Routemaps class manages routemaps. A route map is a list of rules
42
+ # that control the redistribution of IP routes into a protocol domain on
43
+ # the basis of such criteria as route metrics, access control lists, next
44
+ # hop addresses, and route tags.
45
+ #
46
+ # rubocop:disable Metrics/MethodLength
47
+ #
38
48
  class Routemaps < Entity
39
-
40
49
  def get(name)
41
50
  entries = config.scan(/^route-map\s#{name}\s.+$/)
42
51
 
@@ -52,13 +61,13 @@ module Rbeapi
52
61
  case mdata.nil? ? nil : mdata[1]
53
62
  when 'match'
54
63
  hsh['match_rules'] = [] unless hsh.include?('match')
55
- hsh['match_rules'] << rule.strip()
64
+ hsh['match_rules'] << rule.strip
56
65
  when 'set'
57
66
  hsh['set_rules'] = [] unless hsh.include?('set')
58
- hsh['set_rules'] << rule.strip()
67
+ hsh['set_rules'] << rule.strip
59
68
  when 'continue'
60
69
  hsh['continue_rules'] = [] unless hsh.include?('continue')
61
- hsh['continue_rules'] << rule.strip()
70
+ hsh['continue_rules'] << rule.strip
62
71
  end
63
72
  end
64
73
  rule_hsh.update(parsed)
@@ -69,9 +78,7 @@ module Rbeapi
69
78
  def getall
70
79
  maps = config.scan(/(?<=^route-map\s)[^\s]+/)
71
80
  maps.each_with_object({}) do |name, hsh|
72
- if !hsh.include?(name)
73
- hsh[name] = get name
74
- end
81
+ hsh[name] = get name unless hsh.include?(name)
75
82
  end
76
83
  end
77
84
 
@@ -94,7 +101,6 @@ module Rbeapi
94
101
  def remove_rule(name, action, seqno)
95
102
  configure "no route-map #{name} #{action} #{seqno}"
96
103
  end
97
-
98
104
  end
99
105
  end
100
106
  end
@@ -31,20 +31,21 @@
31
31
  #
32
32
  require 'rbeapi/api'
33
33
 
34
+ ##
35
+ # Rbeapi toplevel namespace
34
36
  module Rbeapi
35
-
36
37
  ##
37
38
  # Api is module namespace for working with eAPI abstractions
38
39
  module Api
39
-
40
40
  ##
41
41
  # The Snmp class provides a class implementation for working with the
42
42
  # nodes SNMP conifguration 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
+ #
45
47
  # @eos_version 4.13.7M
46
48
  class Snmp < Entity
47
-
48
49
  DEFAULT_SNMP_LOCATION = ''
49
50
  DEFAULT_SNMP_CONTACT = ''
50
51
  DEFAULT_SNMP_CHASSIS_ID = ''
@@ -172,7 +173,7 @@ module Rbeapi
172
173
 
173
174
  notifications = traps.map do |trap|
174
175
  state, name = trap
175
- { name: name, state: CFG_TO_STATE[state]}
176
+ { name: name, state: CFG_TO_STATE[state] }
176
177
  end
177
178
  notifications << { name: 'all', state: CFG_TO_STATE[all.first] }
178
179
  { notifications: notifications }
@@ -238,8 +239,11 @@ module Rbeapi
238
239
  when true
239
240
  cmds = ['default snmp-server location']
240
241
  when false
241
- cmds = (value.nil? ? "no snmp-server location" : \
242
- "snmp-server location #{value}")
242
+ if value.nil?
243
+ cmds = 'no snmp-server location'
244
+ else
245
+ cmds = "snmp-server location #{value}"
246
+ end
243
247
  end
244
248
  configure(cmds)
245
249
  end
@@ -275,8 +279,11 @@ module Rbeapi
275
279
  when true
276
280
  cmds = ['default snmp-server contact']
277
281
  when false
278
- cmds = (value.nil? ? "no snmp-server contact" : \
279
- "snmp-server contact #{value}")
282
+ if value.nil?
283
+ cmds = 'no snmp-server contact'
284
+ else
285
+ cmds = "snmp-server contact #{value}"
286
+ end
280
287
  end
281
288
  configure(cmds)
282
289
  end
@@ -312,8 +319,11 @@ module Rbeapi
312
319
  when true
313
320
  cmds = 'default snmp-server chassis-id'
314
321
  when false
315
- cmds = (value.nil? ? "no snmp-server chassis-id" : \
316
- "snmp-server chassis-id #{value}")
322
+ if value.nil?
323
+ cmds = 'no snmp-server chassis-id'
324
+ else
325
+ cmds = "snmp-server chassis-id #{value}"
326
+ end
317
327
  end
318
328
  configure(cmds)
319
329
  end
@@ -350,10 +360,13 @@ module Rbeapi
350
360
  when true
351
361
  cmds = ['default snmp-server source-interface']
352
362
  when false
353
- cmds = (value.nil? ? "no snmp-server source-interface" : \
354
- "snmp-server source-interface #{value}")
363
+ if value.nil?
364
+ cmds = 'no snmp-server source-interface'
365
+ else
366
+ cmds = "snmp-server source-interface #{value}"
367
+ end
355
368
  end
356
- configure(cmds)
369
+ configure(cmds)
357
370
  end
358
371
 
359
372
  ##