puppet 7.29.1-universal-darwin → 8.0.1-universal-darwin

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2267) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +5 -5
  3. data/Gemfile +8 -7
  4. data/Gemfile.lock +90 -85
  5. data/Rakefile +27 -0
  6. data/bin/puppet +1 -0
  7. data/examples/enc/regexp_nodes/regexp_nodes.rb +1 -1
  8. data/ext/build_defaults.yaml +1 -1
  9. data/ext/project_data.yaml +11 -12
  10. data/ext/windows/service/daemon.rb +1 -0
  11. data/install.rb +18 -18
  12. data/lib/hiera/puppet_function.rb +1 -0
  13. data/lib/hiera/scope.rb +6 -5
  14. data/lib/hiera_puppet.rb +2 -1
  15. data/lib/puppet/agent/disabler.rb +1 -0
  16. data/lib/puppet/agent/locker.rb +1 -0
  17. data/lib/puppet/agent.rb +1 -0
  18. data/lib/puppet/application/agent.rb +1 -0
  19. data/lib/puppet/application/apply.rb +1 -0
  20. data/lib/puppet/application/catalog.rb +1 -0
  21. data/lib/puppet/application/config.rb +1 -0
  22. data/lib/puppet/application/describe.rb +1 -0
  23. data/lib/puppet/application/device.rb +1 -0
  24. data/lib/puppet/application/doc.rb +2 -1
  25. data/lib/puppet/application/epp.rb +1 -0
  26. data/lib/puppet/application/face_base.rb +1 -0
  27. data/lib/puppet/application/facts.rb +1 -0
  28. data/lib/puppet/application/filebucket.rb +1 -0
  29. data/lib/puppet/application/generate.rb +1 -0
  30. data/lib/puppet/application/help.rb +1 -0
  31. data/lib/puppet/application/indirection_base.rb +1 -0
  32. data/lib/puppet/application/lookup.rb +2 -1
  33. data/lib/puppet/application/module.rb +1 -0
  34. data/lib/puppet/application/node.rb +1 -0
  35. data/lib/puppet/application/parser.rb +1 -0
  36. data/lib/puppet/application/plugin.rb +1 -0
  37. data/lib/puppet/application/report.rb +1 -0
  38. data/lib/puppet/application/resource.rb +1 -0
  39. data/lib/puppet/application/script.rb +1 -0
  40. data/lib/puppet/application/ssl.rb +8 -42
  41. data/lib/puppet/application.rb +2 -5
  42. data/lib/puppet/application_support.rb +1 -0
  43. data/lib/puppet/coercion.rb +1 -0
  44. data/lib/puppet/compilable_resource_type.rb +1 -0
  45. data/lib/puppet/concurrent/lock.rb +1 -0
  46. data/lib/puppet/concurrent/synchronized.rb +1 -0
  47. data/lib/puppet/concurrent.rb +1 -0
  48. data/lib/puppet/configurer/downloader.rb +1 -0
  49. data/lib/puppet/configurer/fact_handler.rb +1 -0
  50. data/lib/puppet/configurer/plugin_handler.rb +1 -0
  51. data/lib/puppet/configurer.rb +2 -1
  52. data/lib/puppet/confine/any.rb +1 -0
  53. data/lib/puppet/confine/boolean.rb +1 -0
  54. data/lib/puppet/confine/exists.rb +1 -0
  55. data/lib/puppet/confine/false.rb +1 -0
  56. data/lib/puppet/confine/feature.rb +1 -0
  57. data/lib/puppet/confine/true.rb +1 -0
  58. data/lib/puppet/confine/variable.rb +1 -0
  59. data/lib/puppet/confine.rb +1 -0
  60. data/lib/puppet/confine_collection.rb +1 -0
  61. data/lib/puppet/confiner.rb +2 -1
  62. data/lib/puppet/context/trusted_information.rb +7 -6
  63. data/lib/puppet/context.rb +1 -0
  64. data/lib/puppet/daemon.rb +1 -0
  65. data/lib/puppet/data_binding.rb +1 -0
  66. data/lib/puppet/datatypes/error.rb +1 -0
  67. data/lib/puppet/datatypes/impl/error.rb +1 -0
  68. data/lib/puppet/datatypes.rb +1 -0
  69. data/lib/puppet/defaults.rb +30 -18
  70. data/lib/puppet/environments.rb +1 -0
  71. data/lib/puppet/error.rb +1 -0
  72. data/lib/puppet/etc.rb +1 -0
  73. data/lib/puppet/external/dot.rb +1 -0
  74. data/lib/puppet/face/catalog/select.rb +1 -0
  75. data/lib/puppet/face/catalog.rb +1 -0
  76. data/lib/puppet/face/config.rb +2 -1
  77. data/lib/puppet/face/epp.rb +3 -2
  78. data/lib/puppet/face/facts.rb +1 -0
  79. data/lib/puppet/face/generate.rb +1 -0
  80. data/lib/puppet/face/help/action.erb +0 -1
  81. data/lib/puppet/face/help/face.erb +0 -1
  82. data/lib/puppet/face/help.rb +4 -3
  83. data/lib/puppet/face/module/changes.rb +1 -0
  84. data/lib/puppet/face/module/install.rb +1 -0
  85. data/lib/puppet/face/module/list.rb +3 -2
  86. data/lib/puppet/face/module/uninstall.rb +1 -0
  87. data/lib/puppet/face/module/upgrade.rb +1 -0
  88. data/lib/puppet/face/module.rb +1 -0
  89. data/lib/puppet/face/node/clean.rb +1 -0
  90. data/lib/puppet/face/node.rb +1 -0
  91. data/lib/puppet/face/parser.rb +2 -1
  92. data/lib/puppet/face/plugin.rb +1 -0
  93. data/lib/puppet/face/report.rb +1 -0
  94. data/lib/puppet/face/resource.rb +1 -0
  95. data/lib/puppet/face.rb +1 -0
  96. data/lib/puppet/feature/base.rb +1 -0
  97. data/lib/puppet/feature/bolt.rb +1 -0
  98. data/lib/puppet/feature/cfpropertylist.rb +1 -0
  99. data/lib/puppet/feature/eventlog.rb +1 -0
  100. data/lib/puppet/feature/hiera_eyaml.rb +1 -0
  101. data/lib/puppet/feature/hocon.rb +1 -0
  102. data/lib/puppet/feature/libuser.rb +1 -0
  103. data/lib/puppet/feature/msgpack.rb +1 -0
  104. data/lib/puppet/feature/pe_license.rb +1 -0
  105. data/lib/puppet/feature/pson.rb +5 -0
  106. data/lib/puppet/feature/selinux.rb +1 -0
  107. data/lib/puppet/feature/ssh.rb +1 -0
  108. data/lib/puppet/feature/telnet.rb +1 -0
  109. data/lib/puppet/feature/zlib.rb +1 -0
  110. data/lib/puppet/ffi/posix/constants.rb +1 -0
  111. data/lib/puppet/ffi/posix/functions.rb +1 -0
  112. data/lib/puppet/ffi/posix.rb +1 -0
  113. data/lib/puppet/ffi/windows/api_types.rb +2 -1
  114. data/lib/puppet/ffi/windows/constants.rb +1 -0
  115. data/lib/puppet/ffi/windows/functions.rb +1 -0
  116. data/lib/puppet/ffi/windows/structs.rb +1 -0
  117. data/lib/puppet/ffi/windows.rb +1 -0
  118. data/lib/puppet/file_bucket/dipper.rb +1 -0
  119. data/lib/puppet/file_bucket/file.rb +1 -0
  120. data/lib/puppet/file_bucket.rb +1 -0
  121. data/lib/puppet/file_serving/base.rb +1 -0
  122. data/lib/puppet/file_serving/configuration/parser.rb +1 -0
  123. data/lib/puppet/file_serving/configuration.rb +1 -0
  124. data/lib/puppet/file_serving/content.rb +1 -0
  125. data/lib/puppet/file_serving/fileset.rb +1 -0
  126. data/lib/puppet/file_serving/http_metadata.rb +1 -0
  127. data/lib/puppet/file_serving/metadata.rb +1 -0
  128. data/lib/puppet/file_serving/mount/file.rb +5 -4
  129. data/lib/puppet/file_serving/mount/locales.rb +1 -0
  130. data/lib/puppet/file_serving/mount/modules.rb +1 -0
  131. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -0
  132. data/lib/puppet/file_serving/mount/plugins.rb +1 -0
  133. data/lib/puppet/file_serving/mount/scripts.rb +1 -0
  134. data/lib/puppet/file_serving/mount/tasks.rb +1 -0
  135. data/lib/puppet/file_serving/mount.rb +1 -0
  136. data/lib/puppet/file_serving/terminus_helper.rb +1 -0
  137. data/lib/puppet/file_serving/terminus_selector.rb +1 -0
  138. data/lib/puppet/file_serving.rb +1 -0
  139. data/lib/puppet/file_system/file_impl.rb +2 -1
  140. data/lib/puppet/file_system/jruby.rb +1 -0
  141. data/lib/puppet/file_system/memory_file.rb +1 -0
  142. data/lib/puppet/file_system/memory_impl.rb +1 -0
  143. data/lib/puppet/file_system/path_pattern.rb +2 -1
  144. data/lib/puppet/file_system/posix.rb +4 -3
  145. data/lib/puppet/file_system/uniquefile.rb +2 -1
  146. data/lib/puppet/file_system/windows.rb +1 -0
  147. data/lib/puppet/file_system.rb +1 -0
  148. data/lib/puppet/forge/cache.rb +1 -0
  149. data/lib/puppet/forge/errors.rb +1 -0
  150. data/lib/puppet/forge/repository.rb +1 -0
  151. data/lib/puppet/forge.rb +2 -1
  152. data/lib/puppet/functions/abs.rb +1 -0
  153. data/lib/puppet/functions/alert.rb +1 -0
  154. data/lib/puppet/functions/all.rb +1 -0
  155. data/lib/puppet/functions/annotate.rb +1 -0
  156. data/lib/puppet/functions/any.rb +1 -0
  157. data/lib/puppet/functions/assert_type.rb +1 -0
  158. data/lib/puppet/functions/binary_file.rb +1 -0
  159. data/lib/puppet/functions/break.rb +1 -0
  160. data/lib/puppet/functions/call.rb +1 -0
  161. data/lib/puppet/functions/camelcase.rb +1 -0
  162. data/lib/puppet/functions/capitalize.rb +1 -0
  163. data/lib/puppet/functions/ceiling.rb +1 -0
  164. data/lib/puppet/functions/chomp.rb +1 -0
  165. data/lib/puppet/functions/chop.rb +1 -0
  166. data/lib/puppet/functions/compare.rb +1 -0
  167. data/lib/puppet/functions/contain.rb +1 -0
  168. data/lib/puppet/functions/convert_to.rb +1 -0
  169. data/lib/puppet/functions/crit.rb +1 -0
  170. data/lib/puppet/functions/debug.rb +1 -0
  171. data/lib/puppet/functions/defined.rb +1 -0
  172. data/lib/puppet/functions/dig.rb +1 -0
  173. data/lib/puppet/functions/downcase.rb +1 -0
  174. data/lib/puppet/functions/each.rb +1 -0
  175. data/lib/puppet/functions/emerg.rb +1 -0
  176. data/lib/puppet/functions/empty.rb +1 -0
  177. data/lib/puppet/functions/epp.rb +1 -0
  178. data/lib/puppet/functions/err.rb +1 -0
  179. data/lib/puppet/functions/eyaml_lookup_key.rb +1 -0
  180. data/lib/puppet/functions/filter.rb +1 -0
  181. data/lib/puppet/functions/find_file.rb +1 -0
  182. data/lib/puppet/functions/find_template.rb +1 -0
  183. data/lib/puppet/functions/flatten.rb +1 -0
  184. data/lib/puppet/functions/floor.rb +1 -0
  185. data/lib/puppet/functions/get.rb +1 -0
  186. data/lib/puppet/functions/getvar.rb +1 -0
  187. data/lib/puppet/functions/hiera.rb +1 -0
  188. data/lib/puppet/functions/hiera_array.rb +1 -0
  189. data/lib/puppet/functions/hiera_hash.rb +1 -0
  190. data/lib/puppet/functions/hiera_include.rb +1 -0
  191. data/lib/puppet/functions/hocon_data.rb +1 -0
  192. data/lib/puppet/functions/import.rb +1 -0
  193. data/lib/puppet/functions/include.rb +1 -0
  194. data/lib/puppet/functions/index.rb +1 -0
  195. data/lib/puppet/functions/info.rb +1 -0
  196. data/lib/puppet/functions/inline_epp.rb +1 -0
  197. data/lib/puppet/functions/join.rb +1 -0
  198. data/lib/puppet/functions/json_data.rb +1 -0
  199. data/lib/puppet/functions/keys.rb +1 -0
  200. data/lib/puppet/functions/length.rb +1 -0
  201. data/lib/puppet/functions/lest.rb +1 -0
  202. data/lib/puppet/functions/lookup.rb +1 -0
  203. data/lib/puppet/functions/lstrip.rb +1 -0
  204. data/lib/puppet/functions/map.rb +1 -0
  205. data/lib/puppet/functions/match.rb +1 -0
  206. data/lib/puppet/functions/max.rb +67 -0
  207. data/lib/puppet/functions/min.rb +67 -0
  208. data/lib/puppet/functions/module_directory.rb +1 -0
  209. data/lib/puppet/functions/new.rb +1 -0
  210. data/lib/puppet/functions/next.rb +1 -0
  211. data/lib/puppet/functions/notice.rb +1 -0
  212. data/lib/puppet/functions/reduce.rb +1 -0
  213. data/lib/puppet/functions/regsubst.rb +1 -0
  214. data/lib/puppet/functions/require.rb +1 -0
  215. data/lib/puppet/functions/return.rb +1 -0
  216. data/lib/puppet/functions/reverse_each.rb +1 -0
  217. data/lib/puppet/functions/round.rb +1 -0
  218. data/lib/puppet/functions/rstrip.rb +1 -0
  219. data/lib/puppet/functions/scanf.rb +1 -0
  220. data/lib/puppet/functions/size.rb +1 -0
  221. data/lib/puppet/functions/slice.rb +1 -0
  222. data/lib/puppet/functions/sort.rb +1 -0
  223. data/lib/puppet/functions/split.rb +2 -28
  224. data/lib/puppet/functions/step.rb +1 -0
  225. data/lib/puppet/functions/strftime.rb +1 -0
  226. data/lib/puppet/functions/strip.rb +1 -0
  227. data/lib/puppet/functions/then.rb +1 -0
  228. data/lib/puppet/functions/tree_each.rb +1 -0
  229. data/lib/puppet/functions/type.rb +1 -0
  230. data/lib/puppet/functions/unique.rb +1 -0
  231. data/lib/puppet/functions/unwrap.rb +1 -0
  232. data/lib/puppet/functions/upcase.rb +1 -0
  233. data/lib/puppet/functions/values.rb +1 -0
  234. data/lib/puppet/functions/versioncmp.rb +2 -1
  235. data/lib/puppet/functions/warning.rb +1 -0
  236. data/lib/puppet/functions/with.rb +1 -0
  237. data/lib/puppet/functions/yaml_data.rb +1 -0
  238. data/lib/puppet/functions.rb +6 -5
  239. data/lib/puppet/generate/models/type/property.rb +1 -0
  240. data/lib/puppet/generate/models/type/type.rb +1 -0
  241. data/lib/puppet/generate/type.rb +1 -0
  242. data/lib/puppet/gettext/config.rb +1 -0
  243. data/lib/puppet/gettext/module_translations.rb +1 -0
  244. data/lib/puppet/gettext/stubs.rb +1 -0
  245. data/lib/puppet/graph/key.rb +1 -0
  246. data/lib/puppet/graph/prioritizer.rb +1 -0
  247. data/lib/puppet/graph/rb_tree_map.rb +1 -0
  248. data/lib/puppet/graph/relationship_graph.rb +1 -0
  249. data/lib/puppet/graph/sequential_prioritizer.rb +1 -0
  250. data/lib/puppet/graph/simple_graph.rb +1 -0
  251. data/lib/puppet/graph.rb +1 -0
  252. data/lib/puppet/http/client.rb +6 -12
  253. data/lib/puppet/http/dns.rb +1 -0
  254. data/lib/puppet/http/errors.rb +1 -0
  255. data/lib/puppet/http/external_client.rb +1 -0
  256. data/lib/puppet/http/factory.rb +1 -0
  257. data/lib/puppet/http/pool.rb +1 -0
  258. data/lib/puppet/http/pool_entry.rb +1 -0
  259. data/lib/puppet/http/proxy.rb +1 -0
  260. data/lib/puppet/http/redirector.rb +1 -0
  261. data/lib/puppet/http/resolver/server_list.rb +1 -0
  262. data/lib/puppet/http/resolver/settings.rb +1 -0
  263. data/lib/puppet/http/resolver/srv.rb +1 -0
  264. data/lib/puppet/http/resolver.rb +1 -0
  265. data/lib/puppet/http/response.rb +1 -0
  266. data/lib/puppet/http/response_converter.rb +1 -0
  267. data/lib/puppet/http/response_net_http.rb +1 -0
  268. data/lib/puppet/http/retry_after_handler.rb +1 -0
  269. data/lib/puppet/http/service/ca.rb +2 -1
  270. data/lib/puppet/http/service/compiler.rb +2 -5
  271. data/lib/puppet/http/service/file_server.rb +2 -1
  272. data/lib/puppet/http/service/puppetserver.rb +1 -0
  273. data/lib/puppet/http/service/report.rb +2 -4
  274. data/lib/puppet/http/service.rb +1 -0
  275. data/lib/puppet/http/session.rb +3 -2
  276. data/lib/puppet/http/site.rb +1 -0
  277. data/lib/puppet/http.rb +3 -2
  278. data/lib/puppet/indirector/catalog/compiler.rb +10 -17
  279. data/lib/puppet/indirector/catalog/json.rb +1 -0
  280. data/lib/puppet/indirector/catalog/msgpack.rb +1 -0
  281. data/lib/puppet/indirector/catalog/rest.rb +1 -8
  282. data/lib/puppet/indirector/catalog/store_configs.rb +1 -0
  283. data/lib/puppet/indirector/catalog/yaml.rb +1 -0
  284. data/lib/puppet/indirector/code.rb +1 -0
  285. data/lib/puppet/indirector/data_binding/hiera.rb +1 -0
  286. data/lib/puppet/indirector/data_binding/none.rb +1 -0
  287. data/lib/puppet/indirector/direct_file_server.rb +1 -0
  288. data/lib/puppet/indirector/envelope.rb +1 -0
  289. data/lib/puppet/indirector/errors.rb +1 -0
  290. data/lib/puppet/indirector/exec.rb +1 -0
  291. data/lib/puppet/indirector/face.rb +6 -16
  292. data/lib/puppet/indirector/fact_search.rb +1 -0
  293. data/lib/puppet/indirector/facts/facter.rb +1 -0
  294. data/lib/puppet/indirector/facts/json.rb +1 -0
  295. data/lib/puppet/indirector/facts/memory.rb +1 -0
  296. data/lib/puppet/indirector/facts/network_device.rb +1 -0
  297. data/lib/puppet/indirector/facts/rest.rb +1 -0
  298. data/lib/puppet/indirector/facts/store_configs.rb +1 -0
  299. data/lib/puppet/indirector/facts/yaml.rb +1 -0
  300. data/lib/puppet/indirector/file_bucket_file/file.rb +2 -1
  301. data/lib/puppet/indirector/file_bucket_file/rest.rb +1 -0
  302. data/lib/puppet/indirector/file_bucket_file/selector.rb +1 -0
  303. data/lib/puppet/indirector/file_content/file.rb +1 -0
  304. data/lib/puppet/indirector/file_content/file_server.rb +1 -0
  305. data/lib/puppet/indirector/file_content/rest.rb +1 -0
  306. data/lib/puppet/indirector/file_content/selector.rb +1 -0
  307. data/lib/puppet/indirector/file_content.rb +1 -0
  308. data/lib/puppet/indirector/file_metadata/file.rb +1 -0
  309. data/lib/puppet/indirector/file_metadata/file_server.rb +1 -0
  310. data/lib/puppet/indirector/file_metadata/http.rb +1 -0
  311. data/lib/puppet/indirector/file_metadata/rest.rb +1 -0
  312. data/lib/puppet/indirector/file_metadata/selector.rb +1 -0
  313. data/lib/puppet/indirector/file_metadata.rb +1 -0
  314. data/lib/puppet/indirector/file_server.rb +1 -0
  315. data/lib/puppet/indirector/generic_http.rb +1 -0
  316. data/lib/puppet/indirector/hiera.rb +1 -0
  317. data/lib/puppet/indirector/indirection.rb +2 -1
  318. data/lib/puppet/indirector/json.rb +1 -0
  319. data/lib/puppet/indirector/memory.rb +1 -0
  320. data/lib/puppet/indirector/msgpack.rb +1 -0
  321. data/lib/puppet/indirector/node/exec.rb +1 -0
  322. data/lib/puppet/indirector/node/json.rb +1 -0
  323. data/lib/puppet/indirector/node/memory.rb +1 -0
  324. data/lib/puppet/indirector/node/msgpack.rb +1 -0
  325. data/lib/puppet/indirector/node/plain.rb +1 -0
  326. data/lib/puppet/indirector/node/rest.rb +1 -0
  327. data/lib/puppet/indirector/node/store_configs.rb +1 -0
  328. data/lib/puppet/indirector/node/yaml.rb +1 -0
  329. data/lib/puppet/indirector/none.rb +1 -0
  330. data/lib/puppet/indirector/plain.rb +1 -0
  331. data/lib/puppet/indirector/report/json.rb +1 -0
  332. data/lib/puppet/indirector/report/msgpack.rb +1 -0
  333. data/lib/puppet/indirector/report/processor.rb +1 -0
  334. data/lib/puppet/indirector/report/rest.rb +1 -13
  335. data/lib/puppet/indirector/report/yaml.rb +1 -0
  336. data/lib/puppet/indirector/request.rb +1 -0
  337. data/lib/puppet/indirector/resource/ral.rb +1 -0
  338. data/lib/puppet/indirector/resource/store_configs.rb +1 -0
  339. data/lib/puppet/indirector/resource/validator.rb +1 -0
  340. data/lib/puppet/indirector/rest.rb +1 -0
  341. data/lib/puppet/indirector/store_configs.rb +1 -0
  342. data/lib/puppet/indirector/terminus.rb +1 -0
  343. data/lib/puppet/indirector/yaml.rb +1 -0
  344. data/lib/puppet/indirector.rb +1 -0
  345. data/lib/puppet/info_service/class_information_service.rb +1 -0
  346. data/lib/puppet/info_service/plan_information_service.rb +1 -0
  347. data/lib/puppet/info_service/task_information_service.rb +1 -0
  348. data/lib/puppet/info_service.rb +1 -0
  349. data/lib/puppet/interface/action.rb +3 -4
  350. data/lib/puppet/interface/action_builder.rb +10 -4
  351. data/lib/puppet/interface/action_manager.rb +1 -0
  352. data/lib/puppet/interface/documentation.rb +1 -1
  353. data/lib/puppet/interface/face_collection.rb +1 -0
  354. data/lib/puppet/interface/option.rb +1 -0
  355. data/lib/puppet/interface/option_builder.rb +1 -0
  356. data/lib/puppet/interface/option_manager.rb +1 -0
  357. data/lib/puppet/interface.rb +1 -0
  358. data/lib/puppet/loaders.rb +1 -0
  359. data/lib/puppet/metatype/manager.rb +1 -0
  360. data/lib/puppet/module/plan.rb +1 -0
  361. data/lib/puppet/module/task.rb +1 -2
  362. data/lib/puppet/module.rb +4 -1
  363. data/lib/puppet/module_tool/applications/application.rb +1 -0
  364. data/lib/puppet/module_tool/applications/checksummer.rb +1 -0
  365. data/lib/puppet/module_tool/applications/installer.rb +1 -0
  366. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -0
  367. data/lib/puppet/module_tool/applications/unpacker.rb +1 -0
  368. data/lib/puppet/module_tool/applications/upgrader.rb +1 -0
  369. data/lib/puppet/module_tool/applications.rb +1 -0
  370. data/lib/puppet/module_tool/checksums.rb +1 -0
  371. data/lib/puppet/module_tool/contents_description.rb +1 -0
  372. data/lib/puppet/module_tool/dependency.rb +1 -0
  373. data/lib/puppet/module_tool/errors/base.rb +1 -0
  374. data/lib/puppet/module_tool/errors/installer.rb +1 -0
  375. data/lib/puppet/module_tool/errors/shared.rb +1 -0
  376. data/lib/puppet/module_tool/errors/uninstaller.rb +1 -0
  377. data/lib/puppet/module_tool/errors/upgrader.rb +1 -0
  378. data/lib/puppet/module_tool/errors.rb +1 -0
  379. data/lib/puppet/module_tool/install_directory.rb +1 -0
  380. data/lib/puppet/module_tool/installed_modules.rb +1 -0
  381. data/lib/puppet/module_tool/local_tarball.rb +1 -0
  382. data/lib/puppet/module_tool/metadata.rb +1 -0
  383. data/lib/puppet/module_tool/shared_behaviors.rb +1 -0
  384. data/lib/puppet/module_tool/tar/gnu.rb +1 -0
  385. data/lib/puppet/module_tool/tar/mini.rb +1 -0
  386. data/lib/puppet/module_tool/tar.rb +1 -0
  387. data/lib/puppet/module_tool.rb +2 -1
  388. data/lib/puppet/network/authconfig.rb +1 -0
  389. data/lib/puppet/network/authorization.rb +1 -0
  390. data/lib/puppet/network/client_request.rb +1 -0
  391. data/lib/puppet/network/format.rb +1 -0
  392. data/lib/puppet/network/format_handler.rb +2 -1
  393. data/lib/puppet/network/format_support.rb +1 -0
  394. data/lib/puppet/network/formats.rb +6 -3
  395. data/lib/puppet/network/http/api/indirected_routes.rb +1 -0
  396. data/lib/puppet/network/http/api/indirection_type.rb +1 -0
  397. data/lib/puppet/network/http/api/master/v3/environments.rb +1 -0
  398. data/lib/puppet/network/http/api/master/v3.rb +1 -0
  399. data/lib/puppet/network/http/api/master.rb +1 -0
  400. data/lib/puppet/network/http/api/server/v3/environments.rb +1 -0
  401. data/lib/puppet/network/http/api/server/v3.rb +1 -0
  402. data/lib/puppet/network/http/api/server.rb +1 -0
  403. data/lib/puppet/network/http/api.rb +1 -0
  404. data/lib/puppet/network/http/connection.rb +1 -0
  405. data/lib/puppet/network/http/error.rb +1 -0
  406. data/lib/puppet/network/http/handler.rb +1 -0
  407. data/lib/puppet/network/http/issues.rb +1 -0
  408. data/lib/puppet/network/http/memory_response.rb +2 -1
  409. data/lib/puppet/network/http/request.rb +1 -0
  410. data/lib/puppet/network/http/response.rb +1 -0
  411. data/lib/puppet/network/http/route.rb +1 -0
  412. data/lib/puppet/network/http.rb +1 -0
  413. data/lib/puppet/network/http_pool.rb +1 -0
  414. data/lib/puppet/network/uri.rb +1 -0
  415. data/lib/puppet/network.rb +1 -0
  416. data/lib/puppet/node/environment.rb +7 -8
  417. data/lib/puppet/node/facts.rb +1 -0
  418. data/lib/puppet/node.rb +2 -1
  419. data/lib/puppet/pal/catalog_compiler.rb +1 -0
  420. data/lib/puppet/pal/compiler.rb +1 -0
  421. data/lib/puppet/pal/function_signature.rb +1 -0
  422. data/lib/puppet/pal/json_catalog_encoder.rb +1 -0
  423. data/lib/puppet/pal/pal_api.rb +1 -0
  424. data/lib/puppet/pal/pal_impl.rb +1 -0
  425. data/lib/puppet/pal/plan_signature.rb +1 -0
  426. data/lib/puppet/pal/script_compiler.rb +1 -0
  427. data/lib/puppet/pal/task_signature.rb +1 -0
  428. data/lib/puppet/parameter/boolean.rb +1 -0
  429. data/lib/puppet/parameter/package_options.rb +1 -0
  430. data/lib/puppet/parameter/path.rb +1 -0
  431. data/lib/puppet/parameter/value.rb +1 -0
  432. data/lib/puppet/parameter/value_collection.rb +2 -1
  433. data/lib/puppet/parameter.rb +1 -0
  434. data/lib/puppet/parser/abstract_compiler.rb +1 -0
  435. data/lib/puppet/parser/ast/block_expression.rb +1 -0
  436. data/lib/puppet/parser/ast/branch.rb +1 -0
  437. data/lib/puppet/parser/ast/hostclass.rb +1 -0
  438. data/lib/puppet/parser/ast/leaf.rb +1 -0
  439. data/lib/puppet/parser/ast/node.rb +1 -0
  440. data/lib/puppet/parser/ast/pops_bridge.rb +1 -0
  441. data/lib/puppet/parser/ast/resource.rb +1 -0
  442. data/lib/puppet/parser/ast/resource_instance.rb +1 -0
  443. data/lib/puppet/parser/ast/resourceparam.rb +1 -0
  444. data/lib/puppet/parser/ast/top_level_construct.rb +1 -0
  445. data/lib/puppet/parser/ast.rb +1 -0
  446. data/lib/puppet/parser/catalog_compiler.rb +1 -0
  447. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +1 -0
  448. data/lib/puppet/parser/compiler/catalog_validator.rb +1 -0
  449. data/lib/puppet/parser/compiler.rb +2 -1
  450. data/lib/puppet/parser/e4_parser_adapter.rb +1 -0
  451. data/lib/puppet/parser/files.rb +1 -0
  452. data/lib/puppet/parser/functions/assert_type.rb +1 -0
  453. data/lib/puppet/parser/functions/binary_file.rb +1 -0
  454. data/lib/puppet/parser/functions/break.rb +1 -0
  455. data/lib/puppet/parser/functions/contain.rb +1 -0
  456. data/lib/puppet/parser/functions/create_resources.rb +1 -0
  457. data/lib/puppet/parser/functions/defined.rb +1 -0
  458. data/lib/puppet/parser/functions/dig.rb +1 -0
  459. data/lib/puppet/parser/functions/digest.rb +1 -0
  460. data/lib/puppet/parser/functions/each.rb +1 -0
  461. data/lib/puppet/parser/functions/epp.rb +1 -0
  462. data/lib/puppet/parser/functions/fail.rb +1 -0
  463. data/lib/puppet/parser/functions/file.rb +1 -0
  464. data/lib/puppet/parser/functions/filter.rb +1 -0
  465. data/lib/puppet/parser/functions/find_file.rb +1 -0
  466. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -0
  467. data/lib/puppet/parser/functions/generate.rb +1 -0
  468. data/lib/puppet/parser/functions/hiera.rb +1 -0
  469. data/lib/puppet/parser/functions/hiera_array.rb +1 -0
  470. data/lib/puppet/parser/functions/hiera_hash.rb +1 -0
  471. data/lib/puppet/parser/functions/hiera_include.rb +1 -0
  472. data/lib/puppet/parser/functions/include.rb +1 -0
  473. data/lib/puppet/parser/functions/inline_epp.rb +1 -0
  474. data/lib/puppet/parser/functions/inline_template.rb +1 -0
  475. data/lib/puppet/parser/functions/lest.rb +1 -0
  476. data/lib/puppet/parser/functions/lookup.rb +1 -0
  477. data/lib/puppet/parser/functions/map.rb +1 -0
  478. data/lib/puppet/parser/functions/match.rb +1 -0
  479. data/lib/puppet/parser/functions/md5.rb +1 -0
  480. data/lib/puppet/parser/functions/new.rb +1 -0
  481. data/lib/puppet/parser/functions/next.rb +1 -0
  482. data/lib/puppet/parser/functions/realize.rb +1 -0
  483. data/lib/puppet/parser/functions/reduce.rb +1 -0
  484. data/lib/puppet/parser/functions/regsubst.rb +1 -0
  485. data/lib/puppet/parser/functions/require.rb +1 -0
  486. data/lib/puppet/parser/functions/return.rb +1 -0
  487. data/lib/puppet/parser/functions/reverse_each.rb +1 -0
  488. data/lib/puppet/parser/functions/scanf.rb +1 -0
  489. data/lib/puppet/parser/functions/sha1.rb +1 -0
  490. data/lib/puppet/parser/functions/sha256.rb +1 -0
  491. data/lib/puppet/parser/functions/shellquote.rb +1 -0
  492. data/lib/puppet/parser/functions/slice.rb +1 -0
  493. data/lib/puppet/parser/functions/split.rb +1 -0
  494. data/lib/puppet/parser/functions/sprintf.rb +1 -0
  495. data/lib/puppet/parser/functions/step.rb +1 -0
  496. data/lib/puppet/parser/functions/strftime.rb +1 -0
  497. data/lib/puppet/parser/functions/tag.rb +1 -0
  498. data/lib/puppet/parser/functions/tagged.rb +1 -0
  499. data/lib/puppet/parser/functions/template.rb +1 -0
  500. data/lib/puppet/parser/functions/then.rb +1 -0
  501. data/lib/puppet/parser/functions/type.rb +1 -0
  502. data/lib/puppet/parser/functions/versioncmp.rb +1 -0
  503. data/lib/puppet/parser/functions/with.rb +1 -0
  504. data/lib/puppet/parser/functions.rb +2 -1
  505. data/lib/puppet/parser/parser_factory.rb +1 -0
  506. data/lib/puppet/parser/relationship.rb +1 -0
  507. data/lib/puppet/parser/resource/param.rb +1 -0
  508. data/lib/puppet/parser/resource.rb +1 -0
  509. data/lib/puppet/parser/scope.rb +6 -1
  510. data/lib/puppet/parser/script_compiler.rb +1 -0
  511. data/lib/puppet/parser/type_loader.rb +1 -0
  512. data/lib/puppet/parser.rb +1 -0
  513. data/lib/puppet/plugins/configuration.rb +1 -0
  514. data/lib/puppet/plugins/syntax_checkers.rb +1 -0
  515. data/lib/puppet/plugins.rb +1 -0
  516. data/lib/puppet/pops/adaptable.rb +1 -0
  517. data/lib/puppet/pops/adapters.rb +1 -0
  518. data/lib/puppet/pops/evaluator/access_operator.rb +2 -1
  519. data/lib/puppet/pops/evaluator/callable_signature.rb +1 -0
  520. data/lib/puppet/pops/evaluator/closure.rb +2 -1
  521. data/lib/puppet/pops/evaluator/collector_transformer.rb +1 -0
  522. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -0
  523. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -0
  524. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -0
  525. data/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +1 -0
  526. data/lib/puppet/pops/evaluator/compare_operator.rb +1 -0
  527. data/lib/puppet/pops/evaluator/deferred_resolver.rb +6 -22
  528. data/lib/puppet/pops/evaluator/epp_evaluator.rb +1 -0
  529. data/lib/puppet/pops/evaluator/evaluator_impl.rb +2 -1
  530. data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -0
  531. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +2 -1
  532. data/lib/puppet/pops/evaluator/literal_evaluator.rb +5 -17
  533. data/lib/puppet/pops/evaluator/puppet_proc.rb +1 -0
  534. data/lib/puppet/pops/evaluator/relationship_operator.rb +1 -0
  535. data/lib/puppet/pops/evaluator/runtime3_converter.rb +1 -0
  536. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +2 -1
  537. data/lib/puppet/pops/evaluator/runtime3_support.rb +2 -1
  538. data/lib/puppet/pops/functions/dispatch.rb +1 -0
  539. data/lib/puppet/pops/functions/dispatcher.rb +1 -0
  540. data/lib/puppet/pops/functions/function.rb +1 -0
  541. data/lib/puppet/pops/issue_reporter.rb +1 -0
  542. data/lib/puppet/pops/issues.rb +1 -4
  543. data/lib/puppet/pops/label_provider.rb +1 -0
  544. data/lib/puppet/pops/loader/base_loader.rb +1 -0
  545. data/lib/puppet/pops/loader/dependency_loader.rb +1 -0
  546. data/lib/puppet/pops/loader/gem_support.rb +1 -0
  547. data/lib/puppet/pops/loader/generic_plan_instantiator.rb +1 -0
  548. data/lib/puppet/pops/loader/loader.rb +3 -2
  549. data/lib/puppet/pops/loader/loader_paths.rb +13 -12
  550. data/lib/puppet/pops/loader/module_loaders.rb +2 -1
  551. data/lib/puppet/pops/loader/predefined_loader.rb +1 -0
  552. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +1 -0
  553. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +1 -0
  554. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +1 -0
  555. data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +2 -1
  556. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +2 -1
  557. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +3 -2
  558. data/lib/puppet/pops/loader/runtime3_type_loader.rb +1 -0
  559. data/lib/puppet/pops/loader/simple_environment_loader.rb +1 -0
  560. data/lib/puppet/pops/loader/static_loader.rb +1 -0
  561. data/lib/puppet/pops/loader/task_instantiator.rb +1 -0
  562. data/lib/puppet/pops/loader/type_definition_instantiator.rb +1 -0
  563. data/lib/puppet/pops/loader/typed_name.rb +2 -1
  564. data/lib/puppet/pops/loader/uri_helper.rb +1 -0
  565. data/lib/puppet/pops/loaders.rb +1 -0
  566. data/lib/puppet/pops/lookup/configured_data_provider.rb +1 -0
  567. data/lib/puppet/pops/lookup/context.rb +1 -0
  568. data/lib/puppet/pops/lookup/data_adapter.rb +1 -0
  569. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +3 -2
  570. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +4 -3
  571. data/lib/puppet/pops/lookup/data_provider.rb +1 -0
  572. data/lib/puppet/pops/lookup/environment_data_provider.rb +1 -0
  573. data/lib/puppet/pops/lookup/explainer.rb +3 -2
  574. data/lib/puppet/pops/lookup/function_provider.rb +1 -0
  575. data/lib/puppet/pops/lookup/global_data_provider.rb +1 -0
  576. data/lib/puppet/pops/lookup/hiera_config.rb +47 -42
  577. data/lib/puppet/pops/lookup/interpolation.rb +10 -4
  578. data/lib/puppet/pops/lookup/invocation.rb +1 -0
  579. data/lib/puppet/pops/lookup/key_recorder.rb +1 -0
  580. data/lib/puppet/pops/lookup/location_resolver.rb +1 -0
  581. data/lib/puppet/pops/lookup/lookup_adapter.rb +7 -6
  582. data/lib/puppet/pops/lookup/lookup_key.rb +1 -0
  583. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +3 -2
  584. data/lib/puppet/pops/lookup/module_data_provider.rb +1 -0
  585. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -0
  586. data/lib/puppet/pops/lookup.rb +3 -2
  587. data/lib/puppet/pops/merge_strategy.rb +1 -0
  588. data/lib/puppet/pops/migration/migration_checker.rb +1 -0
  589. data/lib/puppet/pops/model/ast_transformer.rb +1 -0
  590. data/lib/puppet/pops/model/factory.rb +1 -1
  591. data/lib/puppet/pops/model/model_label_provider.rb +1 -0
  592. data/lib/puppet/pops/model/model_tree_dumper.rb +1 -0
  593. data/lib/puppet/pops/model/pn_transformer.rb +1 -0
  594. data/lib/puppet/pops/model/tree_dumper.rb +2 -1
  595. data/lib/puppet/pops/parser/code_merger.rb +1 -0
  596. data/lib/puppet/pops/parser/epp_parser.rb +1 -0
  597. data/lib/puppet/pops/parser/epp_support.rb +2 -1
  598. data/lib/puppet/pops/parser/evaluating_parser.rb +2 -1
  599. data/lib/puppet/pops/parser/heredoc_support.rb +1 -0
  600. data/lib/puppet/pops/parser/interpolation_support.rb +1 -0
  601. data/lib/puppet/pops/parser/lexer_support.rb +1 -0
  602. data/lib/puppet/pops/parser/locatable.rb +1 -0
  603. data/lib/puppet/pops/parser/locator.rb +1 -0
  604. data/lib/puppet/pops/parser/parser_support.rb +1 -0
  605. data/lib/puppet/pops/parser/pn_parser.rb +5 -4
  606. data/lib/puppet/pops/patterns.rb +1 -0
  607. data/lib/puppet/pops/pcore.rb +3 -2
  608. data/lib/puppet/pops/pn.rb +2 -1
  609. data/lib/puppet/pops/puppet_stack.rb +1 -0
  610. data/lib/puppet/pops/resource/param.rb +1 -0
  611. data/lib/puppet/pops/resource/resource_type_impl.rb +1 -0
  612. data/lib/puppet/pops/semantic_error.rb +1 -0
  613. data/lib/puppet/pops/serialization/abstract_reader.rb +1 -0
  614. data/lib/puppet/pops/serialization/abstract_writer.rb +1 -0
  615. data/lib/puppet/pops/serialization/deserializer.rb +1 -0
  616. data/lib/puppet/pops/serialization/extension.rb +1 -0
  617. data/lib/puppet/pops/serialization/from_data_converter.rb +1 -0
  618. data/lib/puppet/pops/serialization/instance_reader.rb +1 -0
  619. data/lib/puppet/pops/serialization/instance_writer.rb +1 -0
  620. data/lib/puppet/pops/serialization/json.rb +1 -0
  621. data/lib/puppet/pops/serialization/json_path.rb +2 -1
  622. data/lib/puppet/pops/serialization/object.rb +1 -0
  623. data/lib/puppet/pops/serialization/serializer.rb +1 -0
  624. data/lib/puppet/pops/serialization/time_factory.rb +1 -0
  625. data/lib/puppet/pops/serialization/to_data_converter.rb +2 -1
  626. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -0
  627. data/lib/puppet/pops/serialization.rb +9 -8
  628. data/lib/puppet/pops/time/timespan.rb +15 -14
  629. data/lib/puppet/pops/time/timestamp.rb +3 -2
  630. data/lib/puppet/pops/types/annotatable.rb +2 -1
  631. data/lib/puppet/pops/types/annotation.rb +2 -1
  632. data/lib/puppet/pops/types/class_loader.rb +1 -0
  633. data/lib/puppet/pops/types/implementation_registry.rb +1 -0
  634. data/lib/puppet/pops/types/iterable.rb +1 -0
  635. data/lib/puppet/pops/types/p_binary_type.rb +1 -0
  636. data/lib/puppet/pops/types/p_init_type.rb +1 -0
  637. data/lib/puppet/pops/types/p_meta_type.rb +4 -3
  638. data/lib/puppet/pops/types/p_object_type.rb +16 -15
  639. data/lib/puppet/pops/types/p_object_type_extension.rb +1 -0
  640. data/lib/puppet/pops/types/p_runtime_type.rb +1 -0
  641. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +1 -0
  642. data/lib/puppet/pops/types/p_sem_ver_type.rb +1 -0
  643. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -0
  644. data/lib/puppet/pops/types/p_timespan_type.rb +1 -0
  645. data/lib/puppet/pops/types/p_timestamp_type.rb +1 -0
  646. data/lib/puppet/pops/types/p_type_set_type.rb +9 -8
  647. data/lib/puppet/pops/types/p_uri_type.rb +9 -8
  648. data/lib/puppet/pops/types/puppet_object.rb +1 -0
  649. data/lib/puppet/pops/types/recursion_guard.rb +1 -0
  650. data/lib/puppet/pops/types/ruby_generator.rb +3 -2
  651. data/lib/puppet/pops/types/ruby_method.rb +1 -0
  652. data/lib/puppet/pops/types/string_converter.rb +10 -9
  653. data/lib/puppet/pops/types/tree_iterators.rb +1 -0
  654. data/lib/puppet/pops/types/type_acceptor.rb +1 -0
  655. data/lib/puppet/pops/types/type_asserter.rb +1 -0
  656. data/lib/puppet/pops/types/type_assertion_error.rb +1 -0
  657. data/lib/puppet/pops/types/type_calculator.rb +2 -1
  658. data/lib/puppet/pops/types/type_conversion_error.rb +1 -0
  659. data/lib/puppet/pops/types/type_factory.rb +2 -1
  660. data/lib/puppet/pops/types/type_formatter.rb +2 -2
  661. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -0
  662. data/lib/puppet/pops/types/type_parser.rb +1 -0
  663. data/lib/puppet/pops/types/type_set_reference.rb +1 -0
  664. data/lib/puppet/pops/types/type_with_members.rb +1 -0
  665. data/lib/puppet/pops/types/types.rb +3 -2
  666. data/lib/puppet/pops/utils.rb +3 -2
  667. data/lib/puppet/pops/validation/checker4_0.rb +1 -13
  668. data/lib/puppet/pops/validation/tasks_checker.rb +1 -0
  669. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  670. data/lib/puppet/pops/validation.rb +1 -0
  671. data/lib/puppet/pops/visitable.rb +1 -0
  672. data/lib/puppet/pops/visitor.rb +1 -0
  673. data/lib/puppet/pops.rb +4 -3
  674. data/lib/puppet/property/boolean.rb +1 -0
  675. data/lib/puppet/property/ensure.rb +1 -0
  676. data/lib/puppet/property/keyvalue.rb +1 -0
  677. data/lib/puppet/property/list.rb +1 -0
  678. data/lib/puppet/property/ordered_list.rb +1 -0
  679. data/lib/puppet/property.rb +1 -0
  680. data/lib/puppet/provider/aix_object.rb +1 -0
  681. data/lib/puppet/provider/command.rb +1 -0
  682. data/lib/puppet/provider/confine.rb +1 -0
  683. data/lib/puppet/provider/exec/posix.rb +1 -0
  684. data/lib/puppet/provider/exec/shell.rb +1 -0
  685. data/lib/puppet/provider/exec/windows.rb +4 -3
  686. data/lib/puppet/provider/exec.rb +1 -0
  687. data/lib/puppet/provider/file/posix.rb +1 -0
  688. data/lib/puppet/provider/file/windows.rb +2 -1
  689. data/lib/puppet/provider/group/aix.rb +3 -2
  690. data/lib/puppet/provider/group/directoryservice.rb +3 -2
  691. data/lib/puppet/provider/group/groupadd.rb +2 -1
  692. data/lib/puppet/provider/group/ldap.rb +1 -0
  693. data/lib/puppet/provider/group/pw.rb +3 -2
  694. data/lib/puppet/provider/group/windows_adsi.rb +3 -2
  695. data/lib/puppet/provider/ldap.rb +1 -0
  696. data/lib/puppet/provider/nameservice/directoryservice.rb +5 -4
  697. data/lib/puppet/provider/nameservice/objectadd.rb +1 -0
  698. data/lib/puppet/provider/nameservice/pw.rb +1 -0
  699. data/lib/puppet/provider/nameservice.rb +1 -0
  700. data/lib/puppet/provider/network_device.rb +1 -0
  701. data/lib/puppet/provider/package/aix.rb +3 -2
  702. data/lib/puppet/provider/package/appdmg.rb +3 -2
  703. data/lib/puppet/provider/package/apple.rb +2 -1
  704. data/lib/puppet/provider/package/apt.rb +3 -2
  705. data/lib/puppet/provider/package/aptitude.rb +1 -0
  706. data/lib/puppet/provider/package/aptrpm.rb +1 -0
  707. data/lib/puppet/provider/package/blastwave.rb +2 -1
  708. data/lib/puppet/provider/package/dnf.rb +6 -6
  709. data/lib/puppet/provider/package/dnfmodule.rb +2 -1
  710. data/lib/puppet/provider/package/dpkg.rb +1 -0
  711. data/lib/puppet/provider/package/fink.rb +1 -0
  712. data/lib/puppet/provider/package/freebsd.rb +2 -1
  713. data/lib/puppet/provider/package/gem.rb +5 -4
  714. data/lib/puppet/provider/package/hpux.rb +3 -2
  715. data/lib/puppet/provider/package/macports.rb +2 -1
  716. data/lib/puppet/provider/package/nim.rb +1 -0
  717. data/lib/puppet/provider/package/openbsd.rb +3 -2
  718. data/lib/puppet/provider/package/opkg.rb +3 -2
  719. data/lib/puppet/provider/package/pacman.rb +3 -2
  720. data/lib/puppet/provider/package/pip.rb +1 -0
  721. data/lib/puppet/provider/package/pip2.rb +1 -0
  722. data/lib/puppet/provider/package/pip3.rb +1 -0
  723. data/lib/puppet/provider/package/pkg.rb +4 -3
  724. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  725. data/lib/puppet/provider/package/pkgin.rb +2 -1
  726. data/lib/puppet/provider/package/pkgng.rb +3 -2
  727. data/lib/puppet/provider/package/pkgutil.rb +2 -1
  728. data/lib/puppet/provider/package/portage.rb +3 -2
  729. data/lib/puppet/provider/package/ports.rb +1 -0
  730. data/lib/puppet/provider/package/portupgrade.rb +2 -1
  731. data/lib/puppet/provider/package/puppet_gem.rb +3 -2
  732. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -0
  733. data/lib/puppet/provider/package/rpm.rb +1 -0
  734. data/lib/puppet/provider/package/rug.rb +2 -1
  735. data/lib/puppet/provider/package/sun.rb +3 -2
  736. data/lib/puppet/provider/package/sunfreeware.rb +2 -1
  737. data/lib/puppet/provider/package/tdnf.rb +2 -1
  738. data/lib/puppet/provider/package/up2date.rb +3 -2
  739. data/lib/puppet/provider/package/urpmi.rb +2 -1
  740. data/lib/puppet/provider/package/windows/exe_package.rb +1 -0
  741. data/lib/puppet/provider/package/windows/msi_package.rb +1 -0
  742. data/lib/puppet/provider/package/windows/package.rb +3 -2
  743. data/lib/puppet/provider/package/windows.rb +3 -2
  744. data/lib/puppet/provider/package/yum.rb +6 -5
  745. data/lib/puppet/provider/package/zypper.rb +3 -2
  746. data/lib/puppet/provider/package.rb +1 -0
  747. data/lib/puppet/provider/package_targetable.rb +1 -0
  748. data/lib/puppet/provider/parsedfile.rb +1 -0
  749. data/lib/puppet/provider/service/base.rb +2 -1
  750. data/lib/puppet/provider/service/bsd.rb +2 -1
  751. data/lib/puppet/provider/service/daemontools.rb +2 -1
  752. data/lib/puppet/provider/service/debian.rb +4 -3
  753. data/lib/puppet/provider/service/freebsd.rb +3 -2
  754. data/lib/puppet/provider/service/gentoo.rb +2 -1
  755. data/lib/puppet/provider/service/init.rb +9 -5
  756. data/lib/puppet/provider/service/launchd.rb +4 -3
  757. data/lib/puppet/provider/service/openbsd.rb +3 -2
  758. data/lib/puppet/provider/service/openrc.rb +3 -2
  759. data/lib/puppet/provider/service/openwrt.rb +3 -2
  760. data/lib/puppet/provider/service/rcng.rb +3 -2
  761. data/lib/puppet/provider/service/redhat.rb +4 -3
  762. data/lib/puppet/provider/service/runit.rb +1 -0
  763. data/lib/puppet/provider/service/service.rb +1 -0
  764. data/lib/puppet/provider/service/smf.rb +6 -5
  765. data/lib/puppet/provider/service/src.rb +3 -2
  766. data/lib/puppet/provider/service/systemd.rb +17 -17
  767. data/lib/puppet/provider/service/upstart.rb +8 -7
  768. data/lib/puppet/provider/service/windows.rb +3 -2
  769. data/lib/puppet/provider/user/aix.rb +3 -2
  770. data/lib/puppet/provider/user/directoryservice.rb +5 -4
  771. data/lib/puppet/provider/user/hpux.rb +3 -2
  772. data/lib/puppet/provider/user/ldap.rb +1 -0
  773. data/lib/puppet/provider/user/openbsd.rb +3 -2
  774. data/lib/puppet/provider/user/pw.rb +3 -2
  775. data/lib/puppet/provider/user/user_role_add.rb +2 -1
  776. data/lib/puppet/provider/user/useradd.rb +7 -6
  777. data/lib/puppet/provider/user/windows_adsi.rb +3 -2
  778. data/lib/puppet/provider.rb +1 -0
  779. data/lib/puppet/reference/configuration.rb +2 -1
  780. data/lib/puppet/reference/function.rb +1 -0
  781. data/lib/puppet/reference/indirection.rb +2 -1
  782. data/lib/puppet/reference/metaparameter.rb +1 -0
  783. data/lib/puppet/reference/providers.rb +5 -5
  784. data/lib/puppet/reference/report.rb +1 -0
  785. data/lib/puppet/reference/type.rb +1 -0
  786. data/lib/puppet/relationship.rb +1 -0
  787. data/lib/puppet/reports/http.rb +1 -0
  788. data/lib/puppet/reports/log.rb +1 -0
  789. data/lib/puppet/reports/store.rb +1 -0
  790. data/lib/puppet/reports.rb +2 -1
  791. data/lib/puppet/resource/catalog.rb +1 -0
  792. data/lib/puppet/resource/status.rb +1 -0
  793. data/lib/puppet/resource/type.rb +9 -8
  794. data/lib/puppet/resource.rb +9 -8
  795. data/lib/puppet/runtime.rb +1 -0
  796. data/lib/puppet/scheduler/job.rb +1 -0
  797. data/lib/puppet/scheduler/scheduler.rb +1 -0
  798. data/lib/puppet/scheduler/splay_job.rb +1 -0
  799. data/lib/puppet/scheduler/timer.rb +1 -0
  800. data/lib/puppet/scheduler.rb +1 -0
  801. data/lib/puppet/settings/alias_setting.rb +1 -0
  802. data/lib/puppet/settings/array_setting.rb +1 -0
  803. data/lib/puppet/settings/autosign_setting.rb +1 -0
  804. data/lib/puppet/settings/base_setting.rb +1 -0
  805. data/lib/puppet/settings/boolean_setting.rb +1 -0
  806. data/lib/puppet/settings/certificate_revocation_setting.rb +1 -0
  807. data/lib/puppet/settings/config_file.rb +1 -0
  808. data/lib/puppet/settings/directory_setting.rb +1 -0
  809. data/lib/puppet/settings/duration_setting.rb +1 -0
  810. data/lib/puppet/settings/enum_setting.rb +1 -0
  811. data/lib/puppet/settings/environment_conf.rb +1 -0
  812. data/lib/puppet/settings/errors.rb +1 -0
  813. data/lib/puppet/settings/file_or_directory_setting.rb +1 -0
  814. data/lib/puppet/settings/file_setting.rb +1 -0
  815. data/lib/puppet/settings/http_extra_headers_setting.rb +1 -0
  816. data/lib/puppet/settings/ini_file.rb +1 -0
  817. data/lib/puppet/settings/integer_setting.rb +1 -0
  818. data/lib/puppet/settings/path_setting.rb +1 -0
  819. data/lib/puppet/settings/port_setting.rb +1 -0
  820. data/lib/puppet/settings/priority_setting.rb +1 -0
  821. data/lib/puppet/settings/server_list_setting.rb +1 -0
  822. data/lib/puppet/settings/string_setting.rb +1 -0
  823. data/lib/puppet/settings/symbolic_enum_setting.rb +1 -0
  824. data/lib/puppet/settings/terminus_setting.rb +1 -0
  825. data/lib/puppet/settings/ttl_setting.rb +1 -0
  826. data/lib/puppet/settings/value_translator.rb +1 -0
  827. data/lib/puppet/settings.rb +7 -20
  828. data/lib/puppet/ssl/base.rb +1 -0
  829. data/lib/puppet/ssl/certificate.rb +1 -0
  830. data/lib/puppet/ssl/certificate_request.rb +2 -4
  831. data/lib/puppet/ssl/certificate_request_attributes.rb +1 -0
  832. data/lib/puppet/ssl/certificate_signer.rb +1 -0
  833. data/lib/puppet/ssl/digest.rb +1 -0
  834. data/lib/puppet/ssl/error.rb +1 -0
  835. data/lib/puppet/ssl/oids.rb +1 -1
  836. data/lib/puppet/ssl/openssl_loader.rb +1 -0
  837. data/lib/puppet/ssl/ssl_context.rb +16 -10
  838. data/lib/puppet/ssl/ssl_provider.rb +2 -1
  839. data/lib/puppet/ssl/state_machine.rb +1 -0
  840. data/lib/puppet/ssl/verifier.rb +1 -0
  841. data/lib/puppet/ssl.rb +2 -1
  842. data/lib/puppet/syntax_checkers/base64.rb +1 -0
  843. data/lib/puppet/syntax_checkers/epp.rb +1 -0
  844. data/lib/puppet/syntax_checkers/json.rb +1 -0
  845. data/lib/puppet/syntax_checkers/pp.rb +1 -0
  846. data/lib/puppet/syntax_checkers.rb +1 -0
  847. data/lib/puppet/test/test_helper.rb +4 -21
  848. data/lib/puppet/thread_local.rb +5 -1
  849. data/lib/puppet/transaction/additional_resource_generator.rb +1 -0
  850. data/lib/puppet/transaction/event.rb +1 -0
  851. data/lib/puppet/transaction/event_manager.rb +1 -0
  852. data/lib/puppet/transaction/persistence.rb +1 -0
  853. data/lib/puppet/transaction/report.rb +3 -2
  854. data/lib/puppet/transaction/resource_harness.rb +1 -0
  855. data/lib/puppet/transaction.rb +1 -0
  856. data/lib/puppet/trusted_external.rb +1 -0
  857. data/lib/puppet/type/component.rb +2 -1
  858. data/lib/puppet/type/exec.rb +8 -15
  859. data/lib/puppet/type/file/checksum.rb +1 -0
  860. data/lib/puppet/type/file/checksum_value.rb +1 -0
  861. data/lib/puppet/type/file/content.rb +1 -0
  862. data/lib/puppet/type/file/ctime.rb +1 -0
  863. data/lib/puppet/type/file/data_sync.rb +1 -0
  864. data/lib/puppet/type/file/ensure.rb +1 -0
  865. data/lib/puppet/type/file/group.rb +1 -0
  866. data/lib/puppet/type/file/mode.rb +1 -0
  867. data/lib/puppet/type/file/mtime.rb +1 -0
  868. data/lib/puppet/type/file/owner.rb +1 -0
  869. data/lib/puppet/type/file/selcontext.rb +1 -0
  870. data/lib/puppet/type/file/source.rb +2 -1
  871. data/lib/puppet/type/file/target.rb +1 -0
  872. data/lib/puppet/type/file/type.rb +1 -0
  873. data/lib/puppet/type/file.rb +1 -0
  874. data/lib/puppet/type/filebucket.rb +1 -0
  875. data/lib/puppet/type/group.rb +1 -0
  876. data/lib/puppet/type/notify.rb +1 -0
  877. data/lib/puppet/type/package.rb +3 -2
  878. data/lib/puppet/type/resources.rb +2 -2
  879. data/lib/puppet/type/schedule.rb +1 -0
  880. data/lib/puppet/type/service.rb +1 -0
  881. data/lib/puppet/type/stage.rb +1 -0
  882. data/lib/puppet/type/tidy.rb +1 -0
  883. data/lib/puppet/type/user.rb +1 -0
  884. data/lib/puppet/type/whit.rb +1 -0
  885. data/lib/puppet/type.rb +2 -42
  886. data/lib/puppet/util/at_fork/noop.rb +1 -0
  887. data/lib/puppet/util/at_fork/solaris.rb +1 -0
  888. data/lib/puppet/util/at_fork.rb +1 -0
  889. data/lib/puppet/util/autoload.rb +1 -0
  890. data/lib/puppet/util/backups.rb +1 -0
  891. data/lib/puppet/util/character_encoding.rb +1 -0
  892. data/lib/puppet/util/checksums.rb +1 -0
  893. data/lib/puppet/util/classgen.rb +1 -0
  894. data/lib/puppet/util/colors.rb +1 -0
  895. data/lib/puppet/util/command_line/puppet_option_parser.rb +1 -0
  896. data/lib/puppet/util/command_line/trollop.rb +2 -1
  897. data/lib/puppet/util/command_line.rb +1 -0
  898. data/lib/puppet/util/constant_inflector.rb +1 -0
  899. data/lib/puppet/util/diff.rb +2 -1
  900. data/lib/puppet/util/docs.rb +1 -0
  901. data/lib/puppet/util/errors.rb +1 -0
  902. data/lib/puppet/util/execution.rb +7 -12
  903. data/lib/puppet/util/execution_stub.rb +1 -0
  904. data/lib/puppet/util/feature.rb +1 -0
  905. data/lib/puppet/util/file_watcher.rb +1 -0
  906. data/lib/puppet/util/fileparsing.rb +1 -0
  907. data/lib/puppet/util/filetype.rb +3 -2
  908. data/lib/puppet/util/http_proxy.rb +1 -0
  909. data/lib/puppet/util/inifile.rb +3 -2
  910. data/lib/puppet/util/instance_loader.rb +1 -0
  911. data/lib/puppet/util/json.rb +1 -0
  912. data/lib/puppet/util/json_lockfile.rb +1 -0
  913. data/lib/puppet/util/ldap/connection.rb +1 -0
  914. data/lib/puppet/util/ldap/generator.rb +1 -0
  915. data/lib/puppet/util/ldap/manager.rb +1 -0
  916. data/lib/puppet/util/ldap.rb +1 -0
  917. data/lib/puppet/util/libuser.rb +1 -0
  918. data/lib/puppet/util/limits.rb +1 -0
  919. data/lib/puppet/util/lockfile.rb +1 -0
  920. data/lib/puppet/util/log/destination.rb +1 -0
  921. data/lib/puppet/util/log/destinations.rb +1 -0
  922. data/lib/puppet/util/log.rb +1 -0
  923. data/lib/puppet/util/logging.rb +1 -0
  924. data/lib/puppet/util/metaid.rb +1 -0
  925. data/lib/puppet/util/metric.rb +1 -0
  926. data/lib/puppet/util/monkey_patches.rb +3 -28
  927. data/lib/puppet/util/multi_match.rb +1 -0
  928. data/lib/puppet/util/network_device/base.rb +1 -0
  929. data/lib/puppet/util/network_device/config.rb +1 -0
  930. data/lib/puppet/util/network_device/transport/base.rb +1 -0
  931. data/lib/puppet/util/network_device/transport.rb +1 -0
  932. data/lib/puppet/util/network_device.rb +1 -0
  933. data/lib/puppet/util/package/version/debian.rb +1 -0
  934. data/lib/puppet/util/package/version/gem.rb +1 -0
  935. data/lib/puppet/util/package/version/pip.rb +4 -3
  936. data/lib/puppet/util/package/version/range/eq.rb +1 -0
  937. data/lib/puppet/util/package/version/range/gt.rb +1 -0
  938. data/lib/puppet/util/package/version/range/gt_eq.rb +1 -0
  939. data/lib/puppet/util/package/version/range/lt.rb +1 -0
  940. data/lib/puppet/util/package/version/range/lt_eq.rb +1 -0
  941. data/lib/puppet/util/package/version/range/min_max.rb +1 -0
  942. data/lib/puppet/util/package/version/range/simple.rb +1 -0
  943. data/lib/puppet/util/package/version/range.rb +1 -0
  944. data/lib/puppet/util/package/version/rpm.rb +1 -1
  945. data/lib/puppet/util/pidlock.rb +1 -0
  946. data/lib/puppet/util/platform.rb +3 -2
  947. data/lib/puppet/util/plist.rb +1 -0
  948. data/lib/puppet/util/posix.rb +1 -0
  949. data/lib/puppet/util/profiler/aggregate.rb +1 -0
  950. data/lib/puppet/util/profiler/around_profiler.rb +1 -0
  951. data/lib/puppet/util/profiler/logging.rb +1 -0
  952. data/lib/puppet/util/profiler/object_counts.rb +1 -0
  953. data/lib/puppet/util/profiler/wall_clock.rb +1 -0
  954. data/lib/puppet/util/profiler.rb +1 -0
  955. data/lib/puppet/util/provider_features.rb +2 -1
  956. data/lib/puppet/util/psych_support.rb +1 -0
  957. data/lib/puppet/util/rdoc/code_objects.rb +1 -0
  958. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -0
  959. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1 -0
  960. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -0
  961. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +1 -0
  962. data/lib/puppet/util/rdoc/parser.rb +1 -0
  963. data/lib/puppet/util/rdoc.rb +1 -0
  964. data/lib/puppet/util/reference.rb +1 -0
  965. data/lib/puppet/util/resource_template.rb +1 -0
  966. data/lib/puppet/util/retry_action.rb +1 -0
  967. data/lib/puppet/util/rpm_compare.rb +1 -0
  968. data/lib/puppet/util/rubygems.rb +1 -0
  969. data/lib/puppet/util/run_mode.rb +1 -0
  970. data/lib/puppet/util/selinux.rb +2 -1
  971. data/lib/puppet/util/skip_tags.rb +1 -0
  972. data/lib/puppet/util/splayer.rb +1 -0
  973. data/lib/puppet/util/storage.rb +1 -0
  974. data/lib/puppet/util/suidmanager.rb +2 -1
  975. data/lib/puppet/util/symbolic_file_mode.rb +1 -0
  976. data/lib/puppet/util/tag_set.rb +1 -0
  977. data/lib/puppet/util/terminal.rb +1 -0
  978. data/lib/puppet/util/user_attr.rb +1 -0
  979. data/lib/puppet/util/warnings.rb +1 -0
  980. data/lib/puppet/util/watched_file.rb +1 -0
  981. data/lib/puppet/util/watcher/change_watcher.rb +1 -0
  982. data/lib/puppet/util/watcher/periodic_watcher.rb +1 -0
  983. data/lib/puppet/util/watcher/timer.rb +1 -0
  984. data/lib/puppet/util/watcher.rb +1 -0
  985. data/lib/puppet/util/windows/access_control_entry.rb +2 -1
  986. data/lib/puppet/util/windows/access_control_list.rb +2 -1
  987. data/lib/puppet/util/windows/adsi.rb +3 -9
  988. data/lib/puppet/util/windows/com.rb +1 -0
  989. data/lib/puppet/util/windows/daemon.rb +1 -0
  990. data/lib/puppet/util/windows/error.rb +2 -1
  991. data/lib/puppet/util/windows/eventlog.rb +1 -0
  992. data/lib/puppet/util/windows/file.rb +3 -2
  993. data/lib/puppet/util/windows/principal.rb +1 -0
  994. data/lib/puppet/util/windows/process.rb +2 -1
  995. data/lib/puppet/util/windows/registry.rb +5 -39
  996. data/lib/puppet/util/windows/root_certs.rb +1 -0
  997. data/lib/puppet/util/windows/security.rb +1 -0
  998. data/lib/puppet/util/windows/security_descriptor.rb +1 -0
  999. data/lib/puppet/util/windows/service.rb +1 -0
  1000. data/lib/puppet/util/windows/sid.rb +3 -4
  1001. data/lib/puppet/util/windows/string.rb +1 -0
  1002. data/lib/puppet/util/windows/user.rb +1 -0
  1003. data/lib/puppet/util/windows.rb +1 -0
  1004. data/lib/puppet/util/yaml.rb +1 -0
  1005. data/lib/puppet/util.rb +32 -87
  1006. data/lib/puppet/vendor.rb +1 -0
  1007. data/lib/puppet/version.rb +2 -1
  1008. data/lib/puppet/x509/cert_provider.rb +3 -6
  1009. data/lib/puppet/x509/pem_store.rb +1 -0
  1010. data/lib/puppet/x509.rb +1 -0
  1011. data/lib/puppet.rb +5 -8
  1012. data/lib/puppet_pal.rb +1 -0
  1013. data/lib/puppet_x.rb +1 -0
  1014. data/locales/puppet.pot +9679 -5
  1015. data/man/man5/puppet.conf.5 +13 -13
  1016. data/man/man8/puppet-agent.8 +1 -1
  1017. data/man/man8/puppet-apply.8 +1 -1
  1018. data/man/man8/puppet-catalog.8 +1 -5
  1019. data/man/man8/puppet-config.8 +1 -1
  1020. data/man/man8/puppet-describe.8 +1 -1
  1021. data/man/man8/puppet-device.8 +1 -1
  1022. data/man/man8/puppet-doc.8 +1 -1
  1023. data/man/man8/puppet-epp.8 +1 -1
  1024. data/man/man8/puppet-facts.8 +1 -5
  1025. data/man/man8/puppet-filebucket.8 +1 -1
  1026. data/man/man8/puppet-generate.8 +1 -1
  1027. data/man/man8/puppet-help.8 +1 -1
  1028. data/man/man8/puppet-lookup.8 +1 -1
  1029. data/man/man8/puppet-module.8 +1 -1
  1030. data/man/man8/puppet-node.8 +1 -5
  1031. data/man/man8/puppet-parser.8 +1 -1
  1032. data/man/man8/puppet-plugin.8 +1 -1
  1033. data/man/man8/puppet-report.8 +1 -5
  1034. data/man/man8/puppet-resource.8 +1 -1
  1035. data/man/man8/puppet-script.8 +1 -1
  1036. data/man/man8/puppet-ssl.8 +1 -5
  1037. data/man/man8/puppet.8 +2 -2
  1038. data/spec/fixtures/faulty_face/puppet/face/syntax.rb +8 -0
  1039. data/spec/fixtures/hiera.yaml +9 -0
  1040. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +92 -0
  1041. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
  1042. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  1043. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  1044. data/spec/fixtures/integration/application/module/environments/direnv/modules/nginx/README +3 -0
  1045. data/spec/fixtures/integration/application/module/environments/direnv/modules/nginx/manifests/init.pp +17 -0
  1046. data/spec/fixtures/integration/application/module/environments/direnv/modules/nginx/metadata.json +20 -0
  1047. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
  1048. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
  1049. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
  1050. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
  1051. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
  1052. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
  1053. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
  1054. data/spec/fixtures/integration/node/environment/sitedir/00_a.pp +2 -0
  1055. data/spec/fixtures/integration/node/environment/sitedir/01_b.pp +6 -0
  1056. data/spec/fixtures/integration/node/environment/sitedir/03_empty.pp +0 -0
  1057. data/spec/fixtures/integration/node/environment/sitedir/04_include.pp +2 -0
  1058. data/spec/fixtures/integration/node/environment/sitedir2/00_a.pp +2 -0
  1059. data/spec/fixtures/integration/node/environment/sitedir2/02_folder/01_b.pp +6 -0
  1060. data/spec/fixtures/integration/node/environment/sitedir2/03_c.pp +1 -0
  1061. data/spec/fixtures/integration/node/environment/sitedir2/04_include.pp +2 -0
  1062. data/spec/fixtures/java.tgz +0 -0
  1063. data/spec/fixtures/manifests/site.pp +0 -0
  1064. data/spec/fixtures/module.tar.gz +0 -0
  1065. data/spec/fixtures/releases/jamtur01-apache/Modulefile +2 -0
  1066. data/spec/fixtures/releases/jamtur01-apache/files/httpd +24 -0
  1067. data/spec/fixtures/releases/jamtur01-apache/files/test.vhost +18 -0
  1068. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +21 -0
  1069. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/type/a2mod.rb +12 -0
  1070. data/spec/fixtures/releases/jamtur01-apache/manifests/dev.pp +5 -0
  1071. data/spec/fixtures/releases/jamtur01-apache/manifests/init.pp +34 -0
  1072. data/spec/fixtures/releases/jamtur01-apache/manifests/params.pp +17 -0
  1073. data/spec/fixtures/releases/jamtur01-apache/manifests/php.pp +5 -0
  1074. data/spec/fixtures/releases/jamtur01-apache/manifests/ssl.pp +15 -0
  1075. data/spec/fixtures/releases/jamtur01-apache/manifests/vhost.pp +15 -0
  1076. data/spec/fixtures/releases/jamtur01-apache/metadata.json +1 -0
  1077. data/spec/fixtures/releases/jamtur01-apache/templates/vhost-default.conf.erb +20 -0
  1078. data/spec/fixtures/releases/jamtur01-apache/tests/apache.pp +1 -0
  1079. data/spec/fixtures/releases/jamtur01-apache/tests/dev.pp +1 -0
  1080. data/spec/fixtures/releases/jamtur01-apache/tests/init.pp +1 -0
  1081. data/spec/fixtures/releases/jamtur01-apache/tests/php.pp +1 -0
  1082. data/spec/fixtures/releases/jamtur01-apache/tests/ssl.pp +1 -0
  1083. data/spec/fixtures/releases/jamtur01-apache/tests/vhost.pp +2 -0
  1084. data/spec/fixtures/ssl/127.0.0.1-key.pem +117 -0
  1085. data/spec/fixtures/ssl/127.0.0.1.pem +69 -0
  1086. data/spec/fixtures/ssl/bad-basic-constraints.pem +81 -0
  1087. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +81 -0
  1088. data/spec/fixtures/ssl/ca.pem +81 -0
  1089. data/spec/fixtures/ssl/crl.pem +40 -0
  1090. data/spec/fixtures/ssl/ec-key-openssl.pem +8 -0
  1091. data/spec/fixtures/ssl/ec-key-pk8.pem +5 -0
  1092. data/spec/fixtures/ssl/ec-key.pem +18 -0
  1093. data/spec/fixtures/ssl/ec.pem +49 -0
  1094. data/spec/fixtures/ssl/encrypted-ec-key.pem +21 -0
  1095. data/spec/fixtures/ssl/encrypted-key.pem +120 -0
  1096. data/spec/fixtures/ssl/intermediate-agent-crl.pem +40 -0
  1097. data/spec/fixtures/ssl/intermediate-agent.pem +81 -0
  1098. data/spec/fixtures/ssl/intermediate-crl.pem +46 -0
  1099. data/spec/fixtures/ssl/intermediate.pem +81 -0
  1100. data/spec/fixtures/ssl/netlock-arany-utf8.pem +23 -0
  1101. data/spec/fixtures/ssl/oid-key.pem +117 -0
  1102. data/spec/fixtures/ssl/oid.pem +69 -0
  1103. data/spec/fixtures/ssl/pluto-key.pem +117 -0
  1104. data/spec/fixtures/ssl/pluto.pem +66 -0
  1105. data/spec/fixtures/ssl/request-key.pem +117 -0
  1106. data/spec/fixtures/ssl/request.pem +60 -0
  1107. data/spec/fixtures/ssl/revoked-key.pem +117 -0
  1108. data/spec/fixtures/ssl/revoked.pem +66 -0
  1109. data/spec/fixtures/ssl/signed-key.pem +117 -0
  1110. data/spec/fixtures/ssl/signed.pem +66 -0
  1111. data/spec/fixtures/ssl/tampered-cert.pem +66 -0
  1112. data/spec/fixtures/ssl/tampered-csr.pem +60 -0
  1113. data/spec/fixtures/ssl/trusted_oid_mapping.yaml +5 -0
  1114. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +117 -0
  1115. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +69 -0
  1116. data/spec/fixtures/ssl/unknown-ca-key.pem +117 -0
  1117. data/spec/fixtures/ssl/unknown-ca.pem +81 -0
  1118. data/spec/fixtures/stdlib.tgz +0 -0
  1119. data/spec/fixtures/unit/application/environments/production/data/common.yaml +24 -0
  1120. data/spec/fixtures/unit/application/environments/production/environment.conf +1 -0
  1121. data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
  1122. data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
  1123. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/environment/data.pp +10 -0
  1124. data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
  1125. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/data/bad.json +3 -0
  1126. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/environment.conf +2 -0
  1127. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/hiera.yaml +5 -0
  1128. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/manifests/site.pp +5 -0
  1129. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/data/bad.yaml +3 -0
  1130. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/environment.conf +2 -0
  1131. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/hiera.yaml +5 -0
  1132. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/manifests/site.pp +5 -0
  1133. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/data/common.yaml +2 -0
  1134. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/environment.conf +2 -0
  1135. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/manifests/site.pp +1 -0
  1136. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/data/common.yaml +2 -0
  1137. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/manifests/init.pp +5 -0
  1138. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/metadata.json +9 -0
  1139. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/first.json +3 -0
  1140. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/name.yaml +2 -0
  1141. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/second.json +3 -0
  1142. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/single.yaml +2 -0
  1143. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/third_utf8.json +3 -0
  1144. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/utf8.yaml +3 -0
  1145. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data2/single.yaml +2 -0
  1146. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/environment.conf +2 -0
  1147. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +22 -0
  1148. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +5 -0
  1149. data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +48 -0
  1150. data/spec/fixtures/unit/data_providers/environments/hiera_misc/environment.conf +2 -0
  1151. data/spec/fixtures/unit/data_providers/environments/hiera_misc/manifests/site.pp +1 -0
  1152. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/data/common.yaml +30 -0
  1153. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/manifests/init.pp +13 -0
  1154. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/metadata.json +9 -0
  1155. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
  1156. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
  1157. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/environment.conf +2 -0
  1158. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
  1159. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/manifests/site.pp +1 -0
  1160. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json +3 -0
  1161. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml +2 -0
  1162. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json +3 -0
  1163. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server1.yaml +1 -0
  1164. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server2.yaml +1 -0
  1165. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml +2 -0
  1166. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data2/single.yaml +2 -0
  1167. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml +20 -0
  1168. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/manifests/init.pp +5 -0
  1169. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json +9 -0
  1170. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
  1171. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
  1172. data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
  1173. data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
  1174. data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
  1175. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
  1176. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
  1177. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
  1178. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
  1179. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
  1180. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
  1181. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
  1182. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
  1183. data/spec/fixtures/unit/data_providers/environments/production/environment.conf +2 -0
  1184. data/spec/fixtures/unit/data_providers/environments/production/lib/puppet/functions/environment/data.rb +9 -0
  1185. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +9 -0
  1186. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/manifests/init.pp +10 -0
  1187. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/metadata.json +9 -0
  1188. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/functions/data.pp +6 -0
  1189. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/manifests/init.pp +9 -0
  1190. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/metadata.json +9 -0
  1191. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  1192. data/spec/fixtures/unit/forge/bacula.json +76 -0
  1193. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  1194. data/spec/fixtures/unit/functions/hiera/hiera/backend/hieraspec_backend.rb +22 -0
  1195. data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
  1196. data/spec/fixtures/unit/functions/lookup/hiera/backend/custom_backend.rb +18 -0
  1197. data/spec/fixtures/unit/functions/lookup/hiera/backend/other_backend.rb +7 -0
  1198. data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
  1199. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/environment.conf +2 -0
  1200. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/lib/puppet/functions/environment/data.rb +13 -0
  1201. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +9 -0
  1202. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/abc/manifests/init.pp +8 -0
  1203. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/abc/metadata.json +9 -0
  1204. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +7 -0
  1205. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/manifests/init.pp +2 -0
  1206. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/metadata.json +9 -0
  1207. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +9 -0
  1208. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/manifests/init.pp +2 -0
  1209. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/metadata.json +9 -0
  1210. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/data/empty.json +0 -0
  1211. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/hiera.yaml +5 -0
  1212. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/manifests/init.pp +2 -0
  1213. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/metadata.json +9 -0
  1214. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/data/empty_key.json +1 -0
  1215. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/hiera.yaml +5 -0
  1216. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/manifests/init.pp +2 -0
  1217. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/metadata.json +9 -0
  1218. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/data/empty_key.yaml +1 -0
  1219. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/hiera.yaml +5 -0
  1220. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/manifests/init.pp +2 -0
  1221. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/metadata.json +9 -0
  1222. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/data/empty.yaml +2 -0
  1223. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  1224. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  1225. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/metadata.json +9 -0
  1226. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/data/first.json +4 -0
  1227. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/hiera.yaml +8 -0
  1228. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/manifests/init.pp +5 -0
  1229. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/metadata.json +9 -0
  1230. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +9 -0
  1231. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/meta/manifests/init.pp +3 -0
  1232. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/meta/metadata.json +9 -0
  1233. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/no_provider/manifests/init.pp +2 -0
  1234. data/spec/fixtures/unit/indirector/data_binding/hiera/global.yaml +10 -0
  1235. data/spec/fixtures/unit/indirector/data_binding/hiera/invalid.yaml +1 -0
  1236. data/spec/fixtures/unit/indirector/hiera/global.yaml +10 -0
  1237. data/spec/fixtures/unit/indirector/hiera/invalid.yaml +1 -0
  1238. data/spec/fixtures/unit/module/trailing-comma.json +24 -0
  1239. data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/init.pp +3 -0
  1240. data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/wrongdefine.pp +3 -0
  1241. data/spec/fixtures/unit/parser/lexer/aliastest.pp +16 -0
  1242. data/spec/fixtures/unit/parser/lexer/append.pp +11 -0
  1243. data/spec/fixtures/unit/parser/lexer/argumentdefaults.pp +14 -0
  1244. data/spec/fixtures/unit/parser/lexer/arithmetic_expression.pp +8 -0
  1245. data/spec/fixtures/unit/parser/lexer/arraytrailingcomma.pp +3 -0
  1246. data/spec/fixtures/unit/parser/lexer/casestatement.pp +65 -0
  1247. data/spec/fixtures/unit/parser/lexer/classheirarchy.pp +15 -0
  1248. data/spec/fixtures/unit/parser/lexer/classincludes.pp +17 -0
  1249. data/spec/fixtures/unit/parser/lexer/classpathtest.pp +11 -0
  1250. data/spec/fixtures/unit/parser/lexer/collection.pp +10 -0
  1251. data/spec/fixtures/unit/parser/lexer/collection_override.pp +8 -0
  1252. data/spec/fixtures/unit/parser/lexer/collection_within_virtual_definitions.pp +20 -0
  1253. data/spec/fixtures/unit/parser/lexer/componentmetaparams.pp +11 -0
  1254. data/spec/fixtures/unit/parser/lexer/componentrequire.pp +8 -0
  1255. data/spec/fixtures/unit/parser/lexer/deepclassheirarchy.pp +23 -0
  1256. data/spec/fixtures/unit/parser/lexer/defineoverrides.pp +17 -0
  1257. data/spec/fixtures/unit/parser/lexer/emptyclass.pp +9 -0
  1258. data/spec/fixtures/unit/parser/lexer/emptyexec.pp +3 -0
  1259. data/spec/fixtures/unit/parser/lexer/emptyifelse.pp +9 -0
  1260. data/spec/fixtures/unit/parser/lexer/falsevalues.pp +3 -0
  1261. data/spec/fixtures/unit/parser/lexer/filecreate.pp +11 -0
  1262. data/spec/fixtures/unit/parser/lexer/fqdefinition.pp +5 -0
  1263. data/spec/fixtures/unit/parser/lexer/fqparents.pp +11 -0
  1264. data/spec/fixtures/unit/parser/lexer/funccomma.pp +5 -0
  1265. data/spec/fixtures/unit/parser/lexer/hash.pp +33 -0
  1266. data/spec/fixtures/unit/parser/lexer/ifexpression.pp +12 -0
  1267. data/spec/fixtures/unit/parser/lexer/implicititeration.pp +15 -0
  1268. data/spec/fixtures/unit/parser/lexer/multilinecomments.pp +10 -0
  1269. data/spec/fixtures/unit/parser/lexer/multipleclass.pp +9 -0
  1270. data/spec/fixtures/unit/parser/lexer/multipleinstances.pp +7 -0
  1271. data/spec/fixtures/unit/parser/lexer/multisubs.pp +13 -0
  1272. data/spec/fixtures/unit/parser/lexer/namevartest.pp +9 -0
  1273. data/spec/fixtures/unit/parser/lexer/scopetest.pp +13 -0
  1274. data/spec/fixtures/unit/parser/lexer/selectorvalues.pp +49 -0
  1275. data/spec/fixtures/unit/parser/lexer/simpledefaults.pp +5 -0
  1276. data/spec/fixtures/unit/parser/lexer/simpleselector.pp +38 -0
  1277. data/spec/fixtures/unit/parser/lexer/singleary.pp +19 -0
  1278. data/spec/fixtures/unit/parser/lexer/singlequote.pp +11 -0
  1279. data/spec/fixtures/unit/parser/lexer/singleselector.pp +22 -0
  1280. data/spec/fixtures/unit/parser/lexer/subclass_name_duplication.pp +11 -0
  1281. data/spec/fixtures/unit/parser/lexer/tag.pp +9 -0
  1282. data/spec/fixtures/unit/parser/lexer/tagged.pp +35 -0
  1283. data/spec/fixtures/unit/parser/lexer/virtualresources.pp +14 -0
  1284. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +10 -0
  1285. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/lib/puppet/bindings/confdirtest.rb +10 -0
  1286. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet/bindings/awesome2/default.rb +20 -0
  1287. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet_x/awesome2/echo_scheme_handler.rb +18 -0
  1288. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/lib/puppet/bindings/bad/default.rb +5 -0
  1289. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/lib/puppet/bindings/good/default.rb +6 -0
  1290. data/spec/fixtures/unit/pops/binder/config/binder_config/nolayer/binder_config.yaml +6 -0
  1291. data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +9 -0
  1292. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
  1293. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/callee.rb +5 -0
  1294. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
  1295. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/type/usee_type.rb +5 -0
  1296. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
  1297. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  1298. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
  1299. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
  1300. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
  1301. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
  1302. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller.rb +5 -0
  1303. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
  1304. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
  1305. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
  1306. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
  1307. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +87 -0
  1308. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/metadata.json +10 -0
  1309. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  1310. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  1311. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load.rb +11 -0
  1312. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load2.rb +11 -0
  1313. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load3.rb +11 -0
  1314. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load4.rb +11 -0
  1315. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load5.rb +12 -0
  1316. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/callee.rb +8 -0
  1317. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/callee_ws.rb +8 -0
  1318. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/func_with_syntax_error.rb +9 -0
  1319. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/good_func_load.rb +9 -0
  1320. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/metadata.json +9 -0
  1321. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcalled.pp +3 -0
  1322. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcaller.pp +3 -0
  1323. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcaller4.pp +3 -0
  1324. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/lib/puppet/functions/user/caller.rb +5 -0
  1325. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/lib/puppet/functions/user/caller_ws.rb +12 -0
  1326. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/lib/puppet/functions/user/callingpuppet.rb +5 -0
  1327. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/metadata.json +9 -0
  1328. data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/functions/hello.pp +3 -0
  1329. data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/manifests/init.pp +3 -0
  1330. data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/metadata.json +10 -0
  1331. data/spec/fixtures/unit/pops/loaders/loaders/no_modules/manifests/site.pp +10 -0
  1332. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/functions/hello.pp +3 -0
  1333. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/functions/subspace/hello.pp +3 -0
  1334. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/lib/puppet/functions/modulea/rb_func_a.rb +5 -0
  1335. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/lib/puppet/functions/rb_func_a.rb +5 -0
  1336. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/manifests/init.pp +3 -0
  1337. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/metadata.json +10 -0
  1338. data/spec/fixtures/unit/pops/loaders/loaders/wo_metadata_module/modules/moduleb/lib/puppet/functions/moduleb/rb_func_b.rb +6 -0
  1339. data/spec/fixtures/unit/pops/loaders/loaders/wo_metadata_module/modules/moduleb/manifests/init.pp +3 -0
  1340. data/spec/fixtures/unit/pops/parser/lexer/aliastest.pp +16 -0
  1341. data/spec/fixtures/unit/pops/parser/lexer/append.pp +11 -0
  1342. data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +14 -0
  1343. data/spec/fixtures/unit/pops/parser/lexer/arithmetic_expression.pp +8 -0
  1344. data/spec/fixtures/unit/pops/parser/lexer/arraytrailingcomma.pp +3 -0
  1345. data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +65 -0
  1346. data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +15 -0
  1347. data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +17 -0
  1348. data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +11 -0
  1349. data/spec/fixtures/unit/pops/parser/lexer/collection.pp +10 -0
  1350. data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +8 -0
  1351. data/spec/fixtures/unit/pops/parser/lexer/collection_within_virtual_definitions.pp +20 -0
  1352. data/spec/fixtures/unit/pops/parser/lexer/componentmetaparams.pp +11 -0
  1353. data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +8 -0
  1354. data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +23 -0
  1355. data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +17 -0
  1356. data/spec/fixtures/unit/pops/parser/lexer/emptyclass.pp +9 -0
  1357. data/spec/fixtures/unit/pops/parser/lexer/emptyexec.pp +3 -0
  1358. data/spec/fixtures/unit/pops/parser/lexer/emptyifelse.pp +9 -0
  1359. data/spec/fixtures/unit/pops/parser/lexer/falsevalues.pp +3 -0
  1360. data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +11 -0
  1361. data/spec/fixtures/unit/pops/parser/lexer/fqdefinition.pp +5 -0
  1362. data/spec/fixtures/unit/pops/parser/lexer/fqparents.pp +11 -0
  1363. data/spec/fixtures/unit/pops/parser/lexer/funccomma.pp +5 -0
  1364. data/spec/fixtures/unit/pops/parser/lexer/hash.pp +33 -0
  1365. data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +12 -0
  1366. data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +15 -0
  1367. data/spec/fixtures/unit/pops/parser/lexer/multilinecomments.pp +10 -0
  1368. data/spec/fixtures/unit/pops/parser/lexer/multipleclass.pp +9 -0
  1369. data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +7 -0
  1370. data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +13 -0
  1371. data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +9 -0
  1372. data/spec/fixtures/unit/pops/parser/lexer/scopetest.pp +13 -0
  1373. data/spec/fixtures/unit/pops/parser/lexer/selectorvalues.pp +49 -0
  1374. data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +5 -0
  1375. data/spec/fixtures/unit/pops/parser/lexer/simpleselector.pp +38 -0
  1376. data/spec/fixtures/unit/pops/parser/lexer/singleary.pp +19 -0
  1377. data/spec/fixtures/unit/pops/parser/lexer/singlequote.pp +11 -0
  1378. data/spec/fixtures/unit/pops/parser/lexer/singleselector.pp +22 -0
  1379. data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +11 -0
  1380. data/spec/fixtures/unit/pops/parser/lexer/tag.pp +9 -0
  1381. data/spec/fixtures/unit/pops/parser/lexer/tagged.pp +35 -0
  1382. data/spec/fixtures/unit/pops/parser/lexer/virtualresources.pp +14 -0
  1383. data/spec/fixtures/unit/provider/aix_object/aix_colon_list_real_world_input.out +1 -0
  1384. data/spec/fixtures/unit/provider/aix_object/aix_colon_list_real_world_output.out +1 -0
  1385. data/spec/fixtures/unit/provider/cron/crontab/single_line.yaml +272 -0
  1386. data/spec/fixtures/unit/provider/cron/crontab/vixie_header.txt +3 -0
  1387. data/spec/fixtures/unit/provider/cron/parsed/managed +6 -0
  1388. data/spec/fixtures/unit/provider/cron/parsed/simple +9 -0
  1389. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt +19 -0
  1390. data/spec/fixtures/unit/provider/package/gem/gem-list-single-package +4 -0
  1391. data/spec/fixtures/unit/provider/package/gem/line-with-1.8.5-warning +14 -0
  1392. data/spec/fixtures/unit/provider/package/openbsd/pkginfo.detail +19 -0
  1393. data/spec/fixtures/unit/provider/package/openbsd/pkginfo.list +10 -0
  1394. data/spec/fixtures/unit/provider/package/openbsd/pkginfo.query +1 -0
  1395. data/spec/fixtures/unit/provider/package/openbsd/pkginfo_flavors.list +2 -0
  1396. data/spec/fixtures/unit/provider/package/pkg/dummy_implicit_version +3 -0
  1397. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris10 +1 -0
  1398. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris11.certificate_warning +2 -0
  1399. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris11.ifo.installed +1 -0
  1400. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris11.ifo.known +1 -0
  1401. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris11.installed +1 -0
  1402. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris11.known +1 -0
  1403. data/spec/fixtures/unit/provider/package/pkg/incomplete +1 -0
  1404. data/spec/fixtures/unit/provider/package/pkg/solaris11 +2 -0
  1405. data/spec/fixtures/unit/provider/package/pkg/unknown_status +12 -0
  1406. data/spec/fixtures/unit/provider/package/pkgng/pkg.query +7 -0
  1407. data/spec/fixtures/unit/provider/package/pkgng/pkg.query.zsh +1 -0
  1408. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +5 -0
  1409. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  1410. data/spec/fixtures/unit/provider/package/sun/dummy.server +12 -0
  1411. data/spec/fixtures/unit/provider/package/sun/simple +24 -0
  1412. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  1413. data/spec/fixtures/unit/provider/package/yum/yum-check-update-multiline.txt +201 -0
  1414. data/spec/fixtures/unit/provider/package/yum/yum-check-update-obsoletes.txt +195 -0
  1415. data/spec/fixtures/unit/provider/package/yum/yum-check-update-plugin-output.txt +36 -0
  1416. data/spec/fixtures/unit/provider/package/yum/yum-check-update-security.txt +184 -0
  1417. data/spec/fixtures/unit/provider/package/yum/yum-check-update-simple.txt +13 -0
  1418. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  1419. data/spec/fixtures/unit/provider/package/zypper/zypper-list-updates-SLES11sp1.out +369 -0
  1420. data/spec/fixtures/unit/provider/package/zypper/zypper-list-updates-empty.out +3 -0
  1421. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  1422. data/spec/fixtures/unit/provider/parsedfile/aliases.txt +2 -0
  1423. data/spec/fixtures/unit/provider/parsedfile/simple.txt +7 -0
  1424. data/spec/fixtures/unit/provider/service/base/ps_ef.mixed_encoding +3 -0
  1425. data/spec/fixtures/unit/provider/service/gentoo/rc_update_show +30 -0
  1426. data/spec/fixtures/unit/provider/service/openbsd/rcctl_getall +6 -0
  1427. data/spec/fixtures/unit/provider/service/openrc/rcservice_list +8 -0
  1428. data/spec/fixtures/unit/provider/service/openrc/rcstatus +43 -0
  1429. data/spec/fixtures/unit/provider/service/smf/svcs_fmri.out +6 -0
  1430. data/spec/fixtures/unit/provider/service/smf/svcs_instances.out +4 -0
  1431. data/spec/fixtures/unit/provider/service/smf/svcs_multiple_fmris.out +13 -0
  1432. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +16 -0
  1433. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +9 -0
  1434. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +36 -0
  1435. data/spec/fixtures/unit/reports/tagmail/tagmail_email.conf +2 -0
  1436. data/spec/fixtures/unit/reports/tagmail/tagmail_failers.conf +3 -0
  1437. data/spec/fixtures/unit/reports/tagmail/tagmail_passers.conf +30 -0
  1438. data/spec/fixtures/unit/ssl/certificate/old-style-cert-exts.pem +33 -0
  1439. data/spec/fixtures/unit/ssl/certificate_request/old-style-cert-request.pem +28 -0
  1440. data/spec/fixtures/unit/type/user/authorized_keys +6 -0
  1441. data/spec/fixtures/unit/util/filetype/aixtab_output +44 -0
  1442. data/spec/fixtures/unit/util/filetype/suntab_output +9 -0
  1443. data/spec/fixtures/unit/util/monkey_patches/x509.pem +32 -0
  1444. data/spec/fixtures/unit/util/rdoc/basic.pp +16 -0
  1445. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +104 -0
  1446. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +108 -0
  1447. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +108 -0
  1448. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +104 -0
  1449. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +100 -0
  1450. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +104 -0
  1451. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +104 -0
  1452. data/spec/fixtures/yaml/report2.6.x.yaml +190 -0
  1453. data/spec/fixtures/yaml/test.local.yaml +16 -0
  1454. data/spec/integration/agent/logging_spec.rb +179 -0
  1455. data/spec/integration/application/agent_spec.rb +1004 -0
  1456. data/spec/integration/application/apply_spec.rb +767 -0
  1457. data/spec/integration/application/doc_spec.rb +24 -0
  1458. data/spec/integration/application/filebucket_spec.rb +255 -0
  1459. data/spec/integration/application/help_spec.rb +44 -0
  1460. data/spec/integration/application/lookup_spec.rb +275 -0
  1461. data/spec/integration/application/module_spec.rb +230 -0
  1462. data/spec/integration/application/plugin_spec.rb +145 -0
  1463. data/spec/integration/application/resource_spec.rb +68 -0
  1464. data/spec/integration/application/ssl_spec.rb +20 -0
  1465. data/spec/integration/configurer_spec.rb +166 -0
  1466. data/spec/integration/data_binding_spec.rb +278 -0
  1467. data/spec/integration/defaults_spec.rb +279 -0
  1468. data/spec/integration/directory_environments_spec.rb +67 -0
  1469. data/spec/integration/environments/default_manifest_spec.rb +215 -0
  1470. data/spec/integration/environments/setting_hooks_spec.rb +27 -0
  1471. data/spec/integration/environments/settings_interpolation_spec.rb +106 -0
  1472. data/spec/integration/environments/settings_spec.rb +128 -0
  1473. data/spec/integration/http/client_spec.rb +213 -0
  1474. data/spec/integration/indirector/catalog/compiler_spec.rb +75 -0
  1475. data/spec/integration/indirector/direct_file_server_spec.rb +90 -0
  1476. data/spec/integration/indirector/facts/facter_spec.rb +168 -0
  1477. data/spec/integration/indirector/file_content/file_server_spec.rb +106 -0
  1478. data/spec/integration/indirector/file_metadata/file_server_spec.rb +75 -0
  1479. data/spec/integration/l10n/compiler_spec.rb +37 -0
  1480. data/spec/integration/network/formats_spec.rb +90 -0
  1481. data/spec/integration/network/http/api/indirected_routes_spec.rb +60 -0
  1482. data/spec/integration/network/http_pool_spec.rb +275 -0
  1483. data/spec/integration/node/environment_spec.rb +170 -0
  1484. data/spec/integration/node/facts_spec.rb +40 -0
  1485. data/spec/integration/node_spec.rb +77 -0
  1486. data/spec/integration/parser/catalog_spec.rb +68 -0
  1487. data/spec/integration/parser/class_spec.rb +33 -0
  1488. data/spec/integration/parser/collection_spec.rb +362 -0
  1489. data/spec/integration/parser/compiler_spec.rb +1221 -0
  1490. data/spec/integration/parser/conditionals_spec.rb +95 -0
  1491. data/spec/integration/parser/dynamic_scoping_spec.rb +66 -0
  1492. data/spec/integration/parser/environment_spec.rb +47 -0
  1493. data/spec/integration/parser/node_spec.rb +163 -0
  1494. data/spec/integration/parser/parameter_defaults_spec.rb +358 -0
  1495. data/spec/integration/parser/pcore_resource_spec.rb +243 -0
  1496. data/spec/integration/parser/resource_expressions_spec.rb +222 -0
  1497. data/spec/integration/parser/scope_spec.rb +735 -0
  1498. data/spec/integration/parser/script_compiler_spec.rb +113 -0
  1499. data/spec/integration/parser/undef_param_spec.rb +95 -0
  1500. data/spec/integration/provider/file/windows_spec.rb +162 -0
  1501. data/spec/integration/resource/catalog_spec.rb +47 -0
  1502. data/spec/integration/resource/type_collection_spec.rb +88 -0
  1503. data/spec/integration/transaction/report_spec.rb +706 -0
  1504. data/spec/integration/transaction_spec.rb +553 -0
  1505. data/spec/integration/type/exec_spec.rb +101 -0
  1506. data/spec/integration/type/file_spec.rb +2012 -0
  1507. data/spec/integration/type/notify_spec.rb +46 -0
  1508. data/spec/integration/type/package_spec.rb +200 -0
  1509. data/spec/integration/type/tidy_spec.rb +45 -0
  1510. data/spec/integration/type_spec.rb +30 -0
  1511. data/spec/integration/util/autoload_spec.rb +104 -0
  1512. data/spec/integration/util/execution_spec.rb +104 -0
  1513. data/spec/integration/util/rdoc/parser_spec.rb +171 -0
  1514. data/spec/integration/util/settings_spec.rb +115 -0
  1515. data/spec/integration/util/windows/adsi_spec.rb +207 -0
  1516. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  1517. data/spec/integration/util/windows/principal_spec.rb +279 -0
  1518. data/spec/integration/util/windows/process_spec.rb +96 -0
  1519. data/spec/integration/util/windows/registry_spec.rb +334 -0
  1520. data/spec/integration/util/windows/security_spec.rb +1010 -0
  1521. data/spec/integration/util/windows/user_spec.rb +226 -0
  1522. data/spec/integration/util_spec.rb +104 -0
  1523. data/spec/lib/matchers/containment_matchers.rb +52 -0
  1524. data/spec/lib/matchers/include_in_order.rb +20 -0
  1525. data/spec/lib/matchers/include_in_order_spec.rb +30 -0
  1526. data/spec/lib/matchers/json.rb +132 -0
  1527. data/spec/lib/matchers/match_tokens2.rb +74 -0
  1528. data/spec/lib/matchers/relationship_graph_matchers.rb +48 -0
  1529. data/spec/lib/matchers/resource.rb +74 -0
  1530. data/spec/lib/puppet/certificate_factory.rb +218 -0
  1531. data/spec/lib/puppet/face/1.0.0/huzzah.rb +8 -0
  1532. data/spec/lib/puppet/face/basetest.rb +51 -0
  1533. data/spec/lib/puppet/face/huzzah/obsolete.rb +6 -0
  1534. data/spec/lib/puppet/face/huzzah.rb +8 -0
  1535. data/spec/lib/puppet/face/version_matching.rb +12 -0
  1536. data/spec/lib/puppet/indirector/indirector_testing/json.rb +6 -0
  1537. data/spec/lib/puppet/indirector/indirector_testing/memory.rb +7 -0
  1538. data/spec/lib/puppet/indirector/indirector_testing/msgpack.rb +6 -0
  1539. data/spec/lib/puppet/indirector_proxy.rb +34 -0
  1540. data/spec/lib/puppet/indirector_testing.rb +31 -0
  1541. data/spec/lib/puppet/test_ca.rb +164 -0
  1542. data/spec/lib/puppet_spec/character_encoding.rb +12 -0
  1543. data/spec/lib/puppet_spec/compiler.rb +112 -0
  1544. data/spec/lib/puppet_spec/files.rb +107 -0
  1545. data/spec/lib/puppet_spec/fixtures.rb +52 -0
  1546. data/spec/lib/puppet_spec/handler.rb +53 -0
  1547. data/spec/lib/puppet_spec/https.rb +95 -0
  1548. data/spec/lib/puppet_spec/language.rb +75 -0
  1549. data/spec/lib/puppet_spec/matchers.rb +68 -0
  1550. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +56 -0
  1551. data/spec/lib/puppet_spec/module_tool/stub_source.rb +136 -0
  1552. data/spec/lib/puppet_spec/modules.rb +82 -0
  1553. data/spec/lib/puppet_spec/network.rb +127 -0
  1554. data/spec/lib/puppet_spec/pops.rb +29 -0
  1555. data/spec/lib/puppet_spec/puppetserver.rb +179 -0
  1556. data/spec/lib/puppet_spec/scope.rb +13 -0
  1557. data/spec/lib/puppet_spec/settings.rb +39 -0
  1558. data/spec/lib/puppet_spec/ssl.rb +265 -0
  1559. data/spec/lib/puppet_spec/unindent.rb +5 -0
  1560. data/spec/lib/puppet_spec/verbose.rb +9 -0
  1561. data/spec/shared_behaviours/all_parsedfile_providers.rb +21 -0
  1562. data/spec/shared_behaviours/an_indirector_face.rb +6 -0
  1563. data/spec/shared_behaviours/documentation_on_faces.rb +261 -0
  1564. data/spec/shared_behaviours/file_server_terminus.rb +38 -0
  1565. data/spec/shared_behaviours/file_serving.rb +73 -0
  1566. data/spec/shared_behaviours/hiera_indirections.rb +98 -0
  1567. data/spec/shared_behaviours/iterative_functions.rb +68 -0
  1568. data/spec/shared_behaviours/memory_terminus.rb +28 -0
  1569. data/spec/shared_behaviours/path_parameters.rb +160 -0
  1570. data/spec/shared_behaviours/store_configs_terminus.rb +21 -0
  1571. data/spec/shared_behaviours/things_that_declare_options.rb +262 -0
  1572. data/spec/shared_contexts/checksum.rb +65 -0
  1573. data/spec/shared_contexts/digests.rb +100 -0
  1574. data/spec/shared_contexts/https.rb +29 -0
  1575. data/spec/shared_contexts/l10n.rb +32 -0
  1576. data/spec/shared_contexts/provider.rb +16 -0
  1577. data/spec/shared_contexts/types_setup.rb +204 -0
  1578. data/spec/shared_examples/rhel_package_provider.rb +398 -0
  1579. data/spec/spec_helper.rb +240 -0
  1580. data/spec/unit/agent/disabler_spec.rb +63 -0
  1581. data/spec/unit/agent/locker_spec.rb +99 -0
  1582. data/spec/unit/agent_spec.rb +423 -0
  1583. data/spec/unit/application/agent_spec.rb +640 -0
  1584. data/spec/unit/application/apply_spec.rb +559 -0
  1585. data/spec/unit/application/config_spec.rb +232 -0
  1586. data/spec/unit/application/describe_spec.rb +135 -0
  1587. data/spec/unit/application/device_spec.rb +616 -0
  1588. data/spec/unit/application/doc_spec.rb +333 -0
  1589. data/spec/unit/application/face_base_spec.rb +454 -0
  1590. data/spec/unit/application/facts_spec.rb +139 -0
  1591. data/spec/unit/application/filebucket_spec.rb +319 -0
  1592. data/spec/unit/application/indirection_base_spec.rb +50 -0
  1593. data/spec/unit/application/lookup_spec.rb +697 -0
  1594. data/spec/unit/application/resource_spec.rb +229 -0
  1595. data/spec/unit/application/ssl_spec.rb +458 -0
  1596. data/spec/unit/application_spec.rb +730 -0
  1597. data/spec/unit/certificate_factory_spec.rb +170 -0
  1598. data/spec/unit/concurrent/lock_spec.rb +29 -0
  1599. data/spec/unit/concurrent/thread_local_singleton_spec.rb +39 -0
  1600. data/spec/unit/configurer/downloader_spec.rb +252 -0
  1601. data/spec/unit/configurer/fact_handler_spec.rb +147 -0
  1602. data/spec/unit/configurer/plugin_handler_spec.rb +152 -0
  1603. data/spec/unit/configurer_spec.rb +1488 -0
  1604. data/spec/unit/confine/exists_spec.rb +82 -0
  1605. data/spec/unit/confine/false_spec.rb +78 -0
  1606. data/spec/unit/confine/feature_spec.rb +59 -0
  1607. data/spec/unit/confine/true_spec.rb +78 -0
  1608. data/spec/unit/confine/variable_spec.rb +105 -0
  1609. data/spec/unit/confine_collection_spec.rb +132 -0
  1610. data/spec/unit/confine_spec.rb +99 -0
  1611. data/spec/unit/confiner_spec.rb +61 -0
  1612. data/spec/unit/context/trusted_information_spec.rb +213 -0
  1613. data/spec/unit/context_spec.rb +217 -0
  1614. data/spec/unit/daemon_spec.rb +193 -0
  1615. data/spec/unit/data_binding_spec.rb +11 -0
  1616. data/spec/unit/data_providers/function_data_provider_spec.rb +122 -0
  1617. data/spec/unit/data_providers/hiera_data_provider_spec.rb +362 -0
  1618. data/spec/unit/datatypes_spec.rb +352 -0
  1619. data/spec/unit/defaults_spec.rb +220 -0
  1620. data/spec/unit/environments_spec.rb +1186 -0
  1621. data/spec/unit/etc_spec.rb +465 -0
  1622. data/spec/unit/external/pson_spec.rb +58 -0
  1623. data/spec/unit/face/config_spec.rb +402 -0
  1624. data/spec/unit/face/epp_face_spec.rb +385 -0
  1625. data/spec/unit/face/facts_spec.rb +78 -0
  1626. data/spec/unit/face/generate_spec.rb +293 -0
  1627. data/spec/unit/face/help_spec.rb +208 -0
  1628. data/spec/unit/face/module/install_spec.rb +40 -0
  1629. data/spec/unit/face/module/list_spec.rb +256 -0
  1630. data/spec/unit/face/module/uninstall_spec.rb +45 -0
  1631. data/spec/unit/face/module/upgrade_spec.rb +26 -0
  1632. data/spec/unit/face/node_spec.rb +129 -0
  1633. data/spec/unit/face/parser_spec.rb +310 -0
  1634. data/spec/unit/face/plugin_spec.rb +158 -0
  1635. data/spec/unit/face_spec.rb +1 -0
  1636. data/spec/unit/facter_impl_spec.rb +31 -0
  1637. data/spec/unit/file_bucket/dipper_spec.rb +405 -0
  1638. data/spec/unit/file_bucket/file_spec.rb +58 -0
  1639. data/spec/unit/file_serving/base_spec.rb +164 -0
  1640. data/spec/unit/file_serving/configuration/parser_spec.rb +206 -0
  1641. data/spec/unit/file_serving/configuration_spec.rb +240 -0
  1642. data/spec/unit/file_serving/content_spec.rb +98 -0
  1643. data/spec/unit/file_serving/fileset_spec.rb +417 -0
  1644. data/spec/unit/file_serving/http_metadata_spec.rb +109 -0
  1645. data/spec/unit/file_serving/metadata_spec.rb +551 -0
  1646. data/spec/unit/file_serving/mount/file_spec.rb +188 -0
  1647. data/spec/unit/file_serving/mount/locales_spec.rb +72 -0
  1648. data/spec/unit/file_serving/mount/modules_spec.rb +69 -0
  1649. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +72 -0
  1650. data/spec/unit/file_serving/mount/plugins_spec.rb +72 -0
  1651. data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
  1652. data/spec/unit/file_serving/mount/tasks_spec.rb +71 -0
  1653. data/spec/unit/file_serving/mount_spec.rb +30 -0
  1654. data/spec/unit/file_serving/terminus_helper_spec.rb +114 -0
  1655. data/spec/unit/file_serving/terminus_selector_spec.rb +84 -0
  1656. data/spec/unit/file_system/path_pattern_spec.rb +138 -0
  1657. data/spec/unit/file_system/uniquefile_spec.rb +245 -0
  1658. data/spec/unit/file_system_spec.rb +1198 -0
  1659. data/spec/unit/forge/errors_spec.rb +80 -0
  1660. data/spec/unit/forge/forge_spec.rb +69 -0
  1661. data/spec/unit/forge/module_release_spec.rb +331 -0
  1662. data/spec/unit/forge/repository_spec.rb +154 -0
  1663. data/spec/unit/forge_spec.rb +210 -0
  1664. data/spec/unit/functions/abs_spec.rb +70 -0
  1665. data/spec/unit/functions/all_spec.rb +97 -0
  1666. data/spec/unit/functions/annotate_spec.rb +175 -0
  1667. data/spec/unit/functions/any_spec.rb +109 -0
  1668. data/spec/unit/functions/assert_type_spec.rb +97 -0
  1669. data/spec/unit/functions/binary_file_spec.rb +46 -0
  1670. data/spec/unit/functions/break_spec.rb +207 -0
  1671. data/spec/unit/functions/call_spec.rb +131 -0
  1672. data/spec/unit/functions/camelcase_spec.rb +34 -0
  1673. data/spec/unit/functions/capitalize_spec.rb +34 -0
  1674. data/spec/unit/functions/ceiling_spec.rb +65 -0
  1675. data/spec/unit/functions/chomp_spec.rb +46 -0
  1676. data/spec/unit/functions/chop_spec.rb +38 -0
  1677. data/spec/unit/functions/compare_spec.rb +147 -0
  1678. data/spec/unit/functions/contain_spec.rb +297 -0
  1679. data/spec/unit/functions/convert_to_spec.rb +25 -0
  1680. data/spec/unit/functions/defined_spec.rb +288 -0
  1681. data/spec/unit/functions/dig_spec.rb +58 -0
  1682. data/spec/unit/functions/downcase_spec.rb +34 -0
  1683. data/spec/unit/functions/each_spec.rb +107 -0
  1684. data/spec/unit/functions/empty_spec.rb +87 -0
  1685. data/spec/unit/functions/epp_spec.rb +178 -0
  1686. data/spec/unit/functions/filter_spec.rb +145 -0
  1687. data/spec/unit/functions/find_file_spec.rb +69 -0
  1688. data/spec/unit/functions/find_template_spec.rb +69 -0
  1689. data/spec/unit/functions/flatten_spec.rb +31 -0
  1690. data/spec/unit/functions/floor_spec.rb +65 -0
  1691. data/spec/unit/functions/get_spec.rb +135 -0
  1692. data/spec/unit/functions/getvar_spec.rb +121 -0
  1693. data/spec/unit/functions/group_by_spec.rb +40 -0
  1694. data/spec/unit/functions/hiera_spec.rb +495 -0
  1695. data/spec/unit/functions/include_spec.rb +186 -0
  1696. data/spec/unit/functions/index_spec.rb +184 -0
  1697. data/spec/unit/functions/inline_epp_spec.rb +120 -0
  1698. data/spec/unit/functions/join_spec.rb +33 -0
  1699. data/spec/unit/functions/keys_spec.rb +31 -0
  1700. data/spec/unit/functions/length_spec.rb +50 -0
  1701. data/spec/unit/functions/lest_spec.rb +34 -0
  1702. data/spec/unit/functions/logging_spec.rb +62 -0
  1703. data/spec/unit/functions/lookup_fixture_spec.rb +687 -0
  1704. data/spec/unit/functions/lookup_spec.rb +3415 -0
  1705. data/spec/unit/functions/lstrip_spec.rb +30 -0
  1706. data/spec/unit/functions/map_spec.rb +163 -0
  1707. data/spec/unit/functions/match_spec.rb +74 -0
  1708. data/spec/unit/functions/max_spec.rb +158 -0
  1709. data/spec/unit/functions/min_spec.rb +158 -0
  1710. data/spec/unit/functions/module_directory_spec.rb +43 -0
  1711. data/spec/unit/functions/new_spec.rb +776 -0
  1712. data/spec/unit/functions/next_spec.rb +93 -0
  1713. data/spec/unit/functions/partition_spec.rb +40 -0
  1714. data/spec/unit/functions/reduce_spec.rb +85 -0
  1715. data/spec/unit/functions/regsubst_spec.rb +114 -0
  1716. data/spec/unit/functions/require_spec.rb +82 -0
  1717. data/spec/unit/functions/return_spec.rb +109 -0
  1718. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  1719. data/spec/unit/functions/round_spec.rb +41 -0
  1720. data/spec/unit/functions/rstrip_spec.rb +30 -0
  1721. data/spec/unit/functions/scanf_spec.rb +32 -0
  1722. data/spec/unit/functions/shared.rb +94 -0
  1723. data/spec/unit/functions/size_spec.rb +50 -0
  1724. data/spec/unit/functions/slice_spec.rb +136 -0
  1725. data/spec/unit/functions/sort_spec.rb +79 -0
  1726. data/spec/unit/functions/split_spec.rb +53 -0
  1727. data/spec/unit/functions/step_spec.rb +113 -0
  1728. data/spec/unit/functions/strftime_spec.rb +152 -0
  1729. data/spec/unit/functions/strip_spec.rb +30 -0
  1730. data/spec/unit/functions/then_spec.rb +40 -0
  1731. data/spec/unit/functions/tree_each_spec.rb +493 -0
  1732. data/spec/unit/functions/type_spec.rb +35 -0
  1733. data/spec/unit/functions/unique_spec.rb +111 -0
  1734. data/spec/unit/functions/unwrap_spec.rb +37 -0
  1735. data/spec/unit/functions/upcase_spec.rb +34 -0
  1736. data/spec/unit/functions/values_spec.rb +30 -0
  1737. data/spec/unit/functions/versioncmp_spec.rb +70 -0
  1738. data/spec/unit/functions/with_spec.rb +31 -0
  1739. data/spec/unit/functions4_spec.rb +1046 -0
  1740. data/spec/unit/gettext/config_spec.rb +156 -0
  1741. data/spec/unit/gettext/module_loading_spec.rb +53 -0
  1742. data/spec/unit/graph/key_spec.rb +41 -0
  1743. data/spec/unit/graph/rb_tree_map_spec.rb +570 -0
  1744. data/spec/unit/graph/relationship_graph_spec.rb +401 -0
  1745. data/spec/unit/graph/sequential_prioritizer_spec.rb +32 -0
  1746. data/spec/unit/graph/simple_graph_spec.rb +759 -0
  1747. data/spec/unit/hiera/scope_spec.rb +105 -0
  1748. data/spec/unit/hiera_puppet_spec.rb +159 -0
  1749. data/spec/unit/http/client_spec.rb +937 -0
  1750. data/spec/unit/http/dns_spec.rb +281 -0
  1751. data/spec/unit/http/external_client_spec.rb +201 -0
  1752. data/spec/unit/http/factory_spec.rb +160 -0
  1753. data/spec/unit/http/pool_entry_spec.rb +49 -0
  1754. data/spec/unit/http/pool_spec.rb +401 -0
  1755. data/spec/unit/http/proxy_spec.rb +347 -0
  1756. data/spec/unit/http/resolver_spec.rb +133 -0
  1757. data/spec/unit/http/response_spec.rb +75 -0
  1758. data/spec/unit/http/service/ca_spec.rb +198 -0
  1759. data/spec/unit/http/service/compiler_spec.rb +746 -0
  1760. data/spec/unit/http/service/file_server_spec.rb +309 -0
  1761. data/spec/unit/http/service/puppetserver_spec.rb +112 -0
  1762. data/spec/unit/http/service/report_spec.rb +107 -0
  1763. data/spec/unit/http/service_spec.rb +137 -0
  1764. data/spec/unit/http/session_spec.rb +309 -0
  1765. data/spec/unit/http/site_spec.rb +96 -0
  1766. data/spec/unit/indirector/catalog/compiler_spec.rb +1221 -0
  1767. data/spec/unit/indirector/catalog/json_spec.rb +66 -0
  1768. data/spec/unit/indirector/catalog/msgpack_spec.rb +11 -0
  1769. data/spec/unit/indirector/catalog/rest_spec.rb +74 -0
  1770. data/spec/unit/indirector/catalog/store_configs_spec.rb +16 -0
  1771. data/spec/unit/indirector/catalog/yaml_spec.rb +23 -0
  1772. data/spec/unit/indirector/data_binding/hiera_spec.rb +19 -0
  1773. data/spec/unit/indirector/data_binding/none_spec.rb +28 -0
  1774. data/spec/unit/indirector/direct_file_server_spec.rb +87 -0
  1775. data/spec/unit/indirector/envelope_spec.rb +32 -0
  1776. data/spec/unit/indirector/exec_spec.rb +63 -0
  1777. data/spec/unit/indirector/face_spec.rb +80 -0
  1778. data/spec/unit/indirector/facts/facter_spec.rb +290 -0
  1779. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  1780. data/spec/unit/indirector/facts/network_device_spec.rb +77 -0
  1781. data/spec/unit/indirector/facts/rest_spec.rb +99 -0
  1782. data/spec/unit/indirector/facts/store_configs_spec.rb +16 -0
  1783. data/spec/unit/indirector/facts/yaml_spec.rb +255 -0
  1784. data/spec/unit/indirector/file_bucket_file/file_spec.rb +426 -0
  1785. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +89 -0
  1786. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +46 -0
  1787. data/spec/unit/indirector/file_content/file_server_spec.rb +13 -0
  1788. data/spec/unit/indirector/file_content/file_spec.rb +13 -0
  1789. data/spec/unit/indirector/file_content/rest_spec.rb +60 -0
  1790. data/spec/unit/indirector/file_content/selector_spec.rb +9 -0
  1791. data/spec/unit/indirector/file_metadata/file_server_spec.rb +13 -0
  1792. data/spec/unit/indirector/file_metadata/file_spec.rb +57 -0
  1793. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  1794. data/spec/unit/indirector/file_metadata/rest_spec.rb +116 -0
  1795. data/spec/unit/indirector/file_metadata/selector_spec.rb +10 -0
  1796. data/spec/unit/indirector/file_server_spec.rb +288 -0
  1797. data/spec/unit/indirector/hiera_spec.rb +22 -0
  1798. data/spec/unit/indirector/indirection_spec.rb +916 -0
  1799. data/spec/unit/indirector/json_spec.rb +200 -0
  1800. data/spec/unit/indirector/memory_spec.rb +26 -0
  1801. data/spec/unit/indirector/msgpack_spec.rb +199 -0
  1802. data/spec/unit/indirector/node/exec_spec.rb +107 -0
  1803. data/spec/unit/indirector/node/json_spec.rb +33 -0
  1804. data/spec/unit/indirector/node/memory_spec.rb +16 -0
  1805. data/spec/unit/indirector/node/msgpack_spec.rb +23 -0
  1806. data/spec/unit/indirector/node/plain_spec.rb +34 -0
  1807. data/spec/unit/indirector/node/rest_spec.rb +66 -0
  1808. data/spec/unit/indirector/node/store_configs_spec.rb +16 -0
  1809. data/spec/unit/indirector/node/yaml_spec.rb +23 -0
  1810. data/spec/unit/indirector/none_spec.rb +33 -0
  1811. data/spec/unit/indirector/plain_spec.rb +26 -0
  1812. data/spec/unit/indirector/report/json_spec.rb +72 -0
  1813. data/spec/unit/indirector/report/msgpack_spec.rb +27 -0
  1814. data/spec/unit/indirector/report/processor_spec.rb +99 -0
  1815. data/spec/unit/indirector/report/rest_spec.rb +58 -0
  1816. data/spec/unit/indirector/report/yaml_spec.rb +91 -0
  1817. data/spec/unit/indirector/request_spec.rb +295 -0
  1818. data/spec/unit/indirector/resource/ral_spec.rb +89 -0
  1819. data/spec/unit/indirector/resource/store_configs_spec.rb +20 -0
  1820. data/spec/unit/indirector/rest_spec.rb +149 -0
  1821. data/spec/unit/indirector/terminus_spec.rb +264 -0
  1822. data/spec/unit/indirector/yaml_spec.rb +188 -0
  1823. data/spec/unit/indirector_spec.rb +148 -0
  1824. data/spec/unit/info_service_spec.rb +575 -0
  1825. data/spec/unit/interface/action_builder_spec.rb +216 -0
  1826. data/spec/unit/interface/action_manager_spec.rb +254 -0
  1827. data/spec/unit/interface/action_spec.rb +670 -0
  1828. data/spec/unit/interface/documentation_spec.rb +32 -0
  1829. data/spec/unit/interface/face_collection_spec.rb +219 -0
  1830. data/spec/unit/interface/option_builder_spec.rb +86 -0
  1831. data/spec/unit/interface/option_spec.rb +156 -0
  1832. data/spec/unit/interface_spec.rb +305 -0
  1833. data/spec/unit/module_spec.rb +985 -0
  1834. data/spec/unit/module_tool/application_spec.rb +25 -0
  1835. data/spec/unit/module_tool/applications/checksummer_spec.rb +115 -0
  1836. data/spec/unit/module_tool/applications/installer_spec.rb +473 -0
  1837. data/spec/unit/module_tool/applications/uninstaller_spec.rb +181 -0
  1838. data/spec/unit/module_tool/applications/unpacker_spec.rb +75 -0
  1839. data/spec/unit/module_tool/applications/upgrader_spec.rb +337 -0
  1840. data/spec/unit/module_tool/install_directory_spec.rb +70 -0
  1841. data/spec/unit/module_tool/installed_modules_spec.rb +49 -0
  1842. data/spec/unit/module_tool/metadata_spec.rb +330 -0
  1843. data/spec/unit/module_tool/tar/gnu_spec.rb +23 -0
  1844. data/spec/unit/module_tool/tar/mini_spec.rb +109 -0
  1845. data/spec/unit/module_tool/tar_spec.rb +36 -0
  1846. data/spec/unit/module_tool_spec.rb +304 -0
  1847. data/spec/unit/network/authconfig_spec.rb +8 -0
  1848. data/spec/unit/network/authorization_spec.rb +8 -0
  1849. data/spec/unit/network/format_handler_spec.rb +93 -0
  1850. data/spec/unit/network/format_spec.rb +205 -0
  1851. data/spec/unit/network/format_support_spec.rb +199 -0
  1852. data/spec/unit/network/formats_spec.rb +584 -0
  1853. data/spec/unit/network/http/api/indirected_routes_spec.rb +425 -0
  1854. data/spec/unit/network/http/api/master_spec.rb +38 -0
  1855. data/spec/unit/network/http/api/server/v3/environments_spec.rb +51 -0
  1856. data/spec/unit/network/http/api/server/v3_spec.rb +78 -0
  1857. data/spec/unit/network/http/api_spec.rb +109 -0
  1858. data/spec/unit/network/http/connection_spec.rb +636 -0
  1859. data/spec/unit/network/http/error_spec.rb +30 -0
  1860. data/spec/unit/network/http/handler_spec.rb +164 -0
  1861. data/spec/unit/network/http/request_spec.rb +108 -0
  1862. data/spec/unit/network/http/response_spec.rb +106 -0
  1863. data/spec/unit/network/http/route_spec.rb +90 -0
  1864. data/spec/unit/network/http_pool_spec.rb +145 -0
  1865. data/spec/unit/network/uri_spec.rb +47 -0
  1866. data/spec/unit/node/environment_spec.rb +612 -0
  1867. data/spec/unit/node/facts_spec.rb +225 -0
  1868. data/spec/unit/node_spec.rb +434 -0
  1869. data/spec/unit/other/selinux_spec.rb +27 -0
  1870. data/spec/unit/parameter/boolean_spec.rb +35 -0
  1871. data/spec/unit/parameter/package_options_spec.rb +43 -0
  1872. data/spec/unit/parameter/path_spec.rb +23 -0
  1873. data/spec/unit/parameter/value_collection_spec.rb +160 -0
  1874. data/spec/unit/parameter/value_spec.rb +82 -0
  1875. data/spec/unit/parameter_spec.rb +272 -0
  1876. data/spec/unit/parser/ast/block_expression_spec.rb +66 -0
  1877. data/spec/unit/parser/ast/leaf_spec.rb +136 -0
  1878. data/spec/unit/parser/compiler_spec.rb +1020 -0
  1879. data/spec/unit/parser/files_spec.rb +101 -0
  1880. data/spec/unit/parser/functions/create_resources_spec.rb +326 -0
  1881. data/spec/unit/parser/functions/digest_spec.rb +26 -0
  1882. data/spec/unit/parser/functions/fail_spec.rb +23 -0
  1883. data/spec/unit/parser/functions/file_spec.rb +99 -0
  1884. data/spec/unit/parser/functions/fqdn_rand_spec.rb +87 -0
  1885. data/spec/unit/parser/functions/generate_spec.rb +124 -0
  1886. data/spec/unit/parser/functions/hiera_array_spec.rb +12 -0
  1887. data/spec/unit/parser/functions/hiera_hash_spec.rb +12 -0
  1888. data/spec/unit/parser/functions/hiera_include_spec.rb +12 -0
  1889. data/spec/unit/parser/functions/hiera_spec.rb +12 -0
  1890. data/spec/unit/parser/functions/inline_template_spec.rb +36 -0
  1891. data/spec/unit/parser/functions/lookup_spec.rb +14 -0
  1892. data/spec/unit/parser/functions/realize_spec.rb +70 -0
  1893. data/spec/unit/parser/functions/regsubst_spec.rb +19 -0
  1894. data/spec/unit/parser/functions/scanf_spec.rb +25 -0
  1895. data/spec/unit/parser/functions/shellquote_spec.rb +66 -0
  1896. data/spec/unit/parser/functions/split_spec.rb +13 -0
  1897. data/spec/unit/parser/functions/sprintf_spec.rb +68 -0
  1898. data/spec/unit/parser/functions/tag_spec.rb +30 -0
  1899. data/spec/unit/parser/functions/tagged_spec.rb +36 -0
  1900. data/spec/unit/parser/functions/template_spec.rb +93 -0
  1901. data/spec/unit/parser/functions/versioncmp_spec.rb +28 -0
  1902. data/spec/unit/parser/functions_spec.rb +156 -0
  1903. data/spec/unit/parser/relationship_spec.rb +74 -0
  1904. data/spec/unit/parser/resource/param_spec.rb +32 -0
  1905. data/spec/unit/parser/resource_spec.rb +657 -0
  1906. data/spec/unit/parser/scope_spec.rb +698 -0
  1907. data/spec/unit/parser/templatewrapper_spec.rb +111 -0
  1908. data/spec/unit/parser/type_loader_spec.rb +202 -0
  1909. data/spec/unit/plan_spec.rb +65 -0
  1910. data/spec/unit/pops/adaptable_spec.rb +139 -0
  1911. data/spec/unit/pops/benchmark_spec.rb +123 -0
  1912. data/spec/unit/pops/containment_spec.rb +0 -0
  1913. data/spec/unit/pops/evaluator/access_ops_spec.rb +560 -0
  1914. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +317 -0
  1915. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +101 -0
  1916. data/spec/unit/pops/evaluator/collections_ops_spec.rb +108 -0
  1917. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +267 -0
  1918. data/spec/unit/pops/evaluator/conditionals_spec.rb +189 -0
  1919. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +46 -0
  1920. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1639 -0
  1921. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +75 -0
  1922. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  1923. data/spec/unit/pops/evaluator/literal_evaluator_spec.rb +43 -0
  1924. data/spec/unit/pops/evaluator/logical_ops_spec.rb +89 -0
  1925. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +181 -0
  1926. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +43 -0
  1927. data/spec/unit/pops/evaluator/variables_spec.rb +88 -0
  1928. data/spec/unit/pops/factory_rspec_helper.rb +65 -0
  1929. data/spec/unit/pops/factory_spec.rb +309 -0
  1930. data/spec/unit/pops/issues_spec.rb +210 -0
  1931. data/spec/unit/pops/label_provider_spec.rb +46 -0
  1932. data/spec/unit/pops/loaders/dependency_loader_spec.rb +122 -0
  1933. data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
  1934. data/spec/unit/pops/loaders/loader_paths_spec.rb +43 -0
  1935. data/spec/unit/pops/loaders/loader_spec.rb +516 -0
  1936. data/spec/unit/pops/loaders/loaders_spec.rb +863 -0
  1937. data/spec/unit/pops/loaders/module_loaders_spec.rb +268 -0
  1938. data/spec/unit/pops/loaders/static_loader_spec.rb +85 -0
  1939. data/spec/unit/pops/lookup/context_spec.rb +333 -0
  1940. data/spec/unit/pops/lookup/interpolation_spec.rb +389 -0
  1941. data/spec/unit/pops/lookup/lookup_spec.rb +375 -0
  1942. data/spec/unit/pops/merge_strategy_spec.rb +17 -0
  1943. data/spec/unit/pops/migration_spec.rb +51 -0
  1944. data/spec/unit/pops/model/model_spec.rb +41 -0
  1945. data/spec/unit/pops/model/pn_transformer_spec.rb +56 -0
  1946. data/spec/unit/pops/parser/epp_parser_spec.rb +115 -0
  1947. data/spec/unit/pops/parser/evaluating_parser_spec.rb +89 -0
  1948. data/spec/unit/pops/parser/lexer2_spec.rb +942 -0
  1949. data/spec/unit/pops/parser/locator_spec.rb +86 -0
  1950. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +380 -0
  1951. data/spec/unit/pops/parser/parse_calls_spec.rb +171 -0
  1952. data/spec/unit/pops/parser/parse_conditionals_spec.rb +184 -0
  1953. data/spec/unit/pops/parser/parse_containers_spec.rb +247 -0
  1954. data/spec/unit/pops/parser/parse_functions_spec.rb +19 -0
  1955. data/spec/unit/pops/parser/parse_heredoc_spec.rb +276 -0
  1956. data/spec/unit/pops/parser/parse_lambda_spec.rb +19 -0
  1957. data/spec/unit/pops/parser/parse_plan_spec.rb +47 -0
  1958. data/spec/unit/pops/parser/parse_resource_spec.rb +328 -0
  1959. data/spec/unit/pops/parser/parser_rspec_helper.rb +17 -0
  1960. data/spec/unit/pops/parser/parser_spec.rb +211 -0
  1961. data/spec/unit/pops/parser/parsing_typed_parameters_spec.rb +65 -0
  1962. data/spec/unit/pops/parser/pn_parser_spec.rb +100 -0
  1963. data/spec/unit/pops/pn_spec.rb +147 -0
  1964. data/spec/unit/pops/puppet_stack_spec.rb +108 -0
  1965. data/spec/unit/pops/resource/resource_type_impl_spec.rb +37 -0
  1966. data/spec/unit/pops/serialization/packer_spec.rb +162 -0
  1967. data/spec/unit/pops/serialization/serialization_spec.rb +458 -0
  1968. data/spec/unit/pops/serialization/to_from_hr_spec.rb +649 -0
  1969. data/spec/unit/pops/serialization/to_stringified_spec.rb +162 -0
  1970. data/spec/unit/pops/time/timespan_spec.rb +121 -0
  1971. data/spec/unit/pops/time/timestamp_spec.rb +13 -0
  1972. data/spec/unit/pops/types/class_loader_spec.rb +10 -0
  1973. data/spec/unit/pops/types/deferred_spec.rb +87 -0
  1974. data/spec/unit/pops/types/error_spec.rb +207 -0
  1975. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  1976. data/spec/unit/pops/types/p_binary_type_spec.rb +243 -0
  1977. data/spec/unit/pops/types/p_init_type_spec.rb +383 -0
  1978. data/spec/unit/pops/types/p_object_type_spec.rb +1730 -0
  1979. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +340 -0
  1980. data/spec/unit/pops/types/p_sensitive_type_spec.rb +191 -0
  1981. data/spec/unit/pops/types/p_timespan_type_spec.rb +323 -0
  1982. data/spec/unit/pops/types/p_timestamp_type_spec.rb +391 -0
  1983. data/spec/unit/pops/types/p_type_set_type_spec.rb +549 -0
  1984. data/spec/unit/pops/types/p_uri_type_spec.rb +191 -0
  1985. data/spec/unit/pops/types/recursion_guard_spec.rb +93 -0
  1986. data/spec/unit/pops/types/ruby_generator_spec.rb +874 -0
  1987. data/spec/unit/pops/types/string_converter_spec.rb +1202 -0
  1988. data/spec/unit/pops/types/task_spec.rb +411 -0
  1989. data/spec/unit/pops/types/type_acceptor_spec.rb +106 -0
  1990. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  1991. data/spec/unit/pops/types/type_calculator_spec.rb +2504 -0
  1992. data/spec/unit/pops/types/type_factory_spec.rb +322 -0
  1993. data/spec/unit/pops/types/type_formatter_spec.rb +427 -0
  1994. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +424 -0
  1995. data/spec/unit/pops/types/type_parser_spec.rb +445 -0
  1996. data/spec/unit/pops/types/types_spec.rb +755 -0
  1997. data/spec/unit/pops/utils_spec.rb +70 -0
  1998. data/spec/unit/pops/validation_spec.rb +66 -0
  1999. data/spec/unit/pops/validator/validator_spec.rb +1029 -0
  2000. data/spec/unit/pops/visitor_spec.rb +93 -0
  2001. data/spec/unit/property/boolean_spec.rb +24 -0
  2002. data/spec/unit/property/ensure_spec.rb +11 -0
  2003. data/spec/unit/property/keyvalue_spec.rb +259 -0
  2004. data/spec/unit/property/list_spec.rb +172 -0
  2005. data/spec/unit/property/ordered_list_spec.rb +59 -0
  2006. data/spec/unit/property_spec.rb +563 -0
  2007. data/spec/unit/provider/README.markdown +4 -0
  2008. data/spec/unit/provider/aix_object_spec.rb +821 -0
  2009. data/spec/unit/provider/command_spec.rb +62 -0
  2010. data/spec/unit/provider/exec/posix_spec.rb +232 -0
  2011. data/spec/unit/provider/exec/shell_spec.rb +53 -0
  2012. data/spec/unit/provider/exec/windows_spec.rb +105 -0
  2013. data/spec/unit/provider/exec_spec.rb +244 -0
  2014. data/spec/unit/provider/file/posix_spec.rb +230 -0
  2015. data/spec/unit/provider/file/windows_spec.rb +152 -0
  2016. data/spec/unit/provider/group/aix_spec.rb +91 -0
  2017. data/spec/unit/provider/group/directoryservice_spec.rb +33 -0
  2018. data/spec/unit/provider/group/groupadd_spec.rb +284 -0
  2019. data/spec/unit/provider/group/ldap_spec.rb +98 -0
  2020. data/spec/unit/provider/group/pw_spec.rb +78 -0
  2021. data/spec/unit/provider/group/windows_adsi_spec.rb +398 -0
  2022. data/spec/unit/provider/ldap_spec.rb +242 -0
  2023. data/spec/unit/provider/nameservice/directoryservice_spec.rb +157 -0
  2024. data/spec/unit/provider/nameservice_spec.rb +398 -0
  2025. data/spec/unit/provider/package/aix_spec.rb +158 -0
  2026. data/spec/unit/provider/package/appdmg_spec.rb +42 -0
  2027. data/spec/unit/provider/package/apt_spec.rb +302 -0
  2028. data/spec/unit/provider/package/aptitude_spec.rb +46 -0
  2029. data/spec/unit/provider/package/aptrpm_spec.rb +42 -0
  2030. data/spec/unit/provider/package/base_spec.rb +19 -0
  2031. data/spec/unit/provider/package/dnf_spec.rb +55 -0
  2032. data/spec/unit/provider/package/dnfmodule_spec.rb +256 -0
  2033. data/spec/unit/provider/package/dpkg_spec.rb +444 -0
  2034. data/spec/unit/provider/package/freebsd_spec.rb +51 -0
  2035. data/spec/unit/provider/package/gem_spec.rb +487 -0
  2036. data/spec/unit/provider/package/hpux_spec.rb +48 -0
  2037. data/spec/unit/provider/package/macports_spec.rb +142 -0
  2038. data/spec/unit/provider/package/nim_spec.rb +267 -0
  2039. data/spec/unit/provider/package/openbsd_spec.rb +417 -0
  2040. data/spec/unit/provider/package/opkg_spec.rb +180 -0
  2041. data/spec/unit/provider/package/pacman_spec.rb +438 -0
  2042. data/spec/unit/provider/package/pip2_spec.rb +38 -0
  2043. data/spec/unit/provider/package/pip3_spec.rb +38 -0
  2044. data/spec/unit/provider/package/pip_spec.rb +504 -0
  2045. data/spec/unit/provider/package/pkg_spec.rb +473 -0
  2046. data/spec/unit/provider/package/pkgdmg_spec.rb +166 -0
  2047. data/spec/unit/provider/package/pkgin_spec.rb +185 -0
  2048. data/spec/unit/provider/package/pkgng_spec.rb +228 -0
  2049. data/spec/unit/provider/package/pkgutil_spec.rb +231 -0
  2050. data/spec/unit/provider/package/portage_spec.rb +226 -0
  2051. data/spec/unit/provider/package/puppet_gem_spec.rb +130 -0
  2052. data/spec/unit/provider/package/puppetserver_gem_spec.rb +139 -0
  2053. data/spec/unit/provider/package/rpm_spec.rb +674 -0
  2054. data/spec/unit/provider/package/sun_spec.rb +112 -0
  2055. data/spec/unit/provider/package/tdnf_spec.rb +15 -0
  2056. data/spec/unit/provider/package/up2date_spec.rb +22 -0
  2057. data/spec/unit/provider/package/urpmi_spec.rb +84 -0
  2058. data/spec/unit/provider/package/windows/exe_package_spec.rb +114 -0
  2059. data/spec/unit/provider/package/windows/msi_package_spec.rb +111 -0
  2060. data/spec/unit/provider/package/windows/package_spec.rb +180 -0
  2061. data/spec/unit/provider/package/windows_spec.rb +272 -0
  2062. data/spec/unit/provider/package/yum_spec.rb +512 -0
  2063. data/spec/unit/provider/package/zypper_spec.rb +327 -0
  2064. data/spec/unit/provider/package_targetable_spec.rb +60 -0
  2065. data/spec/unit/provider/parsedfile_spec.rb +263 -0
  2066. data/spec/unit/provider/service/base_spec.rb +109 -0
  2067. data/spec/unit/provider/service/bsd_spec.rb +127 -0
  2068. data/spec/unit/provider/service/daemontools_spec.rb +190 -0
  2069. data/spec/unit/provider/service/debian_spec.rb +158 -0
  2070. data/spec/unit/provider/service/freebsd_spec.rb +92 -0
  2071. data/spec/unit/provider/service/gentoo_spec.rb +250 -0
  2072. data/spec/unit/provider/service/init_spec.rb +316 -0
  2073. data/spec/unit/provider/service/launchd_spec.rb +425 -0
  2074. data/spec/unit/provider/service/openbsd_spec.rb +196 -0
  2075. data/spec/unit/provider/service/openrc_spec.rb +231 -0
  2076. data/spec/unit/provider/service/openwrt_spec.rb +101 -0
  2077. data/spec/unit/provider/service/rcng_spec.rb +40 -0
  2078. data/spec/unit/provider/service/redhat_spec.rb +190 -0
  2079. data/spec/unit/provider/service/runit_spec.rb +164 -0
  2080. data/spec/unit/provider/service/smf_spec.rb +526 -0
  2081. data/spec/unit/provider/service/src_spec.rb +186 -0
  2082. data/spec/unit/provider/service/systemd_spec.rb +576 -0
  2083. data/spec/unit/provider/service/upstart_spec.rb +681 -0
  2084. data/spec/unit/provider/service/windows_spec.rb +475 -0
  2085. data/spec/unit/provider/user/aix_spec.rb +320 -0
  2086. data/spec/unit/provider/user/directoryservice_spec.rb +1256 -0
  2087. data/spec/unit/provider/user/hpux_spec.rb +72 -0
  2088. data/spec/unit/provider/user/ldap_spec.rb +286 -0
  2089. data/spec/unit/provider/user/openbsd_spec.rb +76 -0
  2090. data/spec/unit/provider/user/pw_spec.rb +252 -0
  2091. data/spec/unit/provider/user/user_role_add_spec.rb +374 -0
  2092. data/spec/unit/provider/user/useradd_spec.rb +849 -0
  2093. data/spec/unit/provider/user/windows_adsi_spec.rb +407 -0
  2094. data/spec/unit/provider_spec.rb +904 -0
  2095. data/spec/unit/puppet_pal_2pec.rb +1033 -0
  2096. data/spec/unit/puppet_pal_catalog_spec.rb +962 -0
  2097. data/spec/unit/puppet_pal_spec.rb +3 -0
  2098. data/spec/unit/puppet_spec.rb +127 -0
  2099. data/spec/unit/relationship_spec.rb +202 -0
  2100. data/spec/unit/reports/http_spec.rb +119 -0
  2101. data/spec/unit/reports/store_spec.rb +69 -0
  2102. data/spec/unit/reports_spec.rb +68 -0
  2103. data/spec/unit/resource/catalog_spec.rb +1160 -0
  2104. data/spec/unit/resource/status_spec.rb +216 -0
  2105. data/spec/unit/resource/type_collection_spec.rb +332 -0
  2106. data/spec/unit/resource/type_spec.rb +876 -0
  2107. data/spec/unit/resource_spec.rb +1189 -0
  2108. data/spec/unit/scheduler/job_spec.rb +78 -0
  2109. data/spec/unit/scheduler/scheduler_spec.rb +115 -0
  2110. data/spec/unit/scheduler/splay_job_spec.rb +34 -0
  2111. data/spec/unit/settings/array_setting_spec.rb +39 -0
  2112. data/spec/unit/settings/autosign_setting_spec.rb +104 -0
  2113. data/spec/unit/settings/certificate_revocation_setting_spec.rb +37 -0
  2114. data/spec/unit/settings/config_file_spec.rb +147 -0
  2115. data/spec/unit/settings/directory_setting_spec.rb +27 -0
  2116. data/spec/unit/settings/duration_setting_spec.rb +48 -0
  2117. data/spec/unit/settings/enum_setting_spec.rb +27 -0
  2118. data/spec/unit/settings/environment_conf_spec.rb +133 -0
  2119. data/spec/unit/settings/file_setting_spec.rb +344 -0
  2120. data/spec/unit/settings/http_extra_headers_spec.rb +62 -0
  2121. data/spec/unit/settings/ini_file_spec.rb +550 -0
  2122. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  2123. data/spec/unit/settings/path_setting_spec.rb +29 -0
  2124. data/spec/unit/settings/port_setting_spec.rb +31 -0
  2125. data/spec/unit/settings/priority_setting_spec.rb +65 -0
  2126. data/spec/unit/settings/server_list_setting_spec.rb +21 -0
  2127. data/spec/unit/settings/string_setting_spec.rb +74 -0
  2128. data/spec/unit/settings/terminus_setting_spec.rb +27 -0
  2129. data/spec/unit/settings/value_translator_spec.rb +75 -0
  2130. data/spec/unit/settings_spec.rb +2343 -0
  2131. data/spec/unit/ssl/base_spec.rb +125 -0
  2132. data/spec/unit/ssl/certificate_request_attributes_spec.rb +80 -0
  2133. data/spec/unit/ssl/certificate_request_spec.rb +373 -0
  2134. data/spec/unit/ssl/certificate_spec.rb +183 -0
  2135. data/spec/unit/ssl/digest_spec.rb +34 -0
  2136. data/spec/unit/ssl/oids_spec.rb +73 -0
  2137. data/spec/unit/ssl/ssl_provider_spec.rb +637 -0
  2138. data/spec/unit/ssl/state_machine_spec.rb +977 -0
  2139. data/spec/unit/ssl/verifier_spec.rb +102 -0
  2140. data/spec/unit/task_spec.rb +345 -0
  2141. data/spec/unit/test/test_helper_spec.rb +17 -0
  2142. data/spec/unit/transaction/additional_resource_generator_spec.rb +534 -0
  2143. data/spec/unit/transaction/event_manager_spec.rb +365 -0
  2144. data/spec/unit/transaction/event_spec.rb +198 -0
  2145. data/spec/unit/transaction/persistence_spec.rb +276 -0
  2146. data/spec/unit/transaction/report_spec.rb +772 -0
  2147. data/spec/unit/transaction/resource_harness_spec.rb +625 -0
  2148. data/spec/unit/transaction_spec.rb +1037 -0
  2149. data/spec/unit/type/README.markdown +4 -0
  2150. data/spec/unit/type/component_spec.rb +52 -0
  2151. data/spec/unit/type/exec_spec.rb +932 -0
  2152. data/spec/unit/type/file/checksum_spec.rb +104 -0
  2153. data/spec/unit/type/file/checksum_value_spec.rb +285 -0
  2154. data/spec/unit/type/file/content_spec.rb +440 -0
  2155. data/spec/unit/type/file/ctime_spec.rb +33 -0
  2156. data/spec/unit/type/file/ensure_spec.rb +121 -0
  2157. data/spec/unit/type/file/group_spec.rb +65 -0
  2158. data/spec/unit/type/file/mode_spec.rb +220 -0
  2159. data/spec/unit/type/file/mtime_spec.rb +33 -0
  2160. data/spec/unit/type/file/owner_spec.rb +63 -0
  2161. data/spec/unit/type/file/selinux_spec.rb +86 -0
  2162. data/spec/unit/type/file/source_spec.rb +730 -0
  2163. data/spec/unit/type/file/type_spec.rb +18 -0
  2164. data/spec/unit/type/file_spec.rb +1746 -0
  2165. data/spec/unit/type/filebucket_spec.rb +104 -0
  2166. data/spec/unit/type/group_spec.rb +105 -0
  2167. data/spec/unit/type/noop_metaparam_spec.rb +37 -0
  2168. data/spec/unit/type/package/package_settings_spec.rb +156 -0
  2169. data/spec/unit/type/package_spec.rb +396 -0
  2170. data/spec/unit/type/resources_spec.rb +362 -0
  2171. data/spec/unit/type/schedule_spec.rb +621 -0
  2172. data/spec/unit/type/service_spec.rb +458 -0
  2173. data/spec/unit/type/stage_spec.rb +7 -0
  2174. data/spec/unit/type/tidy_spec.rb +493 -0
  2175. data/spec/unit/type/user_spec.rb +553 -0
  2176. data/spec/unit/type/whit_spec.rb +9 -0
  2177. data/spec/unit/type_spec.rb +1473 -0
  2178. data/spec/unit/util/at_fork_spec.rb +150 -0
  2179. data/spec/unit/util/autoload_spec.rb +330 -0
  2180. data/spec/unit/util/backups_spec.rb +130 -0
  2181. data/spec/unit/util/character_encoding_spec.rb +186 -0
  2182. data/spec/unit/util/checksums_spec.rb +223 -0
  2183. data/spec/unit/util/colors_spec.rb +44 -0
  2184. data/spec/unit/util/command_line_spec.rb +200 -0
  2185. data/spec/unit/util/command_line_utils/puppet_option_parser_spec.rb +129 -0
  2186. data/spec/unit/util/constant_inflector_spec.rb +55 -0
  2187. data/spec/unit/util/diff_spec.rb +46 -0
  2188. data/spec/unit/util/docs_spec.rb +100 -0
  2189. data/spec/unit/util/errors_spec.rb +36 -0
  2190. data/spec/unit/util/execution_spec.rb +942 -0
  2191. data/spec/unit/util/execution_stub_spec.rb +38 -0
  2192. data/spec/unit/util/feature_spec.rb +129 -0
  2193. data/spec/unit/util/filetype_spec.rb +223 -0
  2194. data/spec/unit/util/inifile_spec.rb +510 -0
  2195. data/spec/unit/util/json_lockfile_spec.rb +48 -0
  2196. data/spec/unit/util/json_spec.rb +126 -0
  2197. data/spec/unit/util/ldap/connection_spec.rb +162 -0
  2198. data/spec/unit/util/ldap/generator_spec.rb +49 -0
  2199. data/spec/unit/util/ldap/manager_spec.rb +612 -0
  2200. data/spec/unit/util/lockfile_spec.rb +117 -0
  2201. data/spec/unit/util/log/destinations_spec.rb +258 -0
  2202. data/spec/unit/util/log_spec.rb +479 -0
  2203. data/spec/unit/util/logging_spec.rb +618 -0
  2204. data/spec/unit/util/metric_spec.rb +89 -0
  2205. data/spec/unit/util/monkey_patches_spec.rb +119 -0
  2206. data/spec/unit/util/multi_match_spec.rb +38 -0
  2207. data/spec/unit/util/network_device/config_spec.rb +91 -0
  2208. data/spec/unit/util/network_device/transport/base_spec.rb +40 -0
  2209. data/spec/unit/util/network_device_spec.rb +43 -0
  2210. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  2211. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  2212. data/spec/unit/util/package/version/range_spec.rb +175 -0
  2213. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  2214. data/spec/unit/util/package_spec.rb +19 -0
  2215. data/spec/unit/util/pidlock_spec.rb +333 -0
  2216. data/spec/unit/util/plist_spec.rb +168 -0
  2217. data/spec/unit/util/posix_spec.rb +630 -0
  2218. data/spec/unit/util/profiler/aggregate_spec.rb +55 -0
  2219. data/spec/unit/util/profiler/around_profiler_spec.rb +61 -0
  2220. data/spec/unit/util/profiler/logging_spec.rb +70 -0
  2221. data/spec/unit/util/profiler/object_counts_spec.rb +13 -0
  2222. data/spec/unit/util/profiler/wall_clock_spec.rb +13 -0
  2223. data/spec/unit/util/profiler_spec.rb +47 -0
  2224. data/spec/unit/util/rdoc_spec.rb +55 -0
  2225. data/spec/unit/util/reference_spec.rb +38 -0
  2226. data/spec/unit/util/resource_template_spec.rb +57 -0
  2227. data/spec/unit/util/retry_action_spec.rb +84 -0
  2228. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  2229. data/spec/unit/util/rubygems_spec.rb +47 -0
  2230. data/spec/unit/util/run_mode_spec.rb +185 -0
  2231. data/spec/unit/util/selinux_spec.rb +422 -0
  2232. data/spec/unit/util/skip_tags_spec.rb +14 -0
  2233. data/spec/unit/util/splayer_spec.rb +44 -0
  2234. data/spec/unit/util/storage_spec.rb +330 -0
  2235. data/spec/unit/util/suidmanager_spec.rb +278 -0
  2236. data/spec/unit/util/symbolic_file_mode_spec.rb +180 -0
  2237. data/spec/unit/util/tag_set_spec.rb +52 -0
  2238. data/spec/unit/util/tagging_spec.rb +246 -0
  2239. data/spec/unit/util/terminal_spec.rb +41 -0
  2240. data/spec/unit/util/user_attr_spec.rb +45 -0
  2241. data/spec/unit/util/warnings_spec.rb +45 -0
  2242. data/spec/unit/util/watched_file_spec.rb +52 -0
  2243. data/spec/unit/util/watcher/periodic_watcher_spec.rb +52 -0
  2244. data/spec/unit/util/watcher_spec.rb +86 -0
  2245. data/spec/unit/util/windows/access_control_entry_spec.rb +66 -0
  2246. data/spec/unit/util/windows/access_control_list_spec.rb +132 -0
  2247. data/spec/unit/util/windows/adsi_spec.rb +679 -0
  2248. data/spec/unit/util/windows/api_types_spec.rb +184 -0
  2249. data/spec/unit/util/windows/eventlog_spec.rb +120 -0
  2250. data/spec/unit/util/windows/file_spec.rb +88 -0
  2251. data/spec/unit/util/windows/root_certs_spec.rb +16 -0
  2252. data/spec/unit/util/windows/security_descriptor_spec.rb +115 -0
  2253. data/spec/unit/util/windows/service_spec.rb +677 -0
  2254. data/spec/unit/util/windows/sid_spec.rb +338 -0
  2255. data/spec/unit/util/windows/string_spec.rb +55 -0
  2256. data/spec/unit/util/windows_spec.rb +23 -0
  2257. data/spec/unit/util/yaml_spec.rb +171 -0
  2258. data/spec/unit/util_spec.rb +960 -0
  2259. data/spec/unit/version_spec.rb +61 -0
  2260. data/spec/unit/x509/cert_provider_spec.rb +614 -0
  2261. data/spec/unit/x509/pem_store_spec.rb +160 -0
  2262. metadata +2468 -38
  2263. data/lib/puppet/external/pson/common.rb +0 -374
  2264. data/lib/puppet/external/pson/pure/generator.rb +0 -395
  2265. data/lib/puppet/external/pson/pure/parser.rb +0 -308
  2266. data/lib/puppet/external/pson/pure.rb +0 -15
  2267. data/lib/puppet/external/pson/version.rb +0 -8
