cisco_node_utils 1.6.0 → 1.7.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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +60 -1
  3. data/Gemfile +1 -1
  4. data/LICENSE +1 -1
  5. data/README.md +1 -1
  6. data/cisco_node_utils.gemspec +1 -1
  7. data/docs/README-develop-node-utils-APIs.md +2 -0
  8. data/docs/README-maintainers.md +45 -80
  9. data/lib/cisco_node_utils/ace.rb +24 -43
  10. data/lib/cisco_node_utils/bfd_global.rb +1 -0
  11. data/lib/cisco_node_utils/bgp_af_aggr_addr.rb +207 -0
  12. data/lib/cisco_node_utils/bgp_neighbor.rb +8 -5
  13. data/lib/cisco_node_utils/bgp_neighbor_af.rb +8 -6
  14. data/lib/cisco_node_utils/cisco_cmn_utils.rb +40 -0
  15. data/lib/cisco_node_utils/cmd_ref/bfd_global.yaml +1 -1
  16. data/lib/cisco_node_utils/cmd_ref/bgp.yaml +8 -4
  17. data/lib/cisco_node_utils/cmd_ref/bgp_af_aa.yaml +38 -0
  18. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +9 -4
  19. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +8 -3
  20. data/lib/cisco_node_utils/cmd_ref/dhcp_relay_global.yaml +2 -1
  21. data/lib/cisco_node_utils/cmd_ref/feature.yaml +5 -0
  22. data/lib/cisco_node_utils/cmd_ref/interface.yaml +8 -0
  23. data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +7 -3
  24. data/lib/cisco_node_utils/cmd_ref/inventory.yaml +3 -3
  25. data/lib/cisco_node_utils/cmd_ref/ntp_auth_key.yaml +10 -0
  26. data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +13 -0
  27. data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +10 -2
  28. data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +6 -1
  29. data/lib/cisco_node_utils/cmd_ref/route_map.yaml +8 -0
  30. data/lib/cisco_node_utils/cmd_ref/span_session.yaml +65 -0
  31. data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +2 -1
  32. data/lib/cisco_node_utils/cmd_ref/vpc.yaml +22 -3
  33. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +2 -1
  34. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +6 -3
  35. data/lib/cisco_node_utils/cmd_ref/yum.yaml +48 -4
  36. data/lib/cisco_node_utils/command_reference.rb +5 -2
  37. data/lib/cisco_node_utils/feature.rb +14 -1
  38. data/lib/cisco_node_utils/interface.rb +13 -0
  39. data/lib/cisco_node_utils/interface_channel_group.rb +33 -25
  40. data/lib/cisco_node_utils/itd_device_group.rb +17 -37
  41. data/lib/cisco_node_utils/itd_service.rb +9 -32
  42. data/lib/cisco_node_utils/node.rb +12 -4
  43. data/lib/cisco_node_utils/ntp_auth_key.rb +67 -0
  44. data/lib/cisco_node_utils/ntp_config.rb +19 -1
  45. data/lib/cisco_node_utils/ntp_server.rb +28 -27
  46. data/lib/cisco_node_utils/route_map.rb +33 -51
  47. data/lib/cisco_node_utils/snmpuser.rb +2 -2
  48. data/lib/cisco_node_utils/span_session.rb +149 -0
  49. data/lib/cisco_node_utils/upgrade.rb +21 -17
  50. data/lib/cisco_node_utils/version.rb +2 -2
  51. data/lib/cisco_node_utils/vlan.rb +1 -1
  52. data/lib/cisco_node_utils/vpc.rb +40 -0
  53. data/lib/cisco_node_utils/yum.rb +136 -13
  54. data/spec/schema.yaml +2 -0
  55. data/tests/ciscotest.rb +36 -0
  56. data/tests/test_ace.rb +6 -0
  57. data/tests/test_bfd_global.rb +1 -7
  58. data/tests/test_bgp_af.rb +2 -2
  59. data/tests/test_bgp_af_aa.rb +108 -0
  60. data/tests/test_bgp_neighbor.rb +2 -1
  61. data/tests/test_bgp_neighbor_af.rb +6 -6
  62. data/tests/test_dhcp_relay_global.rb +1 -0
  63. data/tests/test_interface.rb +18 -2
  64. data/tests/test_interface_channel_group.rb +47 -0
  65. data/tests/test_interface_svi.rb +1 -1
  66. data/tests/test_ntp_auth_key.rb +77 -0
  67. data/tests/test_ntp_config.rb +51 -4
  68. data/tests/test_ntp_server.rb +69 -9
  69. data/tests/test_overlay_global.rb +1 -0
  70. data/tests/test_route_map.rb +13 -24
  71. data/tests/test_router_bgp.rb +14 -9
  72. data/tests/test_span_session.rb +155 -0
  73. data/tests/test_stp_global.rb +1 -0
  74. data/tests/test_upgrade.rb +2 -3
  75. data/tests/test_vlan.rb +24 -3
  76. data/tests/test_vlan_private.rb +1 -1
  77. data/tests/test_vpc.rb +42 -17
  78. data/tests/test_vxlan_vtep.rb +1 -0
  79. data/tests/test_vxlan_vtep_vni.rb +5 -1
  80. data/tests/test_yum.rb +7 -30
  81. data/tests/yum_package.yaml +20 -0
  82. metadata +13 -3
