puppet 4.10.12 → 5.0.0

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

Potentially problematic release.


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

Files changed (1112) hide show
  1. data/CONTRIBUTING.md +32 -15
  2. data/Gemfile +31 -14
  3. data/MAINTAINERS +0 -5
  4. data/README.md +11 -11
  5. data/Rakefile +2 -1
  6. data/conf/auth.conf +21 -0
  7. data/conf/fileserver.conf +7 -12
  8. data/conf/hiera.yaml +11 -0
  9. data/ext/debian/puppet-common.install +0 -1
  10. data/ext/debian/puppet-common.manpages +0 -2
  11. data/ext/hiera/hiera.yaml +15 -0
  12. data/ext/logcheck/puppet +1 -1
  13. data/ext/project_data.yaml +4 -9
  14. data/ext/puppet-test +0 -24
  15. data/ext/rack/config.ru +2 -2
  16. data/ext/redhat/puppet.spec.erb +0 -3
  17. data/ext/windows/service/daemon.rb +8 -14
  18. data/install.rb +1 -1
  19. data/lib/hiera/puppet_function.rb +1 -1
  20. data/lib/puppet.rb +7 -5
  21. data/lib/puppet/agent.rb +29 -38
  22. data/lib/puppet/agent/disabler.rb +3 -3
  23. data/lib/puppet/agent/locker.rb +3 -3
  24. data/lib/puppet/application.rb +12 -29
  25. data/lib/puppet/application/agent.rb +20 -18
  26. data/lib/puppet/application/apply.rb +22 -18
  27. data/lib/puppet/application/cert.rb +2 -7
  28. data/lib/puppet/application/config.rb +0 -1
  29. data/lib/puppet/application/describe.rb +1 -1
  30. data/lib/puppet/application/device.rb +94 -76
  31. data/lib/puppet/application/doc.rb +6 -6
  32. data/lib/puppet/application/face_base.rb +8 -13
  33. data/lib/puppet/application/filebucket.rb +12 -29
  34. data/lib/puppet/application/help.rb +0 -1
  35. data/lib/puppet/application/lookup.rb +106 -101
  36. data/lib/puppet/application/master.rb +14 -22
  37. data/lib/puppet/application/resource.rb +13 -10
  38. data/lib/puppet/application_support.rb +1 -6
  39. data/lib/puppet/configurer.rb +33 -45
  40. data/lib/puppet/configurer/downloader.rb +2 -2
  41. data/lib/puppet/configurer/fact_handler.rb +13 -4
  42. data/lib/puppet/context.rb +5 -5
  43. data/lib/puppet/context/trusted_information.rb +1 -1
  44. data/lib/puppet/defaults.rb +18 -131
  45. data/lib/puppet/environments.rb +1 -1
  46. data/lib/puppet/error.rb +1 -1
  47. data/lib/puppet/external/nagios/grammar.ry +1 -1
  48. data/lib/puppet/external/nagios/parser.rb +1 -1
  49. data/lib/puppet/external/pson/common.rb +4 -0
  50. data/lib/puppet/face/ca.rb +49 -42
  51. data/lib/puppet/face/catalog.rb +1 -1
  52. data/lib/puppet/face/catalog/select.rb +4 -4
  53. data/lib/puppet/face/certificate.rb +20 -20
  54. data/lib/puppet/face/config.rb +9 -22
  55. data/lib/puppet/face/epp.rb +59 -61
  56. data/lib/puppet/face/facts.rb +4 -4
  57. data/lib/puppet/face/generate.rb +8 -8
  58. data/lib/puppet/face/help.rb +7 -7
  59. data/lib/puppet/face/key.rb +2 -2
  60. data/lib/puppet/face/man.rb +5 -5
  61. data/lib/puppet/face/module.rb +2 -2
  62. data/lib/puppet/face/module/build.rb +7 -7
  63. data/lib/puppet/face/module/changes.rb +6 -6
  64. data/lib/puppet/face/module/generate.rb +24 -24
  65. data/lib/puppet/face/module/install.rb +13 -9
  66. data/lib/puppet/face/module/list.rb +16 -12
  67. data/lib/puppet/face/module/search.rb +4 -4
  68. data/lib/puppet/face/module/uninstall.rb +13 -10
  69. data/lib/puppet/face/module/upgrade.rb +11 -7
  70. data/lib/puppet/face/node.rb +5 -5
  71. data/lib/puppet/face/node/clean.rb +8 -8
  72. data/lib/puppet/face/parser.rb +16 -16
  73. data/lib/puppet/face/plugin.rb +6 -6
  74. data/lib/puppet/face/report.rb +9 -9
  75. data/lib/puppet/face/resource.rb +12 -12
  76. data/lib/puppet/face/status.rb +4 -4
  77. data/lib/puppet/feature/base.rb +3 -2
  78. data/lib/puppet/feature/eventlog.rb +1 -1
  79. data/lib/puppet/file_bucket/dipper.rb +9 -9
  80. data/lib/puppet/file_bucket/file.rb +4 -17
  81. data/lib/puppet/file_serving/base.rb +3 -3
  82. data/lib/puppet/file_serving/configuration.rb +3 -3
  83. data/lib/puppet/file_serving/configuration/parser.rb +12 -12
  84. data/lib/puppet/file_serving/content.rb +1 -1
  85. data/lib/puppet/file_serving/fileset.rb +7 -5
  86. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  87. data/lib/puppet/file_serving/metadata.rb +7 -7
  88. data/lib/puppet/file_serving/mount.rb +1 -1
  89. data/lib/puppet/file_serving/mount/file.rb +6 -6
  90. data/lib/puppet/file_serving/mount/modules.rb +1 -1
  91. data/lib/puppet/file_serving/terminus_selector.rb +1 -1
  92. data/lib/puppet/file_system/file_impl.rb +2 -2
  93. data/lib/puppet/file_system/memory_impl.rb +1 -1
  94. data/lib/puppet/file_system/path_pattern.rb +6 -6
  95. data/lib/puppet/file_system/uniquefile.rb +2 -2
  96. data/lib/puppet/file_system/windows.rb +3 -3
  97. data/lib/puppet/forge.rb +8 -14
  98. data/lib/puppet/forge/errors.rb +12 -12
  99. data/lib/puppet/forge/repository.rb +1 -1
  100. data/lib/puppet/functions.rb +17 -45
  101. data/lib/puppet/functions/annotate.rb +108 -0
  102. data/lib/puppet/functions/binary_file.rb +1 -1
  103. data/lib/puppet/functions/call.rb +42 -0
  104. data/lib/puppet/functions/defined.rb +4 -4
  105. data/lib/puppet/functions/dig.rb +1 -1
  106. data/lib/puppet/functions/each.rb +4 -10
  107. data/lib/puppet/functions/epp.rb +0 -3
  108. data/lib/puppet/functions/hiera_include.rb +1 -1
  109. data/lib/puppet/functions/hocon_data.rb +2 -2
  110. data/lib/puppet/functions/json_data.rb +1 -1
  111. data/lib/puppet/functions/lookup.rb +2 -2
  112. data/lib/puppet/functions/map.rb +3 -13
  113. data/lib/puppet/functions/match.rb +2 -2
  114. data/lib/puppet/functions/reduce.rb +0 -31
  115. data/lib/puppet/functions/require.rb +1 -1
  116. data/lib/puppet/functions/slice.rb +3 -3
  117. data/lib/puppet/functions/strftime.rb +10 -2
  118. data/lib/puppet/functions/unique.rb +132 -0
  119. data/lib/puppet/generate/models/type/property.rb +1 -1
  120. data/lib/puppet/generate/type.rb +12 -12
  121. data/lib/puppet/graph/relationship_graph.rb +4 -7
  122. data/lib/puppet/graph/simple_graph.rb +45 -66
  123. data/lib/puppet/indirector.rb +2 -2
  124. data/lib/puppet/indirector/catalog/compiler.rb +58 -44
  125. data/lib/puppet/indirector/catalog/json.rb +18 -0
  126. data/lib/puppet/indirector/certificate/disabled_ca.rb +1 -1
  127. data/lib/puppet/indirector/certificate_request/ca.rb +3 -3
  128. data/lib/puppet/indirector/certificate_request/disabled_ca.rb +1 -1
  129. data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +1 -1
  130. data/lib/puppet/indirector/certificate_status/file.rb +6 -6
  131. data/lib/puppet/indirector/exec.rb +2 -2
  132. data/lib/puppet/indirector/face.rb +18 -18
  133. data/lib/puppet/indirector/file_bucket_file/file.rb +10 -9
  134. data/lib/puppet/indirector/file_metadata/http.rb +1 -1
  135. data/lib/puppet/indirector/file_server.rb +10 -2
  136. data/lib/puppet/indirector/hiera.rb +5 -3
  137. data/lib/puppet/indirector/indirection.rb +16 -18
  138. data/lib/puppet/indirector/json.rb +11 -12
  139. data/lib/puppet/indirector/key/disabled_ca.rb +1 -1
  140. data/lib/puppet/indirector/key/file.rb +2 -2
  141. data/lib/puppet/indirector/ldap.rb +6 -5
  142. data/lib/puppet/indirector/memory.rb +1 -1
  143. data/lib/puppet/indirector/msgpack.rb +8 -7
  144. data/lib/puppet/indirector/node/exec.rb +8 -6
  145. data/lib/puppet/indirector/node/ldap.rb +9 -7
  146. data/lib/puppet/indirector/node/plain.rb +2 -1
  147. data/lib/puppet/indirector/node/write_only_yaml.rb +6 -1
  148. data/lib/puppet/indirector/node/yaml.rb +0 -9
  149. data/lib/puppet/indirector/report/processor.rb +2 -2
  150. data/lib/puppet/indirector/report/rest.rb +13 -0
  151. data/lib/puppet/indirector/request.rb +11 -23
  152. data/lib/puppet/indirector/resource/ral.rb +1 -1
  153. data/lib/puppet/indirector/resource/validator.rb +1 -1
  154. data/lib/puppet/indirector/rest.rb +28 -10
  155. data/lib/puppet/indirector/ssl_file.rb +9 -9
  156. data/lib/puppet/indirector/terminus.rb +3 -3
  157. data/lib/puppet/indirector/yaml.rb +5 -5
  158. data/lib/puppet/info_service/class_information_service.rb +4 -5
  159. data/lib/puppet/interface.rb +2 -7
  160. data/lib/puppet/interface/face_collection.rb +6 -1
  161. data/lib/puppet/module.rb +10 -35
  162. data/lib/puppet/module_tool.rb +7 -3
  163. data/lib/puppet/module_tool/applications/application.rb +8 -9
  164. data/lib/puppet/module_tool/applications/builder.rb +5 -6
  165. data/lib/puppet/module_tool/applications/checksummer.rb +2 -2
  166. data/lib/puppet/module_tool/applications/installer.rb +11 -10
  167. data/lib/puppet/module_tool/applications/searcher.rb +1 -1
  168. data/lib/puppet/module_tool/applications/uninstaller.rb +2 -1
  169. data/lib/puppet/module_tool/applications/unpacker.rb +3 -3
  170. data/lib/puppet/module_tool/applications/upgrader.rb +10 -9
  171. data/lib/puppet/module_tool/contents_description.rb +1 -1
  172. data/lib/puppet/module_tool/dependency.rb +0 -1
  173. data/lib/puppet/module_tool/errors/installer.rb +22 -22
  174. data/lib/puppet/module_tool/errors/shared.rb +44 -42
  175. data/lib/puppet/module_tool/errors/uninstaller.rb +13 -9
  176. data/lib/puppet/module_tool/errors/upgrader.rb +11 -11
  177. data/lib/puppet/module_tool/install_directory.rb +1 -1
  178. data/lib/puppet/module_tool/installed_modules.rb +3 -3
  179. data/lib/puppet/module_tool/local_tarball.rb +4 -4
  180. data/lib/puppet/module_tool/metadata.rb +16 -13
  181. data/lib/puppet/module_tool/shared_behaviors.rb +6 -6
  182. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +1 -1
  183. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +10 -4
  184. data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +2 -2
  185. data/lib/puppet/module_tool/tar.rb +2 -1
  186. data/lib/puppet/module_tool/tar/mini.rb +4 -57
  187. data/lib/puppet/network/auth_config_parser.rb +12 -11
  188. data/lib/puppet/network/authconfig.rb +2 -2
  189. data/lib/puppet/network/authstore.rb +2 -2
  190. data/lib/puppet/network/format.rb +7 -7
  191. data/lib/puppet/network/format_handler.rb +12 -9
  192. data/lib/puppet/network/format_support.rb +11 -5
  193. data/lib/puppet/network/formats.rb +38 -27
  194. data/lib/puppet/network/http/api/indirected_routes.rb +72 -33
  195. data/lib/puppet/network/http/api/master/v3/environment.rb +33 -14
  196. data/lib/puppet/network/http/compression.rb +10 -7
  197. data/lib/puppet/network/http/connection.rb +19 -23
  198. data/lib/puppet/network/http/error.rb +14 -10
  199. data/lib/puppet/network/http/factory.rb +0 -12
  200. data/lib/puppet/network/http/handler.rb +8 -4
  201. data/lib/puppet/network/http/issues.rb +1 -0
  202. data/lib/puppet/network/http/pool.rb +1 -1
  203. data/lib/puppet/network/http/rack.rb +2 -2
  204. data/lib/puppet/network/http/rack/rest.rb +1 -1
  205. data/lib/puppet/network/http/request.rb +34 -20
  206. data/lib/puppet/network/http/response.rb +13 -1
  207. data/lib/puppet/network/http/webrick.rb +8 -6
  208. data/lib/puppet/network/http/webrick/rest.rb +2 -2
  209. data/lib/puppet/network/rights.rb +6 -6
  210. data/lib/puppet/network/server.rb +2 -2
  211. data/lib/puppet/node.rb +25 -23
  212. data/lib/puppet/node/environment.rb +21 -4
  213. data/lib/puppet/node/facts.rb +0 -14
  214. data/lib/puppet/parameter.rb +3 -28
  215. data/lib/puppet/parameter/package_options.rb +1 -1
  216. data/lib/puppet/parameter/path.rb +3 -3
  217. data/lib/puppet/parameter/value_collection.rb +4 -4
  218. data/lib/puppet/parser/ast/leaf.rb +1 -1
  219. data/lib/puppet/parser/ast/node.rb +1 -1
  220. data/lib/puppet/parser/ast/pops_bridge.rb +3 -3
  221. data/lib/puppet/parser/ast/resource.rb +1 -1
  222. data/lib/puppet/parser/ast/resource_instance.rb +1 -1
  223. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  224. data/lib/puppet/parser/compiler.rb +44 -117
  225. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -2
  226. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +6 -9
  227. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +1 -1
  228. data/lib/puppet/parser/e4_parser_adapter.rb +1 -2
  229. data/lib/puppet/parser/environment_compiler.rb +13 -15
  230. data/lib/puppet/parser/functions.rb +6 -6
  231. data/lib/puppet/parser/functions/assert_type.rb +1 -1
  232. data/lib/puppet/parser/functions/binary_file.rb +1 -1
  233. data/lib/puppet/parser/functions/break.rb +1 -1
  234. data/lib/puppet/parser/functions/contain.rb +1 -1
  235. data/lib/puppet/parser/functions/create_resources.rb +3 -3
  236. data/lib/puppet/parser/functions/defined.rb +1 -1
  237. data/lib/puppet/parser/functions/dig.rb +1 -1
  238. data/lib/puppet/parser/functions/each.rb +1 -1
  239. data/lib/puppet/parser/functions/epp.rb +1 -4
  240. data/lib/puppet/parser/functions/file.rb +1 -1
  241. data/lib/puppet/parser/functions/filter.rb +1 -1
  242. data/lib/puppet/parser/functions/find_file.rb +1 -1
  243. data/lib/puppet/parser/functions/generate.rb +5 -4
  244. data/lib/puppet/parser/functions/hiera_include.rb +1 -1
  245. data/lib/puppet/parser/functions/include.rb +2 -1
  246. data/lib/puppet/parser/functions/inline_epp.rb +1 -1
  247. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  248. data/lib/puppet/parser/functions/lest.rb +1 -1
  249. data/lib/puppet/parser/functions/map.rb +1 -1
  250. data/lib/puppet/parser/functions/match.rb +1 -1
  251. data/lib/puppet/parser/functions/new.rb +45 -30
  252. data/lib/puppet/parser/functions/next.rb +1 -1
  253. data/lib/puppet/parser/functions/reduce.rb +1 -1
  254. data/lib/puppet/parser/functions/require.rb +1 -1
  255. data/lib/puppet/parser/functions/return.rb +2 -23
  256. data/lib/puppet/parser/functions/reverse_each.rb +1 -1
  257. data/lib/puppet/parser/functions/slice.rb +1 -1
  258. data/lib/puppet/parser/functions/sprintf.rb +3 -17
  259. data/lib/puppet/parser/functions/step.rb +1 -1
  260. data/lib/puppet/parser/functions/strftime.rb +1 -1
  261. data/lib/puppet/parser/functions/then.rb +1 -1
  262. data/lib/puppet/parser/functions/type.rb +1 -1
  263. data/lib/puppet/parser/functions/with.rb +1 -1
  264. data/lib/puppet/parser/parser_factory.rb +0 -30
  265. data/lib/puppet/parser/relationship.rb +49 -20
  266. data/lib/puppet/parser/resource.rb +31 -30
  267. data/lib/puppet/parser/resource/param.rb +0 -3
  268. data/lib/puppet/parser/scope.rb +122 -168
  269. data/lib/puppet/parser/templatewrapper.rb +2 -2
  270. data/lib/puppet/parser/type_loader.rb +1 -1
  271. data/lib/puppet/plugins/configuration.rb +15 -67
  272. data/lib/puppet/plugins/syntax_checkers.rb +6 -11
  273. data/lib/puppet/pops.rb +7 -37
  274. data/lib/puppet/pops/adaptable.rb +8 -3
  275. data/lib/puppet/pops/adapters.rb +23 -83
  276. data/lib/puppet/pops/evaluator/access_operator.rb +10 -39
  277. data/lib/puppet/pops/evaluator/collector_transformer.rb +7 -12
  278. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  279. data/lib/puppet/pops/evaluator/compare_operator.rb +7 -7
  280. data/lib/puppet/pops/evaluator/epp_evaluator.rb +1 -1
  281. data/lib/puppet/pops/evaluator/evaluator_impl.rb +46 -38
  282. data/lib/puppet/pops/evaluator/external_syntax_support.rb +2 -9
  283. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +0 -2
  284. data/lib/puppet/pops/evaluator/puppet_proc.rb +1 -1
  285. data/lib/puppet/pops/evaluator/relationship_operator.rb +26 -9
  286. data/lib/puppet/pops/evaluator/runtime3_converter.rb +17 -1
  287. data/lib/puppet/pops/evaluator/runtime3_support.rb +13 -30
  288. data/lib/puppet/pops/functions/dispatch.rb +1 -6
  289. data/lib/puppet/pops/issues.rb +182 -162
  290. data/lib/puppet/pops/loader/base_loader.rb +2 -2
  291. data/lib/puppet/pops/loader/gem_support.rb +2 -2
  292. data/lib/puppet/pops/loader/module_loaders.rb +59 -8
  293. data/lib/puppet/pops/loader/predefined_loader.rb +1 -6
  294. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +8 -8
  295. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +9 -10
  296. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +3 -3
  297. data/lib/puppet/pops/loader/static_loader.rb +33 -64
  298. data/lib/puppet/pops/loader/type_definition_instantiator.rb +7 -7
  299. data/lib/puppet/pops/loader/typed_name.rb +5 -0
  300. data/lib/puppet/pops/loaders.rb +15 -5
  301. data/lib/puppet/pops/lookup.rb +4 -2
  302. data/lib/puppet/pops/lookup/context.rb +1 -1
  303. data/lib/puppet/pops/lookup/data_provider.rb +3 -18
  304. data/lib/puppet/pops/lookup/global_data_provider.rb +1 -1
  305. data/lib/puppet/pops/lookup/hiera_config.rb +12 -35
  306. data/lib/puppet/pops/lookup/interpolation.rb +1 -0
  307. data/lib/puppet/pops/lookup/invocation.rb +1 -1
  308. data/lib/puppet/pops/lookup/lookup_adapter.rb +20 -64
  309. data/lib/puppet/pops/lookup/lookup_key.rb +1 -1
  310. data/lib/puppet/pops/lookup/module_data_provider.rb +1 -1
  311. data/lib/puppet/pops/lookup/sub_lookup.rb +2 -1
  312. data/lib/puppet/pops/merge_strategy.rb +1 -1
  313. data/lib/puppet/pops/model/ast.pp +692 -0
  314. data/lib/puppet/pops/model/ast.rb +4833 -0
  315. data/lib/puppet/pops/model/ast_transformer.rb +9 -10
  316. data/lib/puppet/pops/model/factory.rb +454 -527
  317. data/lib/puppet/pops/model/model_label_provider.rb +3 -2
  318. data/lib/puppet/pops/model/model_tree_dumper.rb +9 -8
  319. data/lib/puppet/pops/parser/egrammar.ra +66 -60
  320. data/lib/puppet/pops/parser/eparser.rb +1483 -1578
  321. data/lib/puppet/pops/parser/evaluating_parser.rb +5 -5
  322. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  323. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  324. data/lib/puppet/pops/parser/lexer2.rb +7 -33
  325. data/lib/puppet/pops/parser/locator.rb +39 -16
  326. data/lib/puppet/pops/parser/parser_support.rb +25 -29
  327. data/lib/puppet/pops/patterns.rb +1 -2
  328. data/lib/puppet/pops/pcore.rb +26 -19
  329. data/lib/puppet/pops/resource/param.rb +1 -1
  330. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -2
  331. data/lib/puppet/pops/serialization.rb +25 -1
  332. data/lib/puppet/pops/serialization/abstract_writer.rb +9 -1
  333. data/lib/puppet/pops/serialization/deserializer.rb +1 -1
  334. data/lib/puppet/pops/serialization/from_data_converter.rb +181 -0
  335. data/lib/puppet/pops/serialization/json.rb +4 -4
  336. data/lib/puppet/pops/serialization/json_path.rb +126 -0
  337. data/lib/puppet/pops/serialization/object.rb +5 -5
  338. data/lib/puppet/pops/serialization/serializer.rb +23 -9
  339. data/lib/puppet/pops/serialization/to_data_converter.rb +292 -0
  340. data/lib/puppet/pops/time/timespan.rb +11 -11
  341. data/lib/puppet/pops/time/timestamp.rb +8 -8
  342. data/lib/puppet/pops/types/annotatable.rb +7 -7
  343. data/lib/puppet/pops/types/annotation.rb +71 -0
  344. data/lib/puppet/pops/types/class_loader.rb +4 -6
  345. data/lib/puppet/pops/types/enumeration.rb +2 -2
  346. data/lib/puppet/pops/types/iterable.rb +2 -4
  347. data/lib/puppet/pops/types/p_binary_type.rb +7 -1
  348. data/lib/puppet/pops/types/p_meta_type.rb +16 -12
  349. data/lib/puppet/pops/types/p_object_type.rb +135 -96
  350. data/lib/puppet/pops/types/p_runtime_type.rb +1 -1
  351. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +6 -2
  352. data/lib/puppet/pops/types/p_timespan_type.rb +55 -4
  353. data/lib/puppet/pops/types/p_type_set_type.rb +42 -34
  354. data/lib/puppet/pops/types/puppet_object.rb +13 -3
  355. data/lib/puppet/pops/types/ruby_generator.rb +291 -127
  356. data/lib/puppet/pops/types/ruby_method.rb +31 -0
  357. data/lib/puppet/pops/types/string_converter.rb +107 -30
  358. data/lib/puppet/pops/types/type_calculator.rb +56 -94
  359. data/lib/puppet/pops/types/type_factory.rb +34 -6
  360. data/lib/puppet/pops/types/type_formatter.rb +64 -16
  361. data/lib/puppet/pops/types/type_mismatch_describer.rb +13 -22
  362. data/lib/puppet/pops/types/type_parser.rb +28 -13
  363. data/lib/puppet/pops/types/type_set_reference.rb +6 -6
  364. data/lib/puppet/pops/types/types.rb +169 -245
  365. data/lib/puppet/pops/utils.rb +0 -24
  366. data/lib/puppet/pops/validation.rb +3 -9
  367. data/lib/puppet/pops/validation/checker4_0.rb +86 -76
  368. data/lib/puppet/pops/validation/validator_factory_4_0.rb +0 -1
  369. data/lib/puppet/pops/visitor.rb +21 -0
  370. data/lib/puppet/property.rb +17 -14
  371. data/lib/puppet/property/ensure.rb +3 -3
  372. data/lib/puppet/property/list.rb +1 -10
  373. data/lib/puppet/provider.rb +2 -0
  374. data/lib/puppet/provider/aixobject.rb +7 -7
  375. data/lib/puppet/provider/augeas/augeas.rb +37 -37
  376. data/lib/puppet/provider/command.rb +1 -1
  377. data/lib/puppet/provider/cron/crontab.rb +2 -2
  378. data/lib/puppet/provider/exec.rb +4 -4
  379. data/lib/puppet/provider/exec/posix.rb +4 -4
  380. data/lib/puppet/provider/exec/windows.rb +3 -3
  381. data/lib/puppet/provider/file/posix.rb +5 -5
  382. data/lib/puppet/provider/file/windows.rb +4 -4
  383. data/lib/puppet/provider/group/aix.rb +2 -2
  384. data/lib/puppet/provider/group/groupadd.rb +2 -2
  385. data/lib/puppet/provider/group/pw.rb +1 -1
  386. data/lib/puppet/provider/group/windows_adsi.rb +7 -4
  387. data/lib/puppet/provider/host/parsed.rb +1 -1
  388. data/lib/puppet/provider/macauthorization/macauthorization.rb +9 -9
  389. data/lib/puppet/provider/maillist/mailman.rb +2 -2
  390. data/lib/puppet/provider/mcx/mcxcontent.rb +3 -3
  391. data/lib/puppet/provider/mount.rb +2 -1
  392. data/lib/puppet/provider/mount/parsed.rb +10 -8
  393. data/lib/puppet/provider/naginator.rb +1 -1
  394. data/lib/puppet/provider/nameservice.rb +8 -10
  395. data/lib/puppet/provider/nameservice/directoryservice.rb +11 -11
  396. data/lib/puppet/provider/network_device.rb +2 -1
  397. data/lib/puppet/provider/package/aix.rb +6 -6
  398. data/lib/puppet/provider/package/appdmg.rb +2 -2
  399. data/lib/puppet/provider/package/apple.rb +1 -1
  400. data/lib/puppet/provider/package/apt.rb +4 -4
  401. data/lib/puppet/provider/package/aptitude.rb +1 -1
  402. data/lib/puppet/provider/package/aptrpm.rb +2 -2
  403. data/lib/puppet/provider/package/blastwave.rb +4 -4
  404. data/lib/puppet/provider/package/dnf.rb +1 -1
  405. data/lib/puppet/provider/package/dpkg.rb +3 -3
  406. data/lib/puppet/provider/package/fink.rb +3 -3
  407. data/lib/puppet/provider/package/freebsd.rb +1 -1
  408. data/lib/puppet/provider/package/gem.rb +6 -6
  409. data/lib/puppet/provider/package/hpux.rb +1 -1
  410. data/lib/puppet/provider/package/nim.rb +15 -12
  411. data/lib/puppet/provider/package/openbsd.rb +4 -4
  412. data/lib/puppet/provider/package/opkg.rb +1 -1
  413. data/lib/puppet/provider/package/pacman.rb +9 -9
  414. data/lib/puppet/provider/package/pkg.rb +9 -9
  415. data/lib/puppet/provider/package/pkgdmg.rb +4 -4
  416. data/lib/puppet/provider/package/pkgin.rb +3 -3
  417. data/lib/puppet/provider/package/pkgng.rb +1 -1
  418. data/lib/puppet/provider/package/pkgutil.rb +6 -6
  419. data/lib/puppet/provider/package/portage.rb +167 -59
  420. data/lib/puppet/provider/package/ports.rb +3 -3
  421. data/lib/puppet/provider/package/portupgrade.rb +4 -4
  422. data/lib/puppet/provider/package/rpm.rb +7 -4
  423. data/lib/puppet/provider/package/rug.rb +1 -1
  424. data/lib/puppet/provider/package/sun.rb +3 -2
  425. data/lib/puppet/provider/package/up2date.rb +1 -1
  426. data/lib/puppet/provider/package/urpmi.rb +1 -1
  427. data/lib/puppet/provider/package/windows.rb +4 -4
  428. data/lib/puppet/provider/package/windows/package.rb +3 -3
  429. data/lib/puppet/provider/package/yum.rb +5 -6
  430. data/lib/puppet/provider/package/zypper.rb +1 -1
  431. data/lib/puppet/provider/parsedfile.rb +1 -1
  432. data/lib/puppet/provider/service/base.rb +8 -21
  433. data/lib/puppet/provider/service/smf.rb +2 -2
  434. data/lib/puppet/provider/service/systemd.rb +1 -2
  435. data/lib/puppet/provider/service/upstart.rb +1 -3
  436. data/lib/puppet/provider/user/aix.rb +2 -2
  437. data/lib/puppet/provider/user/ldap.rb +1 -1
  438. data/lib/puppet/provider/user/windows_adsi.rb +1 -1
  439. data/lib/puppet/provider/yumrepo/inifile.rb +3 -3
  440. data/lib/puppet/provider/zfs/zfs.rb +1 -5
  441. data/lib/puppet/reference/configuration.rb +0 -2
  442. data/lib/puppet/reference/indirection.rb +1 -1
  443. data/lib/puppet/reference/metaparameter.rb +1 -1
  444. data/lib/puppet/reference/providers.rb +6 -6
  445. data/lib/puppet/reference/type.rb +2 -2
  446. data/lib/puppet/relationship.rb +7 -9
  447. data/lib/puppet/reports/http.rb +8 -6
  448. data/lib/puppet/resource.rb +75 -134
  449. data/lib/puppet/resource/capability_finder.rb +1 -1
  450. data/lib/puppet/resource/catalog.rb +26 -34
  451. data/lib/puppet/resource/status.rb +13 -24
  452. data/lib/puppet/resource/type.rb +13 -61
  453. data/lib/puppet/resource/type_collection.rb +29 -23
  454. data/lib/puppet/settings.rb +1 -1
  455. data/lib/puppet/settings/array_setting.rb +1 -1
  456. data/lib/puppet/settings/autosign_setting.rb +1 -1
  457. data/lib/puppet/settings/boolean_setting.rb +1 -1
  458. data/lib/puppet/settings/config_file.rb +2 -2
  459. data/lib/puppet/settings/duration_setting.rb +1 -1
  460. data/lib/puppet/settings/enum_setting.rb +1 -1
  461. data/lib/puppet/settings/environment_conf.rb +2 -10
  462. data/lib/puppet/settings/file_setting.rb +2 -2
  463. data/lib/puppet/settings/priority_setting.rb +1 -1
  464. data/lib/puppet/settings/server_list_setting.rb +1 -1
  465. data/lib/puppet/settings/symbolic_enum_setting.rb +1 -1
  466. data/lib/puppet/settings/terminus_setting.rb +1 -1
  467. data/lib/puppet/settings/ttl_setting.rb +2 -2
  468. data/lib/puppet/ssl/base.rb +2 -2
  469. data/lib/puppet/ssl/certificate_authority.rb +21 -21
  470. data/lib/puppet/ssl/certificate_authority/interface.rb +13 -13
  471. data/lib/puppet/ssl/certificate_factory.rb +2 -2
  472. data/lib/puppet/ssl/certificate_request.rb +14 -14
  473. data/lib/puppet/ssl/certificate_request_attributes.rb +3 -3
  474. data/lib/puppet/ssl/certificate_revocation_list.rb +3 -3
  475. data/lib/puppet/ssl/host.rb +29 -29
  476. data/lib/puppet/ssl/inventory.rb +1 -1
  477. data/lib/puppet/ssl/key.rb +1 -1
  478. data/lib/puppet/ssl/oids.rb +5 -5
  479. data/lib/puppet/ssl/validator/default_validator.rb +3 -4
  480. data/lib/puppet/syntax_checkers/base64.rb +7 -7
  481. data/lib/puppet/syntax_checkers/json.rb +5 -5
  482. data/lib/puppet/test/test_helper.rb +0 -4
  483. data/lib/puppet/transaction.rb +38 -23
  484. data/lib/puppet/transaction/additional_resource_generator.rb +4 -3
  485. data/lib/puppet/transaction/event.rb +19 -8
  486. data/lib/puppet/transaction/event_manager.rb +6 -6
  487. data/lib/puppet/transaction/persistence.rb +6 -6
  488. data/lib/puppet/transaction/report.rb +34 -47
  489. data/lib/puppet/transaction/resource_harness.rb +14 -12
  490. data/lib/puppet/type.rb +9 -7
  491. data/lib/puppet/type/augeas.rb +2 -2
  492. data/lib/puppet/type/cron.rb +14 -31
  493. data/lib/puppet/type/exec.rb +16 -16
  494. data/lib/puppet/type/file.rb +21 -22
  495. data/lib/puppet/type/file/content.rb +1 -1
  496. data/lib/puppet/type/file/group.rb +3 -3
  497. data/lib/puppet/type/file/mode.rb +6 -6
  498. data/lib/puppet/type/file/owner.rb +3 -3
  499. data/lib/puppet/type/file/selcontext.rb +18 -1
  500. data/lib/puppet/type/file/source.rb +5 -1
  501. data/lib/puppet/type/filebucket.rb +3 -8
  502. data/lib/puppet/type/group.rb +2 -2
  503. data/lib/puppet/type/host.rb +6 -6
  504. data/lib/puppet/type/interface.rb +1 -1
  505. data/lib/puppet/type/k5login.rb +1 -1
  506. data/lib/puppet/type/macauthorization.rb +1 -1
  507. data/lib/puppet/type/mailalias.rb +2 -18
  508. data/lib/puppet/type/maillist.rb +1 -1
  509. data/lib/puppet/type/mount.rb +8 -8
  510. data/lib/puppet/type/notify.rb +2 -0
  511. data/lib/puppet/type/package.rb +5 -5
  512. data/lib/puppet/type/resources.rb +6 -6
  513. data/lib/puppet/type/schedule.rb +9 -9
  514. data/lib/puppet/type/scheduled_task.rb +9 -8
  515. data/lib/puppet/type/service.rb +1 -1
  516. data/lib/puppet/type/ssh_authorized_key.rb +3 -19
  517. data/lib/puppet/type/sshkey.rb +4 -4
  518. data/lib/puppet/type/tidy.rb +16 -19
  519. data/lib/puppet/type/user.rb +35 -70
  520. data/lib/puppet/type/yumrepo.rb +8 -8
  521. data/lib/puppet/type/zone.rb +7 -7
  522. data/lib/puppet/type/zpool.rb +3 -3
  523. data/lib/puppet/util.rb +16 -12
  524. data/lib/puppet/util/at_fork.rb +35 -0
  525. data/lib/puppet/util/at_fork/noop.rb +18 -0
  526. data/lib/puppet/util/at_fork/solaris.rb +158 -0
  527. data/lib/puppet/util/autoload.rb +2 -2
  528. data/lib/puppet/util/backups.rb +6 -6
  529. data/lib/puppet/util/classgen.rb +4 -4
  530. data/lib/puppet/util/command_line.rb +4 -4
  531. data/lib/puppet/util/command_line/puppet_option_parser.rb +3 -3
  532. data/lib/puppet/util/command_line/trollop.rb +31 -31
  533. data/lib/puppet/util/diff.rb +1 -1
  534. data/lib/puppet/util/errors.rb +4 -4
  535. data/lib/puppet/util/execution.rb +9 -9
  536. data/lib/puppet/util/feature.rb +5 -5
  537. data/lib/puppet/util/fileparsing.rb +8 -8
  538. data/lib/puppet/util/filetype.rb +15 -15
  539. data/lib/puppet/util/http_proxy.rb +7 -15
  540. data/lib/puppet/util/inifile.rb +4 -4
  541. data/lib/puppet/util/instance_loader.rb +1 -1
  542. data/lib/puppet/util/json_lockfile.rb +4 -4
  543. data/lib/puppet/util/ldap/connection.rb +2 -2
  544. data/lib/puppet/util/ldap/manager.rb +2 -2
  545. data/lib/puppet/util/limits.rb +1 -1
  546. data/lib/puppet/util/log.rb +23 -16
  547. data/lib/puppet/util/log/destinations.rb +10 -16
  548. data/lib/puppet/util/logging.rb +11 -8
  549. data/lib/puppet/util/metric.rb +9 -6
  550. data/lib/puppet/util/monkey_patches.rb +27 -66
  551. data/lib/puppet/util/network_device.rb +1 -1
  552. data/lib/puppet/util/network_device/cisco/device.rb +7 -7
  553. data/lib/puppet/util/network_device/cisco/interface.rb +1 -1
  554. data/lib/puppet/util/network_device/config.rb +6 -6
  555. data/lib/puppet/util/network_device/transport/ssh.rb +6 -6
  556. data/lib/puppet/util/plist.rb +4 -2
  557. data/lib/puppet/util/posix.rb +5 -5
  558. data/lib/puppet/util/profiler/wall_clock.rb +1 -1
  559. data/lib/puppet/util/provider_features.rb +1 -1
  560. data/lib/puppet/util/psych_support.rb +3 -11
  561. data/lib/puppet/util/rdoc.rb +4 -4
  562. data/lib/puppet/util/reference.rb +14 -7
  563. data/lib/puppet/util/resource_template.rb +1 -1
  564. data/lib/puppet/util/retry_action.rb +2 -2
  565. data/lib/puppet/util/selinux.rb +54 -12
  566. data/lib/puppet/util/splayer.rb +1 -1
  567. data/lib/puppet/util/storage.rb +5 -5
  568. data/lib/puppet/util/suidmanager.rb +4 -4
  569. data/lib/puppet/util/symbolic_file_mode.rb +9 -9
  570. data/lib/puppet/util/tag_set.rb +1 -4
  571. data/lib/puppet/util/tagging.rb +2 -2
  572. data/lib/puppet/util/windows.rb +2 -0
  573. data/lib/puppet/util/windows/adsi.rb +19 -16
  574. data/lib/puppet/util/windows/api_types.rb +7 -11
  575. data/lib/puppet/util/windows/com.rb +4 -4
  576. data/lib/puppet/util/windows/error.rb +2 -2
  577. data/lib/puppet/util/windows/eventlog.rb +192 -0
  578. data/lib/puppet/util/windows/file.rb +13 -96
  579. data/lib/puppet/util/windows/principal.rb +6 -7
  580. data/lib/puppet/util/windows/process.rb +6 -14
  581. data/lib/puppet/util/windows/registry.rb +11 -11
  582. data/lib/puppet/util/windows/root_certs.rb +1 -1
  583. data/lib/puppet/util/windows/security.rb +14 -14
  584. data/lib/puppet/util/windows/sid.rb +13 -66
  585. data/lib/puppet/util/windows/taskscheduler.rb +62 -62
  586. data/lib/puppet/util/windows/user.rb +6 -6
  587. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +2 -10
  588. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +1 -1
  589. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +122 -114
  590. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +678 -342
  591. data/lib/puppet/vendor/semantic_puppet/{lib/semantic_puppet/locales → locales}/config.yaml +0 -0
  592. data/lib/puppet/version.rb +1 -1
  593. data/locales/config.yaml +1 -1
  594. data/locales/puppet.pot +7847 -112
  595. data/man/man5/puppet.conf.5 +55 -296
  596. data/man/man8/puppet-agent.8 +10 -32
  597. data/man/man8/puppet-apply.8 +6 -21
  598. data/man/man8/puppet-ca.8 +34 -48
  599. data/man/man8/puppet-catalog.8 +4 -4
  600. data/man/man8/puppet-cert.8 +6 -23
  601. data/man/man8/puppet-certificate.8 +28 -44
  602. data/man/man8/puppet-certificate_request.8 +4 -4
  603. data/man/man8/puppet-certificate_revocation_list.8 +4 -4
  604. data/man/man8/puppet-config.8 +5 -5
  605. data/man/man8/puppet-describe.8 +3 -3
  606. data/man/man8/puppet-device.8 +13 -23
  607. data/man/man8/puppet-doc.8 +5 -5
  608. data/man/man8/puppet-epp.8 +10 -16
  609. data/man/man8/puppet-facts.8 +4 -4
  610. data/man/man8/puppet-filebucket.8 +6 -63
  611. data/man/man8/puppet-help.8 +4 -4
  612. data/man/man8/puppet-inspect.8 +5 -8
  613. data/man/man8/puppet-key.8 +4 -4
  614. data/man/man8/puppet-man.8 +5 -5
  615. data/man/man8/puppet-master.8 +5 -5
  616. data/man/man8/puppet-module.8 +13 -22
  617. data/man/man8/puppet-node.8 +4 -4
  618. data/man/man8/puppet-parser.8 +4 -4
  619. data/man/man8/puppet-plugin.8 +4 -4
  620. data/man/man8/puppet-report.8 +4 -4
  621. data/man/man8/puppet-resource.8 +8 -4
  622. data/man/man8/puppet-status.8 +5 -5
  623. data/man/man8/puppet.8 +3 -12
  624. data/spec/fixtures/unit/application/environments/production/data/common.yaml +0 -2
  625. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/metadata.json +9 -0
  626. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/metadata.json +9 -0
  627. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/abc/metadata.json +9 -0
  628. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/metadata.json +9 -0
  629. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/metadata.json +9 -0
  630. data/spec/integration/agent/logging_spec.rb +0 -2
  631. data/spec/integration/application/apply_spec.rb +19 -23
  632. data/spec/integration/application/lookup_spec.rb +0 -21
  633. data/spec/integration/configurer_spec.rb +1 -1
  634. data/spec/integration/defaults_spec.rb +2 -2
  635. data/spec/integration/file_bucket/file_spec.rb +5 -20
  636. data/spec/integration/indirector/file_content/file_server_spec.rb +1 -0
  637. data/spec/integration/indirector/file_metadata/file_server_spec.rb +1 -0
  638. data/spec/integration/parser/catalog_spec.rb +1 -1
  639. data/spec/integration/parser/class_spec.rb +6 -6
  640. data/spec/integration/parser/compiler_spec.rb +184 -142
  641. data/spec/integration/parser/dynamic_scoping_spec.rb +0 -1
  642. data/spec/integration/parser/pcore_resource_spec.rb +1 -1
  643. data/spec/integration/parser/scope_spec.rb +53 -4
  644. data/spec/integration/provider/cron/crontab_spec.rb +0 -1
  645. data/spec/integration/resource/catalog_spec.rb +0 -4
  646. data/spec/integration/transaction/report_spec.rb +2 -2
  647. data/spec/integration/transaction_spec.rb +4 -37
  648. data/spec/integration/type/package_spec.rb +7 -1
  649. data/spec/integration/util/execution_spec.rb +0 -8
  650. data/spec/integration/util/windows/adsi_spec.rb +1 -86
  651. data/spec/integration/util/windows/principal_spec.rb +1 -10
  652. data/spec/integration/util/windows/process_spec.rb +0 -45
  653. data/spec/lib/matchers/json.rb +3 -3
  654. data/spec/lib/puppet/indirector_testing.rb +4 -0
  655. data/spec/lib/puppet_spec/compiler.rb +1 -1
  656. data/spec/lib/puppet_spec/modules.rb +2 -2
  657. data/spec/lib/puppet_spec/network.rb +10 -6
  658. data/spec/shared_contexts/types_setup.rb +28 -9
  659. data/spec/spec_helper.rb +0 -11
  660. data/spec/unit/agent_spec.rb +12 -34
  661. data/spec/unit/application/agent_spec.rb +16 -0
  662. data/spec/unit/application/apply_spec.rb +37 -13
  663. data/spec/unit/application/cert_spec.rb +1 -40
  664. data/spec/unit/application/config_spec.rb +0 -4
  665. data/spec/unit/application/describe_spec.rb +19 -0
  666. data/spec/unit/application/device_spec.rb +41 -2
  667. data/spec/unit/application/face_base_spec.rb +6 -6
  668. data/spec/unit/application/lookup_spec.rb +1 -31
  669. data/spec/unit/application/master_spec.rb +22 -6
  670. data/spec/unit/application/resource_spec.rb +17 -0
  671. data/spec/unit/application_spec.rb +0 -24
  672. data/spec/unit/capability_spec.rb +2 -6
  673. data/spec/unit/configurer/fact_handler_spec.rb +74 -41
  674. data/spec/unit/configurer/plugin_handler_spec.rb +13 -19
  675. data/spec/unit/configurer_spec.rb +36 -33
  676. data/spec/unit/defaults_spec.rb +0 -44
  677. data/spec/unit/environments_spec.rb +0 -15
  678. data/spec/unit/face/config_spec.rb +2 -1
  679. data/spec/unit/face/epp_face_spec.rb +0 -9
  680. data/spec/unit/face/module/list_spec.rb +60 -0
  681. data/spec/unit/file_bucket/file_spec.rb +3 -3
  682. data/spec/unit/file_serving/http_metadata_spec.rb +1 -1
  683. data/spec/unit/file_serving/metadata_spec.rb +14 -9
  684. data/spec/unit/forge/forge_spec.rb +2 -2
  685. data/spec/unit/forge_spec.rb +0 -105
  686. data/spec/unit/functions/annotate_spec.rb +175 -0
  687. data/spec/unit/functions/break_spec.rb +52 -83
  688. data/spec/unit/functions/call_spec.rb +77 -0
  689. data/spec/unit/functions/contain_spec.rb +1 -1
  690. data/spec/unit/functions/defined_spec.rb +2 -2
  691. data/spec/unit/functions/epp_spec.rb +0 -10
  692. data/spec/unit/functions/hiera_spec.rb +0 -5
  693. data/spec/unit/functions/lookup_fixture_spec.rb +1 -6
  694. data/spec/unit/functions/lookup_spec.rb +4 -97
  695. data/spec/unit/functions/new_spec.rb +1 -1
  696. data/spec/unit/functions/unique_spec.rb +111 -0
  697. data/spec/unit/functions4_spec.rb +2 -43
  698. data/spec/unit/graph/relationship_graph_spec.rb +0 -15
  699. data/spec/unit/graph/simple_graph_spec.rb +58 -55
  700. data/spec/unit/indirector/catalog/compiler_spec.rb +206 -174
  701. data/spec/unit/indirector/catalog/json_spec.rb +50 -1
  702. data/spec/unit/indirector/facts/facter_spec.rb +1 -2
  703. data/spec/unit/indirector/file_bucket_file/file_spec.rb +4 -4
  704. data/spec/unit/indirector/file_server_spec.rb +17 -2
  705. data/spec/unit/indirector/indirection_spec.rb +3 -60
  706. data/spec/unit/indirector/json_spec.rb +27 -6
  707. data/spec/unit/indirector/node/exec_spec.rb +12 -12
  708. data/spec/unit/indirector/node/ldap_spec.rb +29 -8
  709. data/spec/unit/indirector/node/plain_spec.rb +16 -6
  710. data/spec/unit/indirector/node/write_only_yaml_spec.rb +12 -0
  711. data/spec/unit/indirector/report/processor_spec.rb +2 -2
  712. data/spec/unit/indirector/report/rest_spec.rb +29 -3
  713. data/spec/unit/indirector/request_spec.rb +0 -45
  714. data/spec/unit/indirector/rest_spec.rb +57 -15
  715. data/spec/unit/interface/face_collection_spec.rb +7 -7
  716. data/spec/unit/interface_spec.rb +0 -12
  717. data/spec/unit/module_spec.rb +10 -31
  718. data/spec/unit/module_tool/applications/installer_spec.rb +0 -1
  719. data/spec/unit/module_tool/applications/upgrader_spec.rb +0 -1
  720. data/spec/unit/module_tool/tar/mini_spec.rb +5 -34
  721. data/spec/unit/network/format_handler_spec.rb +11 -11
  722. data/spec/unit/network/format_spec.rb +9 -0
  723. data/spec/unit/network/formats_spec.rb +322 -138
  724. data/spec/unit/network/http/api/indirected_routes_spec.rb +62 -52
  725. data/spec/unit/network/http/api/master/v3/environment_spec.rb +128 -2
  726. data/spec/unit/network/http/api/master/v3_spec.rb +1 -1
  727. data/spec/unit/network/http/api_spec.rb +1 -1
  728. data/spec/unit/network/http/compression_spec.rb +105 -88
  729. data/spec/unit/network/http/error_spec.rb +1 -2
  730. data/spec/unit/network/http/factory_spec.rb +9 -38
  731. data/spec/unit/network/http/handler_spec.rb +8 -12
  732. data/spec/unit/network/http/request_spec.rb +110 -0
  733. data/spec/unit/network/http/response_spec.rb +108 -0
  734. data/spec/unit/network/http/webrick_spec.rb +29 -30
  735. data/spec/unit/node/facts_spec.rb +13 -13
  736. data/spec/unit/node_spec.rb +33 -10
  737. data/spec/unit/parameter_spec.rb +73 -5
  738. data/spec/unit/parser/ast/leaf_spec.rb +4 -3
  739. data/spec/unit/parser/compiler_spec.rb +1 -1
  740. data/spec/unit/parser/environment_compiler_spec.rb +0 -2
  741. data/spec/unit/parser/functions/sprintf_spec.rb +0 -26
  742. data/spec/unit/parser/resource_spec.rb +86 -24
  743. data/spec/unit/parser/scope_spec.rb +4 -81
  744. data/spec/unit/pops/benchmark_spec.rb +8 -26
  745. data/spec/unit/pops/containment_spec.rb +0 -26
  746. data/spec/unit/pops/evaluator/access_ops_spec.rb +103 -103
  747. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +59 -6
  748. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +5 -5
  749. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +26 -26
  750. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +19 -7
  751. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +7 -7
  752. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +36 -1
  753. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +10 -10
  754. data/spec/unit/pops/evaluator/variables_spec.rb +1 -1
  755. data/spec/unit/pops/factory_rspec_helper.rb +0 -4
  756. data/spec/unit/pops/factory_spec.rb +83 -83
  757. data/spec/unit/pops/loaders/loaders_spec.rb +69 -1
  758. data/spec/unit/pops/loaders/static_loader_spec.rb +3 -7
  759. data/spec/unit/pops/model/model_spec.rb +10 -10
  760. data/spec/unit/pops/parser/epp_parser_spec.rb +1 -1
  761. data/spec/unit/pops/parser/lexer2_spec.rb +4 -59
  762. data/spec/unit/pops/parser/{source_pos_adapter_spec.rb → locator_spec.rb} +9 -11
  763. data/spec/unit/pops/parser/parse_application_spec.rb +0 -3
  764. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +4 -4
  765. data/spec/unit/pops/parser/parse_capabilities_spec.rb +0 -3
  766. data/spec/unit/pops/parser/parse_containers_spec.rb +17 -19
  767. data/spec/unit/pops/parser/parse_site_spec.rb +0 -3
  768. data/spec/unit/pops/parser/parser_spec.rb +8 -10
  769. data/spec/unit/pops/resource/resource_type_impl_spec.rb +1 -3
  770. data/spec/unit/pops/serialization/serialization_spec.rb +87 -1
  771. data/spec/unit/pops/serialization/to_from_hr_spec.rb +494 -0
  772. data/spec/unit/pops/time/timestamp_spec.rb +13 -0
  773. data/spec/unit/pops/types/iterable_spec.rb +1 -1
  774. data/spec/unit/pops/types/p_object_type_spec.rb +99 -13
  775. data/spec/unit/pops/types/p_timestamp_type_spec.rb +8 -8
  776. data/spec/unit/pops/types/p_type_set_type_spec.rb +1 -9
  777. data/spec/unit/pops/types/ruby_generator_spec.rb +57 -20
  778. data/spec/unit/pops/types/string_converter_spec.rb +78 -30
  779. data/spec/unit/pops/types/type_acceptor_spec.rb +2 -2
  780. data/spec/unit/pops/types/type_calculator_spec.rb +207 -123
  781. data/spec/unit/pops/types/type_factory_spec.rb +9 -9
  782. data/spec/unit/pops/types/type_formatter_spec.rb +32 -19
  783. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +0 -9
  784. data/spec/unit/pops/types/type_parser_spec.rb +6 -6
  785. data/spec/unit/pops/types/types_spec.rb +42 -2
  786. data/spec/unit/pops/validator/validator_spec.rb +25 -86
  787. data/spec/unit/pops/visitor_spec.rb +1 -1
  788. data/spec/unit/property/list_spec.rb +2 -2
  789. data/spec/unit/provider/augeas/augeas_spec.rb +1 -1
  790. data/spec/unit/provider/group/windows_adsi_spec.rb +22 -79
  791. data/spec/unit/provider/package/aix_spec.rb +0 -8
  792. data/spec/unit/provider/package/portage_spec.rb +103 -17
  793. data/spec/unit/provider/package/rpm_spec.rb +14 -1
  794. data/spec/unit/provider/package/yum_spec.rb +0 -10
  795. data/spec/unit/provider/service/base_spec.rb +0 -20
  796. data/spec/unit/provider/service/smf_spec.rb +4 -2
  797. data/spec/unit/provider/service/systemd_spec.rb +1 -15
  798. data/spec/unit/provider/user/directoryservice_spec.rb +7 -7
  799. data/spec/unit/provider/user/windows_adsi_spec.rb +4 -4
  800. data/spec/unit/provider/zfs/zfs_spec.rb +1 -7
  801. data/spec/unit/puppet_spec.rb +2 -3
  802. data/spec/unit/relationship_spec.rb +15 -36
  803. data/spec/unit/reports/http_spec.rb +11 -8
  804. data/spec/unit/resource/catalog_spec.rb +47 -49
  805. data/spec/unit/resource/status_spec.rb +114 -103
  806. data/spec/unit/resource/type_collection_spec.rb +5 -5
  807. data/spec/unit/resource/type_spec.rb +4 -71
  808. data/spec/unit/resource_spec.rb +30 -34
  809. data/spec/unit/settings_spec.rb +4 -2
  810. data/spec/unit/ssl/host_spec.rb +34 -34
  811. data/spec/unit/status_spec.rb +7 -7
  812. data/spec/unit/transaction/event_spec.rb +18 -15
  813. data/spec/unit/transaction/report_spec.rb +100 -81
  814. data/spec/unit/transaction/resource_harness_spec.rb +3 -3
  815. data/spec/unit/transaction_spec.rb +53 -8
  816. data/spec/unit/type/file/group_spec.rb +2 -2
  817. data/spec/unit/type/file/mode_spec.rb +9 -9
  818. data/spec/unit/type/file/owner_spec.rb +2 -2
  819. data/spec/unit/type/file/selinux_spec.rb +2 -0
  820. data/spec/unit/type/file/source_spec.rb +13 -0
  821. data/spec/unit/type/nagios_spec.rb +1 -21
  822. data/spec/unit/type/ssh_authorized_key_spec.rb +2 -2
  823. data/spec/unit/type/tidy_spec.rb +0 -14
  824. data/spec/unit/type/user_spec.rb +2 -4
  825. data/spec/unit/util/at_fork_spec.rb +150 -0
  826. data/spec/unit/util/execution_spec.rb +31 -2
  827. data/spec/unit/util/http_proxy_spec.rb +0 -37
  828. data/spec/unit/util/log/destinations_spec.rb +5 -6
  829. data/spec/unit/util/log_spec.rb +62 -17
  830. data/spec/unit/util/metric_spec.rb +9 -2
  831. data/spec/unit/util/monkey_patches_spec.rb +6 -188
  832. data/spec/unit/util/run_mode_spec.rb +17 -10
  833. data/spec/unit/util/tag_set_spec.rb +2 -2
  834. data/spec/unit/util/tagging_spec.rb +55 -0
  835. data/spec/unit/util/windows/adsi_spec.rb +27 -31
  836. data/spec/unit/util/windows/api_types_spec.rb +0 -51
  837. data/spec/unit/util/windows/eventlog_spec.rb +123 -0
  838. data/spec/unit/util/windows/sid_spec.rb +15 -86
  839. data/spec/unit/util_spec.rb +7 -1
  840. data/tasks/benchmark.rake +3 -3
  841. data/tasks/cfpropertylist.rake +1 -1
  842. data/tasks/generate_ast_model.rake +78 -0
  843. data/tasks/manpages.rake +1 -1
  844. data/tasks/parallel.rake +7 -12
  845. metadata +3436 -3695
  846. checksums.yaml +0 -7
  847. data/bin/extlookup2hiera +0 -56
  848. data/ext/emacs/puppet-mode-init.el +0 -6
  849. data/ext/emacs/puppet-mode.el +0 -433
  850. data/ext/vim/README +0 -3
  851. data/ext/vim/ftdetect/puppet.vim +0 -2
  852. data/ext/vim/ftplugin/puppet.vim +0 -94
  853. data/ext/vim/indent/puppet.vim +0 -76
  854. data/ext/vim/syntax/puppet.vim +0 -115
  855. data/lib/puppet/application/file.rb +0 -4
  856. data/lib/puppet/application/inspect.rb +0 -184
  857. data/lib/puppet/application/resource_type.rb +0 -7
  858. data/lib/puppet/data_providers.rb +0 -34
  859. data/lib/puppet/data_providers/data_adapter.rb +0 -37
  860. data/lib/puppet/data_providers/data_function_support.rb +0 -32
  861. data/lib/puppet/data_providers/function_env_data_provider.rb +0 -26
  862. data/lib/puppet/data_providers/function_module_data_provider.rb +0 -24
  863. data/lib/puppet/data_providers/hiera_config.rb +0 -151
  864. data/lib/puppet/data_providers/hiera_env_data_provider.rb +0 -25
  865. data/lib/puppet/data_providers/hiera_interpolate.rb +0 -21
  866. data/lib/puppet/data_providers/hiera_module_data_provider.rb +0 -30
  867. data/lib/puppet/data_providers/hiera_support.rb +0 -42
  868. data/lib/puppet/data_providers/json_data_provider_factory.rb +0 -38
  869. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +0 -40
  870. data/lib/puppet/face/file.rb +0 -50
  871. data/lib/puppet/face/file/download.rb +0 -56
  872. data/lib/puppet/face/file/store.rb +0 -21
  873. data/lib/puppet/face/resource_type.rb +0 -84
  874. data/lib/puppet/feature/cfacter.rb +0 -15
  875. data/lib/puppet/feature/external_facts.rb +0 -5
  876. data/lib/puppet/indirector/catalog/static_compiler.rb +0 -232
  877. data/lib/puppet/indirector/resource_type.rb +0 -5
  878. data/lib/puppet/indirector/resource_type/parser.rb +0 -108
  879. data/lib/puppet/indirector/resource_type/rest.rb +0 -7
  880. data/lib/puppet/parser/yaml_trimmer.rb +0 -7
  881. data/lib/puppet/plugins/binding_schemes.rb +0 -140
  882. data/lib/puppet/plugins/data_providers.rb +0 -45
  883. data/lib/puppet/plugins/data_providers/data_provider.rb +0 -406
  884. data/lib/puppet/plugins/data_providers/registry.rb +0 -51
  885. data/lib/puppet/pops/binder/binder.rb +0 -398
  886. data/lib/puppet/pops/binder/binder_issues.rb +0 -124
  887. data/lib/puppet/pops/binder/bindings_checker.rb +0 -201
  888. data/lib/puppet/pops/binder/bindings_composer.rb +0 -181
  889. data/lib/puppet/pops/binder/bindings_factory.rb +0 -813
  890. data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -45
  891. data/lib/puppet/pops/binder/bindings_loader.rb +0 -87
  892. data/lib/puppet/pops/binder/bindings_model.rb +0 -70
  893. data/lib/puppet/pops/binder/bindings_model_dumper.rb +0 -215
  894. data/lib/puppet/pops/binder/bindings_model_meta.rb +0 -215
  895. data/lib/puppet/pops/binder/bindings_validator_factory.rb +0 -28
  896. data/lib/puppet/pops/binder/config/binder_config.rb +0 -107
  897. data/lib/puppet/pops/binder/config/binder_config_checker.rb +0 -142
  898. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +0 -36
  899. data/lib/puppet/pops/binder/config/issues.rb +0 -90
  900. data/lib/puppet/pops/binder/injector.rb +0 -771
  901. data/lib/puppet/pops/binder/injector_entry.rb +0 -57
  902. data/lib/puppet/pops/binder/key_factory.rb +0 -65
  903. data/lib/puppet/pops/binder/producers.rb +0 -831
  904. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +0 -34
  905. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +0 -143
  906. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +0 -53
  907. data/lib/puppet/pops/binder/system_bindings.rb +0 -60
  908. data/lib/puppet/pops/containment.rb +0 -104
  909. data/lib/puppet/pops/model/model.rb +0 -131
  910. data/lib/puppet/pops/model/model_meta.rb +0 -629
  911. data/lib/puppet/pops/serialization/rgen.rb +0 -152
  912. data/lib/puppet/vendor/load_rgen.rb +0 -2
  913. data/lib/puppet/vendor/rgen/CHANGELOG +0 -197
  914. data/lib/puppet/vendor/rgen/MIT-LICENSE +0 -20
  915. data/lib/puppet/vendor/rgen/PUPPET_README.md +0 -6
  916. data/lib/puppet/vendor/rgen/README.rdoc +0 -78
  917. data/lib/puppet/vendor/rgen/Rakefile +0 -41
  918. data/lib/puppet/vendor/rgen/TODO +0 -41
  919. data/lib/puppet/vendor/rgen/anounce.txt +0 -61
  920. data/lib/puppet/vendor/rgen/design_rationale.txt +0 -71
  921. data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +0 -54
  922. data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +0 -32
  923. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +0 -562
  924. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +0 -45
  925. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +0 -43
  926. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +0 -103
  927. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +0 -89
  928. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +0 -559
  929. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +0 -26
  930. data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +0 -20
  931. data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +0 -91
  932. data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +0 -28
  933. data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +0 -37
  934. data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +0 -172
  935. data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +0 -45
  936. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +0 -218
  937. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +0 -81
  938. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +0 -69
  939. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +0 -47
  940. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +0 -167
  941. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +0 -91
  942. data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +0 -129
  943. data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +0 -63
  944. data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +0 -140
  945. data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +0 -289
  946. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +0 -66
  947. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +0 -66
  948. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +0 -117
  949. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +0 -169
  950. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +0 -126
  951. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +0 -331
  952. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +0 -94
  953. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +0 -137
  954. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +0 -97
  955. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +0 -128
  956. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +0 -47
  957. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +0 -168
  958. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +0 -224
  959. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +0 -556
  960. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +0 -174
  961. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +0 -89
  962. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +0 -77
  963. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +0 -30
  964. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +0 -168
  965. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +0 -23
  966. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +0 -42
  967. data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +0 -32
  968. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +0 -334
  969. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +0 -225
  970. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +0 -156
  971. data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +0 -121
  972. data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +0 -18
  973. data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +0 -47
  974. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +0 -116
  975. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +0 -71
  976. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +0 -98
  977. data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +0 -297
  978. data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +0 -83
  979. data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +0 -87
  980. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +0 -234
  981. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +0 -26
  982. data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +0 -475
  983. data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +0 -61
  984. data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +0 -67
  985. data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +0 -124
  986. data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +0 -84
  987. data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +0 -114
  988. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +0 -68
  989. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +0 -142
  990. data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +0 -29
  991. data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +0 -42
  992. data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +0 -329
  993. data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +0 -79
  994. data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +0 -127
  995. data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +0 -64
  996. data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +0 -35
  997. data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +0 -23
  998. data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +0 -54
  999. data/lib/puppet/vendor/rgen/test/environment_test.rb +0 -90
  1000. data/lib/puppet/vendor/rgen/test/json_test.rb +0 -171
  1001. data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +0 -1482
  1002. data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +0 -57
  1003. data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +0 -131
  1004. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +0 -98
  1005. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +0 -70
  1006. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +0 -42
  1007. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +0 -44
  1008. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +0 -9
  1009. data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +0 -178
  1010. data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +0 -59
  1011. data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +0 -242
  1012. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +0 -163
  1013. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +0 -163
  1014. data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +0 -156
  1015. data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +0 -94
  1016. data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +0 -42
  1017. data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +0 -23
  1018. data/lib/puppet/vendor/rgen/test/model_builder_test.rb +0 -6
  1019. data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +0 -30
  1020. data/lib/puppet/vendor/rgen/test/output_handler_test.rb +0 -58
  1021. data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +0 -48
  1022. data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +0 -102
  1023. data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +0 -117
  1024. data/lib/puppet/vendor/rgen/test/rgen_test.rb +0 -26
  1025. data/lib/puppet/vendor/rgen/test/template_language_test.rb +0 -163
  1026. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +0 -29
  1027. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +0 -9
  1028. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +0 -4
  1029. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +0 -1
  1030. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +0 -1
  1031. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +0 -12
  1032. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +0 -5
  1033. data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +0 -11
  1034. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +0 -7
  1035. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +0 -5
  1036. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +0 -8
  1037. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +0 -8
  1038. data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +0 -7
  1039. data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +0 -12
  1040. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +0 -1
  1041. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +0 -3
  1042. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +0 -5
  1043. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +0 -3
  1044. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +0 -3
  1045. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +0 -24
  1046. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +0 -13
  1047. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +0 -10
  1048. data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +0 -17
  1049. data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +0 -31
  1050. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +0 -9
  1051. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +0 -3
  1052. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +0 -4
  1053. data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +0 -29
  1054. data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +0 -119
  1055. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
  1056. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +0 -1029
  1057. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +0 -317
  1058. data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +0 -101
  1059. data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +0 -22
  1060. data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +0 -67
  1061. data/lib/puppet/vendor/rgen/test/transformer_test.rb +0 -254
  1062. data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +0 -99
  1063. data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +0 -97
  1064. data/lib/puppet/vendor/rgen/test/util_test.rb +0 -5
  1065. data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +0 -160
  1066. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +0 -94
  1067. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +0 -53
  1068. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +0 -49
  1069. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +0 -75
  1070. data/lib/puppet/vendor/rgen_patch.rb +0 -132
  1071. data/lib/semver.rb +0 -146
  1072. data/man/man8/extlookup2hiera.8 +0 -10
  1073. data/man/man8/puppet-file.8 +0 -189
  1074. data/man/man8/puppet-generate.8 +0 -84
  1075. data/man/man8/puppet-lookup.8 +0 -87
  1076. data/man/man8/puppet-resource_type.8 +0 -188
  1077. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
  1078. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/lib/puppet/bindings/xyz/default.rb +0 -9
  1079. data/spec/fixtures/unit/data_providers/environments/sample/environment.conf +0 -2
  1080. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +0 -5
  1081. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +0 -9
  1082. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +0 -23
  1083. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +0 -5
  1084. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +0 -9
  1085. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet/bindings/dataprovider/default.rb +0 -54
  1086. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +0 -33
  1087. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +0 -33
  1088. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +0 -5
  1089. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
  1090. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -9
  1091. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -9
  1092. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -10
  1093. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -23
  1094. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/manifests/init.pp +0 -3
  1095. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/metadata.json +0 -9
  1096. data/spec/fixtures/unit/provider/package/yum/yum-check-update-plugin-output.txt +0 -36
  1097. data/spec/fixtures/unit/provider/service/base/ps_ef.mixed_encoding +0 -3
  1098. data/spec/unit/application/inspect_spec.rb +0 -316
  1099. data/spec/unit/data_providers/custom_data_provider_spec.rb +0 -50
  1100. data/spec/unit/face/file_spec.rb +0 -14
  1101. data/spec/unit/indirector/catalog/static_compiler_spec.rb +0 -255
  1102. data/spec/unit/indirector/resource_type/parser_spec.rb +0 -259
  1103. data/spec/unit/indirector/resource_type/rest_spec.rb +0 -14
  1104. data/spec/unit/pops/binder/binder_spec.rb +0 -43
  1105. data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -155
  1106. data/spec/unit/pops/binder/bindings_composer_spec.rb +0 -64
  1107. data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +0 -18
  1108. data/spec/unit/pops/binder/config/binder_config_spec.rb +0 -42
  1109. data/spec/unit/pops/binder/injector_spec.rb +0 -768
  1110. data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +0 -23
  1111. data/spec/unit/pops/serialization/rgen_spec.rb +0 -88
  1112. data/spec/unit/semver_spec.rb +0 -546
