bolt 0.17.1 → 0.17.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of bolt might be problematic. Click here for more details.

Files changed (224) hide show
  1. checksums.yaml +4 -4
  2. data/bolt-modules/boltlib/lib/puppet/functions/run_task.rb +25 -13
  3. data/lib/bolt/cli.rb +45 -15
  4. data/lib/bolt/config.rb +48 -132
  5. data/lib/bolt/executor.rb +3 -10
  6. data/lib/bolt/inventory.rb +15 -1
  7. data/lib/bolt/puppetdb.rb +11 -0
  8. data/lib/bolt/puppetdb/client.rb +68 -0
  9. data/lib/bolt/puppetdb/config.rb +76 -0
  10. data/lib/bolt/target.rb +5 -4
  11. data/lib/bolt/transport/base.rb +11 -2
  12. data/lib/bolt/transport/local.rb +11 -5
  13. data/lib/bolt/transport/orch.rb +16 -5
  14. data/lib/bolt/transport/ssh.rb +32 -1
  15. data/lib/bolt/transport/ssh/connection.rb +17 -10
  16. data/lib/bolt/transport/winrm.rb +18 -1
  17. data/lib/bolt/transport/winrm/connection.rb +15 -16
  18. data/lib/bolt/util.rb +15 -0
  19. data/lib/bolt/version.rb +1 -1
  20. data/lib/bolt_ext/puppetdb_inventory.rb +5 -135
  21. data/vendored/facter/lib/facter/ec2/rest.rb +1 -1
  22. data/vendored/hiera/lib/hiera/version.rb +1 -1
  23. data/vendored/puppet/lib/puppet/application/agent.rb +1 -3
  24. data/vendored/puppet/lib/puppet/application/apply.rb +2 -4
  25. data/vendored/puppet/lib/puppet/application/cert.rb +6 -1
  26. data/vendored/puppet/lib/puppet/application/device.rb +100 -13
  27. data/vendored/puppet/lib/puppet/application/facts.rb +5 -0
  28. data/vendored/puppet/lib/puppet/application/lookup.rb +11 -1
  29. data/vendored/puppet/lib/puppet/configurer.rb +17 -4
  30. data/vendored/puppet/lib/puppet/configurer/plugin_handler.rb +1 -1
  31. data/vendored/puppet/lib/puppet/datatypes.rb +1 -1
  32. data/vendored/puppet/lib/puppet/defaults.rb +1 -1
  33. data/vendored/puppet/lib/puppet/environments.rb +2 -2
  34. data/vendored/puppet/lib/puppet/error.rb +6 -3
  35. data/vendored/puppet/lib/puppet/external/dot.rb +0 -7
  36. data/vendored/puppet/lib/puppet/external/nagios/parser.rb +1 -1
  37. data/vendored/puppet/lib/puppet/face/config.rb +41 -8
  38. data/vendored/puppet/lib/puppet/face/epp.rb +30 -5
  39. data/vendored/puppet/lib/puppet/face/facts.rb +49 -0
  40. data/vendored/puppet/lib/puppet/face/help.rb +33 -35
  41. data/vendored/puppet/lib/puppet/face/man.rb +55 -12
  42. data/vendored/puppet/lib/puppet/face/parser.rb +30 -3
  43. data/vendored/puppet/lib/puppet/file_bucket/file.rb +0 -2
  44. data/vendored/puppet/lib/puppet/file_serving/base.rb +10 -10
  45. data/vendored/puppet/lib/puppet/functions.rb +1 -3
  46. data/vendored/puppet/lib/puppet/functions/alert.rb +1 -1
  47. data/vendored/puppet/lib/puppet/functions/all.rb +6 -6
  48. data/vendored/puppet/lib/puppet/functions/annotate.rb +10 -10
  49. data/vendored/puppet/lib/puppet/functions/any.rb +6 -6
  50. data/vendored/puppet/lib/puppet/functions/assert_type.rb +4 -4
  51. data/vendored/puppet/lib/puppet/functions/binary_file.rb +14 -2
  52. data/vendored/puppet/lib/puppet/functions/break.rb +31 -2
  53. data/vendored/puppet/lib/puppet/functions/call.rb +4 -4
  54. data/vendored/puppet/lib/puppet/functions/contain.rb +19 -3
  55. data/vendored/puppet/lib/puppet/functions/convert_to.rb +6 -5
  56. data/vendored/puppet/lib/puppet/functions/crit.rb +1 -1
  57. data/vendored/puppet/lib/puppet/functions/debug.rb +1 -1
  58. data/vendored/puppet/lib/puppet/functions/defined.rb +11 -9
  59. data/vendored/puppet/lib/puppet/functions/dig.rb +26 -2
  60. data/vendored/puppet/lib/puppet/functions/each.rb +8 -8
  61. data/vendored/puppet/lib/puppet/functions/emerg.rb +1 -1
  62. data/vendored/puppet/lib/puppet/functions/empty.rb +79 -0
  63. data/vendored/puppet/lib/puppet/functions/err.rb +1 -1
  64. data/vendored/puppet/lib/puppet/functions/filter.rb +7 -7
  65. data/vendored/puppet/lib/puppet/functions/find_file.rb +15 -1
  66. data/vendored/puppet/lib/puppet/functions/flatten.rb +64 -0
  67. data/vendored/puppet/lib/puppet/functions/hiera.rb +6 -6
  68. data/vendored/puppet/lib/puppet/functions/hiera_array.rb +6 -6
  69. data/vendored/puppet/lib/puppet/functions/hiera_hash.rb +6 -6
  70. data/vendored/puppet/lib/puppet/functions/hiera_include.rb +8 -8
  71. data/vendored/puppet/lib/puppet/functions/include.rb +28 -2
  72. data/vendored/puppet/lib/puppet/functions/info.rb +1 -1
  73. data/vendored/puppet/lib/puppet/functions/inline_epp.rb +2 -2
  74. data/vendored/puppet/lib/puppet/functions/join.rb +56 -0
  75. data/vendored/puppet/lib/puppet/functions/keys.rb +25 -0
  76. data/vendored/puppet/lib/puppet/functions/length.rb +44 -0
  77. data/vendored/puppet/lib/puppet/functions/lest.rb +39 -1
  78. data/vendored/puppet/lib/puppet/functions/map.rb +10 -9
  79. data/vendored/puppet/lib/puppet/functions/match.rb +6 -6
  80. data/vendored/puppet/lib/puppet/functions/new.rb +995 -2
  81. data/vendored/puppet/lib/puppet/functions/next.rb +1 -1
  82. data/vendored/puppet/lib/puppet/functions/notice.rb +1 -1
  83. data/vendored/puppet/lib/puppet/functions/reduce.rb +6 -6
  84. data/vendored/puppet/lib/puppet/functions/regsubst.rb +9 -3
  85. data/vendored/puppet/lib/puppet/functions/require.rb +36 -2
  86. data/vendored/puppet/lib/puppet/functions/return.rb +1 -1
  87. data/vendored/puppet/lib/puppet/functions/reverse_each.rb +71 -2
  88. data/vendored/puppet/lib/puppet/functions/slice.rb +23 -9
  89. data/vendored/puppet/lib/puppet/functions/split.rb +12 -10
  90. data/vendored/puppet/lib/puppet/functions/step.rb +73 -1
  91. data/vendored/puppet/lib/puppet/functions/strftime.rb +176 -2
  92. data/vendored/puppet/lib/puppet/functions/then.rb +65 -2
  93. data/vendored/puppet/lib/puppet/functions/tree_each.rb +19 -19
  94. data/vendored/puppet/lib/puppet/functions/type.rb +42 -1
  95. data/vendored/puppet/lib/puppet/functions/unique.rb +13 -13
  96. data/vendored/puppet/lib/puppet/functions/unwrap.rb +8 -4
  97. data/vendored/puppet/lib/puppet/functions/values.rb +25 -0
  98. data/vendored/puppet/lib/puppet/functions/versioncmp.rb +1 -1
  99. data/vendored/puppet/lib/puppet/functions/warning.rb +1 -1
  100. data/vendored/puppet/lib/puppet/functions/with.rb +6 -4
  101. data/vendored/puppet/lib/puppet/indirector/certificate_status/file.rb +1 -1
  102. data/vendored/puppet/lib/puppet/indirector/facts/facter.rb +1 -3
  103. data/vendored/puppet/lib/puppet/indirector/facts/rest.rb +21 -0
  104. data/vendored/puppet/lib/puppet/indirector/facts/yaml.rb +0 -4
  105. data/vendored/puppet/lib/puppet/indirector/file_content/http.rb +3 -1
  106. data/vendored/puppet/lib/puppet/indirector/indirection.rb +5 -3
  107. data/vendored/puppet/lib/puppet/indirector/request.rb +6 -2
  108. data/vendored/puppet/lib/puppet/module/task.rb +2 -2
  109. data/vendored/puppet/lib/puppet/module_tool/tar/mini.rb +57 -4
  110. data/vendored/puppet/lib/puppet/network/authconfig.rb +1 -1
  111. data/vendored/puppet/lib/puppet/network/http/api/indirected_routes.rb +1 -0
  112. data/vendored/puppet/lib/puppet/network/resolver.rb +1 -2
  113. data/vendored/puppet/lib/puppet/node.rb +4 -3
  114. data/vendored/puppet/lib/puppet/parser/compiler.rb +12 -5
  115. data/vendored/puppet/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +1 -1
  116. data/vendored/puppet/lib/puppet/parser/functions/fqdn_rand.rb +15 -4
  117. data/vendored/puppet/lib/puppet/parser/functions/new.rb +31 -46
  118. data/vendored/puppet/lib/puppet/parser/parser_factory.rb +1 -1
  119. data/vendored/puppet/lib/puppet/parser/resource.rb +1 -1
  120. data/vendored/puppet/lib/puppet/parser/type_loader.rb +11 -11
  121. data/vendored/puppet/lib/puppet/pops/evaluator/closure.rb +1 -1
  122. data/vendored/puppet/lib/puppet/pops/evaluator/collector_transformer.rb +1 -1
  123. data/vendored/puppet/lib/puppet/pops/evaluator/epp_evaluator.rb +2 -2
  124. data/vendored/puppet/lib/puppet/pops/evaluator/runtime3_resource_support.rb +2 -2
  125. data/vendored/puppet/lib/puppet/pops/evaluator/runtime3_support.rb +5 -2
  126. data/vendored/puppet/lib/puppet/pops/functions/dispatch.rb +1 -1
  127. data/vendored/puppet/lib/puppet/pops/issue_reporter.rb +18 -1
  128. data/vendored/puppet/lib/puppet/pops/issues.rb +6 -3
  129. data/vendored/puppet/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +1 -2
  130. data/vendored/puppet/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -2
  131. data/vendored/puppet/lib/puppet/pops/loader/task_instantiator.rb +4 -4
  132. data/vendored/puppet/lib/puppet/pops/loader/type_definition_instantiator.rb +4 -1
  133. data/vendored/puppet/lib/puppet/pops/loaders.rb +18 -7
  134. data/vendored/puppet/lib/puppet/pops/lookup/global_data_provider.rb +1 -1
  135. data/vendored/puppet/lib/puppet/pops/model/factory.rb +6 -3
  136. data/vendored/puppet/lib/puppet/pops/model/model_tree_dumper.rb +4 -0
  137. data/vendored/puppet/lib/puppet/pops/model/pn_transformer.rb +400 -0
  138. data/vendored/puppet/lib/puppet/pops/parser/eparser.rb +1 -1
  139. data/vendored/puppet/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  140. data/vendored/puppet/lib/puppet/pops/parser/lexer_support.rb +3 -2
  141. data/vendored/puppet/lib/puppet/pops/parser/locator.rb +0 -2
  142. data/vendored/puppet/lib/puppet/pops/parser/pn_parser.rb +316 -0
  143. data/vendored/puppet/lib/puppet/pops/pcore.rb +17 -17
  144. data/vendored/puppet/lib/puppet/pops/pn.rb +236 -0
  145. data/vendored/puppet/lib/puppet/pops/resource/resource_type_impl.rb +1 -1
  146. data/vendored/puppet/lib/puppet/pops/types/class_loader.rb +6 -3
  147. data/vendored/puppet/lib/puppet/pops/types/implementation_registry.rb +28 -35
  148. data/vendored/puppet/lib/puppet/pops/types/p_object_type.rb +3 -3
  149. data/vendored/puppet/lib/puppet/pops/types/p_timespan_type.rb +2 -2
  150. data/vendored/puppet/lib/puppet/pops/types/p_type_set_type.rb +24 -1
  151. data/vendored/puppet/lib/puppet/pops/types/ruby_generator.rb +3 -4
  152. data/vendored/puppet/lib/puppet/pops/types/type_calculator.rb +1 -1
  153. data/vendored/puppet/lib/puppet/pops/types/type_factory.rb +0 -4
  154. data/vendored/puppet/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  155. data/vendored/puppet/lib/puppet/pops/types/type_parser.rb +14 -7
  156. data/vendored/puppet/lib/puppet/pops/types/types.rb +1 -1
  157. data/vendored/puppet/lib/puppet/pops/utils.rb +2 -2
  158. data/vendored/puppet/lib/puppet/pops/validation/checker4_0.rb +6 -2
  159. data/vendored/puppet/lib/puppet/provider/group/groupadd.rb +3 -1
  160. data/vendored/puppet/lib/puppet/provider/group/windows_adsi.rb +4 -7
  161. data/vendored/puppet/lib/puppet/provider/nameservice.rb +3 -3
  162. data/vendored/puppet/lib/puppet/provider/package/dnf.rb +1 -1
  163. data/vendored/puppet/lib/puppet/provider/package/gem.rb +1 -1
  164. data/vendored/puppet/lib/puppet/provider/package/pacman.rb +4 -4
  165. data/vendored/puppet/lib/puppet/provider/package/pip.rb +3 -3
  166. data/vendored/puppet/lib/puppet/provider/package/pkgdmg.rb +3 -3
  167. data/vendored/puppet/lib/puppet/provider/package/pkgutil.rb +2 -2
  168. data/vendored/puppet/lib/puppet/provider/package/portage.rb +9 -9
  169. data/vendored/puppet/lib/puppet/provider/package/zypper.rb +2 -2
  170. data/vendored/puppet/lib/puppet/provider/service/base.rb +1 -1
  171. data/vendored/puppet/lib/puppet/provider/service/smf.rb +3 -2
  172. data/vendored/puppet/lib/puppet/provider/user/useradd.rb +6 -2
  173. data/vendored/puppet/lib/puppet/provider/user/windows_adsi.rb +1 -1
  174. data/vendored/puppet/lib/puppet/provider/zfs/zfs.rb +3 -2
  175. data/vendored/puppet/lib/puppet/reference/configuration.rb +2 -0
  176. data/vendored/puppet/lib/puppet/reference/type.rb +11 -11
  177. data/vendored/puppet/lib/puppet/resource.rb +1 -1
  178. data/vendored/puppet/lib/puppet/resource/capability_finder.rb +2 -2
  179. data/vendored/puppet/lib/puppet/resource/catalog.rb +2 -2
  180. data/vendored/puppet/lib/puppet/resource/status.rb +9 -2
  181. data/vendored/puppet/lib/puppet/resource/type.rb +1 -1
  182. data/vendored/puppet/lib/puppet/settings.rb +31 -19
  183. data/vendored/puppet/lib/puppet/settings/base_setting.rb +5 -0
  184. data/vendored/puppet/lib/puppet/settings/config_file.rb +1 -1
  185. data/vendored/puppet/lib/puppet/settings/ttl_setting.rb +5 -0
  186. data/vendored/puppet/lib/puppet/ssl/certificate_factory.rb +2 -2
  187. data/vendored/puppet/lib/puppet/ssl/certificate_request.rb +0 -2
  188. data/vendored/puppet/lib/puppet/transaction/additional_resource_generator.rb +2 -2
  189. data/vendored/puppet/lib/puppet/transaction/event.rb +1 -1
  190. data/vendored/puppet/lib/puppet/transaction/report.rb +1 -1
  191. data/vendored/puppet/lib/puppet/type.rb +9 -13
  192. data/vendored/puppet/lib/puppet/type/augeas.rb +2 -2
  193. data/vendored/puppet/lib/puppet/type/cron.rb +11 -6
  194. data/vendored/puppet/lib/puppet/type/exec.rb +1 -1
  195. data/vendored/puppet/lib/puppet/type/file.rb +4 -5
  196. data/vendored/puppet/lib/puppet/type/host.rb +1 -1
  197. data/vendored/puppet/lib/puppet/type/k5login.rb +30 -54
  198. data/vendored/puppet/lib/puppet/type/package.rb +3 -3
  199. data/vendored/puppet/lib/puppet/type/schedule.rb +12 -12
  200. data/vendored/puppet/lib/puppet/type/scheduled_task.rb +2 -2
  201. data/vendored/puppet/lib/puppet/type/ssh_authorized_key.rb +5 -5
  202. data/vendored/puppet/lib/puppet/type/sshkey.rb +2 -2
  203. data/vendored/puppet/lib/puppet/type/tidy.rb +9 -2
  204. data/vendored/puppet/lib/puppet/type/user.rb +1 -1
  205. data/vendored/puppet/lib/puppet/type/yumrepo.rb +25 -4
  206. data/vendored/puppet/lib/puppet/type/zfs.rb +4 -0
  207. data/vendored/puppet/lib/puppet/util.rb +0 -4
  208. data/vendored/puppet/lib/puppet/util/backups.rb +1 -1
  209. data/vendored/puppet/lib/puppet/util/http_proxy.rb +4 -2
  210. data/vendored/puppet/lib/puppet/util/inifile.rb +3 -4
  211. data/vendored/puppet/lib/puppet/util/log.rb +2 -5
  212. data/vendored/puppet/lib/puppet/util/network_device/cisco/facts.rb +1 -1
  213. data/vendored/puppet/lib/puppet/util/reference.rb +1 -8
  214. data/vendored/puppet/lib/puppet/util/tagging.rb +1 -1
  215. data/vendored/puppet/lib/puppet/util/warnings.rb +0 -2
  216. data/vendored/puppet/lib/puppet/util/windows/adsi.rb +15 -18
  217. data/vendored/puppet/lib/puppet/util/windows/com.rb +2 -1
  218. data/vendored/puppet/lib/puppet/util/windows/file.rb +2 -2
  219. data/vendored/puppet/lib/puppet/util/windows/principal.rb +7 -6
  220. data/vendored/puppet/lib/puppet/util/windows/sid.rb +60 -7
  221. data/vendored/puppet/lib/puppet/util/windows/taskscheduler.rb +0 -9
  222. data/vendored/puppet/lib/puppet/version.rb +1 -1
  223. data/vendored/puppet/lib/puppet_pal.rb +53 -48
  224. metadata +15 -2