@@ -67,30 +67,6 @@ module Cisco
67
67
  @set_args = @get_args.merge!(hash) unless hash.empty?
68
68
  end
69
69
 
70
- # extract value of property from probe
71
- def extract_value(prop, prefix=nil)
72
- prefix = prop if prefix.nil?
73
- probe_match = probe_get
74
-
75
- # matching probe not found
76
- return nil if probe_match.nil? # no matching probe found
77
-
78
- # property not defined for matching probe
79
- return nil unless probe_match.names.include?(prop)
80
-
81
- # extract and return value that follows prefix + <space>
82
- regexp = Regexp.new("#{Regexp.escape(prefix)} (?<extracted>.*)")
83
- value_match = regexp.match(probe_match[prop])
84
- return nil if value_match.nil?
85
- value_match[:extracted]
86
- end
87
-
88
- # prepend property name prefix/keyword to value
89
- def attach_prefix(val, prop, prefix=nil)
90
- prefix = prop.to_s if prefix.nil?
91
- @set_args[prop] = val.to_s.empty? ? val : "#{prefix} #{val}"
92
- end
93
-
94
70
  # probe configuration is all done in a single line (like below)
95
71
  # probe tcp port 32 frequency 10 timeout 5 retry-down-count 3 ...
96
72
  # probe udp port 23 frequency 10 timeout 5 retry-down-count 3 ...
@@ -113,7 +89,7 @@ module Cisco
113
89
  end
114
90
 
115
91
  def probe_control
116
- val = extract_value('control')
92
+ val = Utils.extract_value(probe_get, 'control')
117
93
  return default_probe_control if val.nil?
118
94
  val == 'enable' ? true : default_probe_control
119
95
  end
@@ -131,21 +107,21 @@ module Cisco
131
107
  end
132
108
 
133
109
  def probe_dns_host
134
- extract_value('dns_host', 'host')
110
+ Utils.extract_value(probe_get, 'dns_host', 'host')
135
111
  end
136
112
 
137
113
  def probe_dns_host=(dns_host)
138
- attach_prefix(dns_host, :dns_host, 'host')
114
+ @set_args[:dns_host] = Utils.attach_prefix(dns_host, :dns_host, 'host')
139
115
  end
140
116
 
141
117
  def probe_frequency
142
- val = extract_value('frequency')
118
+ val = Utils.extract_value(probe_get, 'frequency')
143
119
  return default_probe_frequency if val.nil?
144
120
  val.to_i
145
121
  end
146
122
 
147
123
  def probe_frequency=(frequency)
