puppet-resource_api 1.4.2 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 105c2d9cb6636fc3d70e1250bf84e4a56392199aadbfcb3be58471282f9f9c36
4
- data.tar.gz: 1ce5d86677e93beb2375fd83c7e1eb95b4b3132cf001b6cf2534135244c53e84
3
+ metadata.gz: 9e2e55069c15f749148ae6c4a9fc626e77191f0ebba51123893f5d82c6d22a9d
4
+ data.tar.gz: 7add3eb881e226501009caf3150001ee7d83891e301a5d41081fffe3dd77d4cf
5
5
  SHA512:
6
- metadata.gz: 057617a9cdde0351dcee064dfaba1cd439c60dd6112feea96b5045febb80248ce9bcc96fb9d0ba893021efafc275f5ded07e29ed6ff61f9d4df7965f4586e378
7
- data.tar.gz: 4640b315d89e61001df0e41f304547c686e1317e4428dd102a9232bf46c930f2eb5b3f3508880372d70474e8235f014e363d0a9928bdaf28af01a343927081dc
6
+ metadata.gz: d34e5647c07817985e6ec9029e2e7635dc94f0873943af524ae737d27166fe5da76a7bbc8649785d46f7aa0a99097c97e70478a6d797b0cb28562734d1d478d7
7
+ data.tar.gz: 1341a7774319c44650747f1ccba7178e70db1dff676c019d7614ae1ee8fa94af5f33ecaff8eb51ad2942b6a97252e25c8c381f12088b7fd33f8bf07ebdce91d2
data/.travis.yml CHANGED
@@ -52,7 +52,7 @@ matrix:
52
52
  env: PUPPET_GEM_VERSION='~> 4.8.0'
53
53
  - rvm: 2.1.9
54
54
  env: PUPPET_GEM_VERSION='~> 4.7.0'
55
- - rvm: 2.4.3
55
+ - rvm: 2.5.1
56
56
  env: PUPPET_GEM_VERSION='https://github.com/puppetlabs/puppet.git#master'
57
57
  notifications:
58
58
  hipchat:
data/CHANGELOG.md CHANGED
@@ -3,6 +3,23 @@
3
3
  All significant changes to this repo will be summarized in this file.
4
4
 
5
5
 
