puppetmodule-netdev_stdlib 0.10.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 (66) hide show
  1. data/.gitignore +27 -0
  2. data/.travis.yml +9 -0
  3. data/Gemfile +4 -0
  4. data/Guardfile +15 -0
  5. data/LICENSE +202 -0
  6. data/Modulefile +9 -0
  7. data/README.md +330 -0
  8. data/Rakefile +1 -0
  9. data/lib/netdev_stdlib.rb +4 -0
  10. data/lib/netdev_stdlib/version.rb +3 -0
  11. data/lib/puppet/type/domain_name.rb +17 -0
  12. data/lib/puppet/type/name_server.rb +17 -0
  13. data/lib/puppet/type/network_interface.rb +60 -0
  14. data/lib/puppet/type/network_trunk.rb +83 -0
  15. data/lib/puppet/type/network_vlan.rb +53 -0
  16. data/lib/puppet/type/ntp_config.rb +25 -0
  17. data/lib/puppet/type/ntp_server.rb +20 -0
  18. data/lib/puppet/type/port_channel.rb +82 -0
  19. data/lib/puppet/type/radius.rb +20 -0
  20. data/lib/puppet/type/radius_global.rb +40 -0
  21. data/lib/puppet/type/radius_server.rb +95 -0
  22. data/lib/puppet/type/radius_server_group.rb +25 -0
  23. data/lib/puppet/type/search_domain.rb +17 -0
  24. data/lib/puppet/type/snmp_community.rb +29 -0
  25. data/lib/puppet/type/snmp_contact.rb +17 -0
  26. data/lib/puppet/type/snmp_location.rb +17 -0
  27. data/lib/puppet/type/snmp_notification.rb +20 -0
  28. data/lib/puppet/type/snmp_notification_receiver.rb +77 -0
  29. data/lib/puppet/type/snmp_protocol.rb +20 -0
  30. data/lib/puppet/type/snmp_user.rb +77 -0
  31. data/lib/puppet/type/syslog_server.rb +42 -0
  32. data/lib/puppet/type/syslog_settings.rb +25 -0
  33. data/lib/puppet/type/tacacs.rb +20 -0
  34. data/lib/puppet/type/tacacs_global.rb +40 -0
  35. data/lib/puppet/type/tacacs_server.rb +50 -0
  36. data/lib/puppet/type/tacacs_server_group.rb +25 -0
  37. data/netdev_stdlib.gemspec +36 -0
  38. data/spec/spec_helper.rb +15 -0
  39. data/spec/support/shared_examples_for_types.rb +412 -0
  40. data/spec/unit/puppet/type/domain_name_spec.rb +8 -0
  41. data/spec/unit/puppet/type/name_server_spec.rb +8 -0
  42. data/spec/unit/puppet/type/network_interface_spec.rb +44 -0
  43. data/spec/unit/puppet/type/network_trunk_spec.rb +55 -0
  44. data/spec/unit/puppet/type/network_vlan_spec.rb +57 -0
  45. data/spec/unit/puppet/type/ntp_config_spec.rb +8 -0
  46. data/spec/unit/puppet/type/ntp_server_spec.rb +8 -0
  47. data/spec/unit/puppet/type/port_channel_spec.rb +87 -0
  48. data/spec/unit/puppet/type/radius_global_spec.rb +27 -0
  49. data/spec/unit/puppet/type/radius_server_group_spec.rb +12 -0
  50. data/spec/unit/puppet/type/radius_server_spec.rb +51 -0
  51. data/spec/unit/puppet/type/radius_spec.rb +8 -0
  52. data/spec/unit/puppet/type/search_domain_spec.rb +8 -0
  53. data/spec/unit/puppet/type/snmp_community_spec.rb +27 -0
  54. data/spec/unit/puppet/type/snmp_contact_spec.rb +8 -0
  55. data/spec/unit/puppet/type/snmp_location_spec.rb +8 -0
  56. data/spec/unit/puppet/type/snmp_notification_receiver_spec.rb +50 -0
  57. data/spec/unit/puppet/type/snmp_notification_spec.rb +8 -0
  58. data/spec/unit/puppet/type/snmp_protocol_spec.rb +8 -0
  59. data/spec/unit/puppet/type/snmp_user_spec.rb +63 -0
  60. data/spec/unit/puppet/type/syslog_server_spec.rb +20 -0
  61. data/spec/unit/puppet/type/syslog_settings_spec.rb +19 -0
  62. data/spec/unit/puppet/type/tacacs_global_spec.rb +27 -0
  63. data/spec/unit/puppet/type/tacacs_server_group_spec.rb +12 -0
  64. data/spec/unit/puppet/type/tacacs_server_spec.rb +25 -0
  65. data/spec/unit/puppet/type/tacacs_spec.rb +8 -0
  66. metadata +338 -0
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+
3
+ Puppet::Type.newtype(:tacacs_server_group) do
4
+ @doc = 'Configure a tacacs server group'
5
+
6
+ newparam(:name, namevar: true) do
7
+ desc 'The name of the tacacs server group'
8
+
9
+ validate do |value|
10
+ if value.is_a? String then super(value)
11
+ else fail "value #{value.inspect} is invalid, must be a String."
12
+ end
13
+ end
14
+ end
15
+
16
+ newproperty(:servers, array_matching: :all) do
17
+ desc 'Array of servers associated with this group'
18
+
19
+ validate do |value|
20
+ if value.is_a? String then super(value)
21
+ else fail "value #{value.inspect} is invalid, must be a String."
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'netdev_stdlib/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'puppetmodule-netdev_stdlib'
8
+ spec.version = NetdevStdlib::VERSION
9
+ spec.authors = ['Jeff McCune']
10
+ spec.email = ['jeff@puppetlabs.com']
11
+ spec.description = %q{NetDev Standard Library provides Puppet types to configure network devices}
12
+ spec.summary = %q{Type definitions for Networking Device (NetDev) Standard Library}
13
+ spec.homepage = 'https://github.com/puppetlabs/netdev_stdlib'
14
+ spec.license = 'Apache 2.0'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ # Development
22
+ spec.add_development_dependency 'bundler', '~> 1.3'
23
+ spec.add_development_dependency 'rake'
24
+ spec.add_development_dependency 'guard'
25
+ spec.add_development_dependency 'guard-rspec'
26
+ spec.add_development_dependency 'guard-rubocop'
27
+ spec.add_development_dependency 'pry-doc'
28
+ spec.add_development_dependency 'pry'
29
+ # Testing
30
+ spec.add_development_dependency 'rspec-puppet'
31
+ spec.add_development_dependency 'rspec', '~> 2.13.0'
32
+ spec.add_development_dependency 'puppetlabs_spec_helper'
33
+ spec.add_development_dependency 'simplecov'
34
+
35
+ spec.add_dependency 'puppet'
36
+ end
@@ -0,0 +1,15 @@
1
+ # encoding: utf-8
2
+
3
+ require 'simplecov'
4
+ SimpleCov.start do
5
+ add_filter '/spec/'
6
+ add_filter '/.bundle/'
7
+ end
8
+
9
+ dir = File.expand_path(File.dirname(__FILE__))
10
+
11
+ require 'puppet'
12
+ require 'rspec-puppet'
13
+ require 'puppetlabs_spec_helper/module_spec_helper'
14
+
15
+ Dir["#{dir}/support/**/*.rb"].sort.each { |f| require f }
@@ -0,0 +1,412 @@
1
+ # encoding: utf-8
2
+
3
+ RSpec.shared_examples 'property' do
4
+ it 'is a property' do
5
+ expect(described_class.attrtype(attribute)).to eq(:property)
6
+ end
7
+ end
8
+
9
+ RSpec.shared_examples 'parameter' do
10
+ it 'is a parameter' do
11
+ expect(described_class.attrtype(attribute)).to eq(:param)
12
+ end
13
+ end
14
+
15
+ RSpec.shared_examples 'an ensurable type' do |opts = { name: 'emanon' }|
16
+ describe 'ensure' do
17
+ let(:catalog) { Puppet::Resource::Catalog.new }
18
+ let(:type) do
19
+ described_class.new(name: opts[:name], catalog: catalog)
20
+ end
21
+
22
+ let(:attribute) { :ensure }
23
+ subject { described_class.attrclass(attribute) }
24
+
25
+ include_examples 'property'
26
+ include_examples '#doc Documentation'
27
+
28
+ %w(absent present).each do |val|
29
+ it "accepts #{val.inspect}" do
30
+ type[attribute] = val
31
+ end
32
+ end
33
+
34
+ %w(true false).each do |val|
35
+ it "rejects #{val.inspect}" do
36
+ expect { type[attribute] = val }.to raise_error Puppet::ResourceError
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ RSpec.shared_examples 'boolean parameter' do
43
+ it 'is a parameter' do
44
+ expect(described_class.attrtype(attribute)).to eq(:param)
45
+ end
46
+
47
+ include_examples 'boolean value'
48
+ end
49
+
50
+ RSpec.shared_examples 'boolean' do |opts|
51
+ attribute = opts[:attribute]
52
+ fail unless attribute
53
+ name = opts[:name] || 'emanon'
54
+
55
+ describe "#{attribute}" do
56
+ let(:catalog) { Puppet::Resource::Catalog.new }
57
+ let(:attribute) { attribute }
58
+ let(:type) { described_class.new(name: name, catalog: catalog) }
59
+ subject { described_class.attrclass(attribute) }
60
+
61
+ include_examples 'boolean value'
62
+ include_examples '#doc Documentation'
63
+ include_examples 'rejects values', [0, [1], { two: :three }]
64
+ end
65
+ end
66
+
67
+ RSpec.shared_examples 'boolean value' do
68
+ [true, false, 'true', 'false', :true, :false].each do |val|
69
+ it "accepts #{val.inspect}" do
70
+ type[attribute] = val
71
+ end
72
+
73
+ it "munges #{val.inspect} to #{val.to_s.intern.inspect}" do
74
+ type[attribute] = val
75
+ expect(type[attribute]).to eq(val.to_s.intern)
76
+ end
77
+ end
78
+
79
+ [1, -1, { foo: 1 }, [1], 'baz', nil].each do |val|
80
+ it "rejects #{val.inspect} with Puppet::Error" do
81
+ expect { type[attribute] = val }.to raise_error Puppet::Error
82
+ end
83
+ end
84
+ end
85
+
86
+ RSpec.shared_examples 'name is the namevar' do
87
+ describe 'name' do
88
+ let(:catalog) { Puppet::Resource::Catalog.new }
89
+ let(:type) do
90
+ described_class.new(name: 'emanon', catalog: catalog)
91
+ end
92
+
93
+ let(:attribute) { :name }
94
+ subject { described_class.attrclass(attribute) }
95
+
96
+ include_examples '#doc Documentation'
97
+
98
+ it 'is a parameter' do
99
+ expect(described_class.attrtype(:name)).to eq(:param)
100
+ end
101
+
102
+ ['Engineering'].each do |val|
103
+ it "accepts #{val.inspect}" do
104
+ type[attribute] = val
105
+ end
106
+ end
107
+
108
+ [0, %w(Marketing Sales), { two: :three }].each do |val|
109
+ it "rejects #{val.inspect}" do
110
+ expect { type[attribute] = val }
111
+ .to raise_error Puppet::ResourceError, /is invalid, must be a String/
112
+ end
113
+ end
114
+ end
115
+ end
116
+
117
+ RSpec.shared_examples '#doc Documentation' do
118
+ it '#doc is a String' do
119
+ expect(subject.doc).to be_a_kind_of(String)
120
+ end
121
+
122
+ it '#doc is not only whitespace' do
123
+ expect(subject.doc.gsub(/\s+/, '')).not_to be_empty
124
+ end
125
+ end
126
+
127
+ RSpec.shared_examples 'rejected parameter values' do
128
+ [{ two: :three }, nil, :undef, :undefined, 'foobar'].each do |val|
129
+ it "rejects #{val.inspect} with a Puppet::Error" do
130
+ expect { type[attribute] = val }.to raise_error Puppet::Error
131
+ end
132
+ end
133
+ end
134
+
135
+ RSpec.shared_examples 'vlan id value' do
136
+ [1, 10, 100, 4095].each do |val|
137
+ it "accepts #{val.inspect}" do
138
+ type[attribute] = val
139
+ end
140
+ end
141
+
142
+ it 'munges [10, 20] to 10' do
143
+ type[attribute] = [10, 20]
144
+ expect(type[attribute]).to eq(10)
145
+ end
146
+
147
+ [-1, 4096, 8192, 'asdf', { foo: 1 }, true, false, nil].each do |val|
148
+ it "rejects #{val.inspect} with a Puppet::Error" do
149
+ expect { type[attribute] = val }.to raise_error Puppet::Error
150
+ end
151
+ end
152
+ end
153
+
154
+ RSpec.shared_examples 'vlan range value' do
155
+ [1, 10, 100, 4095].each do |val|
156
+ it "munges #{val.inspect} to [#{val}]" do
157
+ type[attribute] = val
158
+ expect(type[attribute]).to eq([val])
159
+ end
160
+ end
161
+
162
+ it 'munges [10, 20] to [10, 20]' do
163
+ type[attribute] = [10, 20]
164
+ expect(type[attribute]).to eq([10, 20])
165
+ end
166
+
167
+ [-1, 4096, 8192, 'asdf', { foo: 1 }, true, false, nil].each do |val|
168
+ it "rejects #{val.inspect} with a Puppet::Error" do
169
+ expect { type[attribute] = val }.to raise_error Puppet::Error
170
+ end
171
+ end
172
+ end
173
+
174
+ RSpec.shared_examples 'interface list value' do
175
+ ['Ethernet1', 'Ethernet2', 'ethernet 4/2'].each do |val|
176
+ it "accepts #{val.inspect}" do
177
+ type[attribute] = val
178
+ expect(type[attribute]).to eq([val])
179
+ end
180
+ end
181
+
182
+ [-1, 4096, 8192, 'asdf', { foo: 1 }, true, false, nil].each do |val|
183
+ it "rejects #{val.inspect} with a Puppet::Error" do
184
+ expect { type[attribute] = val }.to raise_error Puppet::Error
185
+ end
186
+ end
187
+ end
188
+
189
+ RSpec.shared_examples 'array of strings property' do |opts|
190
+ attribute = opts[:attribute]
191
+ name = opts[:name] || 'emanon'
192
+ describe "#{attribute}" do
193
+ let(:catalog) { Puppet::Resource::Catalog.new }
194
+ let(:type) { described_class.new(name: name, catalog: catalog) }
195
+ let(:attribute) { attribute }
196
+ subject { described_class.attrclass(attribute) }
197
+
198
+ include_examples '#doc Documentation'
199
+ include_examples 'array of strings value'
200
+ end
201
+ end
202
+
203
+ RSpec.shared_examples 'array of strings value' do
204
+ ['foo', 'bar', 'foo bar baz'].each do |val|
205
+ it "accepts #{val.inspect}" do
206
+ type[attribute] = val
207
+ expect(type[attribute]).to eq([val])
208
+ end
209
+ end
210
+
211
+ [-1, 4096, 8192, { foo: 1 }, true, false, nil].each do |val|
212
+ it "rejects #{val.inspect} with a Puppet::Error" do
213
+ expect { type[attribute] = val }.to raise_error Puppet::Error
214
+ end
215
+ end
216
+ end
217
+
218
+ RSpec.shared_examples 'numeric parameter' do |opts|
219
+ min = opts[:min]
220
+ max = opts[:max]
221
+ [min, max].each do |val|
222
+ it "accepts #{val.inspect}" do
223
+ type[attribute] = val
224
+ expect(type[attribute]).to eq(val)
225
+ end
226
+ end
227
+
228
+ [min, min.to_s, " #{min}", " #{min} ", "#{min} "].each do |val|
229
+ it "munges #{val.inspect} to #{min}" do
230
+ type[attribute] = val
231
+ expect(type[attribute]).to eq(val.to_i)
232
+ end
233
+ end
234
+
235
+ it "munges [#{min}, #{max}] to #{min}" do
236
+ type[attribute] = [min, max]
237
+ expect(type[attribute]).to eq(min)
238
+ end
239
+ end
240
+
241
+ RSpec.shared_examples 'description property' do
242
+ it 'is a property' do
243
+ expect(described_class.attrtype(attribute)).to eq(:property)
244
+ end
245
+
246
+ ['Engineering VLAN'].each do |desc|
247
+ it "accepts #{desc.inspect}" do
248
+ type[attribute] = desc
249
+ end
250
+ end
251
+
252
+ [0, [1], { two: :three }].each do |val|
253
+ it "rejects #{val.inspect}" do
254
+ expect { type[attribute] = val }.to raise_error Puppet::ResourceError
255
+ end
256
+ end
257
+ end
258
+
259
+ RSpec.shared_examples 'speed property' do
260
+ include_examples 'property'
261
+
262
+ %w(auto 1g 10g 40g 56g 100g 100m 10m).each do |val|
263
+ it "accepts #{val.inspect}" do
264
+ type[attribute] = val
265
+ end
266
+ end
267
+
268
+ [0, 15, '0', '15', { two: :three }, 'abc'].each do |val|
269
+ it "rejects #{val.inspect} with Puppet::ResourceError" do
270
+ expect { type[attribute] = val }.to raise_error Puppet::ResourceError
271
+ end
272
+ end
273
+ end
274
+
275
+ RSpec.shared_examples 'duplex property' do
276
+ include_examples 'property'
277
+
278
+ %w(auto full half).each do |val|
279
+ it "accepts #{val.inspect}" do
280
+ type[attribute] = val
281
+ end
282
+ end
283
+
284
+ [0, 15, '0', '15', { two: :three }, 'abc'].each do |val|
285
+ it "rejects #{val.inspect} with Puppet::ResourceError" do
286
+ expect { type[attribute] = val }.to raise_error Puppet::ResourceError
287
+ end
288
+ end
289
+ end
290
+
291
+ RSpec.shared_examples 'flowcontrol property' do
292
+ it 'is a property' do
293
+ expect(described_class.attrtype(attribute)).to eq(:property)
294
+ end
295
+
296
+ %w(desired on off).each do |val|
297
+ it "accepts #{val.inspect}" do
298
+ type[attribute] = val
299
+ end
300
+
301
+ it "munges #{val.inspect} to #{val.intern.inspect}" do
302
+ type[attribute] = val
303
+ expect(type[attribute]).to eq(val.intern)
304
+ end
305
+ end
306
+
307
+ [0, 15, '0', '15', { two: :three }, 'abc'].each do |val|
308
+ it "rejects #{val.inspect} with Puppet::ResourceError" do
309
+ expect { type[attribute] = val }.to raise_error Puppet::ResourceError
310
+ end
311
+ end
312
+ end
313
+
314
+ RSpec.shared_examples 'enabled type' do
315
+ describe 'enable' do
316
+ let(:catalog) { Puppet::Resource::Catalog.new }
317
+ let(:type) do
318
+ described_class.new(name: 'emanon', catalog: catalog)
319
+ end
320
+
321
+ let(:attribute) { :enable }
322
+ subject { described_class.attrclass(attribute) }
323
+
324
+ it 'is a property' do
325
+ expect(described_class.attrtype(attribute)).to eq(:property)
326
+ end
327
+
328
+ include_examples '#doc Documentation'
329
+ include_examples 'boolean value'
330
+ end
331
+ end
332
+
333
+ RSpec.shared_examples 'string' do |opts|
334
+ attribute = opts[:attribute]
335
+ fail unless attribute
336
+ name = opts[:name] || 'emanon'
337
+
338
+ describe "#{attribute}" do
339
+ let(:catalog) { Puppet::Resource::Catalog.new }
340
+ let(:attribute) { attribute }
341
+ let(:type) { described_class.new(name: name, catalog: catalog) }
342
+ subject { described_class.attrclass(attribute) }
343
+
344
+ include_examples 'string value'
345
+ include_examples '#doc Documentation'
346
+ include_examples 'rejects values', [0, [1], { two: :three }]
347
+ end
348
+ end
349
+
350
+ RSpec.shared_examples 'string value' do
351
+ ['Engineering'].each do |val|
352
+ it "accepts #{val.inspect}" do
353
+ type[attribute] = val
354
+ end
355
+ end
356
+
357
+ [0, [1], { two: :three }].each do |val|
358
+ it "rejects #{val.inspect}" do
359
+ expect { type[attribute] = val }
360
+ .to raise_error Puppet::ResourceError, /is invalid, must be a String/
361
+ end
362
+ end
363
+
364
+ [%w(Marketing Sales)].each do |val|
365
+ it "munges #{val.inspect} to #{val.first.inspect}" do
366
+ type[attribute] = val
367
+ expect(type[attribute]).to eq(val.first)
368
+ end
369
+ end
370
+ end
371
+
372
+ RSpec.shared_examples 'rejects values' do |values|
373
+ [*values].each do |val|
374
+ it "rejects #{val.inspect} with a Puppet::Error" do
375
+ expect { type[attribute] = val }.to raise_error Puppet::Error
376
+ end
377
+ end
378
+ end
379
+
380
+ RSpec.shared_examples 'accepts values' do |values|
381
+ [*values].each do |val|
382
+ it "accepts #{val.inspect}" do
383
+ type[attribute] = val
384
+ end
385
+
386
+ it "munges #{val.inspect} to #{val.intern.inspect}" do
387
+ type[attribute] = val
388
+ expect(type[attribute]).to eq(val.intern)
389
+ end
390
+ end
391
+ end
392
+
393
+ RSpec.shared_examples 'accepts values without munging' do |values|
394
+ [*values].each do |val|
395
+ it "accepts #{val.inspect}" do
396
+ type[attribute] = val
397
+ end
398
+
399
+ it "munges #{val.inspect} to #{val.inspect} (no munging)" do
400
+ type[attribute] = val
401
+ expect(type[attribute]).to eq(val)
402
+ end
403
+ end
404
+ end
405
+
406
+ RSpec.shared_examples 'it has a string property' do |attribute|
407
+ describe "#{attribute}" do
408
+ let(:attribute) { attribute }
409
+ include_examples '#doc Documentation'
410
+ include_examples 'string value'
411
+ end
412
+ end