148
- attach_prefix(frequency, :frequency)
124
+ @set_args[:frequency] = Utils.attach_prefix(frequency, :frequency)
149
125
  end
150
126
 
151
127
  def default_probe_frequency
@@ -153,22 +129,24 @@ module Cisco
153
129
  end
154
130
 
155
131
  def probe_port
156
- val = extract_value('port')
132
+ val = Utils.extract_value(probe_get, 'port')
157
133
  val.to_i unless val.nil?
158
134
  end
159
135
 
160
136
  def probe_port=(port)
161
- attach_prefix(port, :port)
137
+ @set_args[:port] = Utils.attach_prefix(port, :port)
162
138
  end
163
139
 
164
140
  def probe_retry_down
165
- val = extract_value('retry_down', 'retry-down-count')
141
+ val = Utils.extract_value(probe_get, 'retry_down', 'retry-down-count')
166
142
  return default_probe_retry_down if val.nil?
167
143
  val.to_i
168
144
  end
169
145
 
170
146
  def probe_retry_down=(rdc)
171
- attach_prefix(rdc, :retry_down_count, 'retry-down-count')
147
+ @set_args[:retry_down_count] = Utils.attach_prefix(rdc,
148
+ :retry_down_count,
149
+ 'retry-down-count')
172
150
  end
173
151
 
174
152
  def default_probe_retry_down
@@ -176,13 +154,15 @@ module Cisco
176
154
  end
177
155
 
178
156
  def probe_retry_up
179
- val = extract_value('retry_up', 'retry-up-count')
157
+ val = Utils.extract_value(probe_get, 'retry_up', 'retry-up-count')
180
158
  return default_probe_retry_up if val.nil?
181
159
  val.to_i
182
160
  end
183
161
 
184
162
  def probe_retry_up=(ruc)
185
- attach_prefix(ruc, :retry_up_count, 'retry-up-count')
163
+ @set_args[:retry_up_count] = Utils.attach_prefix(ruc,
164
+ :retry_up_count,
165
+ 'retry-up-count')
186
166
  end
187
167
 
188
168
  def default_probe_retry_up
@@ -190,13 +170,13 @@ module Cisco
190
170
  end
191
171
 
192
172
  def probe_timeout
193
- val = extract_value('timeout')
173
+ val = Utils.extract_value(probe_get, 'timeout')
194
174
  return default_probe_timeout if val.nil?
195
175
  val.to_i
196
176
  end
197
177
 
198
178
  def probe_timeout=(timeout)
199
- attach_prefix(timeout, :timeout)
179
+ @set_args[:timeout] = Utils.attach_prefix(timeout, :timeout)
200
180
  end
201
181
 
202
182
  def default_probe_timeout
@@ -80,30 +80,6 @@ module Cisco
80
80
  @set_args = @get_args.merge!(hash) unless hash.empty?
81
81
  end
82
82
 
83
- # extract value of property from load-balance
84
- def extract_value(prop, prefix=nil)
85
- prefix = prop if prefix.nil?
86
- lb_match = lb_get
87
-
88
- # matching lb not found
89
- return nil if lb_match.nil? # no matching lb found
90
-
91
- # property not defined for matching lb
92
- return nil unless lb_match.names.include?(prop)
93
-
94
- # extract and return value that follows prefix + <space>
95
- regexp = Regexp.new("#{Regexp.escape(prefix)} (?<extracted>.*)")
96
- value_match = regexp.match(lb_match[prop])
97
- return nil if value_match.nil?
98
- value_match[:extracted]
99
- end
100
-
101
- # prepend property name prefix/keyword to value
102
- def attach_prefix(val, prop, prefix=nil)
103
- prefix = prop.to_s if prefix.nil?
104
- @set_args[prop] = val.to_s.empty? ? val : "#{prefix} #{val}"
105
- end
106
-
107
83
  def access_list
108
84
  config_get('itd_service', 'access_list', @get_args)
109
85
  end
@@ -270,13 +246,13 @@ module Cisco
270
246
  end
271
247
 