6
+ ## [v1.5.0](https://github.com/puppetlabs/puppet-resource_api/tree/v1.5.0) (2018-09-12)
7
+ [Full Changelog](https://github.com/puppetlabs/puppet-resource_api/compare/v1.4.2...v1.5.0)
8
+
9
+ **Implemented enhancements:**
10
+
11
+ - \(PDK-1150\) Allow providers to override :title when retrieving resources [\#115](https://github.com/puppetlabs/puppet-resource_api/pull/115) ([da-ar](https://github.com/da-ar))
12
+
13
+ **Fixed bugs:**
14
+
15
+ - \(maint\) create a new default value instance on every access [\#118](https://github.com/puppetlabs/puppet-resource_api/pull/118) ([DavidS](https://github.com/DavidS))
16
+ - \(PDK-1091\) Fix Sensitive value handling [\#117](https://github.com/puppetlabs/puppet-resource_api/pull/117) ([DavidS](https://github.com/DavidS))
17
+ - \(MODULES-7679\) correctly handle simple\_get\_filter providers [\#113](https://github.com/puppetlabs/puppet-resource_api/pull/113) ([da-ar](https://github.com/da-ar))
18
+
19
+ **Merged pull requests:**
20
+
21
+ - Release prep for v1.4.2 [\#112](https://github.com/puppetlabs/puppet-resource_api/pull/112) ([DavidS](https://github.com/DavidS))
22
+
6
23
  ## [v1.4.2](https://github.com/puppetlabs/puppet-resource_api/tree/v1.4.2) (2018-08-09)
7
24
  [Full Changelog](https://github.com/puppetlabs/puppet-resource_api/compare/v1.4.1...v1.4.2)
8
25
 
data/Gemfile CHANGED
@@ -45,8 +45,4 @@ def location_for(place_or_version, fake_version = nil)
45
45
  end
46
46
  end
47
47
 
48
- if ENV['PUPPET_GEM_VERSION']
49
- gem 'puppet', *location_for(ENV['PUPPET_GEM_VERSION'])
50
- else
51
- gem 'puppet', github: 'DavidS/puppet', ref: 'device-apply'
52
- end
48
+ gem 'puppet', *location_for(ENV['PUPPET_GEM_VERSION'])
data/README.md CHANGED
@@ -179,6 +179,10 @@ After this, `puppet device` will be able to use the new provider, and supply it
179
179
 
180
180
  The [Resource API](https://github.com/puppetlabs/puppet-specifications/blob/master/language/resource-api/README.md) describes details of all the capabilities of this gem.
181
181
 
182
+ The [hue_rsapi module](https://github.com/da-ar/hue_rsapi) is a very simple example for using the Resource API for remote resources.
183
+
184
+ The [meraki module](https://github.com/meraki/puppet-module) is a full example for using the Resource API for remote resources.
185
+
182
186
  This [Introduction to Testing Puppet Modules](https://www.netways.de/index.php?id=3445#c44135) talk describes rspec usage in more detail.
183
187
 
184
188
  The [RSpec docs](https://relishapp.com/rspec) provide an overview of the capabilities of rspec.
@@ -215,7 +219,6 @@ Restrictions of puppet:
215
219
  * Attributes cannot be called `title`, `provider`, or any of the [metaparameters](https://puppet.com/docs/puppet/5.5/metaparameter.html), as those are reserved by puppet itself.
216
220
 
217
221
  Future possibilities:
218
- * [Composite Namevars](https://tickets.puppetlabs.com/browse/PDK-531)
219
222
  * [Multiple Providers](https://tickets.puppetlabs.com/browse/PDK-530)
220
223
  * [Commands API](https://tickets.puppetlabs.com/browse/PDK-847)
221
224
 
data/appveyor.yml CHANGED
@@ -7,7 +7,8 @@ branches:
7
7
  environment:
8
8
  matrix:
9
9
  - RUBY_VERSION: 24-x64
10
- - RUBY_VERSION: 21-x64
10
+ - PUPPET_GEM_VERSION: '~> 4.0'
11
+ RUBY_VERSION: 21-x64
11
12
 
12
13
  install:
13
14
  - set PATH=C:\Ruby%RUBY_VERSION%\bin;C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH%
@@ -79,10 +79,21 @@ module Puppet::ResourceApi
79
79
  if attributes.is_a? Puppet::Resource
80
80
  @title = attributes.title
81
81
  @catalog = attributes.catalog
82
+ sensitives = attributes.sensitive_parameters
82
83
  attributes = attributes.to_hash
83
84
  else
84
85
  @ral_find_absent = true
86
+ sensitives = []
85
87
  end
88
+
89
+ # undo puppet's unwrapping of Sensitive values to provide a uniform experience for providers
90
+ # See https://tickets.puppetlabs.com/browse/PDK-1091 for investigation and background
91
+ sensitives.each do |name|
92
+ if attributes.key?(name) && !attributes[name].is_a?(Puppet::Pops::Types::PSensitiveType::Sensitive)
93
+ attributes[name] = Puppet::Pops::Types::PSensitiveType::Sensitive.new(attributes[name])
94
+ end
95
+ end
96
+
86
97
  # $stderr.puts "B: #{attributes.inspect}"
87
98
  if type_definition.feature?('canonicalize')
88
99
  attributes = my_provider.canonicalize(context, [attributes])[0]
@@ -188,9 +199,13 @@ module Puppet::ResourceApi
188
199
  # work around https://tickets.puppetlabs.com/browse/PUP-2368
189
200
  defaultto :true # rubocop:disable Lint/BooleanSymbol
190
201
  else
191
- defaultto options[:default]
202
+ # marshal the default option to decouple that from the actual value.
203
+ # we cache the dumped value in `marshalled`, but use a block to unmarshal
204
+ # everytime the value is requested. Objects that can't be marshalled
205
+ # See https://stackoverflow.com/a/8206537/4918
206
+ marshalled = Marshal.dump(options[:default])
207
+ defaultto { Marshal.load(marshalled) } # rubocop:disable Security/MarshalLoad
192
208
  end
193
- # defaultto options[:default]
194
209
  end
195
210
  end
196
211
 
@@ -301,42 +316,53 @@ module Puppet::ResourceApi
301
316
  # force autoloading of the provider
302
317
  provider(type_definition.name)
303
318
 
304
- my_provider.get(context).map do |resource_hash|
319
+ initial_fetch = if type_definition.feature?('simple_get_filter')
320
+ my_provider.get(context, [])
321
+ else
322
+ my_provider.get(context)
323
+ end
324
+
325
+ initial_fetch.map do |resource_hash|
305
326
  type_definition.check_schema(resource_hash)
306
- result = new(title: resource_hash[type_definition.namevars.first])
327
+ # allow a :title from the provider to override the default
328
+ result = if resource_hash.key? :title
329
+ new(title: resource_hash[:title])
330
+ else
331
+ new(title: resource_hash[type_definition.namevars.first])
332
+ end
307
333
  result.cache_current_state(resource_hash)
308
334
  result
309
335
  end
310
336
  end
311
337
 
312
338
  define_method(:refresh_current_state) do
313
- @rapi_current_state = if type_definition.feature?('simple_get_filter')
314
- my_provider.get(context, [title]).first
315
- else
316
- my_provider.get(context).find { |h| namevar_match?(h) }
317
- end
318
-
319
- if @rapi_current_state
320
- type_definition.check_schema(@rapi_current_state)
321
- strict_check(@rapi_current_state) if type_definition.feature?('canonicalize')
339
+ @rsapi_current_state = if type_definition.feature?('simple_get_filter')
340
+ my_provider.get(context, [title]).find { |h| namevar_match?(h) }
341
+ else
342
+ my_provider.get(context).find { |h| namevar_match?(h) }
343
+ end
344
+
345
+ if @rsapi_current_state
346
+ type_definition.check_schema(@rsapi_current_state)
347
+ strict_check(@rsapi_current_state) if type_definition.feature?('canonicalize')
322
348
  else
323
- @rapi_current_state = { title: title }
324
- @rapi_current_state[:ensure] = :absent if type_definition.ensurable?
349
+ @rsapi_current_state = { title: title }
350
+ @rsapi_current_state[:ensure] = :absent if type_definition.ensurable?
325
351
  end
326
352
  end
327
353
 
328
354
  # Use this to set the current state from the `instances` method
329
355
  def cache_current_state(resource_hash)
330
- @rapi_current_state = resource_hash
331
- strict_check(@rapi_current_state) if type_definition.feature?('canonicalize')
356
+ @rsapi_current_state = resource_hash
357
+ strict_check(@rsapi_current_state) if type_definition.feature?('canonicalize')
332
358
  end
333
359
 
334
360
  define_method(:retrieve) do
335
- refresh_current_state unless @rapi_current_state
361
+ refresh_current_state unless @rsapi_current_state
336
362
 
337
- Puppet.debug("Current State: #{@rapi_current_state.inspect}")
363
+ Puppet.debug("Current State: #{@rsapi_current_state.inspect}")
338
364
 
339
- result = Puppet::Resource.new(self.class, title, parameters: @rapi_current_state)
365
+ result = Puppet::Resource.new(self.class, title, parameters: @rsapi_current_state)
340
366
  # puppet needs ensure to be a symbol
341
367
  result[:ensure] = result[:ensure].to_sym if type_definition.ensurable? && result[:ensure].is_a?(String)
342
368
 
@@ -360,17 +386,17 @@ module Puppet::ResourceApi
360
386
  target_state = Hash[actual_params.map { |k, v| [k, v.rs_value] }]
361
387
  target_state = my_provider.canonicalize(context, [target_state]).first if type_definition.feature?('canonicalize')
362
388
 
363
- retrieve unless @rapi_current_state
389
+ retrieve unless @rsapi_current_state
364
390
 
365
- return if @rapi_current_state == target_state
391
+ return if @rsapi_current_state == target_state
366
392
 
367
393
  Puppet.debug("Target State: #{target_state.inspect}")
368
394
 
369
395
  # enforce init_only attributes
370
- if Puppet.settings[:strict] != :off && @rapi_current_state && (@rapi_current_state[:ensure] == 'present' && target_state[:ensure] == 'present')
396
+ if Puppet.settings[:strict] != :off && @rsapi_current_state && (@rsapi_current_state[:ensure] == 'present' && target_state[:ensure] == 'present')
371
397
  target_state.each do |name, value|
372
- next unless definition[:attributes][name][:behaviour] == :init_only && value != @rapi_current_state[name]
373
- message = "Attempting to change `#{name}` init_only attribute value from `#{@rapi_current_state[name]}` to `#{value}`"
398
+ next unless definition[:attributes][name][:behaviour] == :init_only && value != @rsapi_current_state[name]
399
+ message = "Attempting to change `#{name}` init_only attribute value from `#{@rsapi_current_state[name]}` to `#{value}`"
374
400
  case Puppet.settings[:strict]
375
401
  when :warning
376
402
  Puppet.warning(message)
@@ -381,14 +407,14 @@ module Puppet::ResourceApi
381
407
  end
382
408
 
383
409
  if type_definition.feature?('supports_noop')
384
- my_provider.set(context, { title => { is: @rapi_current_state, should: target_state } }, noop: noop?)
410
+ my_provider.set(context, { title => { is: @rsapi_current_state, should: target_state } }, noop: noop?)
385
411
  else
386
- my_provider.set(context, title => { is: @rapi_current_state, should: target_state }) unless noop?
412
+ my_provider.set(context, title => { is: @rsapi_current_state, should: target_state }) unless noop?
387
413
  end
388
414
  raise 'Execution encountered an error' if context.failed?
389
415
 
390
416
  # remember that we have successfully reached our desired state
391
- @rapi_current_state = target_state
417
+ @rsapi_current_state = target_state
392
418
  end
393
419
 
394
420
  define_method(:raise_missing_attrs) do
@@ -74,7 +74,7 @@ class Puppet::ResourceApi::TypeDefinition
74
74
  # Modifies the resource passed in, leaving only valid attributes
75
75
  def check_schema_keys(resource)
76
76
  rejected = []
77
- resource.reject! { |key| rejected << key unless attributes.key? key }
77
+ resource.reject! { |key| rejected << key if key != :title && attributes.key?(key) == false }
78
78
  rejected
79
79
  end
80
80
 
@@ -1,5 +1,5 @@
1
1
  module Puppet
2
2
  module ResourceApi
3
- VERSION = '1.4.2'.freeze
3
+ VERSION = '1.5.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-resource_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.2
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Schmitt
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-09 00:00:00.000000000 Z
11
+ date: 2018-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hocon