@@ -1,201 +0,0 @@
1
- module Puppet::Pops
2
- module Binder
3
- # A validator/checker of a bindings model
4
- # @api public
5
- #
6
- class BindingsChecker
7
- Bindings = Bindings
8
- Issues = BinderIssues
9
- Types = Types
10
-
11
- attr_reader :type_calculator
12
- attr_reader :acceptor
13
-
14
- # @api public
15
- def initialize(diagnostics_producer)
16
- @@check_visitor ||= Visitor.new(nil, "check", 0, 0)
17
- @type_calculator = Types::TypeCalculator.singleton
18
- @expression_validator = Validation::ValidatorFactory_4_0.new().checker(diagnostics_producer)
19
- @acceptor = diagnostics_producer
20
- end
21
-
22
- # Validates the entire model by visiting each model element and calling `check`.
23
- # The result is collected (or acted on immediately) by the configured diagnostic provider/acceptor
24
- # given when creating this Checker.
25
- #
26
- # @api public
27
- #
28
- def validate(b)
29
- check(b)
30
- b.eAllContents.each {|c| check(c) }
31
- end
32
-
33
- # Performs binding validity check
34
- # @api private
35
- def check(b)
36
- @@check_visitor.visit_this_0(self, b)
37
- end
38
-
39
- # Checks that a binding has a producer and a type
40
- # @api private
41
- def check_Binding(b)
42
- # Must have a type
43
- acceptor.accept(Issues::MISSING_TYPE, b) unless b.type.is_a?(Types::PAnyType)
44
-
45
- # Must have a producer
46
- acceptor.accept(Issues::MISSING_PRODUCER, b) unless b.producer.is_a?(Bindings::ProducerDescriptor)
47
- end
48
-
49
- # Checks that the producer is a Multibind producer and that the type is a PCollectionType
50
- # @api private
51
- def check_Multibinding(b)
52
- # id is optional (empty id blocks contributions)
53
-
54
- # A multibinding must have PCollectionType
55
- acceptor.accept(Issues::MULTIBIND_TYPE_ERROR, b, {:actual_type => b.type}) unless b.type.is_a?(Types::PCollectionType)
56
-
57
- # if the producer is nil, a suitable producer will be picked automatically
58
- unless b.producer.nil? || b.producer.is_a?(Bindings::MultibindProducerDescriptor)
59
- acceptor.accept(Issues::MULTIBIND_NOT_COLLECTION_PRODUCER, b, {:actual_producer => b.producer})
60
- end
61
- end
62
-
63
- # Checks that the bindings object contains at least one binding. Then checks each binding in turn
64
- # @api private
65
- def check_Bindings(b)
66
- acceptor.accept(Issues::MISSING_BINDINGS, b) unless has_entries?(b.bindings)
67
- end
68
-
69
- # Checks that a name has been associated with the bindings
70
- # @api private
71
- def check_NamedBindings(b)
72
- acceptor.accept(Issues::MISSING_BINDINGS_NAME, b) unless has_chars?(b.name)
73
- check_Bindings(b)
74
- end
75
-
76
- # Check layer has a name
77
- # @api private
78
- def check_NamedLayer(l)
79
- acceptor.accept(Issues::MISSING_LAYER_NAME, binding_parent(l)) unless has_chars?(l.name)
80
- end
81
-
82
- # Checks that the binding has layers and that each layer has a name and at least one binding
83
- # @api private
84
- def check_LayeredBindings(b)
85
- acceptor.accept(Issues::MISSING_LAYERS, b) unless has_entries?(b.layers)
86
- end
87
-
88
- # Checks that the non caching producer has a producer to delegate to
89
- # @api private
90
- def check_NonCachingProducerDescriptor(p)
91
- acceptor.accept(Issues::PRODUCER_MISSING_PRODUCER, p) unless p.producer.is_a?(Bindings::ProducerDescriptor)
92
- end
93
-
94
- # Checks that a constant value has been declared in the producer and that the type
95
- # of the value is compatible with the type declared in the binding
96
- # @api private
97
- def check_ConstantProducerDescriptor(p)
98
- # the product must be of compatible type
99
- # TODO: Likely to change when value becomes a typed Puppet Object
100
- b = binding_parent(p)
101
- if p.value.nil?
102
- acceptor.accept(Issues::MISSING_VALUE, p, {:binding => b})
103
- else
104
- infered = type_calculator.infer(p.value)
105
- unless type_calculator.assignable?(b.type, infered)
106
- acceptor.accept(Issues::INCOMPATIBLE_TYPE, p, {:binding => b, :expected_type => b.type, :actual_type => infered})
107
- end
108
- end
109
- end
110
-
111
- # Checks that an expression has been declared in the producer
112
- # @api private
113
- def check_EvaluatingProducerDescriptor(p)
114
- unless p.expression.is_a?(Model::Expression)
115
- acceptor.accept(Issues::MISSING_EXPRESSION, p, {:binding => binding_parent(p)})
116
- end
117
- end
118
-
119
- # Checks that a class name has been declared in the producer
120
- # @api private
121
- def check_InstanceProducerDescriptor(p)
122
- acceptor.accept(Issues::MISSING_CLASS_NAME, p, {:binding => binding_parent(p)}) unless has_chars?(p.class_name)
123
- end
124
-
125
- # Checks that a type and a name has been declared. The type must be assignable to the type
126
- # declared in the binding. The name can be an empty string to denote 'no name'
127
- # @api private
128
- def check_LookupProducerDescriptor(p)
129
- b = binding_parent(p)
130
- unless type_calculator.assignable(b.type, p.type)
131
- acceptor.accept(Issues::INCOMPATIBLE_TYPE, p, {:binding => b, :expected_type => b.type, :actual_type => p.type })
132
- end
133
- acceptor.accept(Issues::MISSING_NAME, p, {:binding => b}) if p.name.nil? # empty string is OK
134
- end
135
-
136
- # Checks that a key has been declared, then calls producer_LookupProducerDescriptor to perform
137
- # checks associated with the super class
138
- # @api private
139
- def check_HashLookupProducerDescriptor(p)
140
- acceptor.accept(Issues::MISSING_KEY, p, {:binding => binding_parent(p)}) unless has_chars?(p.key)
141
- check_LookupProducerDescriptor(p)
142
- end
143
-
144
- # Checks that the type declared in the binder is a PArrayType
145
- # @api private
146
- def check_ArrayMultibindProducerDescriptor(p)
147
- b = binding_parent(p)
148
- acceptor.accept(Issues::MULTIBIND_INCOMPATIBLE_TYPE, p, {:binding => b, :actual_type => b.type}) unless b.type.is_a?(Types::PArrayType)
149
- end
150
-
151
- # Checks that the type declared in the binder is a PHashType
152
- # @api private
153
- def check_HashMultibindProducerDescriptor(p)
154
- b = binding_parent(p)
155
- acceptor.accept(Issues::MULTIBIND_INCOMPATIBLE_TYPE, p, {:binding => b, :actual_type => b.type}) unless b.type.is_a?(Types::PHashType)
156
- end
157
-
158
- # Checks that the producer that this producer delegates to is declared
159
- # @api private
160
- def check_ProducerProducerDescriptor(p)
161
- unless p.producer.is_a?(Bindings::ProducerDescriptor)
162
- acceptor.accept(Issues::PRODUCER_MISSING_PRODUCER, p, {:binding => binding_parent(p)})
163
- end
164
- end
165
-
166
- # @api private
167
- def check_Expression(t)
168
- @expression_validator.validate(t)
169
- end
170
-
171
- # @api private
172
- def check_PAnyType(t)
173
- # Do nothing
174
- end
175
-
176
- # Returns true if the argument is a non empty string
177
- # @api private
178
- def has_chars?(s)
179
- s.is_a?(String) && !s.empty?
180
- end
181
-
182
- # @api private
183
- def has_entries?(s)
184
- !(s.nil? || s.empty?)
185
- end
186
-
187
- # @api private
188
- def binding_parent(p)
189
- begin
190
- x = p.eContainer
191
- if x.nil?
192
- acceptor.accept(Issues::MODEL_OBJECT_IS_UNBOUND, p)
193
- return nil
194
- end
195
- p = x
196
- end while !p.is_a?(Bindings::AbstractBinding)
197
- p
198
- end
199
- end
200
- end
201
- end
@@ -1,181 +0,0 @@
1
- module Puppet::Pops
2
- module Binder
3
- # The BindingsComposer handles composition of multiple bindings sources
4
- # It is directed by a {Config::BinderConfig BinderConfig} that indicates how
5
- # the final composition should be layered, and what should be included/excluded in each layer
6
- #
7
- # The bindings composer is intended to be used once per environment as the compiler starts its work.
8
- #
9
- # TODO: Possibly support envdir: scheme / relative to environment root (== same as confdir if there is only one environment).
10
- # This is probably easier to do after ENC changes described in ARM-8 have been implemented.
11
- # TODO: If same config is loaded in a higher layer, skip it in the lower (since it is meaningless to load it again with lower
12
- # precedence. (Optimization, or possibly an error, should produce a warning).
13
- #
14
- require 'puppet/plugins/binding_schemes'
15
-
16
- class BindingsComposer
17
-
18
- # The BindingsConfig instance holding the read and parsed, but not evaluated configuration
19
- # @api public
20
- #
21
- attr_reader :config
22
-
23
- # map of scheme name to handler
24
- # @api private
25
- attr_reader :scheme_handlers
26
-
27
- # @return [Hash{String => Puppet::Module}] map of module name to module instance
28
- # @api private
29
- attr_reader :name_to_module
30
-
31
- # @api private
32
- attr_reader :confdir
33
-
34
- # @api private
35
- attr_reader :diagnostics
36
-
37
- # Container of all warnings and errors produced while initializing and loading bindings
38
- #
39
- # @api public
40
- attr_reader :acceptor
41
-
42
- # @api public
43
- def initialize()
44
- @acceptor = Validation::Acceptor.new()
45
- @diagnostics = Config::DiagnosticProducer.new(acceptor)
46
- @config = Config::BinderConfig.new(@diagnostics)
47
- if acceptor.errors?
48
- IssueReporter.assert_and_report(acceptor, :message => 'Binding Composer: error while reading config.')
49
- raise Puppet::DevError.new("Internal Error: IssueReporter did not raise exception for errors in bindings config.")
50
- end
51
- end
52
-
53
- # Configures and creates the boot injector.
54
- # The read config may optionally contain mapping of bindings scheme handler name to handler class, and
55
- # mapping of biera2 backend symbolic name to backend class.
56
- # If present, these are turned into bindings in the category 'extension' (which is only used in the boot injector) which
57
- # has higher precedence than 'default'. This is done to allow users to override the default bindings for
58
- # schemes and backends.
59
- # @param scope [Puppet::Parser:Scope] the scope (used to find compiler and injector for the environment)
60
- # @api private
61
- #
62
- def configure_and_create_injector(scope)
63
- # create the injector (which will pick up the bindings registered above)
64
- @scheme_handlers = SchemeHandlerHelper.new(scope)
65
-
66
- # get extensions from the config
67
- # ------------------------------
68
- scheme_extensions = @config.scheme_extensions
69
-
70
- # Define a named bindings that are known by the SystemBindings
71
- boot_bindings = BindingsFactory.named_bindings(SystemBindings::ENVIRONMENT_BOOT_BINDINGS_NAME) do
72
- scheme_extensions.each_pair do |scheme, class_name|
73
- # turn each scheme => class_name into a binding (contribute to the buildings-schemes multibind).
74
- # do this in category 'extensions' to allow them to override the 'default'
75
- bind do
76
- name(scheme)
77
- instance_of(Puppet::Plugins::BindingSchemes::BINDINGS_SCHEMES_TYPE)
78
- in_multibind(Puppet::Plugins::BindingSchemes::BINDINGS_SCHEMES_KEY)
79
- to_instance(class_name)
80
- end
81
- end
82
- end
83
-
84
- @injector = scope.compiler.create_boot_injector(boot_bindings.model)
85
- end
86
-
87
- # @return [Bindings::LayeredBindings]
88
- def compose(scope)
89
- # The boot injector is used to lookup scheme-handlers
90
- configure_and_create_injector(scope)
91
-
92
- # get all existing modules and their root path
93
- @name_to_module = {}
94
- scope.environment.modules.each {|mod| name_to_module[mod.name] = mod }
95
-
96
- # setup the confdir
97
- @confdir = Puppet.settings[:confdir]
98
-
99
- factory = BindingsFactory
100
- contributions = []
101
- configured_layers = @config.layering_config.collect do | layer_config |
102
- # get contributions
103
- contribs = configure_layer(layer_config, scope, diagnostics)
104
- # collect the contributions separately for later checking of category precedence
105
- contributions.concat(contribs)
106
- # create a named layer with all the bindings for this layer
107
- factory.named_layer(layer_config['name'], *contribs.collect {|c| c.bindings }.flatten)
108
- end
109
-
110
- # Add the two system layers; the final - highest ("can not be overridden" layer), and the lowest
111
- # Everything here can be overridden 'default' layer.
112
- #
113
- configured_layers.insert(0, SystemBindings.final_contribution)
114
- configured_layers.insert(-1, SystemBindings.default_contribution)
115
-
116
- # and finally... create the resulting structure
117
- factory.layered_bindings(*configured_layers)
118
- end
119
-
120
- private
121
-
122
- def configure_layer(layer_description, scope, diagnostics)
123
- name = layer_description['name']
124
-
125
- # compute effective set of uris to load (and get rid of any duplicates in the process
126
- included_uris = array_of_uris(layer_description['include'])
127
- excluded_uris = array_of_uris(layer_description['exclude'])
128
- effective_uris = Set.new(expand_included_uris(included_uris)).subtract(Set.new(expand_excluded_uris(excluded_uris)))
129
-
130
- # Each URI should result in a ContributedBindings
131
- effective_uris.collect { |uri| scheme_handlers[uri.scheme].contributed_bindings(uri, scope, self) }
132
- end
133
-
134
- def array_of_uris(descriptions)
135
- return [] unless descriptions
136
- descriptions = [descriptions] unless descriptions.is_a?(Array)
137
- descriptions.collect {|d| URI.parse(d) }
138
- end
139
-
140
- def expand_included_uris(uris)
141
- result = []
142
- uris.each do |uri|
143
- unless handler = scheme_handlers[uri.scheme]
144
- raise ArgumentError, "Unknown bindings provider scheme: '#{uri.scheme}'"
145
- end
146
- result.concat(handler.expand_included(uri, self))
147
- end
148
- result
149
- end
150
-
151
- def expand_excluded_uris(uris)
152
- result = []
153
- uris.each do |uri|
154
- unless handler = scheme_handlers[uri.scheme]
155
- raise ArgumentError, "Unknown bindings provider scheme: '#{uri.scheme}'"
156
- end
157
- result.concat(handler.expand_excluded(uri, self))
158
- end
159
- result
160
- end
161
-
162
- class SchemeHandlerHelper
163
- T = Types::TypeFactory
164
- HASH_OF_HANDLER = T.hash_of(T.type_of(Puppet::Plugins::BindingSchemes::BINDINGS_SCHEMES_TYPE))
165
- def initialize(scope)
166
- @scope = scope
167
- @cache = nil
168
- end
169
- def [] (scheme)
170
- load_schemes unless @cache
171
- @cache[scheme]
172
- end
173
-
174
- def load_schemes
175
- @cache = @scope.compiler.boot_injector.lookup(@scope, HASH_OF_HANDLER, Puppet::Plugins::BindingSchemes::BINDINGS_SCHEMES_KEY) || {}
176
- end
177
- end
178
-
179
- end
180
- end
181
- end
@@ -1,813 +0,0 @@
1
- module Puppet::Pops
2
- module Binder
3
- # A helper class that makes it easier to construct a Bindings model.
4
- #
5
- # The Bindings Model
6
- # ------------------
7
- # The BindingsModel (defined in {Bindings} is a model that is intended to be generally free from Ruby concerns.
8
- # This means that it is possible for system integrators to create and serialize such models using other technologies than
9
- # Ruby. This manifests itself in the model in that producers are described using instances of a `ProducerDescriptor` rather than
10
- # describing Ruby classes directly. This is also true of the type system where type is expressed using the {Types} model
11
- # to describe all types.
12
- #
13
- # This class, the `BindingsFactory` is a concrete Ruby API for constructing instances of classes in the model.
14
- #
15
- # Named Bindings
16
- # --------------
17
- # The typical usage of the factory is to call {named_bindings} which creates a container of bindings wrapped in a *build object*
18
- # equipped with convenience methods to define the details of the just created named bindings.
19
- # The returned builder is an instance of {BindingsFactory::BindingsContainerBuilder BindingsContainerBuilder}.
20
- #
21
- # Binding
22
- # -------
23
- # A Binding binds a type/name key to a producer of a value. A binding is conveniently created by calling `bind` on a
24
- # `BindingsContainerBuilder`. The call to bind, produces a binding wrapped in a build object equipped with convenience methods
25
- # to define the details of the just created binding. The returned builder is an instance of
26
- # {BindingsFactory::BindingsBuilder BindingsBuilder}.
27
- #
28
- # Multibinding
29
- # ------------
30
- # A multibinding works like a binding, but it requires an additional ID. It also places constraints on the type of the binding;
31
- # it must be a collection type (Hash or Array).
32
- #
33
- # Constructing and Contributing Bindings from Ruby
34
- # ------------------------------------------------
35
- # The bindings system is used by referencing bindings symbolically; these are then specified in a Ruby file which is autoloaded
36
- # by Puppet. The entry point for user code that creates bindings is described in {Puppet::Bindings Bindings}.
37
- # That class makes use of a BindingsFactory, and the builder objects to make it easy to construct bindings.
38
- #
39
- # It is intended that a user defining bindings in Ruby should be able to use the builder object methods for the majority of tasks.
40
- # If something advanced is wanted, use of one of the helper class methods on the BuildingsFactory, and/or the
41
- # {Types::TypeCalculator TypeCalculator} will be required to create and configure objects that are not handled by
42
- # the methods in the builder objects.
43
- #
44
- # Chaining of calls
45
- # ------------------
46
- # Since all the build methods return the build object it is easy to stack on additional calls. The intention is to
47
- # do this in an order that is readable from left to right: `bind.string.name('thename').to(42)`, but there is nothing preventing
48
- # making the calls in some other order e.g. `bind.to(42).name('thename').string`, the second is quite unreadable but produces
49
- # the same result.
50
- #
51
- # For sake of human readability, the method `name` is alsp available as `named`, with the intention that it is used after a type,
52
- # e.g. `bind.integer.named('the meaning of life').to(42)`
53
- #
54
- # Methods taking blocks
55
- # ----------------------
56
- # Several methods take an optional block. The block evaluates with the builder object as `self`. This means that there is no
57
- # need to chain the methods calls, they can instead be made in sequence - e.g.
58
- #
59
- # bind do
60
- # integer
61
- # named 'the meaning of life'
62
- # to 42
63
- # end
64
- #
65
- # or mix the two styles
66
- #
67
- # bind do
68
- # integer.named 'the meaning of life'
69
- # to 42
70
- # end
71
- #
72
- # Unwrapping the result
73
- # ---------------------
74
- # The result from all methods is a builder object. Call the method `model` to unwrap the constructed bindings model object.
75
- #
76
- # bindings = BindingsFactory.named_bindings('my named bindings') do
77
- # # bind things
78
- # end.model
79
- #
80
- # @example Create a NamedBinding with content
81
- # result = BindingsFactory.named_bindings("mymodule::mybindings") do
82
- # bind.name("foo").to(42)
83
- # bind.string.name("site url").to("http://www.example.com")
84
- # end
85
- # result.model()
86
- #
87
- # @api public
88
- #
89
- module BindingsFactory
90
-
91
- # Alias for the {Types::TypeFactory TypeFactory}. This is also available as the method
92
- # `type_factory`.
93
- #
94
- T = Types::TypeFactory
95
-
96
- # Abstract base class for bindings object builders.
97
- # Supports delegation of method calls to the BindingsFactory class methods for all methods not implemented
98
- # by a concrete builder.
99
- #
100
- # @abstract
101
- #
102
- class AbstractBuilder
103
- # The built model object.
104
- attr_reader :model
105
-
106
- # @param binding [Bindings::AbstractBinding] The binding to build.
107
- # @api public
108
- def initialize(binding)
109
- @model = binding
110
- end
111
-
112
- # Provides convenient access to the Bindings Factory class methods. The intent is to provide access to the
113
- # methods that return producers for the purpose of composing more elaborate things than the builder convenience
114
- # methods support directly.
115
- # @api private
116
- #
117
- def method_missing(meth, *args, &block)
118
- factory = BindingsFactory
119
- if factory.respond_to?(meth)
120
- factory.send(meth, *args, &block)
121
- else
122
- super
123
- end
124
- end
125
- end
126
-
127
- # A bindings builder for an AbstractBinding containing other AbstractBinding instances.
128
- # @api public
129
- class BindingsContainerBuilder < AbstractBuilder
130
-
131
- # Adds an empty binding to the container, and returns a builder for it for further detailing.
132
- # An optional block may be given which is evaluated using `instance_eval`.
133
- # @return [BindingsBuilder] the builder for the created binding
134
- # @api public
135
- #
136
- def bind(&block)
137
- binding = Bindings::Binding.new()
138
- model.addBindings(binding)
139
- builder = BindingsBuilder.new(binding)
140
- builder.instance_eval(&block) if block_given?
141
- builder
142
- end
143
-
144
- # Binds a multibind with the given identity where later, the looked up result contains all
145
- # contributions to this key. An optional block may be given which is evaluated using `instance_eval`.
146
- # @param id [String] the multibind's id used when adding contributions
147
- # @return [MultibindingsBuilder] the builder for the created multibinding
148
- # @api public
149
- #
150
- def multibind(id, &block)
151
- binding = Bindings::Multibinding.new()
152
- binding.id = id
153
- model.addBindings(binding)
154
- builder = MultibindingsBuilder.new(binding)
155
- builder.instance_eval(&block) if block_given?
156
- builder
157
- end
158
- end
159
-
160
- # Builds a Binding via convenience methods.
161
- #
162
- # @api public
163
- #
164
- class BindingsBuilder < AbstractBuilder
165
-
166
- # @param binding [Bindings::AbstractBinding] the binding to build.
167
- # @api public
168
- def initialize(binding)
169
- super binding
170
- data()
171
- end
172
-
173
- # Sets the name of the binding.
174
- # @param name [String] the name to bind.
175
- # @api public
176
- def name(name)
177
- model.name = name
178
- self
179
- end
180
-
181
- # Same as {#name}, but reads better in certain combinations.
182
- # @api public
183
- alias_method :named, :name
184
-
185
- # Sets the binding to be abstract (it must be overridden)
186
- # @api public
187
- def abstract
188
- model.abstract = true
189
- self
190
- end
191
-
192
- # Sets the binding to be override (it must override something)
193
- # @api public
194
- def override
195
- model.override = true
196
- self
197
- end
198
-
199
- # Sets the binding to be final (it may not be overridden)
200
- # @api public
201
- def final
202
- model.final = true
203
- self
204
- end
205
-
206
- # Makes the binding a multibind contribution to the given multibind id
207
- # @param id [String] the multibind id to contribute this binding to
208
- # @api public
209
- def in_multibind(id)
210
- model.multibind_id = id
211
- self
212
- end
213
-
214
- # Sets the type of the binding to the given type.
215
- # @note
216
- # This is only needed if something other than the default type `Data` is wanted, or if the wanted type is
217
- # not provided by one of the convenience methods {#array_of_data}, {#boolean}, {#float}, {#hash_of_data},
218
- # {#integer}, {#scalar}, {#pattern}, {#string}, or one of the collection methods {#array_of}, or {#hash_of}.
219
- #
220
- # To create a type, use the method {#type_factory}, to obtain the type.
221
- # @example creating a Hash with Integer key and Array[Integer] element type
222
- # tc = type_factory
223
- # type(tc.hash(tc.array_of(tc.integer), tc.integer)
224
- # @param type [Types::PAnyType] the type to set for the binding
225
- # @api public
226
- #
227
- def type(type)
228
- model.type = type
229
- self
230
- end
231
-
232
- # Sets the type of the binding to Integer.
233
- # @return [Types::PIntegerType] the type
234
- # @api public
235
- def integer()
236
- type(T.integer())
237
- end
238
-
239
- # Sets the type of the binding to Float.
240
- # @return [Types::PFloatType] the type
241
- # @api public
242
- def float()
243
- type(T.float())
244
- end
245
-
246
- # Sets the type of the binding to Boolean.
247
- # @return [Types::PBooleanType] the type
248
- # @api public
249
- def boolean()
250
- type(T.boolean())
251
- end
252
-
253
- # Sets the type of the binding to String.
254
- # @return [Types::PStringType] the type
255
- # @api public
256
- def string()
257
- type(T.string())
258
- end
259
-
260
- # Sets the type of the binding to Pattern.
261
- # @return [Types::PRegexpType] the type
262
- # @api public
263
- def pattern()
264
- type(T.pattern())
265
- end
266
-
267
- # Sets the type of the binding to the abstract type Scalar.
268
- # @return [Types::PScalarType] the type
269
- # @api public
270
- def scalar()
271
- type(T.scalar())
272
- end
273
-
274
- # Sets the type of the binding to the abstract type Data.
275
- # @return [Types::PDataType] the type
276
- # @api public
277
- def data()
278
- type(T.data())
279
- end
280
-
281
- # Sets the type of the binding to Array[Data].
282
- # @return [Types::PArrayType] the type
283
- # @api public
284
- def array_of_data()
285
- type(T.array_of_data())
286
- end
287
-
288
- # Sets the type of the binding to Array[T], where T is given.
289
- # @param t [Types::PAnyType] the type of the elements of the array
290
- # @return [Types::PArrayType] the type
291
- # @api public
292
- def array_of(t)
293
- type(T.array_of(t))
294
- end
295
-
296
- # Sets the type of the binding to Hash[Literal, Data].
297
- # @return [Types::PHashType] the type
298
- # @api public
299
- def hash_of_data()
300
- type(T.hash_of_data())
301
- end
302
-
303
- # Sets type of the binding to `Hash[Literal, t]`.
304
- # To also limit the key type, use {#type} and give it a fully specified
305
- # hash using {#type_factory} and then `hash_of(value_type, key_type)`.
306
- # @return [Types::PHashType] the type
307
- # @api public
308
- def hash_of(t)
309
- type(T.hash_of(t))
310
- end
311
-
312
- # Sets the type of the binding based on the given argument.
313
- # @overload instance_of(t)
314
- # The same as calling {#type} with `t`.
315
- # @param t [Types::PAnyType] the type
316
- # @overload instance_of(o)
317
- # Infers the type from the given Ruby object and sets that as the type - i.e. "set the type
318
- # of the binding to be that of the given data object".
319
- # @param o [Object] the object to infer the type from
320
- # @overload instance_of(c)
321
- # @param c [Class] the Class to base the type on.
322
- # Sets the type based on the given ruby class. The result is one of the specific puppet types
323
- # if the class can be represented by a specific type, or the open ended PRuntimeType otherwise.
324
- # @overload instance_of(s)
325
- # The same as using a class, but instead of giving a class instance, the class is expressed using its fully
326
- # qualified name. This method of specifying the type allows late binding (the class does not have to be loaded
327
- # before it can be used in a binding).
328
- # @param s [String] the fully qualified classname to base the type on.
329
- # @return the resulting type
330
- # @api public
331
- #
332
- def instance_of(t)
333
- type(T.type_of(t))
334
- end
335
-
336
- # Provides convenient access to the type factory.
337
- # This is intended to be used when methods taking a type as argument i.e. {#type}, {#array_of}, {#hash_of}, and {#instance_of}.
338
- # @note
339
- # The type factory is also available via the constant {T}.
340
- # @api public
341
- def type_factory
342
- Types::TypeFactory
343
- end
344
-
345
- # Sets the binding's producer to a singleton producer, if given argument is a value, a literal producer is created for it.
346
- # To create a producer producing an instance of a class with lazy loading of the class, use {#to_instance}.
347
- #
348
- # @overload to(a_literal)
349
- # Sets a constant producer in the binding.
350
- # @overload to(a_class, *args)
351
- # Sets an Instantiating producer (producing an instance of the given class)
352
- # @overload to(a_producer_descriptor)
353
- # Sets the producer from the given producer descriptor
354
- # @return [BindingsBuilder] self
355
- # @api public
356
- #
357
- def to(producer, *args)
358
- case producer
359
- when Class
360
- producer = BindingsFactory.instance_producer(producer.name, *args)
361
- when Model::Program
362
- # program is not an expression
363
- producer = BindingsFactory.evaluating_producer(producer.body)
364
- when Model::Expression
365
- producer = BindingsFactory.evaluating_producer(producer)
366
- when Bindings::ProducerDescriptor
367
- else
368
- # If given producer is not a producer, create a literal producer
369
- producer = BindingsFactory.literal_producer(producer)
370
- end
371
- model.producer = producer
372
- self
373
- end
374
-
375
- # Sets the binding's producer to a producer of an instance of given class (a String class name, or a Class instance).
376
- # Use a string class name when lazy loading of the class is wanted.
377
- #
378
- # @overload to_instance(class_name, *args)
379
- # @param class_name [String] the name of the class to instantiate
380
- # @param args [Object] optional arguments to the constructor
381
- # @overload to_instance(a_class)
382
- # @param a_class [Class] the class to instantiate
383
- # @param args [Object] optional arguments to the constructor
384
- #
385
- def to_instance(type, *args)
386
- class_name = case type
387
- when Class
388
- type.name
389
- when String
390
- type
391
- else
392
- raise ArgumentError, "to_instance accepts String (a class name), or a Class.*args got: #{type.class}."
393
- end
394
-
395
- # Help by setting the type - since if an to_instance is bound, the type is know. This avoids having
396
- # to specify the same thing twice.
397
- self.instance_of(type)
398
- model.producer = BindingsFactory.instance_producer(class_name, *args)
399
- end
400
-
401
- # Sets the binding's producer to a singleton producer
402
- # @overload to_producer(a_producer)
403
- # Sets the producer to an instantiated producer. The resulting model can not be serialized as a consequence as there
404
- # is no meta-model describing the specialized producer. Use this only in exceptional cases, or where there is never the
405
- # need to serialize the model.
406
- # @param a_producer [Producers::Producer] an instantiated producer, not serializeable !
407
- #
408
- # @overload to_producer(a_class, *args)
409
- # @param a_class [Class] the class to create an instance of
410
- # @param args [Object] the arguments to the given class' new
411
- #
412
- # @overload to_producer(a_producer_descriptor)
413
- # @param a_producer_descriptor [Bindings::ProducerDescriptor] a descriptor
414
- # producing Producers::Producer
415
- #
416
- # @api public
417
- #
418
- def to_producer(producer, *args)
419
- case producer
420
- when Class
421
- producer = BindingsFactory.instance_producer(producer.name, *args)
422
- when Bindings::ProducerDescriptor
423
- when Producers::Producer
424
- # a custom producer instance
425
- producer = BindingsFactory.literal_producer(producer)
426
- else
427
- raise ArgumentError, "Given producer argument is none of a producer descriptor, a class, or a producer"
428
- end
429
- metaproducer = BindingsFactory.producer_producer(producer)
430
- model.producer = metaproducer
431
- self
432
- end
433
-
434
- # Sets the binding's producer to a series of producers.
435
- # Use this when you want to produce a different producer on each request for a producer
436
- #
437
- # @overload to_producer(a_producer)
438
- # Sets the producer to an instantiated producer. The resulting model can not be serialized as a consequence as there
439
- # is no meta-model describing the specialized producer. Use this only in exceptional cases, or where there is never the
440
- # need to serialize the model.
441
- # @param a_producer [Producers::Producer] an instantiated producer, not serializeable !
442
- #
443
- # @overload to_producer(a_class, *args)
444
- # @param a_class [Class] the class to create an instance of
445
- # @param args [Object] the arguments to the given class' new
446
- #
447
- # @overload to_producer(a_producer_descriptor)
448
- # @param a_producer_descriptor [Bindings::ProducerDescriptor] a descriptor
449
- # producing Producers::Producer
450
- #
451
- # @api public
452
- #
453
- def to_producer_series(producer, *args)
454
- case producer
455
- when Class
456
- producer = BindingsFactory.instance_producer(producer.name, *args)
457
- when Bindings::ProducerDescriptor
458
- when Producers::Producer
459
- # a custom producer instance
460
- producer = BindingsFactory.literal_producer(producer)
461
- else
462
- raise ArgumentError, "Given producer argument is none of a producer descriptor, a class, or a producer"
463
- end
464
- non_caching = Bindings::NonCachingProducerDescriptor.new()
465
- non_caching.producer = producer
466
- metaproducer = BindingsFactory.producer_producer(non_caching)
467
-
468
- non_caching = Bindings::NonCachingProducerDescriptor.new()
469
- non_caching.producer = metaproducer
470
-
471
- model.producer = non_caching
472
- self
473
- end
474
-
475
- # Sets the binding's producer to a "non singleton" producer (each call to produce produces a new instance/copy).
476
- # @overload to_series_of(a_literal)
477
- # a constant producer
478
- # @overload to_series_of(a_class, *args)
479
- # Instantiating producer
480
- # @overload to_series_of(a_producer_descriptor)
481
- # a given producer
482
- #
483
- # @api public
484
- #
485
- def to_series_of(producer, *args)
486
- case producer
487
- when Class
488
- producer = BindingsFactory.instance_producer(producer.name, *args)
489
- when Bindings::ProducerDescriptor
490
- else
491
- # If given producer is not a producer, create a literal producer
492
- producer = BindingsFactory.literal_producer(producer)
493
- end
494
- non_caching = Bindings::NonCachingProducerDescriptor.new()
495
- non_caching.producer = producer
496
- model.producer = non_caching
497
- self
498
- end
499
-
500
- # Sets the binding's producer to one that performs a lookup of another key
501
- # @overload to_lookup_of(type, name)
502
- # @overload to_lookup_of(name)
503
- # @api public
504
- #
505
- def to_lookup_of(type, name=nil)
506
- unless name
507
- name = type
508
- type = Types::TypeFactory.data()
509
- end
510
- model.producer = BindingsFactory.lookup_producer(type, name)
511
- self
512
- end
513
-
514
- # Sets the binding's producer to a one that performs a lookup of another key and they applies hash lookup on
515
- # the result.
516
- #
517
- # @overload to_lookup_of(type, name)
518
- # @overload to_lookup_of(name)
519
- # @api public
520
- #
521
- def to_hash_lookup_of(type, name, key)
522
- model.producer = BindingsFactory.hash_lookup_producer(type, name, key)
523
- self
524
- end
525
-
526
- # Sets the binding's producer to one that produces the first found lookup of another key
527
- # @param list_of_lookups [Array] array of arrays [type name], or just name (implies data)
528
- # @example
529
- # binder.bind().name('foo').to_first_found('fee', 'fum', 'extended-bar')
530
- # binder.bind().name('foo').to_first_found(
531
- # [T.ruby(ThisClass), 'fee'],
532
- # [T.ruby(ThatClass), 'fum'],
533
- # 'extended-bar')
534
- # @api public
535
- #
536
- def to_first_found(*list_of_lookups)
537
- producers = list_of_lookups.collect do |entry|
538
- if entry.is_a?(Array)
539
- case entry.size
540
- when 2
541
- BindingsFactory.lookup_producer(entry[0], entry[1])
542
- when 1
543
- BindingsFactory.lookup_producer(Types::TypeFactory.data(), entry[0])
544
- else
545
- raise ArgumentError, "Not an array of [type, name], name, or [name]"
546
- end
547
- else
548
- BindingsFactory.lookup_producer(T.data(), entry)
549
- end
550
- end
551
- model.producer = BindingsFactory.first_found_producer(*producers)
552
- self
553
- end
554
-
555
- # Sets options to the producer.
556
- # See the respective producer for the options it supports. All producers supports the option `:transformer`, a
557
- # puppet or ruby lambda that is evaluated with the produced result as an argument. The ruby lambda gets scope and
558
- # value as arguments.
559
- # @note
560
- # A Ruby lambda is not cross platform safe. Use a puppet lambda if you want a bindings model that is.
561
- #
562
- # @api public
563
- def producer_options(options)
564
- options.each do |k, v|
565
- arg = Bindings::NamedArgument.new()
566
- arg.name = k.to_s
567
- arg.value = v
568
- model.addProducer_args(arg)
569
- end
570
- self
571
- end
572
- end
573
-
574
- # A builder specialized for multibind - checks that type is Array or Hash based. A new builder sets the
575
- # multibinding to be of type Hash[Data].
576
- #
577
- # @api public
578
- class MultibindingsBuilder < BindingsBuilder
579
- # Constraints type to be one of {Types::PArrayType PArrayType}, or {Types::PHashType PHashType}.
580
- # @raise [ArgumentError] if type constraint is not met.
581
- # @api public
582
- def type(type)
583
- unless type.class == Types::PArrayType || type.class == Types::PHashType
584
- raise ArgumentError, "Wrong type; only PArrayType, or PHashType allowed, got '#{type.to_s}'"
585
- end
586
- model.type = type
587
- self
588
- end
589
-
590
- # Overrides the default implementation that will raise an exception as a multibind requires a hash type.
591
- # Thus, if nothing else is requested, a multibind will be configured as Hash[Data].
592
- #
593
- def data()
594
- hash_of_data()
595
- end
596
- end
597
-
598
- # Produces a ContributedBindings.
599
- # A ContributedBindings is used by bindings providers to return a set of named bindings.
600
- #
601
- # @param name [String] the name of the contributed bindings (for human use in messages/logs only)
602
- # @param named_bindings [Bindings::NamedBindings, Array<Bindings::NamedBindings>] the
603
- # named bindings to include
604
- #
605
- def self.contributed_bindings(name, named_bindings)
606
- cb = Bindings::ContributedBindings.new()
607
- cb.name = name
608
- named_bindings = [named_bindings] unless named_bindings.is_a?(Array)
609
- named_bindings.each {|b| cb.addBindings(b) }
610
- cb
611
- end
612
-
613
- # Creates a named binding container, the top bindings model object.
614
- # A NamedBindings is typically produced by a bindings provider.
615
- #
616
- # The created container is wrapped in a BindingsContainerBuilder for further detailing.
617
- # Unwrap the built result when done.
618
- # @api public
619
- #
620
- def self.named_bindings(name, &block)
621
- binding = Bindings::NamedBindings.new()
622
- binding.name = name
623
- builder = BindingsContainerBuilder.new(binding)
624
- builder.instance_eval(&block) if block_given?
625
- builder
626
- end
627
-
628
- # This variant of {named_bindings} evaluates the given block as a method on an anonymous class,
629
- # thus, if the block defines methods or do something with the class itself, this does not pollute
630
- # the base class (BindingsContainerBuilder).
631
- # @api private
632
- #
633
- def self.safe_named_bindings(name, scope, &block)
634
- binding = Bindings::NamedBindings.new()
635
- binding.name = name
636
- anon = Class.new(BindingsContainerBuilder) do
637
- def initialize(b)
638
- super b
639
- end
640
- end
641
- anon.send(:define_method, :_produce, block)
642
- builder = anon.new(binding)
643
- case block.arity
644
- when 0
645
- builder._produce()
646
- when 1
647
- builder._produce(scope)
648
- end
649
- builder
650
- end
651
-
652
- # Creates a literal/constant producer
653
- # @param value [Object] the value to produce
654
- # @return [Bindings::ProducerDescriptor] a producer description
655
- # @api public
656
- #
657
- def self.literal_producer(value)
658
- producer = Bindings::ConstantProducerDescriptor.new()
659
- producer.value = value
660
- producer
661
- end
662
-
663
- # Creates a non caching producer
664
- # @param producer [Bindings::Producer] the producer to make non caching
665
- # @return [Bindings::ProducerDescriptor] a producer description
666
- # @api public
667
- #
668
- def self.non_caching_producer(producer)
669
- p = Bindings::NonCachingProducerDescriptor.new()
670
- p.producer = producer
671
- p
672
- end
673
-
674
- # Creates a producer producer
675
- # @param producer [Bindings::Producer] a producer producing a Producer.
676
- # @return [Bindings::ProducerDescriptor] a producer description
677
- # @api public
678
- #
679
- def self.producer_producer(producer)
680
- p = Bindings::ProducerProducerDescriptor.new()
681
- p.producer = producer
682
- p
683
- end
684
-
685
- # Creates an instance producer
686
- # An instance producer creates a new instance of a class.
687
- # If the class implements the class method `inject` this method is called instead of `new` to allow further lookups
688
- # to take place. This is referred to as *assisted inject*. If the class method `inject` is missing, the regular `new` method
689
- # is called.
690
- #
691
- # @param class_name [String] the name of the class
692
- # @param args[Object] arguments to the class' `new` method.
693
- # @return [Bindings::ProducerDescriptor] a producer description
694
- # @api public
695
- #
696
- def self.instance_producer(class_name, *args)
697
- p = Bindings::InstanceProducerDescriptor.new()
698
- p.class_name = class_name
699
- args.each {|a| p.addArguments(a) }
700
- p
701
- end
702
-
703
- # Creates a Producer that looks up a value.
704
- # @param type [Types::PAnyType] the type to lookup
705
- # @param name [String] the name to lookup
706
- # @return [Bindings::ProducerDescriptor] a producer description
707
- # @api public
708
- def self.lookup_producer(type, name)
709
- p = Bindings::LookupProducerDescriptor.new()
710
- p.type = type
711
- p.name = name
712
- p
713
- end
714
-
715
- # Creates a Hash lookup producer that looks up a hash value, and then a key in the hash.
716
- #
717
- # @return [Bindings::ProducerDescriptor] a producer description
718
- # @param type [Types::PAnyType] the type to lookup (i.e. a Hash of some key/value type).
719
- # @param name [String] the name to lookup
720
- # @param key [Object] the key to lookup in the looked up hash (type should comply with given key type).
721
- # @api public
722
- #
723
- def self.hash_lookup_producer(type, name, key)
724
- p = Bindings::HashLookupProducerDescriptor.new()
725
- p.type = type
726
- p.name = name
727
- p.key = key
728
- p
729
- end
730
-
731
- # Creates a first-found producer that looks up from a given series of keys. The first found looked up
732
- # value will be produced.
733
- # @param producers [Array<Bindings::ProducerDescriptor>] the producers to consult in given order
734
- # @return [Bindings::ProducerDescriptor] a producer descriptor
735
- # @api public
736
- def self.first_found_producer(*producers)
737
- p = Bindings::FirstFoundProducerDescriptor.new()
738
- producers.each {|p2| p.addProducers(p2) }
739
- p
740
- end
741
-
742
- # Creates an evaluating producer that evaluates a puppet expression.
743
- # A puppet expression is most conveniently created by using the {Parser::EvaluatingParser EvaluatingParser} as it performs
744
- # all set up and validation of the parsed source. Two convenience methods are used to parse an expression, or parse a ruby string
745
- # as a puppet string. See methods {puppet_expression}, {puppet_string} and {parser} for more information.
746
- #
747
- # @example producing a puppet expression
748
- # expr = puppet_string("Interpolated $fqdn", __FILE__)
749
- #
750
- # @param expression [Model::Expression] a puppet DSL expression as producer by the eparser.
751
- # @return [Bindings::ProducerDescriptor] a producer descriptor
752
- # @api public
753
- #
754
- def self.evaluating_producer(expression)
755
- p = Bindings::EvaluatingProducerDescriptor.new()
756
- p.expression = expression
757
- p
758
- end
759
-
760
- # Creates a NamedLayer. This is used by the bindings system to create a model of the layers.
761
- #
762
- # @api public
763
- #
764
- def self.named_layer(name, *bindings)
765
- result = Bindings::NamedLayer.new()
766
- result.name = name
767
- bindings.each { |b| result.addBindings(b) }
768
- result
769
- end
770
-
771
- # Create a LayeredBindings. This is used by the bindings system to create a model of all given layers.
772
- # @param named_layers [Bindings::NamedLayer] one or more named layers
773
- # @return [Bindings::LayeredBindings] the constructed layered bindings.
774
- # @api public
775
- #
776
- def self.layered_bindings(*named_layers)
777
- result = Bindings::LayeredBindings.new()
778
- named_layers.each {|b| result.addLayers(b) }
779
- result
780
- end
781
-
782
- # @return [Parser::EvaluatingParser] a parser for puppet expressions
783
- def self.parser
784
- @parser ||= Parser::EvaluatingParser.new()
785
- end
786
-
787
- # Parses and produces a puppet expression from the given string.
788
- # @param string [String] puppet source e.g. "1 + 2"
789
- # @param source_file [String] the source location, typically `__File__`
790
- # @return [Model::Expression] an expression (that can be bound)
791
- # @api public
792
- #
793
- def self.puppet_expression(string, source_file)
794
- parser.parse_string(string, source_file).current
795
- end
796
-
797
- # Parses and produces a puppet string expression from the given string.
798
- # The string will automatically be quoted and special characters escaped.
799
- # As an example if given the (ruby) string "Hi\nMary" it is transformed to
800
- # the puppet string (illustrated with a ruby string) "\"Hi\\nMary\”" before being
801
- # parsed.
802
- #
803
- # @param string [String] puppet source e.g. "On node $!{fqdn}"
804
- # @param source_file [String] the source location, typically `__File__`
805
- # @return [Model::Expression] an expression (that can be bound)
806
- # @api public
807
- #
808
- def self.puppet_string(string, source_file)
809
- parser.parse_string(parser.quote(string), source_file).current
810
- end
811
- end
812
- end
813
- end