@@ -149,7 +149,7 @@ class ResourceTypeImpl
149
149
  # Here it is silently ignored.
150
150
  nil
151
151
  when 1
152
- if @title_pattners_hash.nil?
152
+ if @title_patterns_hash.nil?
153
153
  [ [ /(.*)/m, [ [@key_attributes.first] ] ] ]
154
154
  else
155
155
  # TechDebt: The case of having one namevar and an empty title patterns is unspecified behavior in puppet.
@@ -32,8 +32,6 @@ class ClassLoader
32
32
  end
33
33
  end
34
34
 
35
- private
36
-
37
35
  def self.provide_from_type(type)
38
36
  case type
39
37
  when PRuntimeType
@@ -66,12 +64,13 @@ class ClassLoader
66
64
  when PPatternType ; String
67
65
  when PEnumType ; String
68
66
  when PFloatType ; Float
69
- when PUndefType ; NilClass
67
+ when PUndefType ; NilClass
70
68
  when PCallableType ; Proc
71
69
  else
72
70
  nil
73
71
  end
74
72
  end
73
+ private_class_method :provide_from_type
75
74
 
76
75
  def self.provide_from_string(name)
77
76
  name_path = name.split(TypeFormatter::NAME_SEGMENT_SEPARATOR)
@@ -97,6 +96,7 @@ class ClassLoader
97
96
  return nil unless result.is_a?(Module)
