rbeapi 1.2 → 1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +28 -4
- data/Gemfile +1 -0
- data/README.md +13 -13
- data/lib/rbeapi/api/logging.rb +207 -5
- data/lib/rbeapi/api/radius.rb +50 -0
- data/lib/rbeapi/api/tacacs.rb +48 -0
- data/lib/rbeapi/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 110cd5fb3e11a5fec2598d63ed79db2c3b092ce7
|
4
|
+
data.tar.gz: 7e7d89671f76f5875980d0320cdee5fa93d2333b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f36371a3497d8e4af54803b64385cf787e530bbb6eb65fad541f1e378986f6c1e81df7dc25cbf72a5d932d15a5d3ad44e6decc4eaeecf5261664883056cb7bb
|
7
|
+
data.tar.gz: c2f98dd638875fabe9183ffdd308c9d1f6c245d3f9e1d2e267b05850b7d9a4e514c27a3b2bf747ada68b84573426d870d23bbfa24a1ce8b954980d85188305ec
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,21 @@
|
|
1
|
-
#
|
1
|
+
# Changelog
|
2
2
|
|
3
|
-
## [1.
|
4
|
-
|
3
|
+
## [1.3.0](https://github.com/arista-eosplus/rbeapi/tree/1.3.0) (2018-04-03)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/arista-eosplus/rbeapi/compare/v1.2...1.3.0)
|
6
|
+
|
7
|
+
**Implemented enhancements:**
|
8
|
+
|
9
|
+
- logging: support vrf, port, and protocol options [\#173](https://github.com/arista-eosplus/rbeapi/issues/173)
|
10
|
+
- \(NETDEV-30\) Support new properties in Types [\#174](https://github.com/arista-eosplus/rbeapi/pull/174) ([jerearista](https://github.com/jerearista))
|
11
|
+
|
12
|
+
**Merged pull requests:**
|
13
|
+
|
14
|
+
- Release 1.2.0 [\#170](https://github.com/arista-eosplus/rbeapi/pull/170) ([jerearista](https://github.com/jerearista))
|
15
|
+
|
16
|
+
## [v1.2](https://github.com/arista-eosplus/rbeapi/tree/v1.2) (2017-06-03)
|
17
|
+
|
18
|
+
[Full Changelog](https://github.com/arista-eosplus/rbeapi/compare/v1.1...v1.2)
|
5
19
|
|
6
20
|
**Implemented enhancements:**
|
7
21
|
|
@@ -13,6 +27,7 @@
|
|
13
27
|
- \(NETDEV-29\) Enhance netdev NTP api [\#169](https://github.com/arista-eosplus/rbeapi/pull/169) ([shermdog](https://github.com/shermdog))
|
14
28
|
|
15
29
|
## [v1.1](https://github.com/arista-eosplus/rbeapi/tree/v1.1) (2016-12-06)
|
30
|
+
|
16
31
|
[Full Changelog](https://github.com/arista-eosplus/rbeapi/compare/v1.0...v1.1)
|
17
32
|
|
18
33
|
**Implemented enhancements:**
|
@@ -31,6 +46,7 @@
|
|
31
46
|
- extend and fix ospf features [\#156](https://github.com/arista-eosplus/rbeapi/pull/156) ([rknaus](https://github.com/rknaus))
|
32
47
|
|
33
48
|
## [v1.0](https://github.com/arista-eosplus/rbeapi/tree/v1.0) (2016-09-26)
|
49
|
+
|
34
50
|
[Full Changelog](https://github.com/arista-eosplus/rbeapi/compare/v0.5.1...v1.0)
|
35
51
|
|
36
52
|
**Implemented enhancements:**
|
@@ -75,6 +91,7 @@
|
|
75
91
|
- Created vlans set\_trunk\_groups method. [\#119](https://github.com/arista-eosplus/rbeapi/pull/119) ([devrobo](https://github.com/devrobo))
|
76
92
|
|
77
93
|
## [v0.5.1](https://github.com/arista-eosplus/rbeapi/tree/v0.5.1) (2016-02-16)
|
94
|
+
|
78
95
|
[Full Changelog](https://github.com/arista-eosplus/rbeapi/compare/v0.5.0...v0.5.1)
|
79
96
|
|
80
97
|
**Implemented enhancements:**
|
@@ -104,6 +121,7 @@
|
|
104
121
|
- Added support for setting system banners. [\#104](https://github.com/arista-eosplus/rbeapi/pull/104) ([devrobo](https://github.com/devrobo))
|
105
122
|
|
106
123
|
## [v0.5.0](https://github.com/arista-eosplus/rbeapi/tree/v0.5.0) (2016-01-12)
|
124
|
+
|
107
125
|
[Full Changelog](https://github.com/arista-eosplus/rbeapi/compare/v0.4.0...v0.5.0)
|
108
126
|
|
109
127
|
**Implemented enhancements:**
|
@@ -140,6 +158,7 @@
|
|
140
158
|
- Update documentation [\#97](https://github.com/arista-eosplus/rbeapi/pull/97) ([HuntBurdick](https://github.com/HuntBurdick))
|
141
159
|
|
142
160
|
## [v0.4.0](https://github.com/arista-eosplus/rbeapi/tree/v0.4.0) (2015-11-21)
|
161
|
+
|
143
162
|
[Full Changelog](https://github.com/arista-eosplus/rbeapi/compare/v0.3.0...v0.4.0)
|
144
163
|
|
145
164
|
**Implemented enhancements:**
|
@@ -177,6 +196,7 @@
|
|
177
196
|
- add dry-run mode [\#42](https://github.com/arista-eosplus/rbeapi/pull/42) ([kakkotetsu](https://github.com/kakkotetsu))
|
178
197
|
|
179
198
|
## [v0.3.0](https://github.com/arista-eosplus/rbeapi/tree/v0.3.0) (2015-08-24)
|
199
|
+
|
180
200
|
[Full Changelog](https://github.com/arista-eosplus/rbeapi/compare/v0.2.0...v0.3.0)
|
181
201
|
|
182
202
|
**Fixed bugs:**
|
@@ -196,6 +216,7 @@
|
|
196
216
|
- Eliminate overloading value option in command\_builder. [\#39](https://github.com/arista-eosplus/rbeapi/pull/39) ([devrobo](https://github.com/devrobo))
|
197
217
|
|
198
218
|
## [v0.2.0](https://github.com/arista-eosplus/rbeapi/tree/v0.2.0) (2015-07-08)
|
219
|
+
|
199
220
|
[Full Changelog](https://github.com/arista-eosplus/rbeapi/compare/v0.1.0...v0.2.0)
|
200
221
|
|
201
222
|
**Implemented enhancements:**
|
@@ -239,5 +260,8 @@
|
|
239
260
|
|
240
261
|
## [v0.1.0](https://github.com/arista-eosplus/rbeapi/tree/v0.1.0) (2015-02-25)
|
241
262
|
|
263
|
+
[Full Changelog](https://github.com/arista-eosplus/rbeapi/compare/63b0bf8c005b4eab53036556d7becf9b1a7f4bb4...v0.1.0)
|
264
|
+
|
265
|
+
|
242
266
|
|
243
|
-
\* *This
|
267
|
+
\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
|
data/Gemfile
CHANGED
@@ -17,6 +17,7 @@ end
|
|
17
17
|
|
18
18
|
group :development, :test do
|
19
19
|
gem 'ci_reporter_rspec', require: false
|
20
|
+
gem 'github_changelog_generator', :git => 'https://github.com/skywinder/github-changelog-generator.git'
|
20
21
|
gem 'listen', '<=3.0.3'
|
21
22
|
gem 'pry', require: false
|
22
23
|
gem 'pry-doc', require: false
|
data/README.md
CHANGED
@@ -250,29 +250,29 @@ omnibus installation package in /opt/chef/bin/. For Chef, use the
|
|
250
250
|
Examples:
|
251
251
|
Puppet Open Source:
|
252
252
|
cd /mnt/flash; \
|
253
|
-
swix create rbeapi-1.
|
254
|
-
rubygem-rbeapi-1.
|
253
|
+
swix create rbeapi-1.3-1.swix \
|
254
|
+
rubygem-rbeapi-1.3-1.eos4.noarch.rpm \
|
255
255
|
rubygem-inifile-3.0.0-3.eos4.noarch.rpm \
|
256
256
|
rubygem-netaddr-1.5.0-2.eos4.noarch.rpm \
|
257
257
|
rubygem-net_http_unix-0.2.1-3.eos4.noarch.rpm
|
258
258
|
Puppet-enterprise agent (3.x):
|
259
259
|
cd/mnt/flash; \
|
260
|
-
swix create rbeapi-puppet3-1.
|
261
|
-
rubygem-rbeapi-puppet3-1.
|
260
|
+
swix create rbeapi-puppet3-1.3-1.swix \
|
261
|
+
rubygem-rbeapi-puppet3-1.3-1.eos4.noarch.rpm \
|
262
262
|
rubygem-inifile-puppet3-3.0.0-3.eos4.noarch.rpm \
|
263
263
|
rubygem-netaddr-puppet3-1.5.0-2.eos4.noarch.rpm
|
264
264
|
Puppet-All-in-one agent (2015.x/4.x):
|
265
265
|
cd/mnt/flash; \
|
266
|
-
swix create rbeapi-puppet-aio-1.
|
267
|
-
rubygem-rbeapi-puppet-aio-1.
|
266
|
+
swix create rbeapi-puppet-aio-1.3-1.swix \
|
267
|
+
rubygem-rbeapi-puppet-aio-1.3-1.eos4.noarch.rpm \
|
268
268
|
rubygem-inifile-puppet-aio-3.0.0-3.eos4.noarch.rpm \
|
269
269
|
rubygem-netaddr-puppet-aio-1.5.0-2.eos4.noarch.rpm \
|
270
270
|
rubygem-net_http_unix-puppet-aio-0.2.1-3.eos4.noarch.rpm
|
271
271
|
|
272
272
|
Chef client:
|
273
273
|
cd /mnt/flash; \
|
274
|
-
swix create rbeapi-chef-1.
|
275
|
-
rubygem-rbeapi-chef-1.
|
274
|
+
swix create rbeapi-chef-1.3-1.swix \
|
275
|
+
rubygem-rbeapi-chef-1.3-1.eos4.noarch.rpm \
|
276
276
|
rubygem-inifile-chef-3.0.0-5.eos4.noarch.rpm \
|
277
277
|
rubygem-netaddr-chef-1.5.1-4.eos4.noarch.rpm \
|
278
278
|
rubygem-net_http_unix-chef-0.2.2-5.eos4.noarch.rpm
|
@@ -283,13 +283,13 @@ omnibus installation package in /opt/chef/bin/. For Chef, use the
|
|
283
283
|
Arista# copy <URI-to-RPMs> flash:
|
284
284
|
Arista# bash
|
285
285
|
-bash-4.1# cd /mnt/flash/
|
286
|
-
-bash-4.1# swix create rbeapi-puppet3-1.
|
287
|
-
rubygem-rbeapi-puppet3-1.
|
286
|
+
-bash-4.1# swix create rbeapi-puppet3-1.3-1.swix \
|
287
|
+
rubygem-rbeapi-puppet3-1.3-1.eos4.noarch.rpm \
|
288
288
|
rubygem-inifile-puppet3-3.0.0-1.eos4.noarch.rpm \
|
289
289
|
rubygem-netaddr-puppet3-1.5.0-1.eos4.noarch.rpm
|
290
290
|
-bash-4.1# exit
|
291
|
-
Arista# copy flash:rbeapi-puppet3-1.
|
292
|
-
Arista# extension rbeapi-puppet3-1.
|
291
|
+
Arista# copy flash:rbeapi-puppet3-1.3-1.swix extension:
|
292
|
+
Arista# extension rbeapi-puppet3-1.3-1.swix
|
293
293
|
Arista# copy installed-extensions boot-extensions
|
294
294
|
```
|
295
295
|
|
@@ -298,7 +298,7 @@ omnibus installation package in /opt/chef/bin/. For Chef, use the
|
|
298
298
|
On EOS:
|
299
299
|
```
|
300
300
|
Arista# no extension pe-rbeapi-1.1.0-1.swix
|
301
|
-
Arista# extension rbeapi-puppet3-1.
|
301
|
+
Arista# extension rbeapi-puppet3-1.3-1.swix
|
302
302
|
Arista# copy installed-extensions boot-extensions
|
303
303
|
```
|
304
304
|
|
data/lib/rbeapi/api/logging.rb
CHANGED
@@ -40,6 +40,16 @@ module Rbeapi
|
|
40
40
|
##
|
41
41
|
# The Logging class manages logging settings on an EOS node.
|
42
42
|
class Logging < Entity
|
43
|
+
SEV_NUM = {
|
44
|
+
'emergencies' => 0,
|
45
|
+
'alerts' => 1,
|
46
|
+
'critical' => 2,
|
47
|
+
'errors' => 3,
|
48
|
+
'warnings' => 4,
|
49
|
+
'notifications' => 5,
|
50
|
+
'informational' => 6,
|
51
|
+
'debugging' => 7
|
52
|
+
}.freeze
|
43
53
|
##
|
44
54
|
# get returns the current logging configuration hash extracted from the
|
45
55
|
# nodes running configuration.
|
@@ -55,6 +65,10 @@ module Rbeapi
|
|
55
65
|
def get
|
56
66
|
response = {}
|
57
67
|
response.merge!(parse_enable)
|
68
|
+
response.merge!(parse_console_level)
|
69
|
+
response.merge!(parse_monitor_level)
|
70
|
+
response.merge!(parse_timestamp_units)
|
71
|
+
response.merge!(parse_source)
|
58
72
|
response.merge!(parse_hosts)
|
59
73
|
response
|
60
74
|
end
|
@@ -73,6 +87,79 @@ module Rbeapi
|
|
73
87
|
value = /no logging on/ !~ config
|
74
88
|
{ enable: value }
|
75
89
|
end
|
90
|
+
private :parse_enable
|
91
|
+
|
92
|
+
##
|
93
|
+
# parse_console_level scans the nodes current running configuration and
|
94
|
+
# extracts the current enabled state of the logging facility. The logging
|
95
|
+
# enable command is expected to always be in the node's configuration.
|
96
|
+
# This methods return value is intended to be merged into the logging
|
97
|
+
# resource hash.
|
98
|
+
#
|
99
|
+
# @api private
|
100
|
+
#
|
101
|
+
# @return [Hash<Symbol, Object>] Returns the resource hash attribute.
|
102
|
+
def parse_console_level
|
103
|
+
level = config.scan(/^logging console ([^\s]+)/).first
|
104
|
+
{ console: SEV_NUM[level[0]] }
|
105
|
+
end
|
106
|
+
private :parse_console_level
|
107
|
+
|
108
|
+
##
|
109
|
+
# parse_monitor_level scans the nodes current running configuration and
|
110
|
+
# extracts the current enabled state of the logging facility. The
|
111
|
+
# logging enable command is expected to always be in the node's
|
112
|
+
# configuration. This methods return value is intended to be merged into
|
113
|
+
# the logging resource hash.
|
114
|
+
#
|
115
|
+
# @api private
|
116
|
+
#
|
117
|
+
# @return [Hash<Symbol, Object>] Returns the resource hash attribute.
|
118
|
+
def parse_monitor_level
|
119
|
+
level = config.scan(/^logging monitor ([^\s]+)/).first
|
120
|
+
{ monitor: SEV_NUM[level[0]] }
|
121
|
+
end
|
122
|
+
private :parse_monitor_level
|
123
|
+
|
124
|
+
##
|
125
|
+
# parse_timestamp_units scans the nodes current running configuration
|
126
|
+
# and extracts the current configured value of the logging timestamps.
|
127
|
+
# The logging timestamps command is expected to always be in the node's
|
128
|
+
# configuration. This methods return value is intended to be merged into
|
129
|
+
# the logging resource hash.
|
130
|
+
#
|
131
|
+
# @api private
|
132
|
+
#
|
133
|
+
# @return [Hash<Symbol, Object>] Returns the resource hash attribute.
|
134
|
+
def parse_timestamp_units
|
135
|
+
value = config.scan(/^logging format timestamp ([^\s]+)/).first
|
136
|
+
units = value[0] == 'traditional' ? 'seconds' : 'milliseconds'
|
137
|
+
{ time_stamp_units: units }
|
138
|
+
end
|
139
|
+
private :parse_timestamp_units
|
140
|
+
|
141
|
+
##
|
142
|
+
# parse_source scans the nodes' current running configuration and extracts
|
143
|
+
# the configured logging source interfaces if any are configured. If no
|
144
|
+
# logging sources are configured, then the value will be an empty
|
145
|
+
# array. The return value requires conversion from a hash to a pair of
|
146
|
+
# ordered arrays to be merged into the logging resource hash.
|
147
|
+
#
|
148
|
+
# @api private
|
149
|
+
#
|
150
|
+
# @return [Hash<Symbol, Object>] Returns the resource hash attribute.
|
151
|
+
def parse_source
|
152
|
+
entries = config.scan(
|
153
|
+
/^logging(?:\svrf\s([^\s]+))?\ssource-interface\s([^\s]+)/
|
154
|
+
)
|
155
|
+
sources = {}
|
156
|
+
entries.each do |vrf, intf|
|
157
|
+
vrf = vrf.nil? ? 'default' : vrf
|
158
|
+
sources[vrf.to_s] = intf
|
159
|
+
end
|
160
|
+
{ source: sources }
|
161
|
+
end
|
162
|
+
private :parse_source
|
76
163
|
|
77
164
|
##
|
78
165
|
# parse_hosts scans the nodes current running configuration and extracts
|
@@ -85,7 +172,17 @@ module Rbeapi
|
|
85
172
|
#
|
86
173
|
# @return [Hash<Symbol, Object>] Returns the resource hash attribute.
|
87
174
|
def parse_hosts
|
88
|
-
|
175
|
+
entries = config.scan(
|
176
|
+
/^logging(?:\svrf\s([^\s]+))?\shost\s([^\s]+)\s(\d+)
|
177
|
+
\sprotocol\s([^\s]+)/x
|
178
|
+
)
|
179
|
+
hosts = []
|
180
|
+
entries.each do |vrf, address, port, proto|
|
181
|
+
hosts << { address: address,
|
182
|
+
vrf: vrf.nil? ? 'default' : vrf,
|
183
|
+
port: port,
|
184
|
+
protocol: proto }
|
185
|
+
end
|
89
186
|
{ hosts: hosts }
|
90
187
|
end
|
91
188
|
private :parse_hosts
|
@@ -119,6 +216,104 @@ module Rbeapi
|
|
119
216
|
configure cmd
|
120
217
|
end
|
121
218
|
|
219
|
+
##
|
220
|
+
# set_console configures the global logging level for the console.
|
221
|
+
# If the default keyword is specified and set to true, then the
|
222
|
+
# configuration is defaulted using the default keyword. The default
|
223
|
+
# keyword option takes precedence over the enable keyword if both
|
224
|
+
# options are specified.
|
225
|
+
#
|
226
|
+
# @since eos_version 4.13.7M
|
227
|
+
#
|
228
|
+
# ===Commands
|
229
|
+
# logging console <level>
|
230
|
+
# no logging console <level>
|
231
|
+
# default logging console
|
232
|
+
#
|
233
|
+
# @param opts [Hash] Optional keyword arguments
|
234
|
+
#
|
235
|
+
# @option opts level [Int|String] Enables logging at the specified
|
236
|
+
# level. Accepts <0-7> and logging level keywords.
|
237
|
+
#
|
238
|
+
# @option opts default [Boolean] Resets the monitor level to the
|
239
|
+
# default.
|
240
|
+
#
|
241
|
+
# @return [Boolean] Returns true if the command completed successfully.
|
242
|
+
def set_console(opts = {})
|
243
|
+
cmd = 'logging console'
|
244
|
+
cmd += " #{opts[:level]}" if opts[:level]
|
245
|
+
cmd = command_builder(cmd, opts)
|
246
|
+
configure cmd
|
247
|
+
end
|
248
|
+
|
249
|
+
##
|
250
|
+
# set_monitor configures the global logging level for terminals
|
251
|
+
# If the default keyword is specified and set to true, then the
|
252
|
+
# configuration is defaulted using the default keyword. The default
|
253
|
+
# keyword option takes precedence over the enable keyword if both
|
254
|
+
# options are specified.
|
255
|
+
#
|
256
|
+
# @since eos_version 4.13.7M
|
257
|
+
#
|
258
|
+
# ===Commands
|
259
|
+
# logging monitor <level>
|
260
|
+
# no logging monitor <level>
|
261
|
+
# default logging monitor
|
262
|
+
#
|
263
|
+
# @param opts [Hash] Optional keyword arguments
|
264
|
+
#
|
265
|
+
# @option opts level [Int|String] Enables logging at the specified
|
266
|
+
# level. Accepts <0-7> and logging level keywords.
|
267
|
+
#
|
268
|
+
# @option opts default [Boolean] Resets the monitor level to the
|
269
|
+
# default.
|
270
|
+
#
|
271
|
+
# @return [Boolean] Returns true if the command completed successfully.
|
272
|
+
def set_monitor(opts = {})
|
273
|
+
cmd = 'logging monitor'
|
274
|
+
cmd += " #{opts[:level]}" if opts[:level]
|
275
|
+
cmd = command_builder(cmd, opts)
|
276
|
+
configure cmd
|
277
|
+
end
|
278
|
+
|
279
|
+
##
|
280
|
+
# set_time_stamp_units configures the global logging time_stamp_units
|
281
|
+
# If the default keyword is specified and set to true, then the
|
282
|
+
# configuration is defaulted using the default keyword. The default
|
283
|
+
# keyword option takes precedence over the enable keyword if both
|
284
|
+
# options are specified.
|
285
|
+
#
|
286
|
+
# @since eos_version 4.13.7M
|
287
|
+
#
|
288
|
+
# ===Commands
|
289
|
+
# logging format timestamp <traditional|high-resolution>
|
290
|
+
# no logging format timestamp <level>
|
291
|
+
# default logging format timestamp
|
292
|
+
#
|
293
|
+
# @param opts [Hash] Optional keyword arguments
|
294
|
+
#
|
295
|
+
# @option opts units [String] Enables logging timestamps with the
|
296
|
+
# specified units. One of 'traditional' | 'seconds' or
|
297
|
+
# 'high-resolution' | 'milliseconds'
|
298
|
+
#
|
299
|
+
# @option opts default [Boolean] Resets the logging timestamp level to
|
300
|
+
# the default.
|
301
|
+
#
|
302
|
+
# @return [Boolean] Returns true if the command completed successfully.
|
303
|
+
def set_time_stamp_units(opts = {})
|
304
|
+
unit_map = {
|
305
|
+
'traditional' => ' traditional',
|
306
|
+
'seconds' => ' traditional',
|
307
|
+
'high-resolution' => ' high-resolution',
|
308
|
+
'milliseconds' => ' high-resolution'
|
309
|
+
}
|
310
|
+
units = ''
|
311
|
+
units = unit_map[opts[:units]] if opts[:units]
|
312
|
+
cmd = "logging format timestamp#{units}"
|
313
|
+
cmd = command_builder(cmd, opts)
|
314
|
+
configure cmd
|
315
|
+
end
|
316
|
+
|
122
317
|
##
|
123
318
|
# add_host configures a new logging destination host address or hostname
|
124
319
|
# to the list of logging destinations. If the host is already configured
|
@@ -133,8 +328,12 @@ module Rbeapi
|
|
133
328
|
# node to send logging information to.
|
134
329
|
#
|
135
330
|
# @return [Boolean] Returns true if the command completed successfully.
|
136
|
-
def add_host(name)
|
137
|
-
|
331
|
+
def add_host(name, opts = {})
|
332
|
+
vrf = opts[:vrf] ? "vrf #{opts[:vrf]} " : ''
|
333
|
+
cmd = "logging #{vrf}host #{name}"
|
334
|
+
cmd += " #{opts[:port]}" if opts[:port]
|
335
|
+
cmd += " protocol #{opts[:protocol]}" if opts[:protocol]
|
336
|
+
configure cmd
|
138
337
|
end
|
139
338
|
|
140
339
|
##
|
@@ -151,8 +350,11 @@ module Rbeapi
|
|
151
350
|
# host to remove from the nodes current configuration.
|
152
351
|
#
|
153
352
|
# @return [Boolean] Returns true if the commands completed successfully.
|
154
|
-
def remove_host(name)
|
155
|
-
|
353
|
+
def remove_host(name, opts = {})
|
354
|
+
vrf = opts[:vrf] ? "vrf #{opts[:vrf]} " : ''
|
355
|
+
# Hosts are uniquely identified by vrf and address, alone.
|
356
|
+
cmd = "no logging #{vrf}host #{name}"
|
357
|
+
configure cmd
|
156
358
|
end
|
157
359
|
end
|
158
360
|
end
|
data/lib/rbeapi/api/radius.rb
CHANGED
@@ -76,6 +76,7 @@ module Rbeapi
|
|
76
76
|
global.merge!(parse_global_timeout)
|
77
77
|
global.merge!(parse_global_retransmit)
|
78
78
|
global.merge!(parse_global_key)
|
79
|
+
global.merge!(parse_global_source)
|
79
80
|
resource = { global: global, servers: parse_servers }
|
80
81
|
resource
|
81
82
|
end
|
@@ -126,6 +127,29 @@ module Rbeapi
|
|
126
127
|
end
|
127
128
|
private :parse_global_key
|
128
129
|
|
130
|
+
##
|
131
|
+
# parse_global_source takes a running configuration as a string
|
132
|
+
# and parses out the radius global source-interface per VRF if it exists
|
133
|
+
# in the configuration. An empty Hash is returned if there is no global
|
134
|
+
# setting configured. The Hash needs to be converted to ordered lists
|
135
|
+
# for vrf and source_interface before being merged into a property hash.
|
136
|
+
#
|
137
|
+
# @api private
|
138
|
+
#
|
139
|
+
# @return [Hash<Symbol, Object>] Returns the resource hash attribute.
|
140
|
+
def parse_global_source
|
141
|
+
src = config.scan(/ip radius(?:\svrf\s(\w+))?\ssource-interface\s(\w+)/)
|
142
|
+
sources = {}
|
143
|
+
src.each do |vrf, intf|
|
144
|
+
vrf = vrf.nil? ? 'default' : vrf
|
145
|
+
sources[vrf] = intf
|
146
|
+
end
|
147
|
+
{ source_interface: sources }
|
148
|
+
end
|
149
|
+
private :parse_global_source
|
150
|
+
|
151
|
+
##
|
152
|
+
|
129
153
|
##
|
130
154
|
# parse_servers returns an Array of radius server resource hashes. Each
|
131
155
|
# hash describes the current state of the radius server and is intended
|
@@ -335,6 +359,32 @@ module Rbeapi
|
|
335
359
|
cmd << " acct-port #{opts[:acct_port]}" if opts[:acct_port]
|
336
360
|
configure cmd
|
337
361
|
end
|
362
|
+
|
363
|
+
##
|
364
|
+
# set_source_interface takes a dictionary mapping the VRF to the desired
|
365
|
+
# source interface. Any radius source-interface lines in the
|
366
|
+
# running-config that are not defined in the hash will be removed, then
|
367
|
+
# lines generated from the hash will be applied. This is NOT idempotent,
|
368
|
+
# however, it is explicit.
|
369
|
+
#
|
370
|
+
# @api public
|
371
|
+
#
|
372
|
+
# @param sources [Hash] A hash mapping the vrf name to the source
|
373
|
+
# interface.
|
374
|
+
#
|
375
|
+
# @return [Boolean] Returns true if there are no errors.
|
376
|
+
def set_source_interface(sources)
|
377
|
+
existing = config.scan(/ip radius.* source-interface.*/)
|
378
|
+
desired = []
|
379
|
+
sources.each do |vrf, intf|
|
380
|
+
vrf_str = vrf == 'default' ? '' : " vrf #{vrf}"
|
381
|
+
desired << "ip radius#{vrf_str} source-interface #{intf}"
|
382
|
+
end
|
383
|
+
remove = existing - desired
|
384
|
+
cmds = remove.map { |line| "no #{line}" }
|
385
|
+
cmds.concat(desired)
|
386
|
+
configure cmds
|
387
|
+
end
|
338
388
|
end
|
339
389
|
end
|
340
390
|
end
|
data/lib/rbeapi/api/tacacs.rb
CHANGED
@@ -77,6 +77,7 @@ module Rbeapi
|
|
77
77
|
global = {}
|
78
78
|
global.merge!(parse_global_timeout)
|
79
79
|
global.merge!(parse_global_key)
|
80
|
+
global.merge!(parse_global_source)
|
80
81
|
resource = { global: global, servers: servers }
|
81
82
|
resource
|
82
83
|
end
|
@@ -116,6 +117,27 @@ module Rbeapi
|
|
116
117
|
end
|
117
118
|
private :parse_global_timeout
|
118
119
|
|
120
|
+
##
|
121
|
+
# parse_global_source takes a running configuration as a string
|
122
|
+
# and parses out the tacacs global source-interface per VRF if it exists
|
123
|
+
# in the configuration. An empty Hash is returned if there is no global
|
124
|
+
# setting configured. The Hash needs to be converted to ordered lists
|
125
|
+
# for vrf and source_interface before being merged into a property hash.
|
126
|
+
#
|
127
|
+
# @api private
|
128
|
+
#
|
129
|
+
# @return [Hash<Symbol,Object>] Returns the resource hash attributes.
|
130
|
+
def parse_global_source
|
131
|
+
src = config.scan(/ip tacacs(?:\svrf\s(\w+))?\ssource-interface\s(\w+)/)
|
132
|
+
sources = {}
|
133
|
+
src.each do |vrf, intf|
|
134
|
+
vrf = vrf.nil? ? 'default' : vrf
|
135
|
+
sources[vrf] = intf
|
136
|
+
end
|
137
|
+
{ source_interface: sources }
|
138
|
+
end
|
139
|
+
private :parse_global_source
|
140
|
+
|
119
141
|
##
|
120
142
|
# servers returns an Array of tacacs server resource hashes. Each hash
|
121
143
|
# describes the current state of the tacacs server and is suitable for
|
@@ -243,6 +265,32 @@ module Rbeapi
|
|
243
265
|
cmd << " port #{opts[:port]}" if opts[:port]
|
244
266
|
configure cmd
|
245
267
|
end
|
268
|
+
|
269
|
+
##
|
270
|
+
# set_source_interface takes a dictionary mapping the VRF to the desired
|
271
|
+
# source interface. Any tacacs source-interface lines in the
|
272
|
+
# running-config that are not defined in the hash will be removed, then
|
273
|
+
# lines generated from the hash will be applied. This is NOT idempotent,
|
274
|
+
# however, it is explicit.
|
275
|
+
#
|
276
|
+
# @api public
|
277
|
+
#
|
278
|
+
# @param sources [Hash] A hash mapping the vrf name to the source
|
279
|
+
# interface.
|
280
|
+
#
|
281
|
+
# @return [Boolean] Returns true if there are no errors.
|
282
|
+
def set_source_interface(sources)
|
283
|
+
existing = config.scan(/ip tacacs.* source-interface.*/)
|
284
|
+
desired = []
|
285
|
+
sources.each do |vrf, intf|
|
286
|
+
vrf_str = vrf == 'default' ? '' : " vrf #{vrf}"
|
287
|
+
desired << "ip tacacs#{vrf_str} source-interface #{intf}"
|
288
|
+
end
|
289
|
+
remove = existing - desired
|
290
|
+
cmds = remove.map { |line| "no #{line}" }
|
291
|
+
cmds.concat(desired)
|
292
|
+
configure cmds
|
293
|
+
end
|
246
294
|
end
|
247
295
|
end
|
248
296
|
end
|
data/lib/rbeapi/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbeapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Sprygada
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inifile
|
@@ -350,7 +350,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
350
350
|
version: '0'
|
351
351
|
requirements: []
|
352
352
|
rubyforge_project:
|
353
|
-
rubygems_version: 2.6.
|
353
|
+
rubygems_version: 2.6.14
|
354
354
|
signing_key:
|
355
355
|
specification_version: 4
|
356
356
|
summary: This Gem library provides a Ruby interface to the Arista EOS command API
|
@@ -444,4 +444,3 @@ test_files:
|
|
444
444
|
- spec/unit/rbeapi/switchconfig2_spec.rb
|
445
445
|
- spec/unit/rbeapi/switchconfig3_spec.rb
|
446
446
|
- spec/unit/rbeapi/switchconfig_spec.rb
|
447
|
-
has_rdoc:
|