@@ -0,0 +1,3415 @@
1
+ require 'spec_helper'
2
+ require 'puppet_spec/compiler'
3
+ require 'puppet_spec/files'
4
+ require 'puppet/pops'
5
+ require 'deep_merge/core'
6
+
7
+ describe "The lookup function" do
8
+ include PuppetSpec::Compiler
9
+ include PuppetSpec::Files
10
+
11
+ let(:env_name) { 'spec' }
12
+ let(:code_dir_files) { {} }
13
+ let(:code_dir) { tmpdir('code') }
14
+ let(:ruby_dir) { tmpdir('ruby') }
15
+ let(:env_modules) { {} }
16
+ let(:env_hiera_yaml) do
17
+ <<-YAML.unindent
18
+ ---
19
+ version: 5
20
+ hierarchy:
21
+ - name: "Common"
22
+ data_hash: yaml_data
23
+ path: "common.yaml"
24
+ YAML
25
+ end
26
+
27
+ let(:env_data) { {} }
28
+
29
+ let(:environment_files) do
30
+ {
31
+ env_name => {
32
+ 'modules' => env_modules,
33
+ 'hiera.yaml' => env_hiera_yaml,
34
+ 'data' => env_data
35
+ }
36
+ }
37
+ end
38
+
39
+ let(:logs) { [] }
40
+ let(:scope_additions ) { {} }
41
+ let(:notices) { logs.select { |log| log.level == :notice }.map { |log| log.message } }
42
+ let(:warnings) { logs.select { |log| log.level == :warning }.map { |log| log.message } }
43
+ let(:debugs) { logs.select { |log| log.level == :debug }.map { |log| log.message } }
44
+ let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(populated_env_dir, env_name, 'modules')]) }
45
+ let(:environments) { Puppet::Environments::Directories.new(populated_env_dir, []) }
46
+ let(:node) { Puppet::Node.new('test_lookup', :environment => env) }
47
+ let(:compiler) { Puppet::Parser::Compiler.new(node) }
48
+ let(:lookup_func) { Puppet.lookup(:loaders).puppet_system_loader.load(:function, 'lookup') }
49
+ let(:invocation_with_explain) { Puppet::Pops::Lookup::Invocation.new(compiler.topscope, {}, {}, true) }
50
+ let(:explanation) { invocation_with_explain.explainer.explain }
51
+
52
+ let(:populated_code_dir) do
53
+ dir_contained_in(code_dir, code_dir_files)
54
+ code_dir
55
+ end
56
+
57
+ let(:env_dir) do
58
+ d = File.join(populated_code_dir, 'environments')
59
+ Dir.mkdir(d)
60
+ d
61
+ end
62
+
63
+ let(:populated_env_dir) do
64
+ dir_contained_in(env_dir, environment_files)
65
+ env_dir
66
+ end
67
+
68
+ before(:each) do
69
+ Puppet.settings[:codedir] = code_dir
70
+ Puppet.push_context(:environments => environments, :current_environment => env)
71
+ end
72
+
73
+ after(:each) do
74
+ Puppet.pop_context
75
+ if Object.const_defined?(:Hiera)
76
+ Hiera.send(:remove_instance_variable, :@config) if Hiera.instance_variable_defined?(:@config)
77
+ Hiera.send(:remove_instance_variable, :@logger) if Hiera.instance_variable_defined?(:@logger)
78
+ if Hiera.const_defined?(:Config)
79
+ Hiera::Config.send(:remove_instance_variable, :@config) if Hiera::Config.instance_variable_defined?(:@config)
80
+ end
81
+ if Hiera.const_defined?(:Backend) && Hiera::Backend.respond_to?(:clear!)
82
+ Hiera::Backend.clear!
83
+ end
84
+ end
85
+ end
86
+
87
+ def collect_notices(code, explain = false, &block)
88
+ Puppet[:code] = code
89
+ Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
90
+ scope = compiler.topscope
91
+ scope['domain'] = 'example.com'
92
+ scope_additions.each_pair { |k, v| scope[k] = v }
93
+ if explain
94
+ begin
95
+ invocation_with_explain.lookup('dummy', nil) do
96
+ if block_given?
97
+ compiler.compile { |catalog| block.call(compiler.topscope); catalog }
98
+ else
99
+ compiler.compile
100
+ end
101
+ end
102
+ rescue RuntimeError => e
103
+ invocation_with_explain.report_text { e.message }
104
+ end
105
+ else
106
+ if block_given?
107
+ compiler.compile { |catalog| block.call(compiler.topscope); catalog }
108
+ else
109
+ compiler.compile
110
+ end
111
+ end
112
+ end
113
+ nil
114
+ end
115
+
116
+ def lookup(key, options = {}, explain = false, type = nil)
117
+ value_type = type ? ", #{type}" : ''
118
+ nc_opts = options.empty? ? '' : ", #{Puppet::Pops::Types::TypeFormatter.string(options)}"
119
+ keys = key.is_a?(Array) ? key : [key]
120
+ collect_notices(keys.map { |k| "notice(String(lookup('#{k}'#{value_type}#{nc_opts}), '%p'))" }.join("\n"), explain)
121
+ if explain
122
+ explanation
123
+ else
124
+ result = notices.map { |n| Puppet::Pops::Types::TypeParser.singleton.parse_literal(n) }
125
+ key.is_a?(Array) ? result : result[0]
126
+ end
127
+ end
128
+
129
+ def explain(key, options = {})
130
+ lookup(key, options, true)[1]
131
+ explanation
132
+ end
133
+
134
+ context 'with faulty hiera.yaml configuration' do
135
+ context 'in global layer' do
136
+ let(:global_data) do
137
+ {
138
+ 'common.yaml' => <<-YAML.unindent
139
+ a: value a (from global)
140
+ YAML
141
+ }
142
+ end
143
+
144
+ let(:code_dir_files) do
145
+ {
146
+ 'hiera.yaml' => hiera_yaml,
147
+ 'data' => global_data
148
+ }
149
+ end
150
+
151
+ before(:each) do
152
+ # Need to set here since spec_helper defines these settings in its "before each"
153
+ Puppet.settings[:codedir] = populated_code_dir
154
+ Puppet.settings[:hiera_config] = File.join(code_dir, 'hiera.yaml')
155
+ end
156
+
157
+ context 'using a not yet supported hiera version' do
158
+ let(:hiera_yaml) { <<-YAML.unindent }
159
+ version: 6
160
+ YAML
161
+
162
+ it 'fails and reports error' do
163
+ expect { lookup('a') }.to raise_error("This runtime does not support hiera.yaml version 6 (file: #{code_dir}/hiera.yaml)")
164
+ end
165
+ end
166
+
167
+ context 'with multiply defined backend using hiera version 3' do
168
+ let(:hiera_yaml) { <<-YAML.unindent }
169
+ :version: 3
170
+ :backends:
171
+ - yaml
172
+ - json
173
+ - yaml
174
+ YAML
175
+
176
+ it 'fails and reports error' do
177
+ expect { lookup('a') }.to raise_error(
178
+ "Backend 'yaml' is defined more than once. First defined at (line: 3) (file: #{code_dir}/hiera.yaml, line: 5)")
179
+ end
180
+ end
181
+
182
+ context 'using hiera version 4' do
183
+ let(:hiera_yaml) { <<-YAML.unindent }
184
+ version: 4
185
+ YAML
186
+
187
+ it 'fails and reports error' do
188
+ expect { lookup('a') }.to raise_error(
189
+ "hiera.yaml version 4 cannot be used in the global layer (file: #{code_dir}/hiera.yaml)")
190
+ end
191
+ end
192
+
193
+ context 'using hiera version 5' do
194
+ context 'with multiply defined hierarchy' do
195
+ let(:hiera_yaml) { <<-YAML.unindent }
196
+ version: 5
197
+ hierarchy:
198
+ - name: Common
199
+ path: common.yaml
200
+ - name: Other
201
+ path: other.yaml
202
+ - name: Common
203
+ path: common.yaml
204
+ YAML
205
+
206
+ it 'fails and reports error' do
207
+ expect { lookup('a') }.to raise_error(
208
+ "Hierarchy name 'Common' defined more than once. First defined at (line: 3) (file: #{code_dir}/hiera.yaml, line: 7)")
209
+ end
210
+ end
211
+
212
+ context 'with hiera3_backend that is provided as data_hash function' do
213
+ let(:hiera_yaml) { <<-YAML.unindent }
214
+ version: 5
215
+ hierarchy:
216
+ - name: Common
217
+ hiera3_backend: hocon
218
+ path: common.conf
219
+ YAML
220
+
221
+ it 'fails and reports error' do
222
+ expect { lookup('a') }.to raise_error(
223
+ "Use \"data_hash: hocon_data\" instead of \"hiera3_backend: hocon\" (file: #{code_dir}/hiera.yaml, line: 4)")
224
+ end
225
+ end
226
+
227
+ context 'with no data provider function defined' do
228
+ let(:hiera_yaml) { <<-YAML.unindent }
229
+ version: 5
230
+ defaults:
231
+ datadir: data
232
+ hierarchy:
233
+ - name: Common
234
+ path: common.txt
235
+ YAML
236
+
237
+ it 'fails and reports error' do
238
+ expect { lookup('a') }.to raise_error(
239
+ "One of data_hash, lookup_key, data_dig, or hiera3_backend must be defined in hierarchy 'Common' (file: #{code_dir}/hiera.yaml)")
240
+ end
241
+ end
242
+
243
+ context 'with multiple data providers in defaults' do
244
+ let(:hiera_yaml) { <<-YAML.unindent }
245
+ version: 5
246
+ defaults:
247
+ data_hash: yaml_data
248
+ lookup_key: eyaml_lookup_key
249
+ datadir: data
250
+ hierarchy:
251
+ - name: Common
252
+ path: common.txt
253
+ YAML
254
+
255
+ it 'fails and reports error' do
256
+ expect { lookup('a') }.to raise_error(
257
+ "Only one of data_hash, lookup_key, data_dig, or hiera3_backend can be defined in defaults (file: #{code_dir}/hiera.yaml)")
258
+ end
259
+ end
260
+
261
+ context 'with non existing data provider function' do
262
+ let(:hiera_yaml) { <<-YAML.unindent }
263
+ version: 5
264
+ hierarchy:
265
+ - name: Common
266
+ data_hash: nonesuch_txt_data
267
+ path: common.yaml
268
+ YAML
269
+
270
+ it 'fails and reports error' do
271
+ Puppet[:strict] = :error
272
+ expect { lookup('a') }.to raise_error(
273
+ "Unable to find 'data_hash' function named 'nonesuch_txt_data' (file: #{code_dir}/hiera.yaml)")
274
+ end
275
+ end
276
+
277
+ context 'with a declared default_hierarchy' do
278
+ let(:hiera_yaml) { <<-YAML.unindent }
279
+ version: 5
280
+ hierarchy:
281
+ - name: Common
282
+ path: common.yaml
283
+ default_hierarchy:
284
+ - name: Defaults
285
+ path: defaults.yaml
286
+ YAML
287
+
288
+ it 'fails and reports error' do
289
+ expect { lookup('a') }.to raise_error(
290
+ "'default_hierarchy' is only allowed in the module layer (file: #{code_dir}/hiera.yaml, line: 5)")
291
+ end
292
+ end
293
+
294
+ context 'with missing variables' do
295
+ let(:scope_additions) { { 'fqdn' => 'test.example.com' } }
296
+ let(:hiera_yaml) { <<-YAML.unindent }
297
+ version: 5
298
+ hierarchy:
299
+ - name: Common # don't report this line %{::nonesuch}
300
+ path: "%{::fqdn}/%{::nonesuch}/data.yaml"
301
+ YAML
302
+
303
+ it 'fails and reports errors when strict == error' do
304
+ expect { lookup('a') }.to raise_error("Function lookup() did not find a value for the name 'a'")
305
+ end
306
+ end
307
+
308
+ context 'using interpolation functions' do
309
+ let(:hiera_yaml) { <<-YAML.unindent }
310
+ version: 5
311
+ hierarchy:
312
+ - name: Common # don't report this line %{::nonesuch}
313
+ path: "%{lookup('fqdn')}/data.yaml"
314
+ YAML
315
+
316
+ it 'fails and reports errors when strict == error' do
317
+ expect { lookup('a') }.to raise_error("Interpolation using method syntax is not allowed in this context (file: #{code_dir}/hiera.yaml)")
318
+ end
319
+ end
320
+ end
321
+ end
322
+
323
+ context 'in environment layer' do
324
+ context 'using hiera version 4' do
325
+ context 'with an unknown backend' do
326
+ let(:env_hiera_yaml) { <<-YAML.unindent }
327
+ version: 4
328
+ hierarchy:
329
+ - name: Common
330
+ backend: nonesuch
331
+ path: common.yaml
332
+ YAML
333
+
334
+ it 'fails and reports error' do
335
+ expect { lookup('a') }.to raise_error(
336
+ "No data provider is registered for backend 'nonesuch' (file: #{env_dir}/spec/hiera.yaml, line: 4)")
337
+ end
338
+ end
339
+
340
+ context 'with multiply defined hierarchy' do
341
+ let(:env_hiera_yaml) { <<-YAML.unindent }
342
+ version: 4
343
+ hierarchy:
344
+ - name: Common
345
+ backend: yaml
346
+ path: common.yaml
347
+ - name: Other
348
+ backend: yaml
349
+ path: other.yaml
350
+ - name: Common
351
+ backend: yaml
352
+ path: common.yaml
353
+ YAML
354
+
355
+ it 'fails and reports error' do
356
+ expect { lookup('a') }.to raise_error(
357
+ "Hierarchy name 'Common' defined more than once. First defined at (line: 3) (file: #{env_dir}/spec/hiera.yaml, line: 9)")
358
+ end
359
+ end
360
+ end
361
+
362
+ context 'using hiera version 5' do
363
+ context 'with a hiera3_backend declaration' do
364
+ let(:env_hiera_yaml) { <<-YAML.unindent }
365
+ version: 5
366
+ hierarchy:
367
+ - name: Common
368
+ hiera3_backend: something
369
+ YAML
370
+
371
+ it 'fails and reports error' do
372
+ expect { lookup('a') }.to raise_error(
373
+ "'hiera3_backend' is only allowed in the global layer (file: #{env_dir}/spec/hiera.yaml, line: 4)")
374
+ end
375
+ end
376
+
377
+ context 'with a declared default_hierarchy' do
378
+ let(:env_hiera_yaml) { <<-YAML.unindent }
379
+ version: 5
380
+ hierarchy:
381
+ - name: Common
382
+ path: common.yaml
383
+ default_hierarchy:
384
+ - name: Defaults
385
+ path: defaults.yaml
386
+ YAML
387
+
388
+ it 'fails and reports error' do
389
+ Puppet[:strict] = :error
390
+ expect { lookup('a') }.to raise_error(
391
+ "'default_hierarchy' is only allowed in the module layer (file: #{env_dir}/spec/hiera.yaml, line: 5)")
392
+ end
393
+ end
394
+ end
395
+ end
396
+ end
397
+
398
+ context 'with an environment' do
399
+ let(:env_data) do
400
+ {
401
+ 'common.yaml' => <<-YAML.unindent
402
+ ---
403
+ a: value a (from environment)
404
+ c:
405
+ c_b: value c_b (from environment)
406
+ mod_a::a: value mod_a::a (from environment)
407
+ mod_a::hash_a:
408
+ a: value mod_a::hash_a.a (from environment)
409
+ mod_a::hash_b:
410
+ a: value mod_a::hash_b.a (from environment)
411
+ hash_b:
412
+ hash_ba:
413
+ bab: value hash_b.hash_ba.bab (from environment)
414
+ hash_c:
415
+ hash_ca:
416
+ caa: value hash_c.hash_ca.caa (from environment)
417
+ lookup_options:
418
+ mod_a::hash_b:
419
+ merge: hash
420
+ hash_c:
421
+ merge: hash
422
+ YAML
423
+ }
424
+ end
425
+
426
+ it 'finds data in the environment' do
427
+ expect(lookup('a')).to eql('value a (from environment)')
428
+ end
429
+
430
+ context 'with log-level debug' do
431
+ before(:each) { Puppet[:log_level] = 'debug' }
432
+
433
+ it 'does not report a regular lookup as APL' do
434
+ expect(lookup('a')).to eql('value a (from environment)')
435
+ expect(debugs.count { |dbg| dbg =~ /\A\s*Automatic Parameter Lookup of/ }).to eql(0)
436
+ end
437
+
438
+ it 'reports regular lookup as lookup' do
439
+ expect(lookup('a')).to eql('value a (from environment)')
440
+ expect(debugs.count { |dbg| dbg =~ /\A\s*Lookup of/ }).to eql(1)
441
+ end
442
+
443
+ it 'does not report APL as lookup' do
444
+ collect_notices("class mod_a($a) { notice($a) }; include mod_a")
445
+ expect(debugs.count { |dbg| dbg =~ /\A\s*Lookup of/ }).to eql(0)
446
+ end
447
+
448
+ it 'reports APL as APL' do
449
+ collect_notices("class mod_a($a) { notice($a) }; include mod_a")
450
+ expect(debugs.count { |dbg| dbg =~ /\A\s*Automatic Parameter Lookup of/ }).to eql(1)
451
+ end
452
+ end
453
+
454
+ context 'that has no lookup configured' do
455
+ let(:environment_files) do
456
+ {
457
+ env_name => {
458
+ 'data' => env_data
459
+ }
460
+ }
461
+ end
462
+
463
+ it 'does not find data in the environment' do
464
+ expect { lookup('a') }.to raise_error(Puppet::DataBinding::LookupError, /did not find a value for the name 'a'/)
465
+ end
466
+
467
+ context "but an environment.conf with 'environment_data_provider=hiera'" do
468
+ let(:environment_files) do
469
+ {
470
+ env_name => {
471
+ 'environment.conf' => "environment_data_provider=hiera\n",
472
+ 'data' => env_data
473
+ }
474
+ }
475
+ end
476
+
477
+ it 'finds data in the environment and reports deprecation warning for environment.conf' do
478
+ expect(lookup('a')).to eql('value a (from environment)')
479
+ expect(warnings).to include(/Defining environment_data_provider='hiera' in environment.conf is deprecated. A 'hiera.yaml' file should be used instead/)
480
+ end
481
+
482
+ context 'and a hiera.yaml file' do
483
+ let(:env_hiera_yaml) do
484
+ <<-YAML.unindent
485
+ ---
486
+ version: 4
487
+ hierarchy:
488
+ - name: common
489
+ backend: yaml
490
+ YAML
491
+ end
492
+
493
+ let(:environment_files) do
494
+ {
495
+ env_name => {
496
+ 'hiera.yaml' => env_hiera_yaml,
497
+ 'environment.conf' => "environment_data_provider=hiera\n",
498
+ 'data' => env_data
499
+ }
500
+ }
501
+ end
502
+
503
+ it 'finds data in the environment and reports deprecation warnings for both environment.conf and hiera.yaml' do
504
+ expect(lookup('a')).to eql('value a (from environment)')
505
+ expect(warnings).to include(/Defining environment_data_provider='hiera' in environment.conf is deprecated/)
506
+ expect(warnings).to include(/Use of 'hiera.yaml' version 4 is deprecated. It should be converted to version 5/)
507
+ end
508
+ end
509
+ end
510
+
511
+ context "but an environment.conf with 'environment_data_provider=function'" do
512
+ let(:environment_files) do
513
+ {
514
+ env_name => {
515
+ 'environment.conf' => "environment_data_provider=function\n",
516
+ 'functions' => {
517
+ 'environment' => { 'data.pp' => <<-PUPPET.unindent }
518
+ function environment::data() {
519
+ { 'a' => 'value a' }
520
+ }
521
+ PUPPET
522
+ }
523
+ }
524
+ }
525
+ end
526
+
527
+ it 'finds data in the environment and reports deprecation warning for environment.conf' do
528
+ expect(lookup('a')).to eql('value a')
529
+ expect(warnings).to include(/Defining environment_data_provider='function' in environment.conf is deprecated. A 'hiera.yaml' file should be used instead/)
530
+ expect(warnings).to include(/Using of legacy data provider function 'environment::data'. Please convert to a 'data_hash' function/)
531
+ end
532
+ end
533
+ end
534
+
535
+ context 'that has interpolated paths configured' do
536
+ let(:env_hiera_yaml) do
537
+ <<-YAML.unindent
538
+ ---
539
+ version: 5
540
+ hierarchy:
541
+ - name: "Varying"
542
+ data_hash: yaml_data
543
+ path: "#{data_path}"
544
+ YAML
545
+ end
546
+
547
+ let(:environment_files) do
548
+ {
549
+ env_name => {
550
+ 'hiera.yaml' => env_hiera_yaml,
551
+ 'modules' => {},
552
+ 'data' => {
553
+ 'x.yaml' => <<-YAML.unindent,
554
+ y: value y from x
555
+ YAML
556
+ 'x_d.yaml' => <<-YAML.unindent,
557
+ y: value y from x_d
558
+ YAML
559
+ 'x_e.yaml' => <<-YAML.unindent,
560
+ y: value y from x_e
561
+ YAML
562
+ }
563
+ }
564
+ }
565
+ end
566
+
567
+ context 'using local variable reference' do
568
+ let(:data_path) { 'x%{var.sub}.yaml' }
569
+
570
+ it 'reloads the configuration if interpolated values change' do
571
+ Puppet[:log_level] = 'debug'
572
+ collect_notices("notice('success')") do |scope|
573
+ scope['var'] = {}
574
+ expect(lookup_func.call(scope, 'y')).to eql('value y from x')
575
+ nested_scope = scope.compiler.newscope(scope)
576
+ nested_scope['var'] = { 'sub' => '_d' }
577
+ expect(lookup_func.call(nested_scope, 'y')).to eql('value y from x_d')
578
+ nested_scope = scope.compiler.newscope(scope)
579
+ nested_scope['var'] = { 'sub' => '_e' }
580
+ expect(lookup_func.call(nested_scope, 'y')).to eql('value y from x_e')
581
+ end
582
+ expect(notices).to eql(['success'])
583
+ expect(debugs.any? { |m| m =~ /Hiera configuration recreated due to change of scope variables used in interpolation expressions/ }).to be_truthy
584
+ end
585
+
586
+ it 'does not include the lookups performed during stability check in explain output' do
587
+ Puppet[:log_level] = 'debug'
588
+ collect_notices("notice('success')") do |scope|
589
+ var = { 'sub' => '_d' }
590
+ scope['var'] = var
591
+ expect(lookup_func.call(scope, 'y')).to eql('value y from x_d')
592
+
593
+ # Second call triggers the check
594
+ expect(lookup_func.call(scope, 'y')).to eql('value y from x_d')
595
+ end
596
+ expect(notices).to eql(['success'])
597
+ expect(debugs.any? { |m| m =~ /Sub key: "sub"/ }).to be_falsey
598
+ end
599
+ end
600
+
601
+ context 'using global variable reference' do
602
+ let(:data_path) { 'x%{::var.sub}.yaml' }
603
+
604
+ it 'does not raise an error when reloads the configuration if interpolating undefined values' do
605
+ collect_notices("notice('success')") do |scope|
606
+ expect { lookup_func.call(scope, 'y') }.to_not raise_error
607
+ end
608
+ end
609
+
610
+ it 'does not reload the configuration if value changes locally' do
611
+ Puppet[:log_level] = 'debug'
612
+ collect_notices("notice('success')") do |scope|
613
+ scope['var'] = { 'sub' => '_d' }
614
+ expect(lookup_func.call(scope, 'y')).to eql('value y from x_d')
615
+ nested_scope = scope.compiler.newscope(scope)
616
+ nested_scope['var'] = { 'sub' => '_e' }
617
+ expect(lookup_func.call(nested_scope, 'y')).to eql('value y from x_d')
618
+ end
619
+ expect(notices).to eql(['success'])
620
+ expect(debugs.any? { |m| m =~ /Hiera configuration recreated due to change of scope variables used in interpolation expressions/ }).to be_falsey
621
+ end
622
+ end
623
+ end
624
+
625
+ context 'that uses reserved' do
626
+ let(:environment_files) do
627
+ { env_name => { 'hiera.yaml' => hiera_yaml } }
628
+ end
629
+
630
+ context 'option' do
631
+ let(:hiera_yaml) { <<-YAML.unindent }
632
+ version: 5
633
+ hierarchy:
634
+ - name: "Illegal"
635
+ options:
636
+ #{opt_spec}
637
+ data_hash: yaml_data
638
+ YAML
639
+
640
+ context 'path' do
641
+ let(:opt_spec) { 'path: data/foo.yaml' }
642
+
643
+ it 'fails and reports the reserved option key' do
644
+ expect { lookup('a') }.to raise_error do |e|
645
+ expect(e.message).to match(/Option key 'path' used in hierarchy 'Illegal' is reserved by Puppet/)
646
+ end
647
+ end
648
+ end
649
+
650
+ context 'uri' do
651
+ let(:opt_spec) { 'uri: file:///data/foo.yaml' }
652
+
653
+ it 'fails and reports the reserved option key' do
654
+ expect { lookup('a') }.to raise_error do |e|
655
+ expect(e.message).to match(/Option key 'uri' used in hierarchy 'Illegal' is reserved by Puppet/)
656
+ end
657
+ end
658
+ end
659
+ end
660
+
661
+ context 'default option' do
662
+ let(:hiera_yaml) { <<-YAML.unindent }
663
+ ---
664
+ version: 5
665
+ defaults:
666
+ options:
667
+ #{opt_spec}
668
+ hierarchy:
669
+ - name: "Illegal"
670
+ data_hash: yaml_data
671
+ YAML
672
+
673
+ context 'path' do
674
+ let(:opt_spec) { 'path: data/foo.yaml' }
675
+
676
+ it 'fails and reports the reserved option key' do
677
+ expect { lookup('a') }.to raise_error do |e|
678
+ expect(e.message).to match(/Option key 'path' used in defaults is reserved by Puppet/)
679
+ end
680
+ end
681
+ end
682
+
683
+ context 'uri' do
684
+ let(:opt_spec) { 'uri: file:///data/foo.yaml' }
685
+
686
+ it 'fails and reports the reserved option key' do
687
+ expect { lookup('a') }.to raise_error do |e|
688
+ expect(e.message).to match(/Option key 'uri' used in defaults is reserved by Puppet/)
689
+ end
690
+ end
691
+ end
692
+ end
693
+ end
694
+
695
+ context 'with yaml data file' do
696
+ let(:environment_files) do
697
+ {
698
+ env_name => {
699
+ 'hiera.yaml' => <<-YAML.unindent,
700
+ ---
701
+ version: 5
702
+ YAML
703
+ 'data' => {
704
+ 'common.yaml' => common_yaml
705
+ }
706
+ }
707
+ }
708
+ end
709
+
710
+ context 'that contains hash values with interpolated keys' do
711
+ let(:common_yaml) do
712
+ <<-YAML.unindent
713
+ ---
714
+ a:
715
+ "%{key}": "the %{value}"
716
+ b: "Detail in %{lookup('a.a_key')}"
717
+ YAML
718
+ end
719
+
720
+ it 'interpolates both key and value"' do
721
+ Puppet[:log_level] = 'debug'
722
+ collect_notices("notice('success')") do |scope|
723
+ scope['key'] = ''
724
+ scope['value'] = ''
725
+ expect(lookup_func.call(scope, 'a')).to eql({'' => 'the '})
726
+ nested_scope = scope.compiler.newscope(scope)
727
+ nested_scope['key'] = 'a_key'
728
+ nested_scope['value'] = 'interpolated value'
729
+ expect(lookup_func.call(nested_scope, 'a')).to eql({'a_key' => 'the interpolated value'})
730
+ end
731
+ expect(notices).to eql(['success'])
732
+ end
733
+
734
+ it 'navigates to a value behind an interpolated key"' do
735
+ Puppet[:log_level] = 'debug'
736
+ collect_notices("notice('success')") do |scope|
737
+ scope['key'] = 'a_key'
738
+ scope['value'] = 'interpolated value'
739
+ expect(lookup_func.call(scope, 'a.a_key')).to eql('the interpolated value')
740
+ end
741
+ expect(notices).to eql(['success'])
742
+ end
743
+
744
+ it 'navigates to a value behind an interpolated key using an interpolated value"' do
745
+ Puppet[:log_level] = 'debug'
746
+ collect_notices("notice('success')") do |scope|
747
+ scope['key'] = 'a_key'
748
+ scope['value'] = 'interpolated value'
749
+ expect(lookup_func.call(scope, 'b')).to eql('Detail in the interpolated value')
750
+ end
751
+ expect(notices).to eql(['success'])
752
+ end
753
+ end
754
+
755
+ context 'that is empty' do
756
+ let(:common_yaml) { '' }
757
+
758
+ it 'fails with a "did not find"' do
759
+ expect { lookup('a') }.to raise_error do |e|
760
+ expect(e.message).to match(/did not find a value for the name 'a'/)
761
+ end
762
+ end
763
+
764
+ it 'logs a warning that the file does not contain a hash' do
765
+ expect { lookup('a') }.to raise_error(Puppet::DataBinding::LookupError)
766
+ expect(warnings).to include(/spec\/data\/common.yaml: file does not contain a valid yaml hash/)
767
+ end
768
+ end
769
+
770
+ context 'that contains illegal yaml' do
771
+ let(:common_yaml) { "@!#%**&:\n" }
772
+
773
+ it 'fails lookup and that the key is not found' do
774
+ expect { lookup('a') }.to raise_error do |e|
775
+ expect(e.message).to match(/Unable to parse/)
776
+ end
777
+ end
778
+ end
779
+
780
+ context 'that contains a legal yaml that is not a hash' do
781
+ let(:common_yaml) { "- A list\n- of things" }
782
+
783
+ it 'fails with a "invalid yaml hash"' do
784
+ expect { lookup('a') }.to raise_error do |e|
785
+ expect(e.message).to match(/spec\/data\/common.yaml: file does not contain a valid yaml hash/)
786
+ end
787
+ end
788
+
789
+ context 'when strict mode is off' do
790
+ before :each do
791
+ Puppet[:strict] = :warning
792
+ end
793
+ it 'fails with a "did not find"' do
794
+ expect { lookup('a') }.to raise_error do |e|
795
+ expect(e.message).to match(/did not find a value for the name 'a'/)
796
+ end
797
+ end
798
+
799
+ it 'logs a warning that the file does not contain a hash' do
800
+ expect { lookup('a') }.to raise_error(Puppet::DataBinding::LookupError)
801
+ expect(warnings).to include(/spec\/data\/common.yaml: file does not contain a valid yaml hash/)
802
+ end
803
+ end
804
+ end
805
+
806
+ context 'that contains a legal yaml hash with illegal types' do
807
+ let(:common_yaml) do
808
+ <<-YAML.unindent
809
+ ---
810
+ a: !ruby/object:Puppet::Graph::Key
811
+ value: x
812
+ YAML
813
+ end
814
+
815
+ it 'fails lookup and reports parsing failed' do
816
+ expect { lookup('a') }.to raise_error do |e|
817
+ expect(e.message).to match(/Unable to parse .*: Tried to load unspecified class: Puppet::Graph::Key/)
818
+ end
819
+ end
820
+ end
821
+
822
+ context 'that contains a legal yaml hash with unexpected types' do
823
+ let(:common_yaml) do
824
+ <<-YAML.unindent
825
+ ---
826
+ a: 123
827
+ YAML
828
+ end
829
+
830
+ it 'fails lookup and reports a type mismatch' do
831
+ expect { lookup('a', {}, false, String) }.to raise_error do |e|
832
+ expect(e.message).to match(/Found value has wrong type, expects a String value, got Integer \(line: 1, column: \d+\)/)
833
+ end
834
+ end
835
+ end
836
+
837
+ context 'that contains illegal interpolations' do
838
+ context 'in the form of an alias that is not the entire string' do
839
+ let(:common_yaml) { <<-YAML.unindent }
840
+ a: "%{alias('x')} and then some"
841
+ x: value x
842
+ YAML
843
+
844
+ it 'fails lookup and reports a type mismatch' do
845
+ expect { lookup('a') }.to raise_error("'alias' interpolation is only permitted if the expression is equal to the entire string")
846
+ end
847
+ end
848
+
849
+ context 'in the form of an unknown function name' do
850
+ let(:common_yaml) { <<-YAML.unindent }
851
+ a: "%{what('x')}"
852
+ x: value x
853
+ YAML
854
+
855
+ it 'fails lookup and reports a type mismatch' do
856
+ expect { lookup('a') }.to raise_error("Unknown interpolation method 'what'")
857
+ end
858
+ end
859
+ end
860
+
861
+ context 'that contains an array with duplicates' do
862
+ let(:common_yaml) { <<-YAML.unindent }
863
+ a:
864
+ - alpha
865
+ - bravo
866
+ - charlie
867
+ - bravo
868
+ YAML
869
+
870
+ it 'retains the duplicates when using default merge strategy' do
871
+ expect(lookup('a')).to eql(%w(alpha bravo charlie bravo))
872
+ end
873
+
874
+ it 'does deduplification when using merge strategy "unique"' do
875
+ expect(lookup('a', :merge => 'unique')).to eql(%w(alpha bravo charlie))
876
+ end
877
+ end
878
+ end
879
+
880
+ context 'with lookup_options' do
881
+ let(:environment_files) do
882
+ {
883
+ env_name => {
884
+ 'hiera.yaml' => <<-YAML.unindent,
885
+ ---
886
+ version: 5
887
+ YAML
888
+ 'data' => {
889
+ 'common.yaml' => common_yaml
890
+ }
891
+ }
892
+ }
893
+ end
894
+
895
+ context 'that are empty' do
896
+ let(:common_yaml) { <<-YAML.unindent }
897
+ lookup_options:
898
+ a: b
899
+ YAML
900
+
901
+ it 'ignores empty options' do
902
+ expect(lookup('a')).to eq("b")
903
+ end
904
+ end
905
+
906
+ context 'that contains a legal yaml hash with unexpected types' do
907
+ let(:common_yaml) { <<-YAML.unindent }
908
+ lookup_options:
909
+ :invalid_symbol
910
+ YAML
911
+
912
+ it 'fails lookup and reports a type mismatch' do
913
+ expect {
914
+ lookup('a')
915
+ }.to raise_error(Puppet::DataBinding::LookupError, /has wrong type, expects Puppet::LookupValue, got Runtime\[ruby, 'Symbol'\]/)
916
+ end
917
+ end
918
+ end
919
+
920
+ context 'with lookup_options configured using patterns' do
921
+ let(:mod_common) {
922
+ <<-YAML.unindent
923
+ mod::hash_a:
924
+ aa:
925
+ aaa: aaa (from module)
926
+ ab:
927
+ aba: aba (from module)
928
+ mod::hash_b:
929
+ ba:
930
+ baa: baa (from module)
931
+ bb:
932
+ bba: bba (from module)
933
+ lookup_options:
934
+ '^mod::ha.*_a':
935
+ merge: deep
936
+ '^mod::ha.*_b':
937
+ merge: deep
938
+ YAML
939
+ }
940
+
941
+ let(:mod_base) do
942
+ {
943
+ 'hiera.yaml' => <<-YAML.unindent,
944
+ version: 5
945
+ YAML
946
+ 'data' => {
947
+ 'common.yaml' => mod_common
948
+ }
949
+ }
950
+ end
951
+
952
+ let(:env_modules) do
953
+ {
954
+ 'mod' => mod_base
955
+ }
956
+ end
957
+
958
+ let(:env_hiera_yaml) do
959
+ <<-YAML.unindent
960
+ ---
961
+ version: 5
962
+ hierarchy:
963
+ - name: X
964
+ paths:
965
+ - first.yaml
966
+ - second.yaml
967
+ YAML
968
+ end
969
+
970
+ let(:env_lookup_options) { <<-YAML.unindent }
971
+ lookup_options:
972
+ b:
973
+ merge: hash
974
+ '^[^b]$':
975
+ merge: deep
976
+ '^c':
977
+ merge: first
978
+ '^b':
979
+ merge: first
980
+ '^mod::ha.*_b':
981
+ merge: hash
982
+ YAML
983
+
984
+ let(:env_data) do
985
+ {
986
+ 'first.yaml' => <<-YAML.unindent + env_lookup_options,
987
+ a:
988
+ aa:
989
+ aaa: a.aa.aaa
990
+ b:
991
+ ba:
992
+ baa: b.ba.baa
993
+ bb:
994
+ bba: b.bb.bba
995
+ c:
996
+ ca:
997
+ caa: c.ca.caa
998
+ mod::hash_a:
999
+ aa:
1000
+ aab: aab (from environment)
1001
+ ab:
1002
+ aba: aba (from environment)
1003
+ abb: abb (from environment)
1004
+ mod::hash_b:
1005
+ ba:
1006
+ bab: bab (from environment)
1007
+ bc:
1008
+ bca: bca (from environment)
1009
+ sa:
1010
+ sa1: ['e', 'd', '--f']
1011
+ YAML
1012
+ 'second.yaml' => <<-YAML.unindent,
1013
+ a:
1014
+ aa:
1015
+ aab: a.aa.aab
1016
+ b:
1017
+ ba:
1018
+ bab: b.ba.bab
1019
+ bb:
1020
+ bbb: b.bb.bbb
1021
+ c:
1022
+ ca:
1023
+ cab: c.ca.cab
1024
+ sa:
1025
+ sa1: ['b', 'a', 'f', 'c']
1026
+ YAML
1027
+ }
1028
+ end
1029
+
1030
+ it 'finds lookup_options that matches a pattern' do
1031
+ expect(lookup('a')).to eql({'aa' => { 'aaa' => 'a.aa.aaa', 'aab' => 'a.aa.aab' }})
1032
+ end
1033
+
1034
+ it 'gives a direct key match higher priority than a matching pattern' do
1035
+ expect(lookup('b')).to eql({'ba' => { 'baa' => 'b.ba.baa' }, 'bb' => { 'bba'=>'b.bb.bba' }})
1036
+ end
1037
+
1038
+ it 'uses the first matching pattern' do
1039
+ expect(lookup('c')).to eql({'ca' => { 'caa' => 'c.ca.caa', 'cab' => 'c.ca.cab' }})
1040
+ end
1041
+
1042
+ it 'uses lookup_option found by pattern from module' do
1043
+ expect(lookup('mod::hash_a')).to eql({
1044
+ 'aa' => {
1045
+ 'aaa' => 'aaa (from module)',
1046
+ 'aab' => 'aab (from environment)'
1047
+ },
1048
+ 'ab' => {
1049
+ 'aba' => 'aba (from environment)',
1050
+ 'abb' => 'abb (from environment)'
1051
+ }
1052
+ })
1053
+ end
1054
+
1055
+ it 'merges lookup_options found by pattern in environment and module (environment wins)' do
1056
+ expect(lookup('mod::hash_b')).to eql({
1057
+ 'ba' => {
1058
+ 'bab' => 'bab (from environment)'
1059
+ },
1060
+ 'bb' => {
1061
+ 'bba' => 'bba (from module)'
1062
+ },
1063
+ 'bc' => {
1064
+ 'bca' => 'bca (from environment)'
1065
+ }
1066
+ })
1067
+ end
1068
+
1069
+ context 'and lookup_options is empty' do
1070
+ let(:mod_common) { <<-YAML.unindent }
1071
+ lookup_options:
1072
+ mod::a: b
1073
+ YAML
1074
+
1075
+ it 'ignores empty options' do
1076
+ expect(lookup('mod::a')).to eq("b")
1077
+ end
1078
+ end
1079
+
1080
+ context 'and lookup_options contains a legal hash with unexpected types' do
1081
+ let(:mod_common) { <<-YAML.unindent }
1082
+ lookup_options:
1083
+ :invalid_symbol
1084
+ YAML
1085
+
1086
+ it 'fails lookup and reports a type mismatch' do
1087
+ expect {
1088
+ lookup('mod::a')
1089
+ }.to raise_error(Puppet::DataBinding::LookupError, /has wrong type, expects Puppet::LookupValue, got Runtime\[ruby, 'Symbol'\]/)
1090
+ end
1091
+ end
1092
+
1093
+ context 'and patterns in module are not limited to module keys' do
1094
+ let(:mod_common) {
1095
+ <<-YAML.unindent
1096
+ mod::hash_a:
1097
+ aa:
1098
+ aaa: aaa (from module)
1099
+ ab:
1100
+ aba: aba (from module)
1101
+ lookup_options:
1102
+ '^.*_a':
1103
+ merge: deep
1104
+ YAML
1105
+ }
1106
+
1107
+ it 'fails with error' do
1108
+ expect { lookup('mod::a') }.to raise_error(Puppet::DataBinding::LookupError, /all lookup_options patterns must match a key starting with module name/)
1109
+ end
1110
+ end
1111
+
1112
+ context 'and there are no lookup options that do not use patterns' do
1113
+
1114
+ let(:env_lookup_options) { <<-YAML.unindent }
1115
+ lookup_options:
1116
+ '^[^b]$':
1117
+ merge: deep
1118
+ '^c':
1119
+ merge: first
1120
+ '^b':
1121
+ merge: first
1122
+ '^mod::ha.*_b':
1123
+ merge: hash
1124
+ YAML
1125
+
1126
+ it 'finds lookup_options that matches a pattern' do
1127
+ expect(lookup('a')).to eql({'aa' => { 'aaa' => 'a.aa.aaa', 'aab' => 'a.aa.aab' }})
1128
+ end
1129
+ end
1130
+
1131
+ context 'and lookup options use a hash' do
1132
+
1133
+ let(:env_lookup_options) { <<-YAML.unindent }
1134
+ lookup_options:
1135
+ 'sa':
1136
+ merge:
1137
+ strategy: deep
1138
+ knockout_prefix: --
1139
+ sort_merged_arrays: true
1140
+ YAML
1141
+
1142
+ it 'applies knockout_prefix and sort_merged_arrays' do
1143
+ expect(lookup('sa')).to eql({ 'sa1' => %w(a b c d e) })
1144
+ end
1145
+
1146
+ it 'overrides knockout_prefix and sort_merged_arrays with explicitly given values' do
1147
+ expect(
1148
+ lookup('sa', 'merge' => { 'strategy' => 'deep', 'knockout_prefix' => '##', 'sort_merged_arrays' => false })).to(
1149
+ eql({ 'sa1' => %w(b a f c e d --f) }))
1150
+ end
1151
+ end
1152
+ end
1153
+
1154
+ context 'and an environment Hiera v5 configuration using globs' do
1155
+ let(:env_hiera_yaml) do
1156
+ <<-YAML.unindent
1157
+ ---
1158
+ version: 5
1159
+ hierarchy:
1160
+ - name: Globs
1161
+ globs:
1162
+ - "globs/*.yaml"
1163
+ - "globs_%{domain}/*.yaml"
1164
+ YAML
1165
+ end
1166
+
1167
+ let(:env_data) do
1168
+ {
1169
+ 'globs' => {
1170
+ 'a.yaml' => <<-YAML.unindent,
1171
+ glob_a: value glob_a
1172
+ YAML
1173
+ 'b.yaml' => <<-YAML.unindent
1174
+ glob_b:
1175
+ a: value glob_b.a
1176
+ b: value glob_b.b
1177
+ YAML
1178
+ },
1179
+ 'globs_example.com' => {
1180
+ 'a.yaml' => <<-YAML.unindent,
1181
+ glob_c: value glob_a
1182
+ YAML
1183
+ 'b.yaml' => <<-YAML.unindent
1184
+ glob_d:
1185
+ a: value glob_d.a
1186
+ b: value glob_d.b
1187
+ YAML
1188
+
1189
+ }
1190
+ }
1191
+ end
1192
+
1193
+ it 'finds environment data using globs' do
1194
+ expect(lookup('glob_a')).to eql('value glob_a')
1195
+ expect(warnings).to be_empty
1196
+ end
1197
+
1198
+ it 'finds environment data using interpolated globs' do
1199
+ expect(lookup('glob_d.a')).to eql('value glob_d.a')
1200
+ expect(warnings).to be_empty
1201
+ end
1202
+ end
1203
+
1204
+ context 'and an environment Hiera v5 configuration using uris' do
1205
+ let(:env_hiera_yaml) do
1206
+ <<-YAML.unindent
1207
+ ---
1208
+ version: 5
1209
+ hierarchy:
1210
+ - name: Uris
1211
+ uris:
1212
+ - "http://test.example.com"
1213
+ - "/some/arbitrary/path"
1214
+ - "urn:with:opaque:path"
1215
+ - "dothis%20-f%20bar"
1216
+ data_hash: mod::uri_test_func
1217
+ YAML
1218
+ end
1219
+
1220
+ let(:env_modules) do
1221
+ {
1222
+ 'mod' => { 'lib' => { 'puppet' => { 'functions' => { 'mod' => { 'uri_test_func.rb' => <<-RUBY } } } } }
1223
+ Puppet::Functions.create_function(:'mod::uri_test_func') do
1224
+ dispatch :uri_test_func do
1225
+ param 'Hash', :options
1226
+ param 'Puppet::LookupContext', :context
1227
+ end
1228
+
1229
+ def uri_test_func(options, context)
1230
+ { 'uri' => [ options['uri'] ] }
1231
+ end
1232
+ end
1233
+ RUBY
1234
+ }
1235
+ end
1236
+
1237
+ it 'The uris are propagated in the options hash' do
1238
+ expect(lookup('uri', 'merge' => 'unique')).to eql(
1239
+ %w(http://test.example.com /some/arbitrary/path urn:with:opaque:path dothis%20-f%20bar))
1240
+ expect(warnings).to be_empty
1241
+ end
1242
+
1243
+ context 'and a uri uses bad syntax' do
1244
+ let(:env_hiera_yaml) do
1245
+ <<-YAML.unindent
1246
+ ---
1247
+ version: 5
1248
+ hierarchy:
1249
+ - name: Uris
1250
+ uri: "dothis -f bar"
1251
+ data_hash: mod::uri_test_func
1252
+ YAML
1253
+ end
1254
+
1255
+ it 'an attempt to lookup raises InvalidURIError' do
1256
+ expect{ lookup('uri', 'merge' => 'unique') }.to raise_error(/bad URI/)
1257
+ end
1258
+ end
1259
+ end
1260
+
1261
+ context 'and an environment Hiera v5 configuration using mapped_paths' do
1262
+ let(:scope_additions) do
1263
+ {
1264
+ 'mapped' => {
1265
+ 'array_var' => ['a', 'b', 'c'],
1266
+ 'hash_var' => { 'x' => 'a', 'y' => 'b', 'z' => 'c' },
1267
+ 'string_var' => 's' },
1268
+ 'var' => 'global_var' # overridden by mapped path variable
1269
+ }
1270
+ end
1271
+
1272
+ let(:env_hiera_yaml) do
1273
+ <<-YAML.unindent
1274
+ ---
1275
+ version: 5
1276
+ hierarchy:
1277
+ - name: Mapped Paths
1278
+ mapped_paths: #{mapped_paths}
1279
+ - name: Global Path
1280
+ path: "%{var}.yaml"
1281
+ YAML
1282
+ end
1283
+
1284
+ let(:environment_files) do
1285
+ {
1286
+ env_name => {
1287
+ 'hiera.yaml' => env_hiera_yaml,
1288
+ 'data' => env_data
1289
+ }
1290
+ }
1291
+ end
1292
+
1293
+ context 'that originates from an array' do
1294
+ let (:mapped_paths) { '[mapped.array_var, var, "paths/%{var}.yaml"]' }
1295
+
1296
+ let(:env_data) do
1297
+ {
1298
+ 'paths' => {
1299
+ 'a.yaml' => <<-YAML.unindent,
1300
+ path_a: value path_a
1301
+ path_h:
1302
+ a: value path_h.a
1303
+ c: value path_h.c
1304
+ YAML
1305
+ 'b.yaml' => <<-YAML.unindent,
1306
+ path_h:
1307
+ b: value path_h.b
1308
+ d: value path_h.d
1309
+ YAML
1310
+ 'd.yaml' => <<-YAML.unindent
1311
+ path_h:
1312
+ b: value path_h.b (from d.yaml)
1313
+ d: value path_h.d (from d.yaml)
1314
+ YAML
1315
+ },
1316
+ 'global_var.yaml' => <<-YAML.unindent,
1317
+ path_h:
1318
+ e: value path_h.e
1319
+ YAML
1320
+ 'other_var.yaml' => <<-YAML.unindent
1321
+ path_h:
1322
+ e: value path_h.e (from other_var.yaml)
1323
+ YAML
1324
+ }
1325
+ end
1326
+
1327
+ it 'finds environment data using mapped_paths' do
1328
+ expect(lookup('path_a')).to eql('value path_a')
1329
+ expect(warnings).to be_empty
1330
+ end
1331
+
1332
+ it 'includes mapped path in explain output' do
1333
+ explanation = explain('path_h', 'merge' => 'deep')
1334
+ ['a', 'b', 'c'].each do |var|
1335
+ expect(explanation).to match(/^\s+Path "#{env_dir}\/spec\/data\/paths\/#{var}\.yaml"\n\s+Original path: "paths\/%\{var\}\.yaml"/)
1336
+ end
1337
+ expect(warnings).to be_empty
1338
+ end
1339
+
1340
+ it 'performs merges between mapped paths and global path interpolated using same key' do
1341
+ expect(lookup('path_h', 'merge' => 'hash')).to eql(
1342
+ {
1343
+ 'a' => 'value path_h.a',
1344
+ 'b' => 'value path_h.b',
1345
+ 'c' => 'value path_h.c',
1346
+ 'd' => 'value path_h.d',
1347
+ 'e' => 'value path_h.e'
1348
+ })
1349
+ expect(warnings).to be_empty
1350
+ end
1351
+
1352
+ it 'keeps track of changes in key overridden by interpolated key' do
1353
+ Puppet[:log_level] = 'debug'
1354
+ collect_notices("notice('success')") do |scope|
1355
+ expect(lookup_func.call(scope, 'path_h', 'merge' => 'hash')).to eql(
1356
+ {
1357
+ 'a' => 'value path_h.a',
1358
+ 'b' => 'value path_h.b',
1359
+ 'c' => 'value path_h.c',
1360
+ 'd' => 'value path_h.d',
1361
+ 'e' => 'value path_h.e'
1362
+ })
1363
+ scope.with_local_scope('var' => 'other_var') do
1364
+ expect(lookup_func.call(scope, 'path_h', 'merge' => 'hash')).to eql(
1365
+ {
1366
+ 'a' => 'value path_h.a',
1367
+ 'b' => 'value path_h.b',
1368
+ 'c' => 'value path_h.c',
1369
+ 'd' => 'value path_h.d',
1370
+ 'e' => 'value path_h.e (from other_var.yaml)'
1371
+ })
1372
+ end
1373
+ end
1374
+ expect(notices).to eql(['success'])
1375
+ expect(debugs.any? { |m| m =~ /Hiera configuration recreated due to change of scope variables used in interpolation expressions/ }).to be_truthy
1376
+ end
1377
+
1378
+ it 'keeps track of changes in elements of mapped key' do
1379
+ Puppet[:log_level] = 'debug'
1380
+ collect_notices("notice('success')") do |scope|
1381
+ expect(lookup_func.call(scope, 'path_h', 'merge' => 'hash')).to eql(
1382
+ {
1383
+ 'a' => 'value path_h.a',
1384
+ 'b' => 'value path_h.b',
1385
+ 'c' => 'value path_h.c',
1386
+ 'd' => 'value path_h.d',
1387
+ 'e' => 'value path_h.e'
1388
+ })
1389
+ scope['mapped']['array_var'] = ['a', 'c', 'd']
1390
+ expect(lookup_func.call(scope, 'path_h', 'merge' => 'hash')).to eql(
1391
+ {
1392
+ 'a' => 'value path_h.a',
1393
+ 'b' => 'value path_h.b (from d.yaml)',
1394
+ 'c' => 'value path_h.c',
1395
+ 'd' => 'value path_h.d (from d.yaml)',
1396
+ 'e' => 'value path_h.e'
1397
+ })
1398
+ end
1399
+ expect(notices).to eql(['success'])
1400
+ expect(debugs.any? { |m| m =~ /Hiera configuration recreated due to change of scope variables used in interpolation expressions/ }).to be_truthy
1401
+ end
1402
+ end
1403
+
1404
+ context 'that originates from a hash' do
1405
+ let (:mapped_paths) { '[mapped.hash_var, var, "paths/%{var.0}.%{var.1}.yaml"]' }
1406
+
1407
+ let(:env_data) do
1408
+ {
1409
+ 'paths' => {
1410
+ 'x.a.yaml' => <<-YAML.unindent,
1411
+ path_xa: value path_xa
1412
+ path_m:
1413
+ a: value path_m.a
1414
+ c: value path_m.c
1415
+ YAML
1416
+ 'y.b.yaml' => <<-YAML.unindent
1417
+ path_m:
1418
+ b: value path_m.b
1419
+ d: value path_m.d
1420
+ YAML
1421
+ },
1422
+ 'global_var.yaml' => <<-YAML.unindent
1423
+ path_m:
1424
+ e: value path_m.e
1425
+ YAML
1426
+ }
1427
+ end
1428
+
1429
+ it 'finds environment data using mapped_paths' do
1430
+ expect(lookup('path_xa')).to eql('value path_xa')
1431
+ expect(warnings).to be_empty
1432
+ end
1433
+
1434
+ it 'includes mapped path in explain output' do
1435
+ explanation = explain('path_h', 'merge' => 'deep')
1436
+ ['x\.a', 'y\.b', 'z\.c'].each do |var|
1437
+ expect(explanation).to match(/^\s+Path "#{env_dir}\/spec\/data\/paths\/#{var}\.yaml"\n\s+Original path: "paths\/%\{var\.0\}\.%\{var\.1\}\.yaml"/)
1438
+ end
1439
+ expect(warnings).to be_empty
1440
+ end
1441
+
1442
+ it 'performs merges between mapped paths' do
1443
+ expect(lookup('path_m', 'merge' => 'hash')).to eql(
1444
+ {
1445
+ 'a' => 'value path_m.a',
1446
+ 'b' => 'value path_m.b',
1447
+ 'c' => 'value path_m.c',
1448
+ 'd' => 'value path_m.d',
1449
+ 'e' => 'value path_m.e'
1450
+ })
1451
+ expect(warnings).to be_empty
1452
+ end
1453
+ end
1454
+
1455
+ context 'that originates from a string' do
1456
+ let (:mapped_paths) { '[mapped.string_var, var, "paths/%{var}.yaml"]' }
1457
+
1458
+ let(:env_data) do
1459
+ {
1460
+ 'paths' => {
1461
+ 's.yaml' => <<-YAML.unindent,
1462
+ path_s: value path_s
1463
+ YAML
1464
+ }
1465
+ }
1466
+ end
1467
+
1468
+ it 'includes mapped path in explain output' do
1469
+ expect(explain('path_s')).to match(/^\s+Path "#{env_dir}\/spec\/data\/paths\/s\.yaml"\n\s+Original path: "paths\/%\{var\}\.yaml"/)
1470
+ expect(warnings).to be_empty
1471
+ end
1472
+
1473
+ it 'finds environment data using mapped_paths' do
1474
+ expect(lookup('path_s')).to eql('value path_s')
1475
+ expect(warnings).to be_empty
1476
+ end
1477
+ end
1478
+
1479
+ context 'where the enty does not exist' do
1480
+ let (:mapped_paths) { '[mapped.nosuch_var, var, "paths/%{var}.yaml"]' }
1481
+
1482
+ it 'finds environment data using mapped_paths' do
1483
+ expect(explain('hello')).to match(/No such key: "hello"/)
1484
+ expect(warnings).to be_empty
1485
+ end
1486
+ end
1487
+ end
1488
+
1489
+ context 'and an environment Hiera v3 configuration' do
1490
+ let(:env_hiera_yaml) do
1491
+ <<-YAML.unindent
1492
+ ---
1493
+ :backends: yaml
1494
+ :yaml:
1495
+ :datadir: #{env_dir}/#{env_name}/hieradata
1496
+ YAML
1497
+ end
1498
+
1499
+ let(:environment_files) do
1500
+ {
1501
+ env_name => {
1502
+ 'hiera.yaml' => env_hiera_yaml,
1503
+ 'hieradata' => {
1504
+ 'common.yaml' => <<-YAML.unindent,
1505
+ g: Value g
1506
+ YAML
1507
+ }
1508
+ }
1509
+ }
1510
+ end
1511
+
1512
+ it 'will raise an error if --strict is set to error' do
1513
+ Puppet[:strict] = :error
1514
+ expect { lookup('g') }.to raise_error(Puppet::Error, /hiera.yaml version 3 cannot be used in an environment/)
1515
+ end
1516
+
1517
+ it 'will log a warning and ignore the file if --strict is set to warning' do
1518
+ Puppet[:strict] = :warning
1519
+ expect { lookup('g') }.to raise_error(Puppet::Error, /did not find a value for the name 'g'/)
1520
+ end
1521
+
1522
+ it 'will not log a warning and ignore the file if --strict is set to off' do
1523
+ Puppet[:strict] = :off
1524
+ expect { lookup('g') }.to raise_error(Puppet::Error, /did not find a value for the name 'g'/)
1525
+ expect(warnings).to include(/hiera.yaml version 3 found at the environment root was ignored/)
1526
+ end
1527
+
1528
+ it 'will use the configuration if appointed by global setting but still warn when encountered by environment data provider' do
1529
+ Puppet[:strict] = :warning
1530
+ Puppet.settings[:hiera_config] = File.join(env_dir, env_name, 'hiera.yaml')
1531
+ expect(lookup('g')).to eql('Value g')
1532
+ expect(warnings).to include(/hiera.yaml version 3 found at the environment root was ignored/)
1533
+ end
1534
+ end
1535
+
1536
+ context 'and a global empty Hiera configuration' do
1537
+ let(:hiera_yaml_path) { File.join(code_dir, 'hiera.yaml') }
1538
+ let(:code_dir_files) do
1539
+ {
1540
+ 'hiera.yaml' => '',
1541
+ }
1542
+ end
1543
+
1544
+ let(:environment_files) do
1545
+ {
1546
+ env_name => {
1547
+ 'hieradata' => {
1548
+ 'common.yaml' => <<-YAML.unindent,
1549
+ x: value x (from environment)
1550
+ YAML
1551
+ }
1552
+ }
1553
+ }
1554
+ end
1555
+
1556
+ before(:each) do
1557
+ # Need to set here since spec_helper defines these settings in its "before each"
1558
+ Puppet.settings[:hiera_config] = hiera_yaml_path
1559
+ end
1560
+
1561
+ it 'uses a Hiera version 3 defaults' do
1562
+ expect(lookup('x')).to eql('value x (from environment)')
1563
+ end
1564
+
1565
+ context 'obtained using /dev/null', :unless => Puppet::Util::Platform.windows? do
1566
+ let(:code_dir_files) { {} }
1567
+
1568
+ it 'uses a Hiera version 3 defaults' do
1569
+ Puppet[:hiera_config] = '/dev/null'
1570
+ expect(lookup('x')).to eql('value x (from environment)')
1571
+ end
1572
+ end
1573
+ end
1574
+
1575
+ context 'and a global configuration' do
1576
+ let(:hiera_yaml) do
1577
+ <<-YAML.unindent
1578
+ ---
1579
+ :backends:
1580
+ - yaml
1581
+ - json
1582
+ - custom
1583
+ - hocon
1584
+ :yaml:
1585
+ :datadir: #{code_dir}/hieradata
1586
+ :json:
1587
+ :datadir: #{code_dir}/hieradata
1588
+ :hocon:
1589
+ :datadir: #{code_dir}/hieradata
1590
+ :hierarchy:
1591
+ - common
1592
+ - "%{domain}"
1593
+ :merge_behavior: deeper
1594
+ YAML
1595
+ end
1596
+
1597
+ let(:code_dir_files) do
1598
+ {
1599
+ 'hiera.yaml' => hiera_yaml,
1600
+ 'hieradata' => {
1601
+ 'common.yaml' => <<-YAML.unindent,
1602
+ a: value a (from global)
1603
+ hash_b:
1604
+ hash_ba:
1605
+ bab: value hash_b.hash_ba.bab (from global)
1606
+ hash_c:
1607
+ hash_ca:
1608
+ cab: value hash_c.hash_ca.cab (from global)
1609
+ ipl_hiera_env: "environment value '%{hiera('mod_a::hash_a.a')}'"
1610
+ ipl_hiera_mod: "module value '%{hiera('mod_a::abc')}'"
1611
+ ipl_hiera_modc: "module value '%{hiera('mod_a::caller')}'"
1612
+ YAML
1613
+ 'example.com.yaml' => <<-YAML.unindent,
1614
+ x: value x (from global example.com.yaml)
1615
+ YAML
1616
+ 'common.json' => <<-JSON.unindent,
1617
+ {
1618
+ "hash_b": {
1619
+ "hash_ba": {
1620
+ "bac": "value hash_b.hash_ba.bac (from global json)"
1621
+ }
1622
+ },
1623
+ "hash_c": {
1624
+ "hash_ca": {
1625
+ "cac": "value hash_c.hash_ca.cac (from global json)"
1626
+ }
1627
+ }
1628
+ }
1629
+ JSON
1630
+ 'common.conf' => <<-HOCON.unindent,
1631
+ // The 'xs' is a value used for testing
1632
+ xs = { subkey = value xs.subkey (from global hocon) }
1633
+ HOCON
1634
+ }
1635
+ }
1636
+ end
1637
+
1638
+ before(:all) do
1639
+ $LOAD_PATH.unshift(my_fixture_dir)
1640
+ end
1641
+
1642
+ after(:all) do
1643
+ if Kernel.const_defined?(:Hiera) && Hiera.const_defined?(:Backend)
1644
+ Hiera::Backend.send(:remove_const, :Custom_backend) if Hiera::Backend.const_defined?(:Custom_backend)
1645
+ Hiera::Backend.send(:remove_const, :Other_backend) if Hiera::Backend.const_defined?(:Other_backend)
1646
+ end
1647
+ $LOAD_PATH.shift
1648
+ end
1649
+
1650
+ before(:each) do
1651
+ # Need to set here since spec_helper defines these settings in its "before each"
1652
+ Puppet.settings[:codedir] = populated_code_dir
1653
+ Puppet.settings[:hiera_config] = File.join(code_dir, 'hiera.yaml')
1654
+ end
1655
+
1656
+ around(:each) do |example|
1657
+ Puppet.override(:environments => environments, :current_environment => env) do
1658
+ example.run
1659
+ end
1660
+ end
1661
+
1662
+ context 'version 3', :if => Puppet.features.hiera? do
1663
+ it 'finds data in in global layer and reports deprecation warnings for hiera.yaml' do
1664
+ expect(lookup('a')).to eql('value a (from global)')
1665
+ expect(warnings).to include(/Use of 'hiera.yaml' version 3 is deprecated. It should be converted to version 5/)
1666
+ end
1667
+
1668
+ it 'explain contains output from global layer' do
1669
+ explanation = explain('a')
1670
+ expect(explanation).to include('Global Data Provider (hiera configuration version 3)')
1671
+ expect(explanation).to include('Hierarchy entry "yaml"')
1672
+ expect(explanation).to include('Hierarchy entry "json"')
1673
+ expect(explanation).to include('Found key: "a" value: "value a (from global)"')
1674
+ end
1675
+
1676
+ it 'ignores merge behavior specified in global hiera.yaml' do
1677
+ expect(lookup('hash_b')).to eql(
1678
+ { 'hash_ba' => { 'bab' => 'value hash_b.hash_ba.bab (from global)'} })
1679
+ end
1680
+
1681
+ it 'uses the merge from lookup options to merge all layers' do
1682
+ expect(lookup('hash_c')).to eql(
1683
+ { 'hash_ca' => { 'cab' => 'value hash_c.hash_ca.cab (from global)' } })
1684
+ end
1685
+
1686
+ it 'uses the explicitly given merge to override lookup options and to merge all layers' do
1687
+ expect(lookup('hash_c', 'merge' => 'deep')).to eql(
1688
+ {
1689
+ 'hash_ca' =>
1690
+ {
1691
+ 'caa' => 'value hash_c.hash_ca.caa (from environment)',
1692
+ 'cab' => 'value hash_c.hash_ca.cab (from global)',
1693
+ 'cac' => 'value hash_c.hash_ca.cac (from global json)',
1694
+ 'cad' => 'value hash_c.hash_ca.cad (from global custom)'
1695
+ }
1696
+ })
1697
+ end
1698
+
1699
+ it 'paths are interpolated' do
1700
+ expect(lookup('x')).to eql('value x (from global example.com.yaml)')
1701
+ end
1702
+
1703
+ it 'backend data sources are propagated to custom backend' do
1704
+ expect(lookup('datasources')).to eql(['common', 'example.com'])
1705
+ end
1706
+
1707
+ it 'backend specific options are propagated to custom backend' do
1708
+ expect(lookup('other_option')).to eql('value of other_option')
1709
+ end
1710
+
1711
+ it 'dotted keys are passed down to custom backend' do
1712
+ expect(lookup('dotted.key')).to eql('custom backend received request for dotted.key value')
1713
+ end
1714
+
1715
+ it 'delegates configured hocon backend to hocon_data function' do
1716
+ expect(explain('xs')).to match(/Hierarchy entry "hocon"\n.*\n.*\n.*"common"\n\s*Found key: "xs"/m)
1717
+ end
1718
+
1719
+ it 'can dig down into subkeys provided by hocon_data function' do
1720
+ expect(lookup('xs.subkey')).to eql('value xs.subkey (from global hocon)')
1721
+ end
1722
+
1723
+ it 'multiple hiera3_backend declarations can be used and are merged into the generated config' do
1724
+ expect(lookup(['datasources', 'other_option'])).to eql([['common', 'example.com'], 'value of other_option'])
1725
+ expect(Hiera::Config.instance_variable_get(:@config)).to eql(
1726
+ {
1727
+ :backends => ['custom', 'other'],
1728
+ :hierarchy => ['common', '%{domain}'],
1729
+ :custom => { :datadir => "#{code_dir}/hieradata" },
1730
+ :other => { :other_option => 'value of other_option', :datadir=>"#{code_dir}/hieradata" },
1731
+ :logger => 'puppet'
1732
+ })
1733
+ end
1734
+
1735
+ context 'with a module data provider' do
1736
+ let(:module_files) do
1737
+ {
1738
+ 'mod_a' => {
1739
+ 'hiera.yaml' => <<-YAML.unindent,
1740
+ version: 5
1741
+ hierarchy:
1742
+ - name: Common
1743
+ path: common.yaml
1744
+ YAML
1745
+ 'data' => {
1746
+ 'common.yaml' => <<-YAML.unindent
1747
+ mod_a::abc: value mod_a::abc (from module)
1748
+ mod_a::caller: "calling module is %{calling_module}"
1749
+ YAML
1750
+ }
1751
+ }
1752
+ }
1753
+ end
1754
+
1755
+ let(:environment_files) do
1756
+ {
1757
+ env_name => {
1758
+ 'hiera.yaml' => env_hiera_yaml,
1759
+ 'data' => env_data,
1760
+ 'modules' => module_files
1761
+ }
1762
+ }
1763
+ end
1764
+
1765
+ it "interpolation function 'hiera' finds values in environment" do
1766
+ expect(lookup('ipl_hiera_env')).to eql("environment value 'value mod_a::hash_a.a (from environment)'")
1767
+ end
1768
+
1769
+ it "interpolation function 'hiera' finds values in module" do
1770
+ expect(lookup('ipl_hiera_mod')).to eql("module value 'value mod_a::abc (from module)'")
1771
+ end
1772
+
1773
+ it "interpolation function 'hiera' finds values in module and that module does not find %{calling_module}" do
1774
+ expect(lookup('ipl_hiera_modc')).to eql("module value 'calling module is '")
1775
+ end
1776
+
1777
+ context 'but no environment data provider' do
1778
+ let(:environment_files) do
1779
+ {
1780
+ env_name => {
1781
+ 'modules' => module_files
1782
+ }
1783
+ }
1784
+ end
1785
+
1786
+ it "interpolation function 'hiera' does not find values in a module" do
1787
+ expect(lookup('ipl_hiera_mod')).to eql("module value ''")
1788
+ end
1789
+ end
1790
+ end
1791
+
1792
+
1793
+ context 'using an eyaml backend' do
1794
+ let(:private_key_name) { 'private_key.pkcs7.pem' }
1795
+ let(:public_key_name) { 'public_key.pkcs7.pem' }
1796
+
1797
+ let(:private_key) do
1798
+ <<-PKCS7.unindent
1799
+ -----BEGIN RSA PRIVATE KEY-----
1800
+ MIIEogIBAAKCAQEAwHB3GvImq59em4LV9DMfP0Zjs21eW3Jd5I9fuY0jLJhIkH6f
1801
+ CR7tyOpYV6xUj+TF8giq9WLxZI7sourMJMWjEWhVjgUr5lqp1RLv4lwfDv3Wk4XC
1802
+ 2LUuqj1IAErUXKeRz8i3lUSZW1Pf4CaMpnIiPdWbz6f0KkaJSFi9bqexONBx4fKQ
1803
+ NlgZwm2/aYjjrYng788I0QhWDKUqsQOi5mZKlHNRsDlk7J3Afhsx/jTLrCX/G8+2
1804
+ tPtLsHyRN39kluM5vYHbKXDsCG/a88Z2yUE2+r4Clp0FUKffiEDBPm0/H0sQ4Q1o
1805
+ EfQFDQRKaIkhpsm0nOnLYTy3/xJc5uqDNkLiawIDAQABAoIBAE98pNXOe8ab93oI
1806
+ mtNZYmjCbGAqprTjEoFb71A3SfYbmK2Gf65GxjUdBwx/tBYTiuekSOk+yzKcDoZk
1807
+ sZnmwKpqDByzaiSmAkxunANFxdZtZvpcX9UfUX0j/t+QCROUa5gF8j6HrUiZ5nkx
1808
+ sxr1PcuItekaGLJ1nDLz5JsWTQ+H4M+GXQw7/t96x8v8g9el4exTiAHGk6Fv16kD
1809
+ 017T02M9qTTmV3Ab/enDIBmKVD42Ta36K/wc4l1aoUQNiRbIGVh96Cgd1CFXLF3x
1810
+ CsaNbYT4SmRXaYqoj6MKq+QFEGxadFmJy48NoSd4joirIn2lUjHxJebw3lLbNLDR
1811
+ uvQnQ2ECgYEA/nD94wEMr6078uMv6nKxPpNGq7fihwSKf0G/PQDqrRmjUCewuW+k
1812
+ /iXMe1Y/y0PjFeNlSbUsUvKQ5xF7F/1AnpuPHIrn3cjGVLb71W+zen1m8SnhsW/f
1813
+ 7dPgtcb4SCvfhmLgoov+P34YcNfGi6qgPUu6319IqoB3BIi7PvfEomkCgYEAwZ4+
1814
+ V0bMjFdDn2hnYzjTNcF2aUQ1jPvtuETizGwyCbbMLl9522lrjC2DrH41vvqX35ct
1815
+ CBJkhQFbtHM8Gnmozv0vxhI2jP+u14mzfePZsaXuYrEgWRj+BCsYUHodXryxnEWj
1816
+ yVrTNskab1B5jFm2SCJDmKcycBOYpRBLCMx6W7MCgYBA99z7/6KboOIzzKrJdGup
1817
+ jLV410UyMIikoccQ7pD9jhRTPS80yjsY4dHqlEVJw5XSWvPb9DTTITi6p44EvBep
1818
+ 6BKMuTMnQELUEr0O7KypVCfa4FTOl8BX28f+4kU3OGykxc6R8qkC0VGwTohV1UWB
1819
+ ITsgGhZV4uOA9uDI3T8KMQKBgEnQY2HwmuDSD/TA39GDA3qV8+ez2lqSXRGIKZLX
1820
+ mMf9SaBQQ+uzKA4799wWDbVuYeIbB07xfCL83pJP8FUDlqi6+7Celu9wNp7zX1ua
1821
+ Nw8z/ErhzjxJe+Xo7A8aTwIkG+5A2m1UU/up9YsEeiJYvVaIwY58B42U2vfq20BS
1822
+ fD9jAoGAX2MscBzIsmN+U9R0ptL4SXcPiVnOl8mqvQWr1B4OLgxX7ghht5Fs956W
1823
+ bHipxOWMFCPJA/AhNB8q1DvYiD1viZbIALSCJVUkzs4AEFIjiPsCBKxerl7jF6Xp
1824
+ 1WYSaCmfvoCVEpFNt8cKp4Gq+zEBYAV4Q6TkcD2lDtEW49MuN8A=
1825
+ -----END RSA PRIVATE KEY-----
1826
+ PKCS7
1827
+ end
1828
+
1829
+ let(:public_key) do
1830
+ <<-PKCS7.unindent
1831
+ -----BEGIN CERTIFICATE-----
1832
+ MIIC2TCCAcGgAwIBAgIBATANBgkqhkiG9w0BAQUFADAAMCAXDTE3MDExMzA5MTY1
1833
+ MloYDzIwNjcwMTAxMDkxNjUyWjAAMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
1834
+ CgKCAQEAwHB3GvImq59em4LV9DMfP0Zjs21eW3Jd5I9fuY0jLJhIkH6fCR7tyOpY
1835
+ V6xUj+TF8giq9WLxZI7sourMJMWjEWhVjgUr5lqp1RLv4lwfDv3Wk4XC2LUuqj1I
1836
+ AErUXKeRz8i3lUSZW1Pf4CaMpnIiPdWbz6f0KkaJSFi9bqexONBx4fKQNlgZwm2/
1837
+ aYjjrYng788I0QhWDKUqsQOi5mZKlHNRsDlk7J3Afhsx/jTLrCX/G8+2tPtLsHyR
1838
+ N39kluM5vYHbKXDsCG/a88Z2yUE2+r4Clp0FUKffiEDBPm0/H0sQ4Q1oEfQFDQRK
1839
+ aIkhpsm0nOnLYTy3/xJc5uqDNkLiawIDAQABo1wwWjAPBgNVHRMBAf8EBTADAQH/
1840
+ MB0GA1UdDgQWBBSejWrVnw7QaBjNFCHMNFi+doSOcTAoBgNVHSMEITAfgBSejWrV
1841
+ nw7QaBjNFCHMNFi+doSOcaEEpAIwAIIBATANBgkqhkiG9w0BAQUFAAOCAQEAAe85
1842
+ BQ1ydAHFqo0ib38VRPOwf5xPHGbYGhvQi4/sU6aTuR7pxaOJPYz05jLhS+utEmy1
1843
+ sknBq60G67yhQE7IHcfwrl1arirG2WmKGvAbjeYL2K1UiU0pVD3D+Klkv/pK6jIQ
1844
+ eOJRGb3qNUn0Sq9EoYIOXiGXQ641F0bZZ0+5H92kT1lmnF5oLfCb84ImD9T3snH6
1845
+ pIr5RKRx/0YmJIcv3WdpoPT903rOJiRIEgIj/hDk9QZTBpm222Ul5yQQ5pBywpSp
1846
+ xh0bmJKAQWhQm7QlybKfyaQmg5ot1jEzWAvD2I5FjHQxmAlchjb6RreaRhExj+JE
1847
+ 5O117dMBdzDBjcNMOA==
1848
+ -----END CERTIFICATE-----
1849
+ PKCS7
1850
+ end
1851
+
1852
+ let(:keys_dir) do
1853
+ keys = tmpdir('keys')
1854
+ dir_contained_in(keys, {
1855
+ private_key_name => private_key,
1856
+ public_key_name => public_key
1857
+ })
1858
+ keys
1859
+ end
1860
+
1861
+ let(:private_key_path) { File.join(keys_dir, private_key_name) }
1862
+ let(:public_key_path) { File.join(keys_dir, public_key_name) }
1863
+ let(:hiera_yaml) do
1864
+ <<-YAML.unindent
1865
+ :backends:
1866
+ - eyaml
1867
+ - yaml
1868
+ :eyaml:
1869
+ :datadir: #{code_dir}/hieradata
1870
+ :pkcs7_private_key: #{private_key_path}
1871
+ :pkcs7_public_key: #{public_key_path}
1872
+ :yaml:
1873
+ :datadir: #{code_dir}/hieradata
1874
+ :hierarchy:
1875
+ - common
1876
+ YAML
1877
+ end
1878
+
1879
+ let(:data_files) do
1880
+ {
1881
+ 'common.yaml' => <<-YAML.unindent,
1882
+ b: value 'b' (from global)
1883
+ c:
1884
+ c_a: value c_a (from global)
1885
+ YAML
1886
+ 'common.eyaml' => <<-YAML.unindent
1887
+ a: >
1888
+ ENC[PKCS7,MIIBmQYJKoZIhvcNAQcDoIIBijCCAYYCAQAxggEhMIIBHQIBADAFMAACAQEw
1889
+ DQYJKoZIhvcNAQEBBQAEggEAH457bsfL8kYw9O50roE3dcE21nCnmPnQ2XSX
1890
+ LYRJ2C78LarbfFonKz0gvDW7tyhsLWASFCFaiU8T1QPBd2b3hoQK8E4B2Ual
1891
+ xga/K7r9y3OSgRomTm9tpTltC6re0Ubh3Dy71H61obwxEdNVTqjPe95+m2b8
1892
+ 6zWZVnzZzXXsTG1S17yJn1zaB/LXHbWNy4KyLLKCGAml+Gfl6ZMjmaplTmUA
1893
+ QIC5rI8abzbPP3TDMmbLOGNkrmLqI+3uS8tSueTMoJmWaMF6c+H/cA7oRxmV
1894
+ QCeEUVXjyFvCHcmbA+keS/RK9XF+vc07/XS4XkYSPs/I5hLQji1y9bkkGAs0
1895
+ tehxQjBcBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBDHpA6Fcl/R16aIYcow
1896
+ oiO4gDAvfFH6jLUwXkcYtagnwdmhkd9TQJtxNWcIwMpvmk036MqIoGwwhQdg
1897
+ gV4beiCFtLU=]
1898
+ a_ref: "A reference to %{hiera('a')}"
1899
+ b_ref: "A reference to %{hiera('b')}"
1900
+ c_ref: "%{alias('c')}"
1901
+ :symbol: "A symbol"
1902
+ YAML
1903
+ }
1904
+ end
1905
+
1906
+ let(:code_dir_files) do
1907
+ {
1908
+ 'hiera.yaml' => hiera_yaml,
1909
+ 'hieradata' => data_files
1910
+ }
1911
+ end
1912
+
1913
+ before(:each) do
1914
+ Puppet.settings[:hiera_config] = File.join(code_dir, 'hiera.yaml')
1915
+ end
1916
+
1917
+ it 'finds data in the global layer' do
1918
+ expect(lookup('a')).to eql("Encrypted value 'a' (from global)")
1919
+ end
1920
+
1921
+ it 'can use a hiera interpolation' do
1922
+ expect(lookup('a_ref')).to eql("A reference to Encrypted value 'a' (from global)")
1923
+ end
1924
+
1925
+ it 'can use a hiera interpolation that refers back to yaml' do
1926
+ expect(lookup('b_ref')).to eql("A reference to value 'b' (from global)")
1927
+ end
1928
+
1929
+ it 'can use a hiera interpolation that refers back to yaml, but only in global layer' do
1930
+ expect(lookup(['c', 'c_ref'], 'merge' => 'deep')).to eql([{'c_a' => 'value c_a (from global)', 'c_b' => 'value c_b (from environment)'}, { 'c_a' => 'value c_a (from global)' }])
1931
+ end
1932
+
1933
+ it 'delegates configured eyaml backend to eyaml_lookup_key function' do
1934
+ expect(explain('a')).to match(/Hierarchy entry "eyaml"\n.*\n.*\n.*"common"\n\s*Found key: "a"/m)
1935
+ end
1936
+ end
1937
+
1938
+ context 'using deep_merge_options' do
1939
+ let(:hiera_yaml) do
1940
+ <<-YAML.unindent
1941
+ ---
1942
+ :backends:
1943
+ - yaml
1944
+ :yaml:
1945
+ :datadir: #{code_dir}/hieradata
1946
+ :hierarchy:
1947
+ - common
1948
+ - other
1949
+ :merge_behavior: deeper
1950
+ :deep_merge_options:
1951
+ :unpack_arrays: ','
1952
+ YAML
1953
+ end
1954
+
1955
+ let(:code_dir_files) do
1956
+ {
1957
+ 'hiera.yaml' => hiera_yaml,
1958
+ 'hieradata' => {
1959
+ 'common.yaml' => <<-YAML.unindent,
1960
+ hash:
1961
+ array:
1962
+ - x1,x2
1963
+ array:
1964
+ - x1,x2
1965
+ str: a string
1966
+ mixed:
1967
+ x: hx
1968
+ y: hy
1969
+ YAML
1970
+ 'other.yaml' => <<-YAML.unindent,
1971
+ hash:
1972
+ array:
1973
+ - x3
1974
+ - x4
1975
+ array:
1976
+ - x3
1977
+ - x4
1978
+ str: another string
1979
+ mixed:
1980
+ - h1
1981
+ - h2
1982
+ YAML
1983
+ }
1984
+ }
1985
+ end
1986
+
1987
+ it 'ignores configured merge_behavior when looking up arrays' do
1988
+ expect(lookup('array')).to eql(['x1,x2'])
1989
+ end
1990
+
1991
+ it 'ignores configured merge_behavior when merging arrays' do
1992
+ expect(lookup('array', 'merge' => 'unique')).to eql(['x1,x2', 'x3', 'x4'])
1993
+ end
1994
+
1995
+ it 'ignores configured merge_behavior when looking up hashes' do
1996
+ expect(lookup('hash')).to eql({'array' => ['x1,x2']})
1997
+ end
1998
+
1999
+ it 'ignores configured merge_behavior when merging hashes' do
2000
+ expect(lookup('hash', 'merge' => 'hash')).to eql({'array' => ['x1,x2']})
2001
+ end
2002
+ end
2003
+
2004
+ context 'using relative datadir paths' do
2005
+ let(:hiera_yaml) do
2006
+ <<-YAML.unindent
2007
+ ---
2008
+ :backends:
2009
+ - yaml
2010
+ :yaml:
2011
+ :datadir: relative_data
2012
+ :hierarchy:
2013
+ - common
2014
+ YAML
2015
+ end
2016
+
2017
+ let(:populated_code_dir) do
2018
+ dir_contained_in(code_dir, code_dir_files.merge({
2019
+ 'fake_cwd' => {
2020
+ 'relative_data' => {
2021
+ 'common.yaml' => <<-YAML.unindent
2022
+ a: value a (from fake_cwd/relative_data/common.yaml)
2023
+ YAML
2024
+ }
2025
+ }
2026
+ }))
2027
+ code_dir
2028
+ end
2029
+
2030
+ around(:each) do |example|
2031
+ cwd = Dir.pwd
2032
+ Dir.chdir(File.join(code_dir, 'fake_cwd'))
2033
+ begin
2034
+ example.run
2035
+ ensure
2036
+ Dir.chdir(cwd)
2037
+ end
2038
+ end
2039
+
2040
+ it 'finds data from data file beneath relative datadir' do
2041
+ expect(lookup('a')).to eql('value a (from fake_cwd/relative_data/common.yaml)')
2042
+ end
2043
+ end
2044
+ end
2045
+
2046
+ context 'version 5' do
2047
+ let(:scope_additions) { { 'ipl_datadir' => 'hieradata' } }
2048
+ let(:hiera_yaml) do
2049
+ <<-YAML.unindent
2050
+ ---
2051
+ version: 5
2052
+ defaults:
2053
+ datadir: "%{ipl_datadir}"
2054
+
2055
+ hierarchy:
2056
+ - name: Yaml
2057
+ data_hash: yaml_data
2058
+ paths:
2059
+ - common.yaml
2060
+ - "%{domain}.yaml"
2061
+ - name: Json
2062
+ data_hash: json_data
2063
+ paths:
2064
+ - common.json
2065
+ - "%{domain}.json"
2066
+ - name: Hocon
2067
+ data_hash: hocon_data
2068
+ paths:
2069
+ - common.conf
2070
+ - "%{domain}.conf"
2071
+ YAML
2072
+ end
2073
+
2074
+ it 'finds global data and reports no deprecation warnings' do
2075
+ expect(lookup('a')).to eql('value a (from global)')
2076
+ expect(warnings).to be_empty
2077
+ end
2078
+
2079
+ it 'explain contains output from global layer' do
2080
+ explanation = explain('a')
2081
+ expect(explanation).to include('Global Data Provider (hiera configuration version 5)')
2082
+ expect(explanation).to include('Hierarchy entry "Yaml"')
2083
+ expect(explanation).to include('Hierarchy entry "Json"')
2084
+ expect(explanation).to include('Hierarchy entry "Hocon"')
2085
+ expect(explanation).to include('Found key: "a" value: "value a (from global)"')
2086
+ end
2087
+
2088
+ it 'uses the explicitly given merge to override lookup options and to merge all layers' do
2089
+ expect(lookup('hash_c', 'merge' => 'deep')).to eql(
2090
+ {
2091
+ 'hash_ca' =>
2092
+ {
2093
+ 'caa' => 'value hash_c.hash_ca.caa (from environment)',
2094
+ 'cab' => 'value hash_c.hash_ca.cab (from global)',
2095
+ 'cac' => 'value hash_c.hash_ca.cac (from global json)',
2096
+ }
2097
+ })
2098
+ end
2099
+
2100
+ it 'provides a sensible error message when the hocon library is not loaded' do
2101
+ allow(Puppet.features).to receive(:hocon?).and_return(false)
2102
+
2103
+ expect { lookup('a') }.to raise_error do |e|
2104
+ expect(e.message).to match(/Lookup using Hocon data_hash function is not supported without hocon library/)
2105
+ end
2106
+ end
2107
+
2108
+ context 'with missing path declaraion' do
2109
+ context 'and yaml_data function' do
2110
+ let(:hiera_yaml) { <<-YAML.unindent }
2111
+ version: 5
2112
+ hierarchy:
2113
+ - name: Yaml
2114
+ data_hash: yaml_data
2115
+ YAML
2116
+
2117
+ it 'fails and reports the missing path' do
2118
+ expect { lookup('a') }.to raise_error(/one of 'path', 'paths' 'glob', 'globs' or 'mapped_paths' must be declared in hiera.yaml when using this data_hash function/)
2119
+ end
2120
+ end
2121
+
2122
+ context 'and json_data function' do
2123
+ let(:hiera_yaml) { <<-YAML.unindent }
2124
+ version: 5
2125
+ hierarchy:
2126
+ - name: Json
2127
+ data_hash: json_data
2128
+ YAML
2129
+
2130
+ it 'fails and reports the missing path' do
2131
+ expect { lookup('a') }.to raise_error(/one of 'path', 'paths' 'glob', 'globs' or 'mapped_paths' must be declared in hiera.yaml when using this data_hash function/)
2132
+ end
2133
+ end
2134
+
2135
+ context 'and hocon_data function' do
2136
+ let(:hiera_yaml) { <<-YAML.unindent }
2137
+ version: 5
2138
+ hierarchy:
2139
+ - name: Hocon
2140
+ data_hash: hocon_data
2141
+ YAML
2142
+
2143
+ it 'fails and reports the missing path' do
2144
+ expect { lookup('a') }.to raise_error(/one of 'path', 'paths' 'glob', 'globs' or 'mapped_paths' must be declared in hiera.yaml when using this data_hash function/)
2145
+ end
2146
+ end
2147
+
2148
+ context 'and eyaml_lookup_key function', :if => Puppet.features.hiera_eyaml? do
2149
+ let(:hiera_yaml) { <<-YAML.unindent }
2150
+ version: 5
2151
+ hierarchy:
2152
+ - name: Yaml
2153
+ lookup_key: eyaml_lookup_key
2154
+ YAML
2155
+
2156
+ it 'fails and reports the missing path' do
2157
+ expect { lookup('a') }.to raise_error(/one of 'path', 'paths' 'glob', 'globs' or 'mapped_paths' must be declared in hiera.yaml when using this lookup_key function/)
2158
+ end
2159
+ end
2160
+ end
2161
+ end
2162
+
2163
+ context 'with a hiera3_backend that has no paths', :if => Puppet.features.hiera? do
2164
+ let(:hiera_yaml) do
2165
+ <<-YAML.unindent
2166
+ ---
2167
+ version: 5
2168
+ hierarchy:
2169
+ - name: Custom
2170
+ hiera3_backend: custom
2171
+ YAML
2172
+ end
2173
+
2174
+ it 'calls the backend' do
2175
+ expect(lookup('hash_c')).to eql(
2176
+ { 'hash_ca' => { 'cad' => 'value hash_c.hash_ca.cad (from global custom)' }})
2177
+ end
2178
+ end
2179
+ end
2180
+
2181
+ context 'and a module' do
2182
+ let(:mod_a_files) { {} }
2183
+
2184
+ let(:populated_env_dir) do
2185
+ dir_contained_in(env_dir, DeepMerge.deep_merge!(environment_files, env_name => { 'modules' => mod_a_files }))
2186
+ env_dir
2187
+ end
2188
+
2189
+ context 'that has no lookup configured' do
2190
+ let(:mod_a_files) do
2191
+ {
2192
+ 'mod_a' => {
2193
+ 'data' => {
2194
+ 'common.yaml' => <<-YAML.unindent
2195
+ ---
2196
+ mod_a::b: value mod_a::b (from mod_a)
2197
+ YAML
2198
+ }
2199
+ }
2200
+ }
2201
+ end
2202
+
2203
+ it 'does not find data in the module' do
2204
+ expect { lookup('mod_a::b') }.to raise_error(Puppet::DataBinding::LookupError, /did not find a value for the name 'mod_a::b'/)
2205
+ end
2206
+
2207
+ context 'with a Hiera v3 configuration', :if => Puppet.features.hiera? do
2208
+ let(:mod_a_files) do
2209
+ {
2210
+ 'mod_a' => {
2211
+ 'hiera.yaml' => <<-YAML.unindent
2212
+ ---
2213
+ :backends: yaml
2214
+ YAML
2215
+ }
2216
+ }
2217
+ end
2218
+
2219
+ it 'raises a warning' do
2220
+ expect(lookup('mod_a::a')).to eql('value mod_a::a (from environment)')
2221
+ expect(warnings).to include(/hiera.yaml version 3 found at module root was ignored/)
2222
+ end
2223
+ end
2224
+
2225
+ context "but a metadata.json with 'module_data_provider=hiera'" do
2226
+ let(:mod_a_files_1) { DeepMerge.deep_merge!(mod_a_files, 'mod_a' => { 'metadata.json' => <<-JSON.unindent }) }
2227
+ {
2228
+ "name": "example/mod_a",
2229
+ "version": "0.0.2",
2230
+ "source": "git@github.com/example/mod_a.git",
2231
+ "dependencies": [],
2232
+ "author": "Bob the Builder",
2233
+ "license": "Apache-2.0",
2234
+ "data_provider": "hiera"
2235
+ }
2236
+ JSON
2237
+
2238
+ let(:populated_env_dir) do
2239
+ dir_contained_in(env_dir, DeepMerge.deep_merge!(environment_files, env_name => { 'modules' => mod_a_files_1 }))
2240
+ env_dir
2241
+ end
2242
+
2243
+ it 'finds data in the module and reports deprecation warning for metadata.json' do
2244
+ expect(lookup('mod_a::b')).to eql('value mod_a::b (from mod_a)')
2245
+ expect(warnings).to include(/Defining "data_provider": "hiera" in metadata.json is deprecated. A 'hiera.yaml' file should be used instead/)
2246
+ end
2247
+
2248
+ context 'and a hiera.yaml file' do
2249
+ let(:mod_a_files_2) { DeepMerge.deep_merge!(mod_a_files_1, 'mod_a' => { 'hiera.yaml' => <<-YAML.unindent }) }
2250
+ ---
2251
+ version: 4
2252
+ hierarchy:
2253
+ - name: common
2254
+ backend: yaml
2255
+ YAML
2256
+
2257
+ let(:populated_env_dir) do
2258
+ dir_contained_in(env_dir, DeepMerge.deep_merge!(environment_files, env_name => { 'modules' => mod_a_files_2 }))
2259
+ env_dir
2260
+ end
2261
+
2262
+ it 'finds data in the module and reports deprecation warnings for both metadata.json and hiera.yaml' do
2263
+ expect(lookup('mod_a::b')).to eql('value mod_a::b (from mod_a)')
2264
+ expect(warnings).to include(/Defining "data_provider": "hiera" in metadata.json is deprecated/)
2265
+ expect(warnings).to include(/Use of 'hiera.yaml' version 4 is deprecated. It should be converted to version 5/)
2266
+ end
2267
+ end
2268
+ end
2269
+ end
2270
+
2271
+ context 'using deep merge and module values that aliases environment values' do
2272
+ let(:mod_a_files) do
2273
+ {
2274
+ 'mod_a' => {
2275
+ 'data' => {
2276
+ 'common.yaml' => <<-YAML.unindent,
2277
+ ---
2278
+ mod_a::hash:
2279
+ b: value b (from module)
2280
+ lookup_options:
2281
+ mod_a::hash:
2282
+ merge: deep
2283
+ YAML
2284
+ },
2285
+ 'hiera.yaml' => <<-YAML.unindent,
2286
+ ---
2287
+ version: 5
2288
+ hierarchy:
2289
+ - name: "Common"
2290
+ path: "common.yaml"
2291
+ - name: "Other"
2292
+ path: "other.yaml"
2293
+ YAML
2294
+ }
2295
+ }
2296
+ end
2297
+ let(:env_data) do
2298
+ {
2299
+ 'common.yaml' => <<-YAML.unindent
2300
+ a: value a (from environment)
2301
+ mod_a::hash:
2302
+ a: value mod_a::hash.a (from environment)
2303
+ c: '%{alias("a")}'
2304
+ YAML
2305
+ }
2306
+ end
2307
+
2308
+ it 'continues with module lookup after alias is resolved in environment' do
2309
+ expect(lookup('mod_a::hash')).to eql(
2310
+ {
2311
+ 'a' => 'value mod_a::hash.a (from environment)',
2312
+ 'b' => 'value b (from module)',
2313
+ 'c' => 'value a (from environment)'
2314
+ })
2315
+ end
2316
+ end
2317
+
2318
+ context 'using a data_hash that reads a yaml file' do
2319
+ let(:defaults) {
2320
+ {
2321
+ 'mod_a::xd' => 'value mod_a::xd (from default)',
2322
+ 'mod_a::xd_found' => 'value mod_a::xd_found (from default)',
2323
+ 'scope_xd' => 'value scope_xd (from default)'
2324
+ }}
2325
+ let(:overrides) {
2326
+ {
2327
+ 'mod_a::xo' => 'value mod_a::xo (from override)',
2328
+ 'scope_xo' => 'value scope_xo (from override)'
2329
+ }}
2330
+
2331
+ let(:scope_additions) do
2332
+ {
2333
+ 'scope_scalar' => 'scope scalar value',
2334
+ 'scope_hash' => { 'a' => 'scope hash a', 'b' => 'scope hash b' }
2335
+ }
2336
+ end
2337
+ let(:mod_a_files) do
2338
+ {
2339
+ 'mod_a' => {
2340
+ 'data' => {
2341
+ 'common.yaml' => <<-YAML.unindent
2342
+ ---
2343
+ mod_a::a: value mod_a::a (from mod_a)
2344
+ mod_a::b: value mod_a::b (from mod_a)
2345
+ mod_a::xo: value mod_a::xo (from mod_a)
2346
+ mod_a::xd_found: value mod_a::xd_found (from mod_a)
2347
+ mod_a::interpolate_xo: "-- %{lookup('mod_a::xo')} --"
2348
+ mod_a::interpolate_xd: "-- %{lookup('mod_a::xd')} --"
2349
+ mod_a::interpolate_scope_xo: "-- %{scope_xo} --"
2350
+ mod_a::interpolate_scope_xd: "-- %{scope_xd} --"
2351
+ mod_a::hash_a:
2352
+ a: value mod_a::hash_a.a (from mod_a)
2353
+ b: value mod_a::hash_a.b (from mod_a)
2354
+ mod_a::hash_b:
2355
+ a: value mod_a::hash_b.a (from mod_a)
2356
+ b: value mod_a::hash_b.b (from mod_a)
2357
+ mod_a::interpolated: "-- %{lookup('mod_a::a')} --"
2358
+ mod_a::a_a: "-- %{lookup('mod_a::hash_a.a')} --"
2359
+ mod_a::a_b: "-- %{lookup('mod_a::hash_a.b')} --"
2360
+ mod_a::b_a: "-- %{lookup('mod_a::hash_b.a')} --"
2361
+ mod_a::b_b: "-- %{lookup('mod_a::hash_b.b')} --"
2362
+ mod_a::interpolate_array:
2363
+ - "-- %{lookup('mod_a::a')} --"
2364
+ - "-- %{lookup('mod_a::b')} --"
2365
+ mod_a::interpolate_literal: "-- %{literal('hello')} --"
2366
+ mod_a::interpolate_scope: "-- %{scope_scalar} --"
2367
+ mod_a::interpolate_scope_not_found: "-- %{scope_nope} --"
2368
+ mod_a::interpolate_scope_dig: "-- %{scope_hash.a} --"
2369
+ mod_a::interpolate_scope_dig_not_found: "-- %{scope_hash.nope} --"
2370
+ mod_a::quoted_interpolation: '-- %{lookup(''"mod_a::a.quoted.key"'')} --'
2371
+ "mod_a::a.quoted.key": "value mod_a::a.quoted.key (from mod_a)"
2372
+ YAML
2373
+ },
2374
+ 'hiera.yaml' => <<-YAML.unindent,
2375
+ ---
2376
+ version: 5
2377
+ hierarchy:
2378
+ - name: "Common"
2379
+ data_hash: yaml_data
2380
+ path: "common.yaml"
2381
+ YAML
2382
+ }
2383
+ }
2384
+ end
2385
+
2386
+ it 'finds data in the module' do
2387
+ expect(lookup('mod_a::b')).to eql('value mod_a::b (from mod_a)')
2388
+ end
2389
+
2390
+ it 'environment data has higher priority than module data' do
2391
+ expect(lookup('mod_a::a')).to eql('value mod_a::a (from environment)')
2392
+ end
2393
+
2394
+ it 'environment data has higher priority than module data in interpolated module data' do
2395
+ expect(lookup('mod_a::interpolated')).to eql('-- value mod_a::a (from environment) --')
2396
+ end
2397
+
2398
+ it 'overrides have higher priority than found data' do
2399
+ expect(lookup('mod_a::xo', { 'override' => overrides })).to eql('value mod_a::xo (from override)')
2400
+ end
2401
+
2402
+ it 'overrides have higher priority than found data in lookup interpolations' do
2403
+ expect(lookup('mod_a::interpolate_xo', { 'override' => overrides })).to eql('-- value mod_a::xo (from override) --')
2404
+ end
2405
+
2406
+ it 'overrides have higher priority than found data in scope interpolations' do
2407
+ expect(lookup('mod_a::interpolate_scope_xo', { 'override' => overrides })).to eql('-- value scope_xo (from override) --')
2408
+ end
2409
+
2410
+ it 'defaults have lower priority than found data' do
2411
+ expect(lookup('mod_a::xd_found', { 'default_values_hash' => defaults })).to eql('value mod_a::xd_found (from mod_a)')
2412
+ end
2413
+
2414
+ it 'defaults are used when data is not found' do
2415
+ expect(lookup('mod_a::xd', { 'default_values_hash' => defaults })).to eql('value mod_a::xd (from default)')
2416
+ end
2417
+
2418
+ it 'defaults are used when data is not found in lookup interpolations' do
2419
+ expect(lookup('mod_a::interpolate_xd', { 'default_values_hash' => defaults })).to eql('-- value mod_a::xd (from default) --')
2420
+ end
2421
+
2422
+ it 'defaults are used when data is not found in scope interpolations' do
2423
+ expect(lookup('mod_a::interpolate_scope_xd', { 'default_values_hash' => defaults })).to eql('-- value scope_xd (from default) --')
2424
+ end
2425
+
2426
+ it 'merges hashes from environment and module unless strategy hash is used' do
2427
+ expect(lookup('mod_a::hash_a')).to eql({'a' => 'value mod_a::hash_a.a (from environment)'})
2428
+ end
2429
+
2430
+ it 'merges hashes from environment and module when merge strategy hash is used' do
2431
+ expect(lookup('mod_a::hash_a', :merge => 'hash')).to eql(
2432
+ {'a' => 'value mod_a::hash_a.a (from environment)', 'b' => 'value mod_a::hash_a.b (from mod_a)'})
2433
+ end
2434
+
2435
+ it 'will not merge hashes from environment and module in interpolated expressions' do
2436
+ expect(lookup(['mod_a::a_a', 'mod_a::a_b'])).to eql(
2437
+ ['-- value mod_a::hash_a.a (from environment) --', '-- --']) # root key found in environment, no hash merge is performed
2438
+ end
2439
+
2440
+ it 'interpolates arrays' do
2441
+ expect(lookup('mod_a::interpolate_array')).to eql(['-- value mod_a::a (from environment) --', '-- value mod_a::b (from mod_a) --'])
2442
+ end
2443
+
2444
+ it 'can dig into arrays using subkeys' do
2445
+ expect(lookup('mod_a::interpolate_array.1')).to eql('-- value mod_a::b (from mod_a) --')
2446
+ end
2447
+
2448
+ it 'treats an out of range subkey as not found' do
2449
+ expect(explain('mod_a::interpolate_array.2')).to match(/No such key: "2"/)
2450
+ end
2451
+
2452
+ it 'interpolates a literal' do
2453
+ expect(lookup('mod_a::interpolate_literal')).to eql('-- hello --')
2454
+ end
2455
+
2456
+ it 'interpolates scalar from scope' do
2457
+ expect(lookup('mod_a::interpolate_scope')).to eql('-- scope scalar value --')
2458
+ end
2459
+
2460
+ it 'raises an error when trying to interpolate not found in scope' do
2461
+ expect { lookup('mod_a::interpolate_scope_not_found')
2462
+ }.to raise_error(/Evaluation Error: Error while evaluating a Function Call, Undefined variable 'scope_nope';/)
2463
+ end
2464
+
2465
+ it 'interpolates dotted key from scope' do
2466
+ expect(lookup('mod_a::interpolate_scope_dig')).to eql('-- scope hash a --')
2467
+ end
2468
+
2469
+ it 'treats interpolated dotted key but not found in scope as empty string' do
2470
+ expect(lookup('mod_a::interpolate_scope_dig_not_found')).to eql('-- --')
2471
+ end
2472
+
2473
+ it 'can use quoted keys in interpolation' do
2474
+ expect(lookup('mod_a::quoted_interpolation')).to eql('-- value mod_a::a.quoted.key (from mod_a) --') # root key found in environment, no hash merge is performed
2475
+ end
2476
+
2477
+ it 'merges hashes from environment and module in interpolated expressions if hash merge is specified in lookup options' do
2478
+ expect(lookup(['mod_a::b_a', 'mod_a::b_b'])).to eql(
2479
+ ['-- value mod_a::hash_b.a (from environment) --', '-- value mod_a::hash_b.b (from mod_a) --'])
2480
+ end
2481
+ end
2482
+
2483
+ context 'using a lookup_key that uses a path' do
2484
+ let(:mod_a_files) do
2485
+ {
2486
+ 'mod_a' => {
2487
+ 'functions' => {
2488
+ 'pp_lookup_key.pp' => <<-PUPPET.unindent
2489
+ function mod_a::pp_lookup_key($key, $options, $context) {
2490
+ if !$context.cache_has_key(undef) {
2491
+ $context.cache_all(yaml_data($options, $context))
2492
+ $context.cache(undef, true)
2493
+ }
2494
+ if $context.cache_has_key($key) { $context.cached_value($key) } else { $context.not_found }
2495
+ }
2496
+ PUPPET
2497
+ },
2498
+ 'hiera.yaml' => <<-YAML.unindent,
2499
+ ---
2500
+ version: 5
2501
+ hierarchy:
2502
+ - name: "Common"
2503
+ lookup_key: mod_a::pp_lookup_key
2504
+ path: common.yaml
2505
+ YAML
2506
+ 'data' => {
2507
+ 'common.yaml' => <<-YAML.unindent
2508
+ mod_a::b: value mod_a::b (from mod_a)
2509
+ YAML
2510
+ }
2511
+ }
2512
+ }
2513
+ end
2514
+
2515
+ it 'finds data in the module' do
2516
+ expect(lookup('mod_a::b')).to eql('value mod_a::b (from mod_a)')
2517
+ end
2518
+ end
2519
+
2520
+ context 'using a lookup_key that is a puppet function' do
2521
+ let(:puppet_function) { <<-PUPPET.unindent }
2522
+ function mod_a::pp_lookup_key(Puppet::LookupKey $key, Hash[String,String] $options, Puppet::LookupContext $context) >> Puppet::LookupValue {
2523
+ case $key {
2524
+ 'mod_a::really_interpolated': { $context.interpolate("-- %{lookup('mod_a::a')} --") }
2525
+ 'mod_a::recursive': { lookup($key) }
2526
+ default: {
2527
+ if $context.cache_has_key(mod_a::a) {
2528
+ $context.explain || { 'reusing cache' }
2529
+ } else {
2530
+ $context.explain || { 'initializing cache' }
2531
+ $context.cache_all({
2532
+ mod_a::a => 'value mod_a::a (from mod_a)',
2533
+ mod_a::b => 'value mod_a::b (from mod_a)',
2534
+ mod_a::c => 'value mod_a::c (from mod_a)',
2535
+ mod_a::hash_a => {
2536
+ a => 'value mod_a::hash_a.a (from mod_a)',
2537
+ b => 'value mod_a::hash_a.b (from mod_a)'
2538
+ },
2539
+ mod_a::hash_b => {
2540
+ a => 'value mod_a::hash_b.a (from mod_a)',
2541
+ b => 'value mod_a::hash_b.b (from mod_a)'
2542
+ },
2543
+ mod_a::interpolated => "-- %{lookup('mod_a::a')} --",
2544
+ mod_a::a_a => "-- %{lookup('mod_a::hash_a.a')} --",
2545
+ mod_a::a_b => "-- %{lookup('mod_a::hash_a.b')} --",
2546
+ mod_a::b_a => "-- %{lookup('mod_a::hash_b.a')} --",
2547
+ mod_a::b_b => "-- %{lookup('mod_a::hash_b.b')} --",
2548
+ 'mod_a::a.quoted.key' => 'value mod_a::a.quoted.key (from mod_a)',
2549
+ mod_a::sensitive => Sensitive('reduct me please'),
2550
+ mod_a::type => Object[{name => 'FindMe', 'attributes' => {'x' => String}}],
2551
+ mod_a::version => SemVer('3.4.1'),
2552
+ mod_a::version_range => SemVerRange('>=3.4.1'),
2553
+ mod_a::timestamp => Timestamp("1994-03-25T19:30:00"),
2554
+ mod_a::timespan => Timespan("3-10:00:00")
2555
+ })
2556
+ }
2557
+ if !$context.cache_has_key($key) {
2558
+ $context.not_found
2559
+ }
2560
+ $context.explain || { "returning value for $key" }
2561
+ $context.cached_value($key)
2562
+ }
2563
+ }
2564
+ }
2565
+ PUPPET
2566
+
2567
+ let(:mod_a_files) do
2568
+ {
2569
+ 'mod_a' => {
2570
+ 'functions' => {
2571
+ 'pp_lookup_key.pp' => puppet_function
2572
+ },
2573
+ 'hiera.yaml' => <<-YAML.unindent,
2574
+ ---
2575
+ version: 5
2576
+ hierarchy:
2577
+ - name: "Common"
2578
+ lookup_key: mod_a::pp_lookup_key
2579
+ YAML
2580
+ }
2581
+ }
2582
+ end
2583
+
2584
+ it 'finds data in the module' do
2585
+ expect(lookup('mod_a::b')).to eql('value mod_a::b (from mod_a)')
2586
+ end
2587
+
2588
+ it 'environment data has higher priority than module data' do
2589
+ expect(lookup('mod_a::a')).to eql('value mod_a::a (from environment)')
2590
+ end
2591
+
2592
+ it 'finds quoted keys in the module' do
2593
+ expect(lookup('"mod_a::a.quoted.key"')).to eql('value mod_a::a.quoted.key (from mod_a)')
2594
+ end
2595
+
2596
+ it 'will not resolve interpolated expressions' do
2597
+ expect(lookup('mod_a::interpolated')).to eql("-- %{lookup('mod_a::a')} --")
2598
+ end
2599
+
2600
+ it 'resolves interpolated expressions using Context#interpolate' do
2601
+ expect(lookup('mod_a::really_interpolated')).to eql("-- value mod_a::a (from environment) --")
2602
+ end
2603
+
2604
+ it 'will not merge hashes from environment and module unless strategy hash is used' do
2605
+ expect(lookup('mod_a::hash_a')).to eql({ 'a' => 'value mod_a::hash_a.a (from environment)' })
2606
+ end
2607
+
2608
+ it 'merges hashes from environment and module when merge strategy hash is used' do
2609
+ expect(lookup('mod_a::hash_a', :merge => 'hash')).to eql({ 'a' => 'value mod_a::hash_a.a (from environment)', 'b' => 'value mod_a::hash_a.b (from mod_a)' })
2610
+ end
2611
+
2612
+ it 'traps recursive lookup trapped' do
2613
+ expect(explain('mod_a::recursive')).to include('Recursive lookup detected')
2614
+ end
2615
+
2616
+ it 'private cache is persisted over multiple calls' do
2617
+ collect_notices("notice(lookup('mod_a::b')) notice(lookup('mod_a::c'))", true)
2618
+ expect(notices).to eql(['value mod_a::b (from mod_a)', 'value mod_a::c (from mod_a)'])
2619
+ expect(explanation).to match(/initializing cache.*reusing cache/m)
2620
+ expect(explanation).not_to match(/initializing cache.*initializing cache/m)
2621
+ end
2622
+
2623
+ it 'the same key is requested only once' do
2624
+ collect_notices("notice(lookup('mod_a::b')) notice(lookup('mod_a::b'))", true)
2625
+ expect(notices).to eql(['value mod_a::b (from mod_a)', 'value mod_a::b (from mod_a)'])
2626
+ expect(explanation).to match(/Found key: "mod_a::b".*Found key: "mod_a::b"/m)
2627
+ expect(explanation).to match(/returning value for mod_a::b/m)
2628
+ expect(explanation).not_to match(/returning value for mod_a::b.*returning value for mod_a::b/m)
2629
+ end
2630
+
2631
+ context 'and calling function via API' do
2632
+ it 'finds and delivers rich data' do
2633
+ collect_notices("notice('success')") do |scope|
2634
+ expect(lookup_func.call(scope, 'mod_a::sensitive')).to be_a(Puppet::Pops::Types::PSensitiveType::Sensitive)
2635
+ expect(lookup_func.call(scope, 'mod_a::type')).to be_a(Puppet::Pops::Types::PObjectType)
2636
+ expect(lookup_func.call(scope, 'mod_a::version')).to eql(SemanticPuppet::Version.parse('3.4.1'))
2637
+ expect(lookup_func.call(scope, 'mod_a::version_range')).to eql(SemanticPuppet::VersionRange.parse('>=3.4.1'))
2638
+ expect(lookup_func.call(scope, 'mod_a::timestamp')).to eql(Puppet::Pops::Time::Timestamp.parse('1994-03-25T19:30:00'))
2639
+ expect(lookup_func.call(scope, 'mod_a::timespan')).to eql(Puppet::Pops::Time::Timespan.parse('3-10:00:00'))
2640
+ end
2641
+ expect(notices).to eql(['success'])
2642
+ end
2643
+ end
2644
+
2645
+ context 'with declared but incompatible return_type' do
2646
+ let(:puppet_function) { <<-PUPPET.unindent }
2647
+ function mod_a::pp_lookup_key(Puppet::LookupKey $key, Hash[String,String] $options, Puppet::LookupContext $context) >> Runtime['ruby','Symbol'] {
2648
+ undef
2649
+ }
2650
+ PUPPET
2651
+
2652
+ it 'fails and reports error' do
2653
+ expect{lookup('mod_a::a')}.to raise_error(
2654
+ "Return type of 'lookup_key' function named 'mod_a::pp_lookup_key' is incorrect, expects a RichData value, got Runtime")
2655
+ end
2656
+ end
2657
+ end
2658
+
2659
+ context 'using a data_dig that is a ruby function' do
2660
+ let(:mod_a_files) do
2661
+ {
2662
+ 'mod_a' => {
2663
+ 'lib' => {
2664
+ 'puppet' => {
2665
+ 'functions' => {
2666
+ 'mod_a' => {
2667
+ 'ruby_dig.rb' => <<-RUBY.unindent
2668
+ Puppet::Functions.create_function(:'mod_a::ruby_dig') do
2669
+ dispatch :ruby_dig do
2670
+ param 'Array[String[1]]', :segments
2671
+ param 'Hash[String,Any]', :options
2672
+ param 'Puppet::LookupContext', :context
2673
+ return_type 'Puppet::LookupValue'
2674
+ end
2675
+
2676
+ def ruby_dig(segments, options, context)
2677
+ sub_segments = segments.dup
2678
+ root_key = sub_segments.shift
2679
+ case root_key
2680
+ when 'mod_a::options'
2681
+ hash = { 'mod_a::options' => options }
2682
+ when 'mod_a::lookup'
2683
+ return call_function('lookup', segments.join('.'))
2684
+ else
2685
+ hash = {
2686
+ 'mod_a::a' => 'value mod_a::a (from mod_a)',
2687
+ 'mod_a::b' => 'value mod_a::b (from mod_a)',
2688
+ 'mod_a::hash_a' => {
2689
+ 'a' => 'value mod_a::hash_a.a (from mod_a)',
2690
+ 'b' => 'value mod_a::hash_a.b (from mod_a)'
2691
+ },
2692
+ 'mod_a::hash_b' => {
2693
+ 'a' => 'value mod_a::hash_b.a (from mod_a)',
2694
+ 'b' => 'value mod_a::hash_b.b (from mod_a)'
2695
+ },
2696
+ 'mod_a::interpolated' => "-- %{lookup('mod_a::a')} --",
2697
+ 'mod_a::really_interpolated' => "-- %{lookup('mod_a::a')} --",
2698
+ 'mod_a::a_a' => "-- %{lookup('mod_a::hash_a.a')} --",
2699
+ 'mod_a::a_b' => "-- %{lookup('mod_a::hash_a.b')} --",
2700
+ 'mod_a::b_a' => "-- %{lookup('mod_a::hash_b.a')} --",
2701
+ 'mod_a::b_b' => "-- %{lookup('mod_a::hash_b.b')} --",
2702
+ 'mod_a::bad_type' => :oops,
2703
+ 'mod_a::bad_type_in_hash' => { 'a' => :oops },
2704
+ }
2705
+ end
2706
+ context.not_found unless hash.include?(root_key)
2707
+ value = sub_segments.reduce(hash[root_key]) do |memo, segment|
2708
+ context.not_found unless memo.is_a?(Hash) && memo.include?(segment)
2709
+ memo[segment]
2710
+ end
2711
+ root_key == 'mod_a::really_interpolated' ? context.interpolate(value) : value
2712
+ end
2713
+ end
2714
+ RUBY
2715
+ }
2716
+ }
2717
+ }
2718
+ },
2719
+ 'hiera.yaml' => <<-YAML.unindent,
2720
+ ---
2721
+ version: 5
2722
+ defaults:
2723
+ options:
2724
+ option_b:
2725
+ z: Default option value b.z
2726
+
2727
+ hierarchy:
2728
+ - name: "Common"
2729
+ data_dig: mod_a::ruby_dig
2730
+ uri: "http://www.example.com/passed/as/option"
2731
+ options:
2732
+ option_a: Option value a
2733
+ option_b:
2734
+ x: Option value b.x
2735
+ y: Option value b.y
2736
+ - name: "Extra"
2737
+ data_dig: mod_a::ruby_dig
2738
+ YAML
2739
+ }
2740
+ }
2741
+ end
2742
+
2743
+ it 'finds data in the module' do
2744
+ expect(lookup('mod_a::b')).to eql('value mod_a::b (from mod_a)')
2745
+ end
2746
+
2747
+ it 'environment data has higher priority than module data' do
2748
+ expect(lookup('mod_a::a')).to eql('value mod_a::a (from environment)')
2749
+ end
2750
+
2751
+ it 'will not resolve interpolated expressions' do
2752
+ expect(lookup('mod_a::interpolated')).to eql("-- %{lookup('mod_a::a')} --")
2753
+ end
2754
+
2755
+ it 'resolves interpolated expressions using Context#interpolate' do
2756
+ expect(lookup('mod_a::really_interpolated')).to eql("-- value mod_a::a (from environment) --")
2757
+ end
2758
+
2759
+ it 'does not accept return of runtime type from function' do
2760
+ # Message is produced by the called function, not by the lookup framework
2761
+ expect(explain('mod_a::bad_type')).to include("value returned from function 'ruby_dig' has wrong type")
2762
+ end
2763
+
2764
+ it 'does not accept return of runtime type embedded in hash from function' do
2765
+ # Message is produced by the called function, not by the lookup framework
2766
+ expect(explain('mod_a::bad_type_in_hash')).to include("value returned from function 'ruby_dig' has wrong type")
2767
+ end
2768
+
2769
+ it 'will not merge hashes from environment and module unless strategy hash is used' do
2770
+ expect(lookup('mod_a::hash_a')).to eql({'a' => 'value mod_a::hash_a.a (from environment)'})
2771
+ end
2772
+
2773
+ it 'hierarchy entry options are passed to the function' do
2774
+ expect(lookup('mod_a::options.option_b.x')).to eql('Option value b.x')
2775
+ end
2776
+
2777
+ it 'default options are passed to the function' do
2778
+ expect(lookup('mod_a::options.option_b.z')).to eql('Default option value b.z')
2779
+ end
2780
+
2781
+ it 'default options are not merged with hierarchy options' do
2782
+ expect(lookup('mod_a::options')).to eql(
2783
+ {
2784
+ 'option_a' => 'Option value a',
2785
+ 'option_b' => {
2786
+ 'y' => 'Option value b.y',
2787
+ 'x' => 'Option value b.x'
2788
+ },
2789
+ 'uri' => 'http://www.example.com/passed/as/option'
2790
+ })
2791
+ end
2792
+
2793
+ it 'hierarchy entry "uri" is passed as location option to the function' do
2794
+ expect(lookup('mod_a::options.uri')).to eql('http://www.example.com/passed/as/option')
2795
+ end
2796
+
2797
+ it 'recursive lookup is trapped' do
2798
+ expect(explain('mod_a::lookup.mod_a::lookup')).to include('Recursive lookup detected')
2799
+ end
2800
+
2801
+ context 'with merge strategy hash' do
2802
+ it 'merges hashes from environment and module' do
2803
+ expect(lookup('mod_a::hash_a', :merge => 'hash')).to eql({'a' => 'value mod_a::hash_a.a (from environment)', 'b' => 'value mod_a::hash_a.b (from mod_a)'})
2804
+ end
2805
+
2806
+ it 'will "undig" value from data_dig function, merge root hashes, and then dig to get values by subkey' do
2807
+ expect(lookup(['mod_a::hash_a.a', 'mod_a::hash_a.b'], :merge => 'hash')).to eql(
2808
+ ['value mod_a::hash_a.a (from environment)', 'value mod_a::hash_a.b (from mod_a)'])
2809
+ end
2810
+ end
2811
+ end
2812
+
2813
+ context 'that has a default_hierarchy' do
2814
+ let(:mod_a_hiera_yaml) { <<-YAML.unindent }
2815
+ version: 5
2816
+ hierarchy:
2817
+ - name: "Common"
2818
+ path: common.yaml
2819
+ - name: "Common 2"
2820
+ path: common2.yaml
2821
+
2822
+ default_hierarchy:
2823
+ - name: "Default"
2824
+ path: defaults.yaml
2825
+ - name: "Default 2"
2826
+ path: defaults2.yaml
2827
+ YAML
2828
+
2829
+ let(:mod_a_common) { <<-YAML.unindent }
2830
+ mod_a::a: value mod_a::a (from module)
2831
+ mod_a::d:
2832
+ a: value mod_a::d.a (from module)
2833
+ mod_a::f:
2834
+ a:
2835
+ a: value mod_a::f.a.a (from module)
2836
+ mod_a::to_array1: 'hello'
2837
+ mod_a::to_array2: 'hello'
2838
+ mod_a::to_int: 'bananas'
2839
+ mod_a::to_bad_type: 'pyjamas'
2840
+ mod_a::undef_value: null
2841
+ lookup_options:
2842
+ mod_a::e:
2843
+ merge: deep
2844
+ mod_a::to_array1:
2845
+ merge: deep
2846
+ convert_to: "Array"
2847
+ mod_a::to_array2:
2848
+ convert_to:
2849
+ - "Array"
2850
+ - true
2851
+ mod_a::to_int:
2852
+ convert_to: "Integer"
2853
+ mod_a::to_bad_type:
2854
+ convert_to: "ComicSans"
2855
+ mod_a::undef_value:
2856
+ convert_to:
2857
+ - "Array"
2858
+ - true
2859
+ YAML
2860
+
2861
+
2862
+ let(:mod_a_common2) { <<-YAML.unindent }
2863
+ mod_a::b: value mod_a::b (from module)
2864
+ mod_a::d:
2865
+ c: value mod_a::d.c (from module)
2866
+ mod_a::f:
2867
+ a:
2868
+ b: value mod_a::f.a.b (from module)
2869
+ YAML
2870
+
2871
+ let(:mod_a_defaults) { <<-YAML.unindent }
2872
+ mod_a::a: value mod_a::a (from module defaults)
2873
+ mod_a::b: value mod_a::b (from module defaults)
2874
+ mod_a::c: value mod_a::c (from module defaults)
2875
+ mod_a::d:
2876
+ b: value mod_a::d.b (from module defaults)
2877
+ mod_a::e:
2878
+ a:
2879
+ a: value mod_a::e.a.a (from module defaults)
2880
+ mod_a::g:
2881
+ a:
2882
+ a: value mod_a::g.a.a (from module defaults)
2883
+ lookup_options:
2884
+ mod_a::d:
2885
+ merge: hash
2886
+ mod_a::g:
2887
+ merge: deep
2888
+ YAML
2889
+
2890
+ let(:mod_a_defaults2) { <<-YAML.unindent }
2891
+ mod_a::e:
2892
+ a:
2893
+ b: value mod_a::e.a.b (from module defaults)
2894
+ mod_a::g:
2895
+ a:
2896
+ b: value mod_a::g.a.b (from module defaults)
2897
+ YAML
2898
+
2899
+ let(:mod_a_files) do
2900
+ {
2901
+ 'mod_a' => {
2902
+ 'data' => {
2903
+ 'common.yaml' => mod_a_common,
2904
+ 'common2.yaml' => mod_a_common2,
2905
+ 'defaults.yaml' => mod_a_defaults,
2906
+ 'defaults2.yaml' => mod_a_defaults2
2907
+ },
2908
+ 'hiera.yaml' => mod_a_hiera_yaml
2909
+ }
2910
+ }
2911
+ end
2912
+
2913
+ it 'the default hierarchy does not interfere with environment hierarchy' do
2914
+ expect(lookup('mod_a::a')).to eql('value mod_a::a (from environment)')
2915
+ end
2916
+
2917
+ it 'the default hierarchy does not interfere with regular hierarchy in module' do
2918
+ expect(lookup('mod_a::b')).to eql('value mod_a::b (from module)')
2919
+ end
2920
+
2921
+ it 'the default hierarchy is consulted when no value is found elsewhere' do
2922
+ expect(lookup('mod_a::c')).to eql('value mod_a::c (from module defaults)')
2923
+ end
2924
+
2925
+ it 'the default hierarchy does not participate in a merge' do
2926
+ expect(lookup('mod_a::d', 'merge' => 'hash')).to eql('a' => 'value mod_a::d.a (from module)', 'c' => 'value mod_a::d.c (from module)')
2927
+ end
2928
+
2929
+ it 'lookup_options from regular hierarchy does not effect values found in the default hierarchy' do
2930
+ expect(lookup('mod_a::e')).to eql('a' => { 'a' => 'value mod_a::e.a.a (from module defaults)' })
2931
+ end
2932
+
2933
+ it 'lookup_options from default hierarchy affects values found in the default hierarchy' do
2934
+ expect(lookup('mod_a::g')).to eql('a' => { 'a' => 'value mod_a::g.a.a (from module defaults)', 'b' => 'value mod_a::g.a.b (from module defaults)'})
2935
+ end
2936
+
2937
+ it 'merge parameter does not override lookup_options defined in the default hierarchy' do
2938
+ expect(lookup('mod_a::g', 'merge' => 'hash')).to eql(
2939
+ 'a' => { 'a' => 'value mod_a::g.a.a (from module defaults)', 'b' => 'value mod_a::g.a.b (from module defaults)'})
2940
+ end
2941
+
2942
+ it 'lookup_options from default hierarchy does not effect values found in the regular hierarchy' do
2943
+ expect(lookup('mod_a::d')).to eql('a' => 'value mod_a::d.a (from module)')
2944
+ end
2945
+
2946
+ context "and conversion via convert_to" do
2947
+ it 'converts with a single data type value' do
2948
+ expect(lookup('mod_a::to_array1')).to eql(['h', 'e', 'l', 'l', 'o'])
2949
+ end
2950
+
2951
+ it 'converts with an array of arguments to the convert_to call' do
2952
+ expect(lookup('mod_a::to_array2')).to eql(['hello'])
2953
+ end
2954
+
2955
+ it 'converts an undef/nil value that has convert_to option' do
2956
+ expect(lookup('mod_a::undef_value')).to eql([nil])
2957
+ end
2958
+
2959
+ it 'errors if a convert_to lookup_option cannot be performed because value does not match type' do
2960
+ expect{lookup('mod_a::to_int')}.to raise_error(/The convert_to lookup_option for key 'mod_a::to_int' raised error.*The string 'bananas' cannot be converted to Integer/)
2961
+ end
2962
+
2963
+ it 'errors if a convert_to lookup_option cannot be performed because type does not exist' do
2964
+ expect{lookup('mod_a::to_bad_type')}.to raise_error(/The convert_to lookup_option for key 'mod_a::to_bad_type' raised error.*Creation of new instance of type 'TypeReference\['ComicSans'\]' is not supported/)
2965
+ end
2966
+
2967
+ it 'adds explanation that conversion took place with a type' do
2968
+ explanation = explain('mod_a::to_array1')
2969
+ expect(explanation).to include('Applying convert_to lookup_option with arguments [Array]')
2970
+ end
2971
+
2972
+ it 'adds explanation that conversion took place with a type and arguments' do
2973
+ explanation = explain('mod_a::to_array2')
2974
+ expect(explanation).to include('Applying convert_to lookup_option with arguments [Array, true]')
2975
+ end
2976
+ end
2977
+
2978
+ it 'the default hierarchy lookup is included in the explain output' do
2979
+ explanation = explain('mod_a::c')
2980
+ expect(explanation).to match(/Searching default_hierarchy of module "mod_a".+Original path: "defaults.yaml"/m)
2981
+ end
2982
+ end
2983
+ end
2984
+
2985
+ context 'and an eyaml lookup_key function', :if => Puppet.features.hiera_eyaml? do
2986
+ let(:private_key_name) { 'private_key.pkcs7.pem' }
2987
+ let(:public_key_name) { 'public_key.pkcs7.pem' }
2988
+
2989
+ let(:private_key) do
2990
+ <<-PKCS7.unindent
2991
+ -----BEGIN RSA PRIVATE KEY-----
2992
+ MIIEogIBAAKCAQEAwHB3GvImq59em4LV9DMfP0Zjs21eW3Jd5I9fuY0jLJhIkH6f
2993
+ CR7tyOpYV6xUj+TF8giq9WLxZI7sourMJMWjEWhVjgUr5lqp1RLv4lwfDv3Wk4XC
2994
+ 2LUuqj1IAErUXKeRz8i3lUSZW1Pf4CaMpnIiPdWbz6f0KkaJSFi9bqexONBx4fKQ
2995
+ NlgZwm2/aYjjrYng788I0QhWDKUqsQOi5mZKlHNRsDlk7J3Afhsx/jTLrCX/G8+2
2996
+ tPtLsHyRN39kluM5vYHbKXDsCG/a88Z2yUE2+r4Clp0FUKffiEDBPm0/H0sQ4Q1o
2997
+ EfQFDQRKaIkhpsm0nOnLYTy3/xJc5uqDNkLiawIDAQABAoIBAE98pNXOe8ab93oI
2998
+ mtNZYmjCbGAqprTjEoFb71A3SfYbmK2Gf65GxjUdBwx/tBYTiuekSOk+yzKcDoZk
2999
+ sZnmwKpqDByzaiSmAkxunANFxdZtZvpcX9UfUX0j/t+QCROUa5gF8j6HrUiZ5nkx
3000
+ sxr1PcuItekaGLJ1nDLz5JsWTQ+H4M+GXQw7/t96x8v8g9el4exTiAHGk6Fv16kD
3001
+ 017T02M9qTTmV3Ab/enDIBmKVD42Ta36K/wc4l1aoUQNiRbIGVh96Cgd1CFXLF3x
3002
+ CsaNbYT4SmRXaYqoj6MKq+QFEGxadFmJy48NoSd4joirIn2lUjHxJebw3lLbNLDR
3003
+ uvQnQ2ECgYEA/nD94wEMr6078uMv6nKxPpNGq7fihwSKf0G/PQDqrRmjUCewuW+k
3004
+ /iXMe1Y/y0PjFeNlSbUsUvKQ5xF7F/1AnpuPHIrn3cjGVLb71W+zen1m8SnhsW/f
3005
+ 7dPgtcb4SCvfhmLgoov+P34YcNfGi6qgPUu6319IqoB3BIi7PvfEomkCgYEAwZ4+
3006
+ V0bMjFdDn2hnYzjTNcF2aUQ1jPvtuETizGwyCbbMLl9522lrjC2DrH41vvqX35ct
3007
+ CBJkhQFbtHM8Gnmozv0vxhI2jP+u14mzfePZsaXuYrEgWRj+BCsYUHodXryxnEWj
3008
+ yVrTNskab1B5jFm2SCJDmKcycBOYpRBLCMx6W7MCgYBA99z7/6KboOIzzKrJdGup
3009
+ jLV410UyMIikoccQ7pD9jhRTPS80yjsY4dHqlEVJw5XSWvPb9DTTITi6p44EvBep
3010
+ 6BKMuTMnQELUEr0O7KypVCfa4FTOl8BX28f+4kU3OGykxc6R8qkC0VGwTohV1UWB
3011
+ ITsgGhZV4uOA9uDI3T8KMQKBgEnQY2HwmuDSD/TA39GDA3qV8+ez2lqSXRGIKZLX
3012
+ mMf9SaBQQ+uzKA4799wWDbVuYeIbB07xfCL83pJP8FUDlqi6+7Celu9wNp7zX1ua
3013
+ Nw8z/ErhzjxJe+Xo7A8aTwIkG+5A2m1UU/up9YsEeiJYvVaIwY58B42U2vfq20BS
3014
+ fD9jAoGAX2MscBzIsmN+U9R0ptL4SXcPiVnOl8mqvQWr1B4OLgxX7ghht5Fs956W
3015
+ bHipxOWMFCPJA/AhNB8q1DvYiD1viZbIALSCJVUkzs4AEFIjiPsCBKxerl7jF6Xp
3016
+ 1WYSaCmfvoCVEpFNt8cKp4Gq+zEBYAV4Q6TkcD2lDtEW49MuN8A=
3017
+ -----END RSA PRIVATE KEY-----
3018
+ PKCS7
3019
+ end
3020
+
3021
+ let(:public_key) do
3022
+ <<-PKCS7.unindent
3023
+ -----BEGIN CERTIFICATE-----
3024
+ MIIC2TCCAcGgAwIBAgIBATANBgkqhkiG9w0BAQUFADAAMCAXDTE3MDExMzA5MTY1
3025
+ MloYDzIwNjcwMTAxMDkxNjUyWjAAMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
3026
+ CgKCAQEAwHB3GvImq59em4LV9DMfP0Zjs21eW3Jd5I9fuY0jLJhIkH6fCR7tyOpY
3027
+ V6xUj+TF8giq9WLxZI7sourMJMWjEWhVjgUr5lqp1RLv4lwfDv3Wk4XC2LUuqj1I
3028
+ AErUXKeRz8i3lUSZW1Pf4CaMpnIiPdWbz6f0KkaJSFi9bqexONBx4fKQNlgZwm2/
3029
+ aYjjrYng788I0QhWDKUqsQOi5mZKlHNRsDlk7J3Afhsx/jTLrCX/G8+2tPtLsHyR
3030
+ N39kluM5vYHbKXDsCG/a88Z2yUE2+r4Clp0FUKffiEDBPm0/H0sQ4Q1oEfQFDQRK
3031
+ aIkhpsm0nOnLYTy3/xJc5uqDNkLiawIDAQABo1wwWjAPBgNVHRMBAf8EBTADAQH/
3032
+ MB0GA1UdDgQWBBSejWrVnw7QaBjNFCHMNFi+doSOcTAoBgNVHSMEITAfgBSejWrV
3033
+ nw7QaBjNFCHMNFi+doSOcaEEpAIwAIIBATANBgkqhkiG9w0BAQUFAAOCAQEAAe85
3034
+ BQ1ydAHFqo0ib38VRPOwf5xPHGbYGhvQi4/sU6aTuR7pxaOJPYz05jLhS+utEmy1
3035
+ sknBq60G67yhQE7IHcfwrl1arirG2WmKGvAbjeYL2K1UiU0pVD3D+Klkv/pK6jIQ
3036
+ eOJRGb3qNUn0Sq9EoYIOXiGXQ641F0bZZ0+5H92kT1lmnF5oLfCb84ImD9T3snH6
3037
+ pIr5RKRx/0YmJIcv3WdpoPT903rOJiRIEgIj/hDk9QZTBpm222Ul5yQQ5pBywpSp
3038
+ xh0bmJKAQWhQm7QlybKfyaQmg5ot1jEzWAvD2I5FjHQxmAlchjb6RreaRhExj+JE
3039
+ 5O117dMBdzDBjcNMOA==
3040
+ -----END CERTIFICATE-----
3041
+ PKCS7
3042
+ end
3043
+
3044
+ let(:keys_dir) do
3045
+ keys = tmpdir('keys')
3046
+ dir_contained_in(keys, {
3047
+ private_key_name => private_key,
3048
+ public_key_name => public_key
3049
+ })
3050
+ keys
3051
+ end
3052
+
3053
+ let(:private_key_path) { File.join(keys_dir, private_key_name) }
3054
+ let(:public_key_path) { File.join(keys_dir, public_key_name) }
3055
+
3056
+ let(:env_hiera_yaml) do
3057
+ <<-YAML.unindent
3058
+ version: 5
3059
+ hierarchy:
3060
+ - name: EYaml
3061
+ path: common.eyaml
3062
+ lookup_key: eyaml_lookup_key
3063
+ options:
3064
+ pkcs7_private_key: #{private_key_path}
3065
+ pkcs7_public_key: #{public_key_path}
3066
+ YAML
3067
+ end
3068
+
3069
+ let(:scope_additions) { { 'ipl_suffix' => 'aa' } }
3070
+ let(:data_files) do
3071
+ {
3072
+ 'common.eyaml' => <<-YAML.unindent
3073
+ # a: Encrypted value 'a' (from environment)
3074
+ a: >
3075
+ ENC[PKCS7,MIIBmQYJKoZIhvcNAQcDoIIBijCCAYYCAQAxggEhMIIBHQIBADAFMAACAQEw
3076
+ DQYJKoZIhvcNAQEBBQAEggEAUwwNRA5ZKM87SLnjnJfzDFRQbeheSYMTOhcr
3077
+ sgTPCGtzEAzvRBrkdIRAvDZVRfadV9OB+bJsYrhWIkU1bYiOn1m78ginh96M
3078
+ 44RuspnIZYnL9Dhs+JyC8VvB5nlvlEph2RGt+KYg9iU4JYhwZ2+8+yxB6/UK
3079
+ H5HGKDCjBbEc8o9MbCckLsciIh11hKKgT6K0yhKB/nBxxM78nrX0BxmAHX2u
3080
+ bejKDRa9S/0uS7Y91nvnbIkaQpZ4KteSQ+J4/lQBMlMAeE+2F9ncM8jFKnQC
3081
+ rzzdbn1O/zwsEt5J5CRP1Sc+8hM644+IqkLs+17segxArHVGOsEqyDcHbXEK
3082
+ 9jspfzBcBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBCIq/L5HeJgA9XQm67j
3083
+ JHUngDDS5s52FsuSIMin7Z/pV+XuaJGFkL80ia4bXnCWilmtM8oUa/DZuBje
3084
+ dCILO7I8QqU=]
3085
+ hash_a:
3086
+ "hash_%{ipl_suffix}":
3087
+ # aaa: Encrypted value hash_a.hash_aa.aaa (from environment)
3088
+ aaa: >
3089
+ ENC[PKCS7,MIIBqQYJKoZIhvcNAQcDoIIBmjCCAZYCAQAxggEhMIIBHQIBADAFMAACAQEw
3090
+ DQYJKoZIhvcNAQEBBQAEggEAhvGXL5RxVUs9wdqJvpCyXtfCHrm2HbG/u30L
3091
+ n8EuRD9ravlsgIISAnd27JPtrxA+0rZq4EQRGz6OcovnH9vTg86/lVBhhPnz
3092
+ b83ArptGJhRvTYUJ19GZI3AYjJbhWj/Jo5NL56oQJaPBccqHxMApm/U0wlus
3093
+ QtASL94cLuh4toVIBQCQzD5/Bx51p2wQobm9p4WKSl1zJhDceurmoLZXqhuN
3094
+ JwwEBwXopJvgid3ZDPbdX8nI6vHhb/8wDq9yb5DOsrkgqDqQgwPU9sUUioQj
3095
+ Hr1pGyeOWnbEe99iEb2+m7TWsC0NN7OBo06mAgFNbBLjvn2k4PiCxrOOgJ8S
3096
+ LI5eXjBsBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBCWNS6j3m/Xvrp5RFaN
3097
+ ovm/gEB4oPlYJswoXuWqcEBfwZzbpy96x3b2Le/yoa72ylbPAUc5GfLENvFQ
3098
+ zXpTtSmQE0fixY4JMaBTke65ZRvoiOQO]
3099
+ array_a:
3100
+ # - "array_a[0]"
3101
+ - >
3102
+ ENC[PKCS7,MIIBeQYJKoZIhvcNAQcDoIIBajCCAWYCAQAxggEhMIIBHQIBADAFMAACAQEw
3103
+ DQYJKoZIhvcNAQEBBQAEggEAmXZfyfU77vVCZqHpR10qhD0Jy9DpMGBgal97
3104
+ vUO2VHX7KlCgagK0kz8/uLRIthkYzcpn8ISmw/+CIAny3jOjxOsylJiujqyu
3105
+ hx/JEFl8bOKOg40Bd0UuBaw/qZ+CoAtOorhiIW7x6t7DpknItC6gkH/cSJ4/
3106
+ p3MdhoARRuwj2fvuaChVsD39l2rXjgJj0OJOaDXdbuisG75VRZf5l8IH6+44
3107
+ Q7m6W7BU69LX+ozn+W3filQoiJ5MPf8w/KXAObMSbKYIDsrZUyIWyyNUbpW0
3108
+ MieIkHj93bX3gIEcenECLdWaEzcPa7MHgl6zevQKg4H0JVmcvKYyfHYqcrVE
3109
+ PqizKDA8BgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBDf259KZEay1widVSFy
3110
+ I9zGgBAICjm0x2GeqoCnHdiAA+jt]
3111
+ # - "array_a[1]"
3112
+ - >
3113
+ ENC[PKCS7,MIIBeQYJKoZIhvcNAQcDoIIBajCCAWYCAQAxggEhMIIBHQIBADAFMAACAQEw
3114
+ DQYJKoZIhvcNAQEBBQAEggEATVy4hHG356INFKOswAhoravh66iJljp+Vn3o
3115
+ UVD1kyRiqY5tz3UVSptzUmzD+YssX/f73AKCjUI3HrPNL7kAxsk6fWS7nDEj
3116
+ AuxtCqGYeBha6oYJYziSGIHfAdY3MiJUI1C9g/OQB4TTvKdrlDArPiY8THJi
3117
+ bzLLMbVQYJ6ixSldwkdKD75vtikyamx+1LSyVBSg8maVyPvLHtLZJuT71rln
3118
+ WON3Ious9PIbd+izbcCzaoqh5UnTfDCjOuAYliXalBxamIIwNzSV1sdR8/qf
3119
+ t22zpYK4J8lgCBV2gKfrOWSi9MAs6JhCeOb8wNLMmAUTbc0WrFJxoCwAPX0z
3120
+ MAjsNjA8BgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBC4v4bNE4gFlbLmVY+9
3121
+ BtSLgBBm7U0wu6d6s9wF9Ek9IHPe]
3122
+ # ref_a: "A resolved = '%{hiera('a')}'"
3123
+ ref_a: >
3124
+ ENC[PKCS7,MIIBiQYJKoZIhvcNAQcDoIIBejCCAXYCAQAxggEhMIIBHQIBADAFMAACAQEw
3125
+ DQYJKoZIhvcNAQEBBQAEggEAFSuUp+yk+oaA7b5ekT0u360CQ9Q2sIQ/bTcM
3126
+ jT3XLjm8HIGYPcysOEnuo8WcAxJFY5iya4yQ7Y/UhMWXaTi7Vzv/6BmyPDwz
3127
+ +7Z2Mf0r0PvS5+ylue6aem/3bXPOmXTKTf68OCehTRXlDUs8/av9gnsDzojp
3128
+ yiUTBZvKxhIP2n//GyoHgyATveHT0lxPVpdMycB347DtWS7IduCxx0+KiOOw
3129
+ DXYFlYbIVxVInwgERxtsfYSr+Fu0/mkjtRsQm+dPzMQOATE9Val2gGKsV6bi
3130
+ kdm1OM9HrwVsFj6Lma6FYmr89Bcm/1uEc8fiOMtNK3z2+nwunWBMNCGneMYD
3131
+ C5IJejBMBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBAeiZDGQyXHkZlV5ceT
3132
+ iCxpgCDDatuVvbPEEi8rKOC7xhPHZ22zLEEV//l7C9jxq+DZcA==]
3133
+ YAML
3134
+ }
3135
+ end
3136
+
3137
+ let(:env_data) { data_files }
3138
+
3139
+ context 'with unencryptable eyaml' do
3140
+ let(:data_files) do
3141
+ {
3142
+ 'common.eyaml' => <<-YAML.unindent
3143
+ key_with_invalid_eyaml: ENC[PKCS7,INVALID]
3144
+ YAML
3145
+ }
3146
+ end
3147
+
3148
+ it 'fails and reports error with ENC value, key being looked up and filename' do
3149
+ expect { lookup('key_with_invalid_eyaml') }.to raise_error(Puppet::DataBinding::LookupError, /hiera-eyaml backend error decrypting ENC\[PKCS7,INVALID\] when looking up key_with_invalid_eyaml in .*common\.eyaml\. Error was/)
3150
+ end
3151
+ end
3152
+ context 'and a module using eyaml with different options' do
3153
+
3154
+ let(:private_module_key) do
3155
+ <<-PKCS7.unindent
3156
+ -----BEGIN RSA PRIVATE KEY-----
3157
+ MIIEogIBAAKCAQEAuqVpctipK4OMWM+RwKcd/mR4pg6qE3+ItPVC9TlvBrmDaN/y
3158
+ YZRjQR+XovXSGuy/CneSQ9Qss0Ff3FKAmEeH0qN0V47a81hgLpjhLCX1n+Ov7r1Q
3159
+ DC1ciTpVzHE4krN3rJ/RmDohitIqT1IYYhdcEdaMG9E26HIzn1QIwaDiYU3mfqWM
3160
+ 8CZExa0CeIsEzHRLSxuMi/xX0ENImCRUzY9GH88Cu2gUhpKlbVzJmVqGPgp94pJY
3161
+ YM+SUb0XP1yRySpJMnVg98oCUrQO2OoE/Gax/djAi6hrJUzejPsEKdZ1yxM6OyJW
3162
+ NjWZYs8izAxBqm7pv1hx5+X7AIPqwZTMVrB7TQIDAQABAoIBAHIex13QOYeAlGSM
3163
+ 7bpUtBMiTV6DItxvIyA5wen8ZvU+oqmSHDorp5BfB7E9Cm0qChkVSRot9fLYawtk
3164
+ anoxakuRY4ZRs3AMvipfkXYT854CckTP/cykQ6soPuOU6plQIEEtKtMf3/hoTjRX
3165
+ ps77J3FEtEAh6Kexg/zMPdpeS2xgULhk0P9ZQEg+JhLA5dq0p0nz3SBkuzcxei79
3166
+ +Za/Tg1osD0AINOajdvPnKxvlmWJN0+LpGwVjFNhkoUXPeDyvq0z2V/Uqwz4HP2I
3167
+ UGv4tz3SbzFc3Ie4lzgUZzCQgUK3u60pq1uyA6BRtxwdEmpn5v++jGXBGJZpWwcW
3168
+ UNblESUCgYEA4aTH9+LHsNjLPs2FmSc7hNjwHG1rAHcDXTX2ccySjRcQvH4Z7xBL
3169
+ di+SzZ2Tf8gSLycPRgRVCbrgCODpjoV2D5wWnyUHfWm4+GQxHURYa4UDx69tsSKE
3170
+ OTRASJo7/Mz0M1a6YzgCzVRM/TO676ucmawzKUY5OUm1oehtODAiZOcCgYEA08GM
3171
+ AMBOznys02xREJI5nLR6AveuTbIjF2efEidoxoW+1RrMOkcqaDTrJQ5PLM+oDDwD
3172
+ iPzVjnroSbwJzFB71atIg7b7TwltgkXy7wNTedO2cm5u/I0q8tY2Jaa4Mz8JUnbe
3173
+ yafvtS0/mY6A5k+8/2UIMFin2rqU9NC9EUPIo6sCgYBhOvAwELibq89osIbxB8bN
3174
+ 5+0PUtbYzG/WqnoXb193DIlZr7zdFththPJtR4lXdo7fYqViNluuZahEKyZ5E2lc
3175
+ MJZO3VXs5LGf1wyS3/B55EdMtHs/6O+w9qL8pflTZb2UobqPJoOOltTWBoR24iwI
3176
+ y/r/vhLKbMini9AEdjlb4QKBgGdYsax4Lr4GCQ8ScSnmQ6ngRyAFo5MV2pyEnRTu
3177
+ GOuywKUe9AeJTgAXu5+VMT0Mh9aYv5zu0Ic+IvpBhIKr0RRCCR0Hg/VaA5Et9FeE
3178
+ RwxRMFz+2rn1Z72moDyV9pZEMJeHnknK5WmGEOEvtGczCWmX9Hwr+Jf+sc4dxfiU
3179
+ HWsLAoGAXWSX73p/6R4eRfF5zU2UFJPvDzhmwObAuvU4zKs9x7PMxZfvyt/eBCO1
3180
+ fj2+hIR72RxVuHbLApF1BT6gPVLtNdvaNuCs8YlHcnx/Oi088F0ni7fL/xYBUvaB
3181
+ 7wTf188UJxP1ofVMZW00P4I9mR6BrOulv455gCwsmg2X7WtJU48=
3182
+ -----END RSA PRIVATE KEY-----
3183
+ PKCS7
3184
+ end
3185
+
3186
+ let(:public_module_key) do
3187
+ <<-PKCS7.unindent
3188
+ -----BEGIN CERTIFICATE-----
3189
+ MIIC2TCCAcGgAwIBAgIBATANBgkqhkiG9w0BAQUFADAAMCAXDTE3MDUzMTE2Mjc0
3190
+ M1oYDzIwNjcwNTE5MTYyNzQzWjAAMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
3191
+ CgKCAQEAuqVpctipK4OMWM+RwKcd/mR4pg6qE3+ItPVC9TlvBrmDaN/yYZRjQR+X
3192
+ ovXSGuy/CneSQ9Qss0Ff3FKAmEeH0qN0V47a81hgLpjhLCX1n+Ov7r1QDC1ciTpV
3193
+ zHE4krN3rJ/RmDohitIqT1IYYhdcEdaMG9E26HIzn1QIwaDiYU3mfqWM8CZExa0C
3194
+ eIsEzHRLSxuMi/xX0ENImCRUzY9GH88Cu2gUhpKlbVzJmVqGPgp94pJYYM+SUb0X
3195
+ P1yRySpJMnVg98oCUrQO2OoE/Gax/djAi6hrJUzejPsEKdZ1yxM6OyJWNjWZYs8i
3196
+ zAxBqm7pv1hx5+X7AIPqwZTMVrB7TQIDAQABo1wwWjAPBgNVHRMBAf8EBTADAQH/
3197
+ MB0GA1UdDgQWBBQkhoMgOyPzEe7tOOimNH2//PYF2TAoBgNVHSMEITAfgBQkhoMg
3198
+ OyPzEe7tOOimNH2//PYF2aEEpAIwAIIBATANBgkqhkiG9w0BAQUFAAOCAQEAhRWc
3199
+ Nz3PcUJllao5G/v4AyvjLgwB2JgjJgh6D3ILoOe9TrDSXD7ZV3F30vFae+Eztk86
3200
+ pmM8x57E0HsuuY+Owf6/hvELtwbzf9N/lc9ySZSogGFoQeJ8rnCJAQ0FaPjqb7AN
3201
+ xTaY9HTzr4dZG1f+sw32RUu2fDe7Deqgf85uMSZ1mtRTt9zvo8lMQxVA2nVOfwz2
3202
+ Nxf+qSNYSCtf0/6iwfzHy0qPjaJnywgBCi3Lg2IMSqGUatxzH+9HWrBgD+ZYxmDz
3203
+ 2gW+EIU1Y/We/tbjIWaR1PD+IzeRJi5fHq60RKHPSdp7TGtV48bQRvyZXC7sVCRa
3204
+ yxfX1IGYhCDzbFRQNg==
3205
+ -----END CERTIFICATE-----
3206
+ PKCS7
3207
+ end
3208
+
3209
+ let(:module_keys_dir) do
3210
+ keys = tmpdir('keys')
3211
+ dir_contained_in(keys, {
3212
+ private_key_name => private_module_key,
3213
+ public_key_name => public_module_key
3214
+ })
3215
+ keys
3216
+ end
3217
+
3218
+ let(:private_module_key_path) { File.join(module_keys_dir, private_key_name) }
3219
+ let(:public_module_key_path) { File.join(module_keys_dir, public_key_name) }
3220
+
3221
+ let(:mod_a_files) do
3222
+ {
3223
+ 'mod_a' => {
3224
+ 'hiera.yaml' => <<-YAML.unindent,
3225
+ version: 5
3226
+ hierarchy:
3227
+ - name: EYaml
3228
+ path: common.eyaml
3229
+ lookup_key: eyaml_lookup_key
3230
+ options:
3231
+ pkcs7_private_key: #{private_module_key_path}
3232
+ pkcs7_public_key: #{public_module_key_path}
3233
+ YAML
3234
+ 'data' => {
3235
+ 'common.eyaml' => <<-YAML.unindent
3236
+ ---
3237
+ # "%{lookup('a')} (from module)"
3238
+ mod_a::a: >
3239
+ ENC[PKCS7,MIIBiQYJKoZIhvcNAQcDoIIBejCCAXYCAQAxggEhMIIBHQIBADAFMAACAQEw
3240
+ DQYJKoZIhvcNAQEBBQAEggEAC+lvda8mX6XkgCBstNw4IQUDyFcS6M0mS9gZ
3241
+ ev4VBDeUK4AUNVnzzdbW0Mnj9LbqlpzFx96VGqSxsRBpe7BVD0kVo5jQsEMn
3242
+ nbrWOD1lvXYrXZMXBeD9xJbMbH5EiiFhbaXcEKRAVGaLVQKjXDENDQ/On+it
3243
+ 1+wmmVwJynDJR0lsCz6dcSKvw6wnxBcv32qFyePvJuIf04CHMhaS4ykedYHK
3244
+ vagUn5uVXOv/8G0JPlZnQLyxjE0v0heb0Zj0mvcP2+Y5BSW50AQVrMWJNtdW
3245
+ aFEg6H5hpjduQfQh3iWVuDLnWhbP0sY2Grn5dTOxQP8aTDSsiTUcSeIAmjr/
3246
+ K8YRCjBMBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBAjL7InlBjRuohLLcBx
3247
+ 686ogCDkhCan8bCE7aX2nr75QtLF3q89pFIR4/NGl5+oGEO+qQ==]
3248
+ YAML
3249
+ }
3250
+ }
3251
+ }
3252
+ end
3253
+
3254
+ let(:populated_env_dir) do
3255
+ dir_contained_in(env_dir, DeepMerge.deep_merge!(environment_files, env_name => { 'modules' => mod_a_files }))
3256
+ env_dir
3257
+ end
3258
+
3259
+ it 'repeatedly finds data in environment and module' do
3260
+ expect(lookup(['array_a', 'mod_a::a', 'hash_a'])).to eql([
3261
+ ['array_a[0]', 'array_a[1]'],
3262
+ "Encrypted value 'a' (from environment) (from module)",
3263
+ {'hash_aa'=>{'aaa'=>'Encrypted value hash_a.hash_aa.aaa (from environment)'}}])
3264
+ end
3265
+ end
3266
+
3267
+ it 'finds data in the environment' do
3268
+ expect(lookup('a')).to eql("Encrypted value 'a' (from environment)")
3269
+ end
3270
+
3271
+ it 'evaluates interpolated keys' do
3272
+ expect(lookup('hash_a')).to include('hash_aa')
3273
+ end
3274
+
3275
+ it 'evaluates interpolations in encrypted values' do
3276
+ expect(lookup('ref_a')).to eql("A resolved = 'Encrypted value 'a' (from environment)'")
3277
+ end
3278
+
3279
+ it 'can read encrypted values inside a hash' do
3280
+ expect(lookup('hash_a.hash_aa.aaa')).to eql('Encrypted value hash_a.hash_aa.aaa (from environment)')
3281
+ end
3282
+
3283
+ it 'can read encrypted values inside an array' do
3284
+ expect(lookup('array_a')).to eql(['array_a[0]', 'array_a[1]'])
3285
+ end
3286
+
3287
+ context 'declared in global scope as a Hiera v3 backend', :if => Puppet.features.hiera? do
3288
+ let(:environment_files) { {} }
3289
+ let(:data_file_content) { <<-YAML.unindent }
3290
+ a: >
3291
+ ENC[PKCS7,MIIBmQYJKoZIhvcNAQcDoIIBijCCAYYCAQAxggEhMIIBHQIBADAFMAACAQEw
3292
+ DQYJKoZIhvcNAQEBBQAEggEAH457bsfL8kYw9O50roE3dcE21nCnmPnQ2XSX
3293
+ LYRJ2C78LarbfFonKz0gvDW7tyhsLWASFCFaiU8T1QPBd2b3hoQK8E4B2Ual
3294
+ xga/K7r9y3OSgRomTm9tpTltC6re0Ubh3Dy71H61obwxEdNVTqjPe95+m2b8
3295
+ 6zWZVnzZzXXsTG1S17yJn1zaB/LXHbWNy4KyLLKCGAml+Gfl6ZMjmaplTmUA
3296
+ QIC5rI8abzbPP3TDMmbLOGNkrmLqI+3uS8tSueTMoJmWaMF6c+H/cA7oRxmV
3297
+ QCeEUVXjyFvCHcmbA+keS/RK9XF+vc07/XS4XkYSPs/I5hLQji1y9bkkGAs0
3298
+ tehxQjBcBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBDHpA6Fcl/R16aIYcow
3299
+ oiO4gDAvfFH6jLUwXkcYtagnwdmhkd9TQJtxNWcIwMpvmk036MqIoGwwhQdg
3300
+ gV4beiCFtLU=]
3301
+ YAML
3302
+
3303
+ let(:hiera_yaml) do
3304
+ <<-YAML.unindent
3305
+ :backends: eyaml
3306
+ :eyaml:
3307
+ :datadir: #{code_dir}/hieradata
3308
+ :pkcs7_private_key: #{private_key_path}
3309
+ :pkcs7_public_key: #{public_key_path}
3310
+ :hierarchy:
3311
+ - common
3312
+ YAML
3313
+ end
3314
+
3315
+ let(:data_files) do
3316
+ {
3317
+ 'common.eyaml' => data_file_content
3318
+ }
3319
+ end
3320
+
3321
+ let(:code_dir_files) do
3322
+ {
3323
+ 'hiera.yaml' => hiera_yaml,
3324
+ 'hieradata' => data_files
3325
+ }
3326
+ end
3327
+
3328
+ before(:each) do
3329
+ Puppet.settings[:hiera_config] = File.join(code_dir, 'hiera.yaml')
3330
+ end
3331
+
3332
+ it 'finds data in the global layer' do
3333
+ expect(lookup('a')).to eql("Encrypted value 'a' (from global)")
3334
+ end
3335
+
3336
+ it 'delegates configured eyaml backend to eyaml_lookup_key function' do
3337
+ expect(explain('a')).to match(/Hierarchy entry "eyaml"\n.*\n.*\n.*"common"\n\s*Found key: "a"/m)
3338
+ end
3339
+
3340
+ context 'using intepolated paths to the key pair' do
3341
+ let(:scope_additions) { { 'priv_path' => private_key_path, 'pub_path' => public_key_path } }
3342
+
3343
+ let(:hiera_yaml) do
3344
+ <<-YAML.unindent
3345
+ :backends: eyaml
3346
+ :eyaml:
3347
+ :datadir: #{code_dir}/hieradata
3348
+ :pkcs7_private_key: "%{priv_path}"
3349
+ :pkcs7_public_key: "%{pub_path}"
3350
+ :hierarchy:
3351
+ - common
3352
+ YAML
3353
+ end
3354
+
3355
+ it 'finds data in the global layer' do
3356
+ expect(lookup('a')).to eql("Encrypted value 'a' (from global)")
3357
+ end
3358
+ end
3359
+
3360
+ context 'using options containing intepolated paths to the key pair' do
3361
+ let(:scope_additions) { { 'priv_path' => private_key_path, 'pub_path' => public_key_path } }
3362
+
3363
+ let(:hiera_yaml) do
3364
+ <<-YAML.unindent
3365
+ version: 5
3366
+ defaults:
3367
+ datadir: #{code_dir}/hieradata
3368
+ hierarchy:
3369
+ - name: "secret data"
3370
+ lookup_key: eyaml_lookup_key
3371
+ path: common.eyaml
3372
+ options:
3373
+ pkcs7_private_key: "%{priv_path}"
3374
+ pkcs7_public_key: "%{pub_path}"
3375
+ YAML
3376
+ end
3377
+
3378
+ it 'finds data in the global layer' do
3379
+ expect(lookup('a')).to eql("Encrypted value 'a' (from global)")
3380
+ end
3381
+ end
3382
+
3383
+ context 'with special extension declared in options' do
3384
+ let(:environment_files) { {} }
3385
+ let(:hiera_yaml) do
3386
+ <<-YAML.unindent
3387
+ :backends: eyaml
3388
+ :eyaml:
3389
+ :extension: xyaml
3390
+ :datadir: #{code_dir}/hieradata
3391
+ :pkcs7_private_key: #{private_key_path}
3392
+ :pkcs7_public_key: #{public_key_path}
3393
+ :hierarchy:
3394
+ - common
3395
+ YAML
3396
+ end
3397
+
3398
+ let(:data_files) do
3399
+ {
3400
+ 'common.xyaml' => data_file_content
3401
+ }
3402
+ end
3403
+
3404
+ it 'finds data in the global layer' do
3405
+ expect(lookup('a')).to eql("Encrypted value 'a' (from global)")
3406
+ end
3407
+
3408
+ it 'delegates configured eyaml backend to eyaml_lookup_key function' do
3409
+ expect(explain('a')).to match(/Hierarchy entry "eyaml"\n.*\n.*\n.*"common"\n\s*Found key: "a"/m)
3410
+ end
3411
+ end
3412
+ end
3413
+ end
3414
+ end
3415
+ end