98
97
  result
99
98
  end
99
+ private_class_method :provide_from_string
100
100
 
101
101
  def self.find_class(name_path)
102
102
  name_path.reduce(Object) do |ns, name|
@@ -107,6 +107,7 @@ class ClassLoader
107
107
  end
108
108
  end
109
109
  end
110
+ private_class_method :find_class
110
111
 
111
112
  def self.paths_for_name(fq_named_parts)
112
113
  # search two entries, one where all parts are decamelized, and one with names just downcased
@@ -115,6 +116,7 @@ class ClassLoader
115
116
  #
116
117
  [fq_named_parts.map {|part| de_camel(part)}.join('/'), fq_named_parts.join('/').downcase ]
117
118
  end
119
+ private_class_method :paths_for_name
118
120
 
119
121
  def self.de_camel(fq_name)
120
122
  fq_name.to_s.gsub(/::/, '/').
@@ -123,6 +125,7 @@ class ClassLoader
123
125
  tr("-", "_").
124
126
  downcase
125
127
  end
128
+ private_class_method :de_camel
126
129
 
127
130
  end
128
131
  end
@@ -8,20 +8,15 @@ module Types
8
8
  class ImplementationRegistry
9
9
  TYPE_REGEXP_SUBST = TypeFactory.tuple([PRegexpType::DEFAULT, PStringType::NON_EMPTY])