272
248
  def load_bal_buckets
273
- val = extract_value('buckets')
249
+ val = Utils.extract_value(lb_get, 'buckets')
274
250
  return default_load_bal_buckets if val.nil?
275
251
  val.to_i
276
252
  end
277
253
 
278
254
  def load_bal_buckets=(buckets)
279
- attach_prefix(buckets, :buckets)
255
+ @set_args[:buckets] = Utils.attach_prefix(buckets, :buckets)
280
256
  end
281
257
 
282
258
  def default_load_bal_buckets
@@ -284,13 +260,13 @@ module Cisco
284
260
  end
285
261
 
286
262
  def load_bal_mask_pos
287
- val = extract_value('mask', 'mask-position')
263
+ val = Utils.extract_value(lb_get, 'mask', 'mask-position')
288
264
  return default_load_bal_mask_pos if val.nil?
289
265
  val.to_i
290
266
  end
291
267
 
292
268
  def load_bal_mask_pos=(mask)
293
- attach_prefix(mask, :mask, 'mask-position')
269
+ @set_args[:mask] = Utils.attach_prefix(mask, :mask, 'mask-position')
294
270
  end
295
271
 
296
272
  def default_load_bal_mask_pos
@@ -313,13 +289,14 @@ module Cisco
313
289
  end
314
290
 
315
291
  def load_bal_method_bundle_select
316
- val = extract_value('bundle_select', 'method')
292
+ val = Utils.extract_value(lb_get, 'bundle_select', 'method')
317
293
  return default_load_bal_method_bundle_select if val.nil?
318
294
  val
319
295
  end
320
296
 
321
297
  def load_bal_method_bundle_select=(bs)
322
- attach_prefix(bs, :bundle_select, 'method')
298
+ @set_args[:bundle_select] =
299
+ Utils.attach_prefix(bs, :bundle_select, 'method')
323
300
  end
324
301
 
325
302
  def default_load_bal_method_bundle_select
@@ -342,13 +319,13 @@ module Cisco
342
319
  end
343
320
 
344
321
  def load_bal_method_start_port
345
- val = extract_value('start_port', 'range')
322
+ val = Utils.extract_value(lb_get, 'start_port', 'range')
346
323
  return default_load_bal_method_start_port if val.nil?
347
324
  val.to_i
348
325
  end
349
326
 
350
327
  def load_bal_method_start_port=(start)
351
- attach_prefix(start, :start_port, 'range')
328
+ @set_args[:start_port] = Utils.attach_prefix(start, :start_port, 'range')
352
329
  end
353
330
 
354
331
  def default_load_bal_method_start_port
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # December 2014, Glenn F. Matthews
6
6
  #
7
- # Copyright (c) 2014-2016 Cisco and/or its affiliates.
7
+ # Copyright (c) 2014-2017 Cisco and/or its affiliates.
8
8
  #
9
9
  # Licensed under the Apache License, Version 2.0 (the "License");
10
10
  # you may not use this file except in compliance with the License.
@@ -107,18 +107,22 @@ module Cisco
107
107
  return value unless ref.hash['drill_down']
108
108
 
109
109
  row_key = ref.hash['get_value'][0][/^\S+/]
110
- row_index = ref.hash['get_value'][0][/\S+$/]
110
+
111
+ # Escape special characters if any in row_index and add
112
+ # anchors for exact match.
113
+ row_index = Regexp.escape(ref.hash['get_value'][0][/\S+$/])
114
+ row_index = "^#{row_index}$"
115
+
111
116
  data_key = ref.hash['get_value'][1]
112
117
  regexp_filter = nil
113
118
  if ref.hash['get_value'][2]
114
119
  regexp_filter = Regexp.new ref.hash['get_value'][2][1..-2]
115
120
  end
116
-
117
121
  # Get the value using the row_key, row_index and data_key
118
122
  value = value.is_a?(Hash) ? [value] : value
119
123
  data = nil
120
124
  value.each do |row|
