puppet-resource_api 1.8.10 → 1.8.11
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.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/lib/puppet/resource_api.rb +54 -9
- data/lib/puppet/resource_api/type_definition.rb +4 -0
- data/lib/puppet/resource_api/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a97a74d2743c8dd71ef34a5ad182d3946464b0ee9ab3b0dc9fb9d084b1c0dbb2
|
4
|
+
data.tar.gz: 4440e7664869083fb353cb7ffd32e60e948ba99dee07fab5fb19ea58ded52bb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b491366c3ee28299ee4c56745f8606d3f257e4f814367a97694f9b363b68f6f9bb4de02d9f743eb3272a7a432b47175c1fa10804fc6d55df001480ce10289768
|
7
|
+
data.tar.gz: 0e426a40343d84d3a9cca300b9f7fe45aa0ad35925c2b9c3b39facb07d7152b352e60a9e5fa7b91a98c4637ab2bb4264c7a12a1ccc309bb4d930928c9e9ff3b6
|
data/Gemfile
CHANGED
@@ -15,6 +15,8 @@ group :tests do
|
|
15
15
|
# load a rubocop version that works on java for the Rakefile
|
16
16
|
gem 'parser', '2.3.3.1'
|
17
17
|
gem 'rubocop', '0.41.2'
|
18
|
+
# JRuby 1.7 does not like json 2.3.0, jruby 9.1.9.0 has RUBY_VERSION == '2.3.3'
|
19
|
+
gem 'json', '2.2.0' if Gem::Version.new(RUBY_VERSION) <= Gem::Version.new('2.3.0')
|
18
20
|
elsif Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.2.0')
|
19
21
|
gem 'rubocop', '0.57.2'
|
20
22
|
# the last version of parallel to support ruby 2.1
|
data/lib/puppet/resource_api.rb
CHANGED
@@ -35,7 +35,8 @@ module Puppet::ResourceApi
|
|
35
35
|
end
|
36
36
|
|
37
37
|
Puppet::Type.newtype(definition[:name].to_sym) do
|
38
|
-
|
38
|
+
# The :desc value is already cleaned up by the TypeDefinition validation
|
39
|
+
@doc = definition[:desc]
|
39
40
|
@type_definition = type_def
|
40
41
|
|
41
42
|
# Keeps a copy of the provider around. Weird naming to avoid clashes with puppet's own `provider` member
|
@@ -260,7 +261,7 @@ module Puppet::ResourceApi
|
|
260
261
|
|
261
262
|
if @rsapi_current_state
|
262
263
|
type_definition.check_schema(@rsapi_current_state)
|
263
|
-
strict_check(@rsapi_current_state)
|
264
|
+
strict_check(@rsapi_current_state)
|
264
265
|
else
|
265
266
|
@rsapi_current_state = if rsapi_title.is_a? Hash
|
266
267
|
rsapi_title.dup
|
@@ -274,7 +275,7 @@ module Puppet::ResourceApi
|
|
274
275
|
# Use this to set the current state from the `instances` method
|
275
276
|
def cache_current_state(resource_hash)
|
276
277
|
@rsapi_current_state = resource_hash
|
277
|
-
strict_check(@rsapi_current_state)
|
278
|
+
strict_check(@rsapi_current_state)
|
278
279
|
end
|
279
280
|
|
280
281
|
def retrieve
|
@@ -353,6 +354,22 @@ module Puppet::ResourceApi
|
|
353
354
|
def strict_check(current_state)
|
354
355
|
return if Puppet.settings[:strict] == :off
|
355
356
|
|
357
|
+
strict_check_canonicalize(current_state) if type_definition.feature?('canonicalize')
|
358
|
+
strict_check_title_parameter(current_state) if type_definition.namevars.size > 1 && !type_definition.title_patterns.empty?
|
359
|
+
|
360
|
+
nil
|
361
|
+
end
|
362
|
+
|
363
|
+
def strict_message(message)
|
364
|
+
case Puppet.settings[:strict]
|
365
|
+
when :warning
|
366
|
+
Puppet.warning(message)
|
367
|
+
when :error
|
368
|
+
raise Puppet::DevError, message
|
369
|
+
end
|
370
|
+
end
|
371
|
+
|
372
|
+
def strict_check_canonicalize(current_state)
|
356
373
|
# if strict checking is on we must notify if the values are changed by canonicalize
|
357
374
|
# make a deep copy to perform the operation on and to compare against later
|
358
375
|
state_clone = Marshal.load(Marshal.dump(current_state))
|
@@ -369,15 +386,43 @@ Returned values: #{current_state.inspect}
|
|
369
386
|
Canonicalized values: #{state_clone.inspect}
|
370
387
|
MESSAGE
|
371
388
|
#:nocov:
|
389
|
+
strict_message(message)
|
390
|
+
end
|
372
391
|
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
raise Puppet::DevError, message
|
392
|
+
def strict_check_title_parameter(current_state)
|
393
|
+
unless current_state.key?(:title)
|
394
|
+
strict_message("#{type_definition.name}[#{@title}]#get has not provided a title attribute.")
|
395
|
+
return
|
378
396
|
end
|
379
397
|
|
380
|
-
|
398
|
+
# Logic borrowed from Puppet::Resource.parse_title
|
399
|
+
title_hash = {}
|
400
|
+
self.class.title_patterns.each do |regexp, symbols|
|
401
|
+
captures = regexp.match(current_state[:title])
|
402
|
+
next if captures.nil?
|
403
|
+
symbols.zip(captures[1..-1]).each do |symbol_and_lambda, capture|
|
404
|
+
# The Resource API does not support passing procs in title_patterns
|
405
|
+
# so, unlike Puppet::Resource, we do not need to handle that here.
|
406
|
+
symbol = symbol_and_lambda[0]
|
407
|
+
title_hash[symbol] = capture
|
408
|
+
end
|
409
|
+
break
|
410
|
+
end
|
411
|
+
|
412
|
+
return if title_hash == rsapi_title
|
413
|
+
|
414
|
+
namevars = type_definition.namevars.reject { |namevar| title_hash[namevar] == rsapi_title[namevar] }
|
415
|
+
|
416
|
+
#:nocov:
|
417
|
+
# codecov fails to register this multiline as covered, even though simplecov does.
|
418
|
+
message = <<MESSAGE.strip
|
419
|
+
#{type_definition.name}[#{@title}]#get has provided a title attribute which does not match all namevars.
|
420
|
+
Namevars which do not match: #{namevars.inspect}
|
421
|
+
Returned parsed title hash: #{title_hash.inspect}
|
422
|
+
Expected hash: #{rsapi_title.inspect}
|
423
|
+
MESSAGE
|
424
|
+
#:nocov:
|
425
|
+
strict_message(message)
|
381
426
|
end
|
382
427
|
|
383
428
|
define_singleton_method(:context) do
|
@@ -18,6 +18,10 @@ module Puppet::ResourceApi
|
|
18
18
|
(definition[:features] && definition[:features].include?(feature))
|
19
19
|
end
|
20
20
|
|
21
|
+
def title_patterns
|
22
|
+
definition[:title_patterns] ||= []
|
23
|
+
end
|
24
|
+
|
21
25
|
def validate_schema(definition, attr_key)
|
22
26
|
super(definition, attr_key)
|
23
27
|
[:title, :provider, :alias, :audit, :before, :consume, :export, :loglevel, :noop, :notify, :require, :schedule, :stage, :subscribe, :tag].each do |name|
|