10
10
 
11
- def self.singleton
12
- @singleton ||= new(Loaders.static_loader)
13
- end
14
-
15
11
  # Create a new instance. This method is normally only called once
16
12
  #
17
- # The initializer will create mappings for well known types that can be loaded using the static loader
18
- #
19
- def initialize(static_loader)
13
+ # @param parent [ImplementationRegistry, nil] the parent of this registry
14
+ def initialize(parent = nil)
15
+ @parent = parent
20
16
  @type_names_per_implementation = {}
21
17
  @implementations_per_type_name = {}
22
18
  @type_name_substitutions = []
23
19
  @impl_name_substitutions = []
24
- TypeParser.type_map.values.each { |type| register_implementation(type.simple_name, type.class.name, static_loader) }
25
20
  end
26
21
 
27
22
  # Register a bidirectional type mapping.
@@ -29,20 +24,18 @@ module Types
29
24
  # @overload register_type_mapping(runtime_type, puppet_type)
30
25
  # @param runtime_type [PRuntimeType] type that represents the runtime module or class to map to a puppet type
31
26
  # @param puppet_type [PAnyType] type that will be mapped to the runtime module or class
32
- # @param loader [Loader::Loader] the loader to use when resolving names
33
27
  # @overload register_type_mapping(runtime_type, pattern_replacement)