121
- data = row[data_key] if row[row_key].to_s.include? row_index.to_s
125
+ data = row[data_key] if row[row_key].to_s[/#{row_index}/]
122
126
  end
123
127
  return value if data.nil?
124
128
  if regexp_filter
@@ -431,5 +435,9 @@ module Cisco
431
435
  def system
432
436
  config_get('show_version', 'system_image')
433
437
  end
438
+
439
+ def os_version_get(feature, property)
440
+ @cmd_ref.lookup(feature, property).os_version
441
+ end
434
442
  end
435
443
  end
@@ -0,0 +1,67 @@
1
+ # NTP Authentication key provider class
2
+ #
3
+ # Rick Sherman et al., April 2017
4
+ #
5
+ # Copyright (c) 2014-2017 Cisco and/or its affiliates.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative 'node'
20
+
21
+ module Cisco
22
+ # NtpAuthKey - node utility class for NTP authentication-key management
23
+ class NtpAuthKey < NodeUtil
24
+ attr_reader :algorithm, :mode, :password
25
+
26
+ def initialize(opts, instantiate=true)
27
+ @algorithm = opts['algorithm'].nil? ? 'md5' : opts['algorithm']
28
+ @key = opts['name']
29
+ @mode = opts['mode'].nil? ? '7' : opts['mode']
30
+ @password = opts['password']
31
+
32
+ create if instantiate
33
+ end
34
+
35
+ def self.ntpkeys
36
+ keys = %w(name algorithm password mode)
37
+ hash = {}
38
+ ntp_auth_key_list = config_get('ntp_auth_key', 'key')
39
+ return hash if ntp_auth_key_list.empty?
40
+
41
+ ntp_auth_key_list.each do |id|
42
+ hash[id[0]] = NtpAuthKey.new(Hash[keys.zip(id)], false)
43
+ end
44
+
45
+ hash
46
+ end
47
+
48
+ def ==(other)
49
+ name == other.name
50
+ end
51
+
52
+ def create
53
+ config_set('ntp_auth_key', 'key', state: '', key: @key,
54
+ algorithm: @algorithm, password: @password, mode: @mode)
55
+ end
56
+
57
+ def destroy
58
+ # There appears to be a bug in NXOS that requires the password be passed
59
+ config_set('ntp_auth_key', 'key', state: 'no', key: @key,
60
+ algorithm: @algorithm, password: @password, mode: @mode)
61
+ end
62
+
63
+ def name
64
+ @key
65
+ end
66
+ end # class
67
+ end # module
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # Jonathan Tripathy et al., September 2015
4
4
  #
5
- # Copyright (c) 2014-2016 Cisco and/or its affiliates.
5
+ # Copyright (c) 2014-2017 Cisco and/or its affiliates.
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
8
8
  # you may not use this file except in compliance with the License.
@@ -41,6 +41,24 @@ module Cisco
41
41
  name == other.name
42
42
  end
43
43
 
44
+ def authenticate
45
+ config_get('ntp_config', 'authenticate')
46
+ end
47
+
48
+ def authenticate=(enable)
49
+ state = (enable ? '' : 'no')
50
+ config_set('ntp_config', 'authenticate', state: state)
51
+ end
52
+
53
+ def trusted_key
54
+ config_get('ntp_config', 'trusted_key')
55
+ end
56
+
57
+ def trusted_key_set(state, key)
58
+ state = (state ? '' : 'no')
59
+ config_set('ntp_config', 'trusted_key', state: state, key: key)
60
+ end
61
+
44
62
  def source_interface
45
63
  source_interface = config_get('ntp_config', 'source_interface')
46
64
  source_interface = source_interface.downcase \
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # Jonathan Tripathy et al., September 2015
4
4
  #
5
- # Copyright (c) 2014-2016 Cisco and/or its affiliates.
5
+ # Copyright (c) 2014-2017 Cisco and/or its affiliates.
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
8
8
  # you may not use this file except in compliance with the License.
@@ -18,43 +18,43 @@
18
18
 
19
19
  require_relative 'node'
20
20
  require_relative 'interface'
21
+ require 'resolv'
21
22
 
22
23
  module Cisco
23
24
  # NtpServer - node utility class for NTP Server configuration management
24
25
  class NtpServer < NodeUtil
25
- def initialize(ntpserver_id, prefer, instantiate=true)
26
- @ntpserver_id = ntpserver_id.to_s
27
- @ntpserver_prefer = prefer
26
+ attr_reader :key, :maxpoll, :minpoll, :prefer, :vrf
28
27
 
29
- unless @ntpserver_id =~ /^[a-zA-Z0-9\.\:]*$/
30
- fail ArgumentError,
31
- 'Invalid value (IPv4/IPv6 address contains invalid characters)'
32
- end
28
+ def initialize(opts, instantiate=true)
29
+ @ntpserver_id = opts['name']
30
+ @key = opts['key']
31
+ @minpoll = opts['minpoll']
32
+ @maxpoll = opts['maxpoll']
33
+ @prefer = opts['prefer'].nil? ? false : true
34
+ @vrf = opts['vrf'].nil? ? 'default' : opts['vrf']
33
35
 
34
- begin
35
- IPAddr.new(@ntpserver_id)
36
- rescue
37
- raise ArgumentError,
38
- 'Invalid value (Name is not a valid single IPv4/IPv6 address)'
39
- end
36
+ hostname_regex = /^(?=.{1,255}$)[0-9A-Za-z]
37
+ (?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?
38
+ (?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/x
40
39
 
41
- unless @ntpserver_prefer == true ||
42
- @ntpserver_prefer == false ||
43
- @ntpserver_prefer.nil?
44
- fail ArgumentError, 'Invalid value(prefer must be true or false)'
40
+ unless @ntpserver_id =~ Resolv::AddressRegex ||
41
+ @ntpserver_id =~ hostname_regex
42
+ fail ArgumentError,
43
+ "Invalid value '#{@ntpserver_id}' \
44
+ (Must be valid IPv4/IPv6 address or hostname)"
45
45
  end
46
+
46
47
  create if instantiate
47
48
  end
48
49
 
49
50
  def self.ntpservers
51
+ keys = %w(name prefer vrf key minpoll maxpoll)
50
52
  hash = {}
51
53
  ntpservers_list = config_get('ntp_server', 'server')
52
54
  return hash if ntpservers_list.empty?
53
55
 
54
- preferred_servers = config_get('ntp_server', 'prefer')
55
-
56
56
  ntpservers_list.each do |id|
57
- hash[id] = NtpServer.new(id, preferred_servers.include?(id), false)
57
+ hash[id[0]] = NtpServer.new(Hash[keys.zip(id)], false)
58
58
  end
59
59
 
60
60
  hash
@@ -66,20 +66,21 @@ module Cisco
66
66
 
67
67
  def create
68
68
  config_set('ntp_server', 'server', state: '', ip: @ntpserver_id,
69
- prefer: @ntpserver_prefer ? 'prefer' : '')
69
+ prefer: (['true', true].include? @prefer) ? 'prefer' : '',
70
+ vrf: @vrf ? "use-vrf #{@vrf}" : '',
71
+ key: @key ? "key #{@key}" : '',
72
+ minpoll: @minpoll ? "minpoll #{@minpoll}" : '',
73
+ maxpoll: @maxpoll ? "maxpoll #{@maxpoll}" : '')
70
74
  end
71
75
 
72
76
  def destroy
73
77
  config_set('ntp_server', 'server',
74
- state: 'no', ip: @ntpserver_id, prefer: '')
78
+ state: 'no', ip: @ntpserver_id, prefer: '', vrf: '',
79
+ key: '', minpoll: '', maxpoll: '')
75
80
  end
76
81
 
77
82
  def name
78
83
  @ntpserver_id
79
84
  end
80
-
81
- def prefer
82
- @ntpserver_prefer
83
- end
84
85
  end # class
85
86
  end # module