34
28
  # @param runtime_type [PRuntimeType] type containing the pattern and replacement to map the runtime type to a puppet type
35
29
  # @param puppet_type [Array(Regexp,String)] the pattern and replacement to map a puppet type to a runtime type
36
- # @param loader [Loader::Loader] the loader to use when resolving names
37
- def register_type_mapping(runtime_type, puppet_type_or_pattern, loader)
30
+ def register_type_mapping(runtime_type, puppet_type_or_pattern, _ = nil)
38
31
  TypeAsserter.assert_assignable('First argument of type mapping', PRuntimeType::RUBY, runtime_type)
39
32
  expr = runtime_type.name_or_pattern
40
33
  if expr.is_a?(Array)
41
34
  TypeAsserter.assert_instance_of('Second argument of type mapping', TYPE_REGEXP_SUBST, puppet_type_or_pattern)
42
- register_implementation_regexp(puppet_type_or_pattern, expr, loader)
35
+ register_implementation_regexp(puppet_type_or_pattern, expr)
43
36
  else
44
37
  TypeAsserter.assert_instance_of('Second argument of type mapping', PTypeType::DEFAULT, puppet_type_or_pattern)
45
- register_implementation(puppet_type_or_pattern, expr, loader)
38
+ register_implementation(puppet_type_or_pattern, expr)
46
39
  end
47
40
  end
48
41
 
@@ -50,23 +43,20 @@ module Types
50
43
  #
51
44
  # @param type_namespace [String] the namespace for the puppet types
52
45
  # @param impl_namespace [String] the namespace for the implementations
53
- # @param loader [Loader::Loader] the loader to use when resolving names
54
- def register_implementation_namespace(type_namespace, impl_namespace, loader)
46
+ def register_implementation_namespace(type_namespace, impl_namespace, _ = nil)
55
47
  ns = TypeFormatter::NAME_SEGMENT_SEPARATOR
56
48
  register_implementation_regexp(
57
49
  [/\A#{type_namespace}#{ns}(\w+)\z/, "#{impl_namespace}#{ns}\\1"],
58
- [/\A#{impl_namespace}#{ns}(\w+)\z/, "#{type_namespace}#{ns}\\1"],
59
- loader)
50
+ [/\A#{impl_namespace}#{ns}(\w+)\z/, "#{type_namespace}#{ns}\\1"])
60
51
  end
61
52
 
62
53
  # Register a bidirectional regexp mapping
63
54
  #
64
55
  # @param type_name_subst [Array(Regexp,String)] regexp and replacement mapping type names to runtime names
65
56
  # @param impl_name_subst [Array(Regexp,String)] regexp and replacement mapping runtime names to type names
66
- # @param loader [Loader::Loader] the loader to use when resolving names
67
- def register_implementation_regexp(type_name_subst, impl_name_subst, loader)
68
- @type_name_substitutions << [type_name_subst, loader]
69
- @impl_name_substitutions << [impl_name_subst, loader]
57
+ def register_implementation_regexp(type_name_subst, impl_name_subst, _ = nil)
58
+ @type_name_substitutions << type_name_subst
59
+ @impl_name_substitutions << impl_name_subst
70
60
  nil
71
61
  end
72
62
 
@@ -74,12 +64,11 @@ module Types
74
64
  #
75
65
  # @param type [PAnyType,String] the type or type name
76
66
  # @param impl_module[Module,String] the module or module name
77
- # @param loader [Loader::Loader] the loader to use when resolving names
78
- def register_implementation(type, impl_module, loader)
67
+ def register_implementation(type, impl_module, _ = nil)
79
68
  type = type.name if type.is_a?(PAnyType)
80
69
  impl_module = impl_module.name if impl_module.is_a?(Module)
81
- @type_names_per_implementation[impl_module] = [type, loader]
82
- @implementations_per_type_name[type] = [impl_module, loader]
70
+ @type_names_per_implementation[impl_module] = type
71
+ @implementations_per_type_name[type] = impl_module
83
72
  nil
84
73
  end
85
74
 
@@ -89,7 +78,8 @@ module Types
89
78
  # @return [String,nil] the name of the implementation module, or `nil` if no mapping was found
90
79
  def module_name_for_type(type)
91
80
  type = type.name if type.is_a?(PAnyType)
92
- find_mapping(type, @implementations_per_type_name, @type_name_substitutions)
81
+ name = @parent.module_name_for_type(type) unless @parent.nil?
82
+ name.nil? ? find_mapping(type, @implementations_per_type_name, @type_name_substitutions) : name
93
83
  end
94
84
 
95
85
  # Find the module that corresponds to the given type or type name
@@ -97,18 +87,19 @@ module Types
97
87
  # @param type [PAnyType,String] the name of the type
98
88
  # @return [Module,nil] the name of the implementation module, or `nil` if no mapping was found
99
89
  def module_for_type(type)
100
- name_and_loader = module_name_for_type(type)
90
+ name = module_name_for_type(type)
101
91
  # TODO Shouldn't ClassLoader be module specific?
102
- name_and_loader.nil? ? nil : ClassLoader.provide(name_and_loader[0])
92
+ name.nil? ? nil : ClassLoader.provide(name)
103
93
  end
104
94
 
105
95
  # Find the type name and loader that corresponds to the given runtime module or module name
106
96
  #
107
97
  # @param impl_module [Module,String] the implementation class or class name
108
- # @return [Array(String,Loader::Loader),nil] the name and loader of the type, or `nil` if no mapping was found
98
+ # @return [String,nil] the name of the type, or `nil` if no mapping was found
109
99
  def type_name_for_module(impl_module)
110
100
  impl_module = impl_module.name if impl_module.is_a?(Module)
111
- find_mapping(impl_module, @type_names_per_implementation, @impl_name_substitutions)
101
+ name = @parent.type_name_for_module(impl_module) unless @parent.nil?
102
+ name.nil? ? find_mapping(impl_module, @type_names_per_implementation, @impl_name_substitutions) : name
112
103
  end
113
104
 
114
105
  # Find the name for, and then load, the type that corresponds to the given runtime module or module name
@@ -118,20 +109,22 @@ module Types
118
109
  # @param impl_module [Module,String] the implementation class or class name
119
110
  # @return [PAnyType,nil] the type, or `nil` if no mapping was found
120
111
  def type_for_module(impl_module)
121
- name_and_loader = type_name_for_module(impl_module)
122
- if name_and_loader.nil?
112
+ name = type_name_for_module(impl_module)
113
+ if name.nil?
123
114
  nil
124
115
  else
125
- TypeParser.singleton.parse(*name_and_loader)
116
+ TypeParser.singleton.parse(name)
126
117
  end
127
118
  end
128
119
 
120
+ private
121
+
129
122
  def find_mapping(name, names, substitutions)
130
123
  found = names[name]
131
124
  if found.nil?
132
125
  substitutions.each do |subst|
133
- substituted = name.sub(*subst[0])
134
- return [substituted, subst[1]] unless substituted == name
126
+ substituted = name.sub(*subst)
127
+ return substituted unless substituted == name
135
128
  end
136
129
  end
137
130
  found
@@ -484,6 +484,7 @@ class PObjectType < PMetaType
484
484
  # @api private
485
485
  def create_new_function
486
486
  impl_class = implementation_class
487
+ return impl_class.create_new_function(self) if impl_class.respond_to?(:create_new_function)
487
488
 
488
489
  (param_names, param_types, required_param_count) = parameter_info(impl_class)
489
490
 
@@ -532,14 +533,13 @@ class PObjectType < PMetaType
532
533
  def implementation_class(create = true)
533
534
  if @implementation_class.nil? && create
534
535
  ir = Loaders.implementation_registry
535
- impl_name = ir.nil? ? nil : ir.module_name_for_type(self)
536
- if impl_name.nil?
536
+ class_name = ir.nil? ? nil : ir.module_name_for_type(self)
537
+ if class_name.nil?
537
538
  # Use generator to create a default implementation
538
539
  @implementation_class = RubyGenerator.new.create_class(self)
539
540
  @implementation_class.class_eval(&@implementation_override) if instance_variable_defined?(:@implementation_override)
540
541
  else
541
542
  # Can the mapping be loaded?
542
- class_name = impl_name[0]
543
543
  @implementation_class = ClassLoader.provide(class_name)
544
544
 
545
545
  raise Puppet::Error, "Unable to load class #{class_name}" if @implementation_class.nil?
@@ -3,7 +3,7 @@ module Types
3
3
  class PAbstractTimeDataType < PScalarType
4
4
  # @param from [AbstractTime] lower bound for this type. Nil or :default means unbounded
5
5
  # @param to [AbstractTime] upper bound for this type. Nil or :default means unbounded
6
- def initialize(from, to)
6
+ def initialize(from, to = nil)
7
7
  @from = convert_arg(from, true)
8
8
  @to = convert_arg(to, false)
9
9
  raise ArgumentError, "'from' must be less or equal to 'to'. Got (#{@from}, #{@to}" unless @from <= @to
@@ -161,7 +161,7 @@ module Types
161
161
  end
162
162
 
163
163
  def from_fields(days, hours, minutes, seconds, milliseconds = 0, microseconds = 0, nanoseconds = 0)
164
- Time::Timespan.from_fields(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds)
164
+ Time::Timespan.from_fields(false, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds)
165
165
  end
166
166
 
167
167
  def from_string_hash(args_hash)
@@ -23,6 +23,10 @@ class PTypeSetType < PMetaType
23
23
  @type_set.name_authority
24
24
  end
25
25
 
26
+ def model_loader
27
+ @type_set.loader
28
+ end
29
+
26
30
  def find(typed_name)
27
31
  if typed_name.type == :type && typed_name.name_authority == @type_set.name_authority
28
32
  type = @type_set[typed_name.name]
@@ -48,7 +52,7 @@ class PTypeSetType < PMetaType
48
52
  TypeFactory.optional(KEY_NAME_AUTHORITY) => Pcore::TYPE_URI,
49
53
  TypeFactory.optional(KEY_NAME) => Pcore::TYPE_QUALIFIED_REFERENCE,
50
54
  TypeFactory.optional(KEY_VERSION) => TYPE_STRING_OR_VERSION,
51
- TypeFactory.optional(KEY_TYPES) => TypeFactory.hash_kv(Pcore::TYPE_SIMPLE_TYPE_NAME, PTypeType::DEFAULT, PCollectionType::NOT_EMPTY_SIZE),
55
+ TypeFactory.optional(KEY_TYPES) => TypeFactory.hash_kv(Pcore::TYPE_SIMPLE_TYPE_NAME, PVariantType.new([PTypeType::DEFAULT, PObjectType::TYPE_OBJECT_I12N]), PCollectionType::NOT_EMPTY_SIZE),
52
56
  TypeFactory.optional(KEY_REFERENCES) => TypeFactory.hash_kv(Pcore::TYPE_SIMPLE_TYPE_NAME, TYPE_TYPE_REFERENCE_I12N, PCollectionType::NOT_EMPTY_SIZE),
53
57
  TypeFactory.optional(KEY_ANNOTATIONS) => TYPE_ANNOTATIONS,
54
58
  })
@@ -288,6 +292,25 @@ class PTypeSetType < PMetaType
288
292
  types.each do |type_name, value|
289
293
  full_name = "#{@name}::#{type_name}".freeze
290
294
  typed_name = Loader::TypedName.new(:type, full_name, name_auth)
295
+ if value.is_a?(Model::ResourceDefaultsExpression)
296
+ # This is actually a <Parent> { <key-value entries> } notation. Convert to a literal hash that contains the parent
297
+ n = value.type_ref
298
+ name = n.cased_value
299
+ entries = []
300
+ unless name == 'Object' or name == 'TypeSet'
301
+ if value.operations.any? { |op| op.attribute_name == KEY_PARENT }
302
+ case Puppet[:strict]
303
+ when :warning
304
+ IssueReporter.warning(value, Issues::DUPLICATE_KEY, :key => KEY_PARENT)
305
+ when :error
306
+ IssueReporter.error(Puppet::ParseErrorWithIssue, value, Issues::DUPLICATE_KEY, :key => KEY_PARENT)
307
+ end
308
+ end
309
+ entries << Model::KeyedEntry.new(n.locator, n.offset, n.length, KEY_PARENT, n)
310
+ end
311
+ value.operations.each { |op| entries << Model::KeyedEntry.new(op.locator, op.offset, op.length, op.attribute_name, op.value_expr) }
312
+ value = Model::LiteralHash.new(value.locator, value.offset, value.length, entries)
313
+ end
291
314
  type = Loader::TypeDefinitionInstantiator.create_type(full_name, value, name_auth)
292
315
  loader.set_entry(typed_name, type, value.locator.to_uri(value))
293
316
  types[type_name] = type
@@ -158,7 +158,7 @@ class RubyGenerator < TypeFormatter
158
158
  ir = Loaders.implementation_registry
159
159
  impl_name = ir.module_name_for_type(type)
160
160
  raise Puppet::Error, "Unable to create an instance of #{type.name}. No mapping exists to runtime object" if impl_name.nil?
161
- impl_name[0]
161
+ impl_name
162
162
  end
163
163
  end
164
164
 
@@ -179,9 +179,8 @@ class RubyGenerator < TypeFormatter
179
179
  unless obj.parent.nil?
180
180
  if impl_subst.empty?
181
181
  ir = Loaders.implementation_registry
182
- parent_impl = ir.module_name_for_type(obj.parent)
183
- raise Puppet::Error, "Unable to create an instance of #{obj.parent.name}. No mapping exists to runtime object" if parent_impl.nil?
184
- parent_name = parent_impl[0]
182
+ parent_name = ir.module_name_for_type(obj.parent)
183
+ raise Puppet::Error, "Unable to create an instance of #{obj.parent.name}. No mapping exists to runtime object" if parent_name.nil?
185
184
  else
186
185
  parent_name = obj.parent.name.gsub(*impl_subst)
187
186
  end
@@ -159,7 +159,7 @@ class TypeCalculator
159
159
  t = type(t)
160
160
  end
161
161
  t.is_a?(PAnyType) ? t.assignable?(t2) : false
162
- end
162
+ end
163
163
 
164
164
  # Returns an iterable if the t represents something that can be iterated
165
165
  def enumerable(t)
@@ -210,8 +210,6 @@ module TypeFactory
210
210
  case args.size
211
211
  when 0
212
212
  PTimestampType::DEFAULT
213
- when 1
214
- PTimestampType.new(args[0], args[0])
215
213
  else
216
214
  PTimestampType.new(*args)
217
215
  end
@@ -221,8 +219,6 @@ module TypeFactory
221
219
  case args.size
222
220
  when 0
223
221
  PTimespanType::DEFAULT
224
- when 1
225
- PTimespanType.new(args[0], args[0])
226
222
  else
227
223
  PTimespanType.new(*args)
228
224
  end
@@ -19,7 +19,7 @@ module Types
19
19
  def eql?(o)
20
20
  self == o
21
21
  end
22
- end
22
+ end
23
23
 
24
24
  # @api private
25
25
  class SubjectPathElement < TypePathElement
@@ -290,7 +290,14 @@ class TypeParser
290
290
 
291
291
  # @api private
292
292
  def loader_from_context(ast, context)
293
- Adapters::LoaderAdapter.loader_for_model_object(ast, nil, context)
293
+ model_loader = Adapters::LoaderAdapter.loader_for_model_object(ast, nil, context)
294
+ if context.is_a?(PTypeSetType::TypeSetLoader)
295
+ # Only swap a given TypeSetLoader for another loader when the other loader is different
296
+ # from the one associated with the TypeSet expression
297
+ context.model_loader.equal?(model_loader.parent) ? context : model_loader
298
+ else
299
+ model_loader
300
+ end
294
301
  end
295
302
 
296
303
  # @api private
@@ -489,9 +496,9 @@ class TypeParser
489
496
  end
490
497
  elsif parameters.size != 2
491
498
  raise_invalid_parameters_error('Integer', '1 or 2', parameters.size)
492
- else
493
- TypeFactory.range(parameters[0] == :default ? nil : parameters[0], parameters[1] == :default ? nil : parameters[1])
494
- end
499
+ else
500
+ TypeFactory.range(parameters[0] == :default ? nil : parameters[0], parameters[1] == :default ? nil : parameters[1])
501
+ end
495
502
 
496
503
  when 'object'
497
504
  raise_invalid_parameters_error('Object', 1, parameters.size) unless parameters.size == 1
@@ -529,9 +536,9 @@ class TypeParser
529
536
  end
530
537
  elsif parameters.size != 2
531
538
  raise_invalid_parameters_error('Float', '1 or 2', parameters.size)
532
- else
533
- TypeFactory.float_range(parameters[0] == :default ? nil : parameters[0], parameters[1] == :default ? nil : parameters[1])
534
- end
539
+ else
540
+ TypeFactory.float_range(parameters[0] == :default ? nil : parameters[0], parameters[1] == :default ? nil : parameters[1])
541
+ end
535
542
 
536
543
  when 'string'
537
544
  size_type =
@@ -576,7 +576,7 @@ class PNotUndefType < PTypeWithContainedType
576
576
  n.type
577
577
  else
578
578
  n
579
- end
579
+ end
580
580
  end
581
581
  end
582
582
 
@@ -105,11 +105,11 @@ module Utils
105
105
 
106
106
  # is the name absolute (i.e. starts with ::)
107
107
  def self.is_absolute? name
108
- name.start_with? "::"
108
+ name.start_with? "::".freeze
109
109
  end
110
110
 
111
111
  def self.name_to_segments name
112
- name.split("::")
112
+ name.split("::".freeze)
113
113
  end
114
114
 
115
115
  def self.relativize_name name
@@ -292,8 +292,8 @@ class Checker4_0 < Evaluator::LiteralEvaluator
292
292
  def check_CapabilityMapping(o)
293
293
  ok =
294
294
  case o.component
295
- when Model::QualifiedName
296
- name = o.component.value
295
+ when Model::QualifiedReference
296
+ name = o.component.cased_value
297
297
  acceptor.accept(Issues::ILLEGAL_CLASSREF, o.component, {:name=>name}) unless name =~ Patterns::CLASSREF_EXT
298
298
  true
299
299
  when Model::AccessExpression
@@ -908,6 +908,10 @@ class Checker4_0 < Evaluator::LiteralEvaluator
908
908
  true
909
909
  end
910
910
 
911
+ def idem_MatchExpression(o)
912
+ false # can have side effect of setting $n match variables
913
+ end
914
+
911
915
  def idem_RelationshipExpression(o)
912
916
  # Always side effect
913
917
  false