puppet 7.3.0-x64-mingw32 → 7.7.0-x64-mingw32

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

Potentially problematic release.


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

Files changed (677) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +31 -25
  3. data/ext/build_defaults.yaml +0 -1
  4. data/install.rb +11 -11
  5. data/lib/hiera_puppet.rb +1 -1
  6. data/lib/puppet.rb +37 -37
  7. data/lib/puppet/agent.rb +6 -6
  8. data/lib/puppet/agent/disabler.rb +1 -1
  9. data/lib/puppet/agent/locker.rb +2 -2
  10. data/lib/puppet/application.rb +6 -6
  11. data/lib/puppet/application/agent.rb +18 -11
  12. data/lib/puppet/application/apply.rb +6 -5
  13. data/lib/puppet/application/catalog.rb +1 -1
  14. data/lib/puppet/application/config.rb +1 -1
  15. data/lib/puppet/application/describe.rb +1 -1
  16. data/lib/puppet/application/device.rb +8 -7
  17. data/lib/puppet/application/doc.rb +7 -7
  18. data/lib/puppet/application/epp.rb +2 -2
  19. data/lib/puppet/application/face_base.rb +2 -2
  20. data/lib/puppet/application/facts.rb +1 -1
  21. data/lib/puppet/application/filebucket.rb +2 -2
  22. data/lib/puppet/application/generate.rb +1 -1
  23. data/lib/puppet/application/help.rb +1 -1
  24. data/lib/puppet/application/indirection_base.rb +1 -1
  25. data/lib/puppet/application/lookup.rb +6 -6
  26. data/lib/puppet/application/module.rb +1 -1
  27. data/lib/puppet/application/node.rb +1 -1
  28. data/lib/puppet/application/parser.rb +2 -2
  29. data/lib/puppet/application/plugin.rb +1 -1
  30. data/lib/puppet/application/report.rb +1 -1
  31. data/lib/puppet/application/resource.rb +3 -2
  32. data/lib/puppet/application/script.rb +6 -5
  33. data/lib/puppet/application/ssl.rb +13 -2
  34. data/lib/puppet/application_support.rb +4 -4
  35. data/lib/puppet/compilable_resource_type.rb +1 -1
  36. data/lib/puppet/concurrent/lock.rb +1 -1
  37. data/lib/puppet/configurer.rb +4 -4
  38. data/lib/puppet/configurer/downloader.rb +4 -3
  39. data/lib/puppet/configurer/fact_handler.rb +3 -3
  40. data/lib/puppet/configurer/plugin_handler.rb +1 -1
  41. data/lib/puppet/confine.rb +1 -1
  42. data/lib/puppet/confine/boolean.rb +1 -1
  43. data/lib/puppet/confine/exists.rb +1 -1
  44. data/lib/puppet/confine/false.rb +1 -1
  45. data/lib/puppet/confine/feature.rb +1 -1
  46. data/lib/puppet/confine/true.rb +1 -1
  47. data/lib/puppet/confine/variable.rb +1 -1
  48. data/lib/puppet/confine_collection.rb +1 -1
  49. data/lib/puppet/confiner.rb +1 -1
  50. data/lib/puppet/context.rb +2 -2
  51. data/lib/puppet/context/trusted_information.rb +1 -1
  52. data/lib/puppet/daemon.rb +2 -2
  53. data/lib/puppet/data_binding.rb +1 -1
  54. data/lib/puppet/datatypes/error.rb +1 -1
  55. data/lib/puppet/defaults.rb +15 -11
  56. data/lib/puppet/environments.rb +17 -2
  57. data/lib/puppet/etc.rb +1 -1
  58. data/lib/puppet/external/pson/common.rb +1 -1
  59. data/lib/puppet/external/pson/pure.rb +3 -3
  60. data/lib/puppet/face.rb +1 -1
  61. data/lib/puppet/face/catalog.rb +1 -1
  62. data/lib/puppet/face/config.rb +2 -2
  63. data/lib/puppet/face/epp.rb +6 -6
  64. data/lib/puppet/face/facts.rb +18 -8
  65. data/lib/puppet/face/generate.rb +2 -2
  66. data/lib/puppet/face/help.rb +3 -3
  67. data/lib/puppet/face/module.rb +3 -3
  68. data/lib/puppet/face/module/install.rb +2 -2
  69. data/lib/puppet/face/node.rb +1 -1
  70. data/lib/puppet/face/parser.rb +4 -4
  71. data/lib/puppet/face/plugin.rb +2 -2
  72. data/lib/puppet/face/report.rb +1 -1
  73. data/lib/puppet/face/resource.rb +1 -1
  74. data/lib/puppet/feature/base.rb +2 -2
  75. data/lib/puppet/feature/bolt.rb +1 -1
  76. data/lib/puppet/feature/cfpropertylist.rb +1 -1
  77. data/lib/puppet/feature/eventlog.rb +1 -1
  78. data/lib/puppet/feature/hiera_eyaml.rb +1 -1
  79. data/lib/puppet/feature/hocon.rb +1 -1
  80. data/lib/puppet/feature/libuser.rb +2 -2
  81. data/lib/puppet/feature/msgpack.rb +1 -1
  82. data/lib/puppet/feature/pe_license.rb +1 -1
  83. data/lib/puppet/feature/selinux.rb +1 -1
  84. data/lib/puppet/feature/ssh.rb +1 -1
  85. data/lib/puppet/feature/telnet.rb +1 -1
  86. data/lib/puppet/feature/zlib.rb +1 -1
  87. data/lib/puppet/ffi/posix.rb +2 -2
  88. data/lib/puppet/ffi/posix/constants.rb +1 -1
  89. data/lib/puppet/ffi/posix/functions.rb +1 -1
  90. data/lib/puppet/ffi/windows.rb +4 -4
  91. data/lib/puppet/ffi/windows/api_types.rb +3 -3
  92. data/lib/puppet/ffi/windows/constants.rb +2 -2
  93. data/lib/puppet/ffi/windows/functions.rb +1 -1
  94. data/lib/puppet/ffi/windows/structs.rb +1 -1
  95. data/lib/puppet/file_bucket/dipper.rb +4 -4
  96. data/lib/puppet/file_bucket/file.rb +3 -3
  97. data/lib/puppet/file_serving/base.rb +2 -2
  98. data/lib/puppet/file_serving/configuration.rb +10 -10
  99. data/lib/puppet/file_serving/configuration/parser.rb +2 -2
  100. data/lib/puppet/file_serving/content.rb +3 -3
  101. data/lib/puppet/file_serving/fileset.rb +16 -4
  102. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  103. data/lib/puppet/file_serving/metadata.rb +6 -6
  104. data/lib/puppet/file_serving/mount.rb +4 -4
  105. data/lib/puppet/file_serving/mount/file.rb +1 -1
  106. data/lib/puppet/file_serving/mount/locales.rb +1 -1
  107. data/lib/puppet/file_serving/mount/modules.rb +1 -1
  108. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -1
  109. data/lib/puppet/file_serving/mount/plugins.rb +1 -1
  110. data/lib/puppet/file_serving/mount/tasks.rb +1 -1
  111. data/lib/puppet/file_serving/terminus_helper.rb +2 -2
  112. data/lib/puppet/file_serving/terminus_selector.rb +1 -1
  113. data/lib/puppet/file_system.rb +9 -9
  114. data/lib/puppet/file_system/jruby.rb +1 -1
  115. data/lib/puppet/file_system/memory_file.rb +8 -1
  116. data/lib/puppet/file_system/path_pattern.rb +1 -1
  117. data/lib/puppet/file_system/uniquefile.rb +1 -1
  118. data/lib/puppet/file_system/windows.rb +4 -2
  119. data/lib/puppet/forge.rb +5 -5
  120. data/lib/puppet/forge/cache.rb +1 -1
  121. data/lib/puppet/forge/errors.rb +3 -3
  122. data/lib/puppet/forge/repository.rb +4 -4
  123. data/lib/puppet/functions.rb +1 -1
  124. data/lib/puppet/functions/all.rb +1 -1
  125. data/lib/puppet/functions/camelcase.rb +1 -1
  126. data/lib/puppet/functions/capitalize.rb +2 -2
  127. data/lib/puppet/functions/downcase.rb +2 -2
  128. data/lib/puppet/functions/get.rb +5 -5
  129. data/lib/puppet/functions/group_by.rb +13 -5
  130. data/lib/puppet/functions/lest.rb +1 -1
  131. data/lib/puppet/functions/new.rb +100 -100
  132. data/lib/puppet/functions/partition.rb +12 -4
  133. data/lib/puppet/functions/require.rb +5 -5
  134. data/lib/puppet/functions/sort.rb +3 -3
  135. data/lib/puppet/functions/tree_each.rb +7 -9
  136. data/lib/puppet/functions/type.rb +4 -4
  137. data/lib/puppet/functions/upcase.rb +2 -2
  138. data/lib/puppet/functions/versioncmp.rb +1 -1
  139. data/lib/puppet/generate/models/type/type.rb +1 -1
  140. data/lib/puppet/generate/type.rb +2 -2
  141. data/lib/puppet/gettext/config.rb +3 -3
  142. data/lib/puppet/gettext/module_translations.rb +1 -1
  143. data/lib/puppet/graph.rb +6 -6
  144. data/lib/puppet/graph/simple_graph.rb +2 -2
  145. data/lib/puppet/http.rb +26 -26
  146. data/lib/puppet/http/factory.rb +6 -2
  147. data/lib/puppet/http/proxy.rb +1 -1
  148. data/lib/puppet/http/resolver/server_list.rb +15 -4
  149. data/lib/puppet/http/service/compiler.rb +73 -1
  150. data/lib/puppet/http/service/file_server.rb +3 -2
  151. data/lib/puppet/indirector.rb +5 -5
  152. data/lib/puppet/indirector/catalog/compiler.rb +7 -6
  153. data/lib/puppet/indirector/catalog/json.rb +2 -2
  154. data/lib/puppet/indirector/catalog/msgpack.rb +2 -2
  155. data/lib/puppet/indirector/catalog/rest.rb +2 -2
  156. data/lib/puppet/indirector/catalog/store_configs.rb +2 -2
  157. data/lib/puppet/indirector/catalog/yaml.rb +2 -2
  158. data/lib/puppet/indirector/code.rb +1 -1
  159. data/lib/puppet/indirector/data_binding/hiera.rb +1 -1
  160. data/lib/puppet/indirector/data_binding/none.rb +1 -1
  161. data/lib/puppet/indirector/direct_file_server.rb +2 -2
  162. data/lib/puppet/indirector/envelope.rb +1 -1
  163. data/lib/puppet/indirector/errors.rb +1 -1
  164. data/lib/puppet/indirector/exec.rb +2 -2
  165. data/lib/puppet/indirector/face.rb +1 -1
  166. data/lib/puppet/indirector/facts/facter.rb +3 -2
  167. data/lib/puppet/indirector/facts/json.rb +3 -3
  168. data/lib/puppet/indirector/facts/memory.rb +2 -2
  169. data/lib/puppet/indirector/facts/network_device.rb +2 -2
  170. data/lib/puppet/indirector/facts/rest.rb +2 -2
  171. data/lib/puppet/indirector/facts/store_configs.rb +2 -2
  172. data/lib/puppet/indirector/facts/yaml.rb +3 -3
  173. data/lib/puppet/indirector/file_bucket_file/file.rb +4 -4
  174. data/lib/puppet/indirector/file_bucket_file/rest.rb +2 -2
  175. data/lib/puppet/indirector/file_bucket_file/selector.rb +1 -1
  176. data/lib/puppet/indirector/file_content.rb +1 -1
  177. data/lib/puppet/indirector/file_content/file.rb +3 -3
  178. data/lib/puppet/indirector/file_content/file_server.rb +3 -3
  179. data/lib/puppet/indirector/file_content/rest.rb +3 -3
  180. data/lib/puppet/indirector/file_content/selector.rb +4 -4
  181. data/lib/puppet/indirector/file_metadata.rb +1 -1
  182. data/lib/puppet/indirector/file_metadata/file.rb +3 -3
  183. data/lib/puppet/indirector/file_metadata/file_server.rb +3 -3
  184. data/lib/puppet/indirector/file_metadata/http.rb +3 -3
  185. data/lib/puppet/indirector/file_metadata/rest.rb +4 -3
  186. data/lib/puppet/indirector/file_metadata/selector.rb +4 -4
  187. data/lib/puppet/indirector/file_server.rb +4 -4
  188. data/lib/puppet/indirector/generic_http.rb +1 -1
  189. data/lib/puppet/indirector/hiera.rb +1 -1
  190. data/lib/puppet/indirector/indirection.rb +5 -5
  191. data/lib/puppet/indirector/json.rb +2 -2
  192. data/lib/puppet/indirector/memory.rb +1 -1
  193. data/lib/puppet/indirector/msgpack.rb +2 -2
  194. data/lib/puppet/indirector/node/exec.rb +2 -2
  195. data/lib/puppet/indirector/node/json.rb +2 -2
  196. data/lib/puppet/indirector/node/memory.rb +2 -2
  197. data/lib/puppet/indirector/node/msgpack.rb +2 -2
  198. data/lib/puppet/indirector/node/plain.rb +2 -2
  199. data/lib/puppet/indirector/node/rest.rb +2 -2
  200. data/lib/puppet/indirector/node/store_configs.rb +2 -2
  201. data/lib/puppet/indirector/node/yaml.rb +2 -2
  202. data/lib/puppet/indirector/none.rb +1 -1
  203. data/lib/puppet/indirector/plain.rb +1 -1
  204. data/lib/puppet/indirector/report/json.rb +2 -2
  205. data/lib/puppet/indirector/report/msgpack.rb +2 -2
  206. data/lib/puppet/indirector/report/processor.rb +3 -3
  207. data/lib/puppet/indirector/report/rest.rb +1 -1
  208. data/lib/puppet/indirector/report/yaml.rb +2 -2
  209. data/lib/puppet/indirector/request.rb +3 -3
  210. data/lib/puppet/indirector/resource/ral.rb +1 -1
  211. data/lib/puppet/indirector/resource/store_configs.rb +2 -2
  212. data/lib/puppet/indirector/terminus.rb +5 -5
  213. data/lib/puppet/indirector/yaml.rb +2 -2
  214. data/lib/puppet/info_service.rb +3 -3
  215. data/lib/puppet/info_service/class_information_service.rb +3 -3
  216. data/lib/puppet/info_service/plan_information_service.rb +1 -1
  217. data/lib/puppet/info_service/task_information_service.rb +1 -1
  218. data/lib/puppet/interface.rb +10 -10
  219. data/lib/puppet/interface/documentation.rb +1 -1
  220. data/lib/puppet/loaders.rb +21 -25
  221. data/lib/puppet/metatype/manager.rb +3 -3
  222. data/lib/puppet/module.rb +5 -4
  223. data/lib/puppet/module/plan.rb +1 -1
  224. data/lib/puppet/module/task.rb +1 -1
  225. data/lib/puppet/module_tool.rb +10 -10
  226. data/lib/puppet/module_tool/applications.rb +7 -7
  227. data/lib/puppet/module_tool/applications/application.rb +2 -2
  228. data/lib/puppet/module_tool/applications/checksummer.rb +2 -2
  229. data/lib/puppet/module_tool/applications/installer.rb +7 -7
  230. data/lib/puppet/module_tool/applications/unpacker.rb +2 -2
  231. data/lib/puppet/module_tool/applications/upgrader.rb +5 -5
  232. data/lib/puppet/module_tool/checksums.rb +1 -1
  233. data/lib/puppet/module_tool/contents_description.rb +1 -1
  234. data/lib/puppet/module_tool/dependency.rb +2 -2
  235. data/lib/puppet/module_tool/errors.rb +6 -6
  236. data/lib/puppet/module_tool/install_directory.rb +2 -2
  237. data/lib/puppet/module_tool/installed_modules.rb +2 -2
  238. data/lib/puppet/module_tool/local_tarball.rb +2 -2
  239. data/lib/puppet/module_tool/metadata.rb +3 -3
  240. data/lib/puppet/module_tool/tar.rb +4 -4
  241. data/lib/puppet/network/format.rb +1 -1
  242. data/lib/puppet/network/format_handler.rb +3 -3
  243. data/lib/puppet/network/format_support.rb +1 -1
  244. data/lib/puppet/network/formats.rb +2 -2
  245. data/lib/puppet/network/http.rb +17 -14
  246. data/lib/puppet/network/http/api.rb +11 -7
  247. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  248. data/lib/puppet/network/http/api/master.rb +3 -2
  249. data/lib/puppet/network/http/api/master/v3.rb +2 -25
  250. data/lib/puppet/network/http/api/master/v3/environments.rb +2 -33
  251. data/lib/puppet/network/http/api/server.rb +10 -0
  252. data/lib/puppet/network/http/api/server/v3.rb +39 -0
  253. data/lib/puppet/network/http/api/server/v3/environments.rb +48 -0
  254. data/lib/puppet/network/http/connection.rb +1 -1
  255. data/lib/puppet/network/http/error.rb +1 -1
  256. data/lib/puppet/network/http/handler.rb +3 -3
  257. data/lib/puppet/network/http_pool.rb +1 -1
  258. data/lib/puppet/node.rb +3 -3
  259. data/lib/puppet/node/environment.rb +15 -8
  260. data/lib/puppet/node/facts.rb +3 -3
  261. data/lib/puppet/pal/pal_api.rb +10 -10
  262. data/lib/puppet/pal/pal_impl.rb +3 -3
  263. data/lib/puppet/parameter.rb +4 -4
  264. data/lib/puppet/parameter/boolean.rb +1 -1
  265. data/lib/puppet/parameter/package_options.rb +1 -1
  266. data/lib/puppet/parameter/path.rb +1 -1
  267. data/lib/puppet/parameter/value.rb +1 -1
  268. data/lib/puppet/parameter/value_collection.rb +1 -1
  269. data/lib/puppet/parser.rb +10 -10
  270. data/lib/puppet/parser/ast.rb +8 -8
  271. data/lib/puppet/parser/ast/hostclass.rb +1 -1
  272. data/lib/puppet/parser/ast/pops_bridge.rb +2 -2
  273. data/lib/puppet/parser/catalog_compiler.rb +2 -2
  274. data/lib/puppet/parser/compiler.rb +5 -5
  275. data/lib/puppet/parser/e4_parser_adapter.rb +1 -1
  276. data/lib/puppet/parser/functions.rb +4 -4
  277. data/lib/puppet/parser/functions/digest.rb +1 -1
  278. data/lib/puppet/parser/functions/file.rb +1 -1
  279. data/lib/puppet/parser/functions/fqdn_rand.rb +14 -6
  280. data/lib/puppet/parser/functions/versioncmp.rb +1 -1
  281. data/lib/puppet/parser/parser_factory.rb +2 -2
  282. data/lib/puppet/parser/resource.rb +3 -3
  283. data/lib/puppet/parser/scope.rb +3 -3
  284. data/lib/puppet/parser/script_compiler.rb +2 -2
  285. data/lib/puppet/parser/templatewrapper.rb +2 -2
  286. data/lib/puppet/parser/type_loader.rb +1 -1
  287. data/lib/puppet/plugins/configuration.rb +5 -5
  288. data/lib/puppet/pops.rb +57 -57
  289. data/lib/puppet/pops/evaluator/deferred_resolver.rb +1 -1
  290. data/lib/puppet/pops/evaluator/evaluator_impl.rb +7 -7
  291. data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
  292. data/lib/puppet/pops/loader/base_loader.rb +42 -32
  293. data/lib/puppet/pops/loader/dependency_loader.rb +2 -2
  294. data/lib/puppet/pops/loader/loader.rb +15 -5
  295. data/lib/puppet/pops/loader/module_loaders.rb +8 -8
  296. data/lib/puppet/pops/loader/predefined_loader.rb +4 -0
  297. data/lib/puppet/pops/loader/runtime3_type_loader.rb +1 -1
  298. data/lib/puppet/pops/loader/static_loader.rb +4 -0
  299. data/lib/puppet/pops/loader/task_instantiator.rb +1 -1
  300. data/lib/puppet/pops/loaders.rb +4 -4
  301. data/lib/puppet/pops/lookup/invocation.rb +1 -1
  302. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  303. data/lib/puppet/pops/model/pn_transformer.rb +1 -1
  304. data/lib/puppet/pops/parser/eparser.rb +2 -2
  305. data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
  306. data/lib/puppet/pops/parser/lexer2.rb +5 -9
  307. data/lib/puppet/pops/parser/lexer_support.rb +1 -1
  308. data/lib/puppet/pops/parser/parser_support.rb +4 -4
  309. data/lib/puppet/pops/puppet_stack.rb +1 -1
  310. data/lib/puppet/pops/serialization/json.rb +1 -1
  311. data/lib/puppet/pops/serialization/json_path.rb +1 -1
  312. data/lib/puppet/pops/time/timespan.rb +1 -1
  313. data/lib/puppet/pops/types/p_type_set_type.rb +1 -1
  314. data/lib/puppet/pops/types/string_converter.rb +1 -1
  315. data/lib/puppet/pops/types/type_calculator.rb +1 -1
  316. data/lib/puppet/pops/types/type_formatter.rb +1 -1
  317. data/lib/puppet/pops/types/type_parser.rb +1 -1
  318. data/lib/puppet/pops/types/types.rb +1 -1
  319. data/lib/puppet/pops/validation/checker4_0.rb +1 -2
  320. data/lib/puppet/property.rb +3 -3
  321. data/lib/puppet/property/boolean.rb +1 -1
  322. data/lib/puppet/property/ensure.rb +1 -1
  323. data/lib/puppet/property/keyvalue.rb +1 -1
  324. data/lib/puppet/property/list.rb +2 -2
  325. data/lib/puppet/property/ordered_list.rb +1 -1
  326. data/lib/puppet/provider.rb +2 -2
  327. data/lib/puppet/provider/confine.rb +2 -2
  328. data/lib/puppet/provider/exec.rb +2 -2
  329. data/lib/puppet/provider/exec/posix.rb +1 -1
  330. data/lib/puppet/provider/exec/windows.rb +1 -1
  331. data/lib/puppet/provider/file/posix.rb +1 -1
  332. data/lib/puppet/provider/file/windows.rb +1 -1
  333. data/lib/puppet/provider/group/aix.rb +1 -1
  334. data/lib/puppet/provider/group/directoryservice.rb +1 -1
  335. data/lib/puppet/provider/group/groupadd.rb +15 -10
  336. data/lib/puppet/provider/group/ldap.rb +1 -1
  337. data/lib/puppet/provider/group/pw.rb +1 -1
  338. data/lib/puppet/provider/group/windows_adsi.rb +1 -1
  339. data/lib/puppet/provider/ldap.rb +2 -2
  340. data/lib/puppet/provider/nameservice.rb +1 -1
  341. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
  342. data/lib/puppet/provider/nameservice/objectadd.rb +1 -1
  343. data/lib/puppet/provider/nameservice/pw.rb +1 -1
  344. data/lib/puppet/provider/package.rb +1 -1
  345. data/lib/puppet/provider/package/aix.rb +2 -2
  346. data/lib/puppet/provider/package/appdmg.rb +2 -2
  347. data/lib/puppet/provider/package/apple.rb +1 -1
  348. data/lib/puppet/provider/package/apt.rb +32 -4
  349. data/lib/puppet/provider/package/aptitude.rb +6 -0
  350. data/lib/puppet/provider/package/dnfmodule.rb +2 -2
  351. data/lib/puppet/provider/package/dpkg.rb +1 -1
  352. data/lib/puppet/provider/package/gem.rb +3 -3
  353. data/lib/puppet/provider/package/hpux.rb +1 -1
  354. data/lib/puppet/provider/package/macports.rb +2 -2
  355. data/lib/puppet/provider/package/nim.rb +2 -2
  356. data/lib/puppet/provider/package/openbsd.rb +1 -1
  357. data/lib/puppet/provider/package/opkg.rb +1 -1
  358. data/lib/puppet/provider/package/pacman.rb +1 -1
  359. data/lib/puppet/provider/package/pip.rb +3 -3
  360. data/lib/puppet/provider/package/pkg.rb +2 -2
  361. data/lib/puppet/provider/package/pkgdmg.rb +3 -3
  362. data/lib/puppet/provider/package/pkgin.rb +1 -1
  363. data/lib/puppet/provider/package/pkgng.rb +1 -1
  364. data/lib/puppet/provider/package/portage.rb +1 -1
  365. data/lib/puppet/provider/package/portupgrade.rb +1 -1
  366. data/lib/puppet/provider/package/puppet_gem.rb +12 -1
  367. data/lib/puppet/provider/package/puppetserver_gem.rb +0 -0
  368. data/lib/puppet/provider/package/rpm.rb +2 -2
  369. data/lib/puppet/provider/package/sun.rb +1 -1
  370. data/lib/puppet/provider/package/windows.rb +3 -3
  371. data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
  372. data/lib/puppet/provider/package/windows/msi_package.rb +1 -1
  373. data/lib/puppet/provider/package/windows/package.rb +4 -4
  374. data/lib/puppet/provider/package/yum.rb +3 -3
  375. data/lib/puppet/provider/package_targetable.rb +1 -1
  376. data/lib/puppet/provider/parsedfile.rb +3 -3
  377. data/lib/puppet/provider/service/base.rb +6 -4
  378. data/lib/puppet/provider/service/daemontools.rb +0 -1
  379. data/lib/puppet/provider/service/debian.rb +5 -5
  380. data/lib/puppet/provider/service/init.rb +1 -1
  381. data/lib/puppet/provider/service/launchd.rb +9 -3
  382. data/lib/puppet/provider/service/service.rb +28 -3
  383. data/lib/puppet/provider/service/smf.rb +0 -24
  384. data/lib/puppet/provider/service/src.rb +2 -2
  385. data/lib/puppet/provider/service/systemd.rb +12 -7
  386. data/lib/puppet/provider/service/windows.rb +38 -0
  387. data/lib/puppet/provider/user/aix.rb +2 -2
  388. data/lib/puppet/provider/user/directoryservice.rb +2 -2
  389. data/lib/puppet/provider/user/ldap.rb +1 -1
  390. data/lib/puppet/provider/user/openbsd.rb +1 -1
  391. data/lib/puppet/provider/user/pw.rb +1 -1
  392. data/lib/puppet/provider/user/user_role_add.rb +2 -2
  393. data/lib/puppet/provider/user/useradd.rb +65 -11
  394. data/lib/puppet/provider/user/windows_adsi.rb +1 -1
  395. data/lib/puppet/reference/configuration.rb +1 -1
  396. data/lib/puppet/reference/indirection.rb +4 -4
  397. data/lib/puppet/reference/report.rb +1 -1
  398. data/lib/puppet/reports.rb +1 -1
  399. data/lib/puppet/reports/http.rb +2 -2
  400. data/lib/puppet/reports/log.rb +1 -1
  401. data/lib/puppet/reports/store.rb +2 -2
  402. data/lib/puppet/resource.rb +4 -4
  403. data/lib/puppet/resource/catalog.rb +5 -5
  404. data/lib/puppet/resource/status.rb +2 -2
  405. data/lib/puppet/resource/type.rb +4 -4
  406. data/lib/puppet/resource/type_collection.rb +4 -4
  407. data/lib/puppet/runtime.rb +1 -1
  408. data/lib/puppet/scheduler.rb +4 -4
  409. data/lib/puppet/settings.rb +31 -30
  410. data/lib/puppet/settings/autosign_setting.rb +1 -1
  411. data/lib/puppet/settings/base_setting.rb +2 -2
  412. data/lib/puppet/settings/certificate_revocation_setting.rb +1 -1
  413. data/lib/puppet/settings/config_file.rb +1 -1
  414. data/lib/puppet/settings/environment_conf.rb +1 -0
  415. data/lib/puppet/settings/errors.rb +1 -1
  416. data/lib/puppet/settings/priority_setting.rb +3 -3
  417. data/lib/puppet/ssl.rb +11 -11
  418. data/lib/puppet/ssl/base.rb +3 -3
  419. data/lib/puppet/ssl/certificate.rb +1 -1
  420. data/lib/puppet/ssl/certificate_request.rb +2 -2
  421. data/lib/puppet/ssl/certificate_request_attributes.rb +2 -2
  422. data/lib/puppet/ssl/oids.rb +1 -1
  423. data/lib/puppet/ssl/openssl_loader.rb +1 -1
  424. data/lib/puppet/ssl/ssl_context.rb +1 -1
  425. data/lib/puppet/ssl/ssl_provider.rb +1 -1
  426. data/lib/puppet/ssl/state_machine.rb +2 -2
  427. data/lib/puppet/ssl/verifier.rb +5 -1
  428. data/lib/puppet/syntax_checkers/base64.rb +1 -1
  429. data/lib/puppet/syntax_checkers/epp.rb +1 -1
  430. data/lib/puppet/syntax_checkers/json.rb +1 -1
  431. data/lib/puppet/syntax_checkers/pp.rb +1 -1
  432. data/lib/puppet/transaction.rb +11 -11
  433. data/lib/puppet/transaction/event.rb +4 -4
  434. data/lib/puppet/transaction/event_manager.rb +1 -1
  435. data/lib/puppet/transaction/persistence.rb +1 -1
  436. data/lib/puppet/transaction/report.rb +2 -2
  437. data/lib/puppet/transaction/resource_harness.rb +1 -1
  438. data/lib/puppet/type.rb +14 -14
  439. data/lib/puppet/type/component.rb +3 -3
  440. data/lib/puppet/type/file.rb +37 -19
  441. data/lib/puppet/type/file/checksum.rb +1 -1
  442. data/lib/puppet/type/file/checksum_value.rb +2 -2
  443. data/lib/puppet/type/file/content.rb +2 -2
  444. data/lib/puppet/type/file/data_sync.rb +2 -2
  445. data/lib/puppet/type/file/ensure.rb +1 -1
  446. data/lib/puppet/type/file/group.rb +1 -1
  447. data/lib/puppet/type/file/mode.rb +1 -1
  448. data/lib/puppet/type/file/selcontext.rb +2 -2
  449. data/lib/puppet/type/file/source.rb +4 -4
  450. data/lib/puppet/type/filebucket.rb +1 -1
  451. data/lib/puppet/type/group.rb +2 -2
  452. data/lib/puppet/type/package.rb +5 -5
  453. data/lib/puppet/type/resources.rb +2 -2
  454. data/lib/puppet/type/service.rb +10 -29
  455. data/lib/puppet/type/tidy.rb +24 -5
  456. data/lib/puppet/type/user.rb +4 -4
  457. data/lib/puppet/util.rb +43 -34
  458. data/lib/puppet/util/at_fork.rb +3 -3
  459. data/lib/puppet/util/at_fork/solaris.rb +1 -1
  460. data/lib/puppet/util/autoload.rb +4 -4
  461. data/lib/puppet/util/checksums.rb +3 -3
  462. data/lib/puppet/util/colors.rb +1 -1
  463. data/lib/puppet/util/command_line.rb +6 -6
  464. data/lib/puppet/util/command_line/puppet_option_parser.rb +2 -2
  465. data/lib/puppet/util/execution.rb +2 -2
  466. data/lib/puppet/util/feature.rb +2 -2
  467. data/lib/puppet/util/filetype.rb +1 -1
  468. data/lib/puppet/util/http_proxy.rb +1 -1
  469. data/lib/puppet/util/inifile.rb +2 -2
  470. data/lib/puppet/util/instance_loader.rb +3 -3
  471. data/lib/puppet/util/json_lockfile.rb +1 -1
  472. data/lib/puppet/util/ldap/connection.rb +1 -1
  473. data/lib/puppet/util/ldap/generator.rb +1 -1
  474. data/lib/puppet/util/ldap/manager.rb +3 -3
  475. data/lib/puppet/util/limits.rb +1 -1
  476. data/lib/puppet/util/log.rb +6 -6
  477. data/lib/puppet/util/log/destinations.rb +1 -1
  478. data/lib/puppet/util/logging.rb +2 -2
  479. data/lib/puppet/util/metric.rb +2 -2
  480. data/lib/puppet/util/monkey_patches.rb +14 -3
  481. data/lib/puppet/util/network_device/base.rb +3 -3
  482. data/lib/puppet/util/network_device/config.rb +2 -2
  483. data/lib/puppet/util/network_device/transport.rb +1 -1
  484. data/lib/puppet/util/network_device/transport/base.rb +2 -2
  485. data/lib/puppet/util/package/version/range.rb +6 -6
  486. data/lib/puppet/util/package/version/range/eq.rb +1 -1
  487. data/lib/puppet/util/package/version/range/gt.rb +1 -1
  488. data/lib/puppet/util/package/version/range/gt_eq.rb +1 -1
  489. data/lib/puppet/util/package/version/range/lt.rb +1 -1
  490. data/lib/puppet/util/package/version/range/lt_eq.rb +1 -1
  491. data/lib/puppet/util/package/version/range/min_max.rb +1 -1
  492. data/lib/puppet/util/package/version/range/simple.rb +1 -1
  493. data/lib/puppet/util/package/version/rpm.rb +1 -1
  494. data/lib/puppet/util/pidlock.rb +1 -1
  495. data/lib/puppet/util/plist.rb +1 -1
  496. data/lib/puppet/util/posix.rb +1 -1
  497. data/lib/puppet/util/profiler.rb +3 -3
  498. data/lib/puppet/util/profiler/aggregate.rb +2 -2
  499. data/lib/puppet/util/profiler/object_counts.rb +1 -1
  500. data/lib/puppet/util/profiler/wall_clock.rb +1 -1
  501. data/lib/puppet/util/provider_features.rb +2 -2
  502. data/lib/puppet/util/rdoc.rb +2 -2
  503. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
  504. data/lib/puppet/util/rdoc/parser.rb +6 -6
  505. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +1 -1
  506. data/lib/puppet/util/reference.rb +1 -1
  507. data/lib/puppet/util/resource_template.rb +2 -2
  508. data/lib/puppet/util/rubygems.rb +1 -1
  509. data/lib/puppet/util/selinux.rb +30 -4
  510. data/lib/puppet/util/skip_tags.rb +1 -1
  511. data/lib/puppet/util/storage.rb +1 -1
  512. data/lib/puppet/util/suidmanager.rb +2 -2
  513. data/lib/puppet/util/symbolic_file_mode.rb +1 -1
  514. data/lib/puppet/util/tag_set.rb +1 -1
  515. data/lib/puppet/util/tagging.rb +1 -1
  516. data/lib/puppet/util/watched_file.rb +1 -1
  517. data/lib/puppet/util/watcher.rb +3 -3
  518. data/lib/puppet/util/windows.rb +20 -20
  519. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  520. data/lib/puppet/util/windows/adsi.rb +47 -1
  521. data/lib/puppet/util/windows/daemon.rb +1 -1
  522. data/lib/puppet/util/windows/error.rb +2 -2
  523. data/lib/puppet/util/windows/file.rb +1 -1
  524. data/lib/puppet/util/windows/monkey_patches/process.rb +2 -2
  525. data/lib/puppet/util/windows/principal.rb +10 -3
  526. data/lib/puppet/util/windows/process.rb +2 -2
  527. data/lib/puppet/util/windows/registry.rb +1 -1
  528. data/lib/puppet/util/windows/root_certs.rb +2 -2
  529. data/lib/puppet/util/windows/security.rb +1 -1
  530. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  531. data/lib/puppet/util/windows/service.rb +1 -1
  532. data/lib/puppet/util/windows/sid.rb +5 -3
  533. data/lib/puppet/util/windows/user.rb +1 -1
  534. data/lib/puppet/vendor.rb +1 -1
  535. data/lib/puppet/version.rb +1 -1
  536. data/lib/puppet/x509.rb +4 -4
  537. data/lib/puppet/x509/cert_provider.rb +1 -1
  538. data/lib/puppet/x509/pem_store.rb +1 -1
  539. data/lib/puppet_pal.rb +2 -2
  540. data/locales/puppet.pot +173 -157
  541. data/man/man5/puppet.conf.5 +263 -240
  542. data/man/man8/puppet-agent.8 +1 -1
  543. data/man/man8/puppet-apply.8 +1 -1
  544. data/man/man8/puppet-catalog.8 +1 -1
  545. data/man/man8/puppet-config.8 +1 -1
  546. data/man/man8/puppet-describe.8 +1 -1
  547. data/man/man8/puppet-device.8 +1 -1
  548. data/man/man8/puppet-doc.8 +1 -1
  549. data/man/man8/puppet-epp.8 +1 -1
  550. data/man/man8/puppet-facts.8 +5 -2
  551. data/man/man8/puppet-filebucket.8 +1 -1
  552. data/man/man8/puppet-generate.8 +1 -1
  553. data/man/man8/puppet-help.8 +1 -1
  554. data/man/man8/puppet-lookup.8 +1 -1
  555. data/man/man8/puppet-module.8 +1 -1
  556. data/man/man8/puppet-node.8 +1 -1
  557. data/man/man8/puppet-parser.8 +1 -1
  558. data/man/man8/puppet-plugin.8 +1 -1
  559. data/man/man8/puppet-report.8 +1 -1
  560. data/man/man8/puppet-resource.8 +1 -1
  561. data/man/man8/puppet-script.8 +1 -1
  562. data/man/man8/puppet-ssl.8 +5 -1
  563. data/man/man8/puppet.8 +2 -2
  564. data/spec/fixtures/ssl/127.0.0.1-key.pem +107 -57
  565. data/spec/fixtures/ssl/127.0.0.1.pem +52 -31
  566. data/spec/fixtures/ssl/bad-basic-constraints.pem +57 -35
  567. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +57 -35
  568. data/spec/fixtures/ssl/ca.pem +57 -35
  569. data/spec/fixtures/ssl/crl.pem +28 -18
  570. data/spec/fixtures/ssl/ec-key.pem +11 -11
  571. data/spec/fixtures/ssl/ec.pem +33 -24
  572. data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
  573. data/spec/fixtures/ssl/encrypted-key.pem +108 -58
  574. data/spec/fixtures/ssl/intermediate-agent-crl.pem +28 -19
  575. data/spec/fixtures/ssl/intermediate-agent.pem +57 -36
  576. data/spec/fixtures/ssl/intermediate-crl.pem +31 -21
  577. data/spec/fixtures/ssl/intermediate.pem +57 -36
  578. data/spec/fixtures/ssl/pluto-key.pem +107 -57
  579. data/spec/fixtures/ssl/pluto.pem +52 -30
  580. data/spec/fixtures/ssl/request-key.pem +107 -57
  581. data/spec/fixtures/ssl/request.pem +47 -26
  582. data/spec/fixtures/ssl/revoked-key.pem +107 -57
  583. data/spec/fixtures/ssl/revoked.pem +52 -30
  584. data/spec/fixtures/ssl/signed-key.pem +107 -57
  585. data/spec/fixtures/ssl/signed.pem +52 -30
  586. data/spec/fixtures/ssl/tampered-cert.pem +52 -30
  587. data/spec/fixtures/ssl/tampered-csr.pem +47 -26
  588. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +107 -57
  589. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +50 -29
  590. data/spec/fixtures/ssl/unknown-ca-key.pem +107 -57
  591. data/spec/fixtures/ssl/unknown-ca.pem +55 -33
  592. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +9 -0
  593. data/spec/integration/application/agent_spec.rb +33 -0
  594. data/spec/integration/application/plugin_spec.rb +1 -1
  595. data/spec/integration/http/client_spec.rb +12 -0
  596. data/spec/integration/indirector/direct_file_server_spec.rb +1 -3
  597. data/spec/integration/parser/collection_spec.rb +10 -0
  598. data/spec/integration/type/file_spec.rb +5 -5
  599. data/spec/integration/util/windows/adsi_spec.rb +18 -0
  600. data/spec/integration/util/windows/principal_spec.rb +21 -0
  601. data/spec/integration/util/windows/registry_spec.rb +6 -0
  602. data/spec/lib/puppet/test_ca.rb +2 -2
  603. data/spec/lib/puppet_spec/files.rb +1 -1
  604. data/spec/shared_contexts/provider.rb +16 -0
  605. data/spec/spec_helper.rb +11 -1
  606. data/spec/unit/application/agent_spec.rb +7 -2
  607. data/spec/unit/application/facts_spec.rb +58 -7
  608. data/spec/unit/application/ssl_spec.rb +23 -0
  609. data/spec/unit/configurer/downloader_spec.rb +6 -0
  610. data/spec/unit/configurer_spec.rb +23 -0
  611. data/spec/unit/environments_spec.rb +164 -88
  612. data/spec/unit/file_bucket/dipper_spec.rb +1 -1
  613. data/spec/unit/file_serving/fileset_spec.rb +60 -0
  614. data/spec/unit/file_system_spec.rb +9 -0
  615. data/spec/unit/gettext/config_spec.rb +12 -0
  616. data/spec/unit/http/factory_spec.rb +19 -0
  617. data/spec/unit/http/service/compiler_spec.rb +123 -0
  618. data/spec/unit/indirector/catalog/compiler_spec.rb +14 -10
  619. data/spec/unit/indirector/facts/facter_spec.rb +9 -0
  620. data/spec/unit/module_spec.rb +1 -1
  621. data/spec/unit/network/http/api/master_spec.rb +38 -0
  622. data/spec/unit/network/http/api/{master → server}/v3/environments_spec.rb +2 -2
  623. data/spec/unit/network/http/api/{master → server}/v3_spec.rb +19 -19
  624. data/spec/unit/network/http/api_spec.rb +11 -11
  625. data/spec/unit/parser/functions/fqdn_rand_spec.rb +15 -1
  626. data/spec/unit/pops/loaders/dependency_loader_spec.rb +1 -1
  627. data/spec/unit/pops/lookup/context_spec.rb +1 -1
  628. data/spec/unit/pops/parser/lexer2_spec.rb +0 -4
  629. data/spec/unit/pops/types/type_parser_spec.rb +2 -1
  630. data/spec/unit/pops/validator/validator_spec.rb +20 -43
  631. data/spec/unit/provider/group/groupadd_spec.rb +5 -2
  632. data/spec/unit/provider/package/apt_spec.rb +24 -15
  633. data/spec/unit/provider/package/aptitude_spec.rb +1 -1
  634. data/spec/unit/provider/package/dnfmodule_spec.rb +13 -4
  635. data/spec/unit/provider/package/gem_spec.rb +3 -1
  636. data/spec/unit/provider/package/pip2_spec.rb +3 -1
  637. data/spec/unit/provider/package/pip3_spec.rb +3 -1
  638. data/spec/unit/provider/package/pip_spec.rb +3 -1
  639. data/spec/unit/provider/package/pkg_spec.rb +44 -44
  640. data/spec/unit/provider/package/puppet_gem_spec.rb +31 -1
  641. data/spec/unit/provider/package/puppetserver_gem_spec.rb +2 -0
  642. data/spec/unit/provider/service/base_spec.rb +8 -8
  643. data/spec/unit/provider/service/bsd_spec.rb +0 -4
  644. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  645. data/spec/unit/provider/service/debian_spec.rb +15 -17
  646. data/spec/unit/provider/service/gentoo_spec.rb +19 -14
  647. data/spec/unit/provider/service/init_spec.rb +29 -20
  648. data/spec/unit/provider/service/launchd_spec.rb +10 -12
  649. data/spec/unit/provider/service/openbsd_spec.rb +21 -35
  650. data/spec/unit/provider/service/openrc_spec.rb +15 -14
  651. data/spec/unit/provider/service/openwrt_spec.rb +3 -1
  652. data/spec/unit/provider/service/redhat_spec.rb +20 -19
  653. data/spec/unit/provider/service/smf_spec.rb +6 -5
  654. data/spec/unit/provider/service/src_spec.rb +5 -10
  655. data/spec/unit/provider/service/systemd_spec.rb +68 -29
  656. data/spec/unit/provider/service/upstart_spec.rb +25 -20
  657. data/spec/unit/provider/service/windows_spec.rb +202 -0
  658. data/spec/unit/provider/user/useradd_spec.rb +70 -3
  659. data/spec/unit/resource/catalog_spec.rb +1 -1
  660. data/spec/unit/ssl/certificate_request_spec.rb +4 -10
  661. data/spec/unit/ssl/state_machine_spec.rb +19 -5
  662. data/spec/unit/transaction/additional_resource_generator_spec.rb +0 -2
  663. data/spec/unit/transaction_spec.rb +18 -20
  664. data/spec/unit/type/file/selinux_spec.rb +3 -3
  665. data/spec/unit/type/service_spec.rb +10 -154
  666. data/spec/unit/type/tidy_spec.rb +17 -7
  667. data/spec/unit/util/at_fork_spec.rb +9 -9
  668. data/spec/unit/util/posix_spec.rb +1 -1
  669. data/spec/unit/util/selinux_spec.rb +87 -16
  670. data/spec/unit/util/windows/sid_spec.rb +6 -0
  671. data/tasks/generate_cert_fixtures.rake +2 -2
  672. metadata +15 -16
  673. data/spec/lib/matchers/include.rb +0 -27
  674. data/spec/lib/matchers/include_spec.rb +0 -32
  675. data/spec/unit/pops/parser/parse_application_spec.rb +0 -13
  676. data/spec/unit/pops/parser/parse_capabilities_spec.rb +0 -23
  677. data/spec/unit/pops/parser/parse_site_spec.rb +0 -43
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'matchers/include'
3
2
 
4
3
  require 'puppet/indirector/file_content/file'
5
4
  require 'puppet/indirector/file_metadata/file'
@@ -30,7 +29,6 @@ end
30
29
 
31
30
  describe Puppet::Indirector::DirectFileServer, " when interacting with FileServing::Fileset and the model" do
32
31
  include PuppetSpec::Files
33
- include Matchers::Include
34
32
 
35
33
  matcher :file_with_content do |name, content|
36
34
  match do |actual|
@@ -52,7 +50,7 @@ describe Puppet::Indirector::DirectFileServer, " when interacting with FileServi
52
50
  terminus = Puppet::Indirector::FileContent::File.new
53
51
  request = terminus.indirection.request(:search, Puppet::Util.path_to_uri(path).to_s, nil, :recurse => true)
54
52
 
55
- expect(terminus.search(request)).to include_in_any_order(
53
+ expect(terminus.search(request)).to contain_exactly(
56
54
  file_with_content(File.join(path, "one"), "one content"),
57
55
  file_with_content(File.join(path, "two"), "two content"),
58
56
  directory_named(path))
@@ -235,6 +235,16 @@ describe 'collectors' do
235
235
  MANIFEST
236
236
  end
237
237
 
238
+ it "splats attributes from a hash" do
239
+ expect_the_message_to_be(["overridden message"], <<-MANIFEST)
240
+ @notify { "testing": message => "original message" }
241
+
242
+ Notify <| |> {
243
+ * => { message => "overridden message" }
244
+ }
245
+ MANIFEST
246
+ end
247
+
238
248
  it "collects with override when inside a class (#10963)" do
239
249
  expect_the_message_to_be(["overridden message"], <<-MANIFEST)
240
250
  @notify { "testing": message => "original message" }
@@ -895,7 +895,7 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
895
895
 
896
896
  # Change the source file.
897
897
  File.open(checksum_file, "wb") { |f| f.write "some content" }
898
- FileUtils.touch target_file, :mtime => Time.now - 20
898
+ FileUtils.touch target_file, mtime: Time.now - 20
899
899
 
900
900
  # The 2nd time should update the resource.
901
901
  second_catalog.add_resource Puppet::Type.send(:newfile, @options)
@@ -1399,7 +1399,7 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
1399
1399
  it "should fetch if no header specified" do
1400
1400
  File.open(httppath, "wb") { |f| f.puts "Content originally on disk\n" }
1401
1401
  # make sure the mtime is not "right now", lest we get a race
1402
- FileUtils.touch httppath, :mtime => Time.parse("Sun, 22 Mar 2015 22:57:43 GMT")
1402
+ FileUtils.touch httppath, mtime: Time.parse("Sun, 22 Mar 2015 22:57:43 GMT")
1403
1403
  catalog.add_resource resource
1404
1404
  catalog.apply
1405
1405
  expect(Puppet::FileSystem.exist?(httppath)).to be_truthy
@@ -1409,7 +1409,7 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
1409
1409
  it "should fetch if mtime is older on disk" do
1410
1410
  File.open(httppath, "wb") { |f| f.puts "Content originally on disk\n" }
1411
1411
  # fixture has Last-Modified: Sun, 22 Mar 2015 22:25:34 GMT
1412
- FileUtils.touch httppath, :mtime => Time.parse("Sun, 22 Mar 2015 22:22:34 GMT")
1412
+ FileUtils.touch httppath, mtime: Time.parse("Sun, 22 Mar 2015 22:22:34 GMT")
1413
1413
  catalog.add_resource resource
1414
1414
  catalog.apply
1415
1415
  expect(Puppet::FileSystem.exist?(httppath)).to be_truthy
@@ -1455,7 +1455,7 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
1455
1455
  it "should not update if content on disk is up-to-date" do
1456
1456
  File.open(httppath, "wb") { |f| f.puts "Content via HTTP\n" }
1457
1457
  disk_mtime = Time.parse("Sun, 22 Mar 2015 22:22:34 GMT")
1458
- FileUtils.touch httppath, :mtime => disk_mtime
1458
+ FileUtils.touch httppath, mtime: disk_mtime
1459
1459
  catalog.add_resource resource
1460
1460
  catalog.apply
1461
1461
  expect(Puppet::FileSystem.exist?(httppath)).to be_truthy
@@ -2002,7 +2002,7 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
2002
2002
  it "should not update mtime on an old directory" do
2003
2003
  disk_mtime = Time.parse("Sun, 22 Mar 2015 22:22:34 GMT")
2004
2004
  FileUtils.mkdir_p path
2005
- FileUtils.touch path, :mtime => disk_mtime
2005
+ FileUtils.touch path, mtime: disk_mtime
2006
2006
  status = catalog.apply.report.resource_statuses["File[#{path}]"]
2007
2007
  expect(status).to be_nil
2008
2008
  expect(Puppet::FileSystem).to be_directory(path)
@@ -55,6 +55,24 @@ describe Puppet::Util::Windows::ADSI::User,
55
55
  end
56
56
  end
57
57
  end
58
+
59
+ describe '.current_user_name_with_format' do
60
+ context 'when desired format is NameSamCompatible' do
61
+ it 'should get the same user name as the current_user_name method but fully qualified' do
62
+ user_name = Puppet::Util::Windows::ADSI::User.current_user_name
63
+ fully_qualified_user_name = Puppet::Util::Windows::ADSI::User.current_sam_compatible_user_name
64
+
65
+ expect(fully_qualified_user_name).to match(/^.+\\#{user_name}$/)
66
+ end
67
+
68
+ it 'should have the same SID as with the current_user_name method' do
69
+ user_name = Puppet::Util::Windows::ADSI::User.current_user_name
70
+ fully_qualified_user_name = Puppet::Util::Windows::ADSI::User.current_sam_compatible_user_name
71
+
72
+ expect(Puppet::Util::Windows::SID.name_to_sid(user_name)).to eq(Puppet::Util::Windows::SID.name_to_sid(fully_qualified_user_name))
73
+ end
74
+ end
75
+ end
58
76
  end
59
77
 
60
78
  describe Puppet::Util::Windows::ADSI::Group,
@@ -7,6 +7,7 @@ describe Puppet::Util::Windows::SID::Principal, :if => Puppet::Util::Platform.wi
7
7
  let (:system_bytes) { [1, 1, 0, 0, 0, 0, 0, 5, 18, 0, 0, 0] }
8
8
  let (:null_sid_bytes) { [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }
9
9
  let (:administrator_bytes) { [1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0] }
10
+ let (:all_application_packages_bytes) { [1, 2, 0, 0, 0, 0, 0, 15, 2, 0, 0, 0, 1, 0, 0, 0] }
10
11
  let (:computer_sid) { Puppet::Util::Windows::SID.name_to_principal(Puppet::Util::Windows::ADSI.computer_name) }
11
12
  # BUILTIN is localized on German Windows, but not French
12
13
  # looking this up like this dilutes the values of the tests as we're comparing two mechanisms
@@ -121,6 +122,26 @@ describe Puppet::Util::Windows::SID::Principal, :if => Puppet::Util::Platform.wi
121
122
  expect(principal.to_s).to eq(builtin_localized)
122
123
  end
123
124
 
125
+ it "should always sanitize the account name first" do
126
+ expect(Puppet::Util::Windows::SID::Principal).to receive(:sanitize_account_name).with('NT AUTHORITY\\SYSTEM').and_call_original
127
+ Puppet::Util::Windows::SID::Principal.lookup_account_name('NT AUTHORITY\\SYSTEM')
128
+ end
129
+
130
+ it "should be able to create an instance from an account name prefixed by APPLICATION PACKAGE AUTHORITY" do
131
+ principal = Puppet::Util::Windows::SID::Principal.lookup_account_name('APPLICATION PACKAGE AUTHORITY\\ALL APPLICATION PACKAGES')
132
+ expect(principal.account).to eq('ALL APPLICATION PACKAGES')
133
+ expect(principal.sid_bytes).to eq(all_application_packages_bytes)
134
+ expect(principal.sid).to eq('S-1-15-2-1')
135
+ expect(principal.domain).to eq('APPLICATION PACKAGE AUTHORITY')
136
+ expect(principal.domain_account).to eq('APPLICATION PACKAGE AUTHORITY\\ALL APPLICATION PACKAGES')
137
+ expect(principal.account_type).to eq(:SidTypeWellKnownGroup)
138
+ expect(principal.to_s).to eq('APPLICATION PACKAGE AUTHORITY\\ALL APPLICATION PACKAGES')
139
+ end
140
+
141
+ it "should fail without proper account name sanitization when it is prefixed by APPLICATION PACKAGE AUTHORITY" do
142
+ given_account_name = 'APPLICATION PACKAGE AUTHORITY\\ALL APPLICATION PACKAGES'
143
+ expect { Puppet::Util::Windows::SID::Principal.lookup_account_name(nil, false, given_account_name) }.to raise_error(Puppet::Util::Windows::Error, /No mapping between account names and security IDs was done./)
144
+ end
124
145
  end
125
146
 
126
147
  describe ".lookup_account_sid" do
@@ -263,6 +263,12 @@ describe Puppet::Util::Windows::Registry do
263
263
  type: Win32::Registry::REG_EXPAND_SZ,
264
264
  value: "\0\0\0reg expand string",
265
265
  expected_value: ""
266
+ },
267
+ {
268
+ name: 'REG_EXPAND_SZ_2',
269
+ type: Win32::Registry::REG_EXPAND_SZ,
270
+ value: "1\x002\x003\x004\x00\x00\x00\x90\xD8UoY".force_encoding("UTF-16LE"),
271
+ expected_value: "1234"
266
272
  }
267
273
  ].each do |pair|
268
274
  it 'reads up to the first wide null' do
@@ -30,7 +30,7 @@ module Puppet
30
30
  end
31
31
 
32
32
  def create_request(name)
33
- key = OpenSSL::PKey::RSA.new(1024)
33
+ key = OpenSSL::PKey::RSA.new(2048)
34
34
  csr = OpenSSL::X509::Request.new
35
35
  csr.public_key = key.public_key
36
36
  csr.subject = OpenSSL::X509::Name.new([["CN", name]])
@@ -127,7 +127,7 @@ module Puppet
127
127
  key = if opts[:key_type] == :ec
128
128
  key = OpenSSL::PKey::EC.generate('prime256v1')
129
129
  else
130
- key = OpenSSL::PKey::RSA.new(1024)
130
+ key = OpenSSL::PKey::RSA.new(2048)
131
131
  end
132
132
  cert = OpenSSL::X509::Certificate.new
133
133
  cert.public_key = if key.is_a?(OpenSSL::PKey::EC)
@@ -9,7 +9,7 @@ module PuppetSpec::Files
9
9
  $global_tempfiles ||= []
10
10
  while path = $global_tempfiles.pop do
11
11
  begin
12
- FileUtils.rm_rf path, :secure => true
12
+ FileUtils.rm_rf path, secure: true
13
13
  rescue Errno::ENOENT
14
14
  # nothing to do
15
15
  end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.shared_context('provider specificity') do
4
+ around do |example|
5
+ old_defaults = described_class.instance_variable_get(:@defaults)
6
+ old_notdefaults = described_class.instance_variable_get(:@notdefaults)
7
+ begin
8
+ described_class.instance_variable_set(:@defaults, [])
9
+ described_class.instance_variable_set(:@notdefaults, [])
10
+ example.run
11
+ ensure
12
+ described_class.instance_variable_set(:@defaults, old_defaults)
13
+ described_class.instance_variable_set(:@notdefaults, old_notdefaults)
14
+ end
15
+ end
16
+ end
data/spec/spec_helper.rb CHANGED
@@ -162,10 +162,20 @@ RSpec.configure do |config|
162
162
  PUPPET_FACTER_2_GCE_URL = %r{^http://metadata/computeMetadata/v1(beta1)?}.freeze
163
163
  PUPPET_FACTER_3_GCE_URL = "http://metadata.google.internal/computeMetadata/v1/?recursive=true&alt=json".freeze
164
164
 
165
+ # Facter azure metadata endpoint
166
+ PUPPET_FACTER_AZ_URL = "http://169.254.169.254/metadata/instance?api-version=2020-09-01"
167
+
168
+ # Facter EC2 endpoint
169
+ PUPPET_FACTER_EC2_METADATA = 'http://169.254.169.254/latest/meta-data/'
170
+ PUPPET_FACTER_EC2_USERDATA = 'http://169.254.169.254/latest/user-data/'
171
+
165
172
  config.around :each do |example|
166
- # Ignore requests from Facter GCE fact in Travis
173
+ # Ignore requests from Facter to external services
167
174
  stub_request(:get, PUPPET_FACTER_2_GCE_URL)
168
175
  stub_request(:get, PUPPET_FACTER_3_GCE_URL)
176
+ stub_request(:get, PUPPET_FACTER_AZ_URL)
177
+ stub_request(:get, PUPPET_FACTER_EC2_METADATA)
178
+ stub_request(:get, PUPPET_FACTER_EC2_USERDATA)
169
179
 
170
180
  # Enable VCR if the example is tagged with `:vcr` metadata.
171
181
  if example.metadata[:vcr]
@@ -546,11 +546,16 @@ describe Puppet::Application::Agent do
546
546
  @puppetd.options[:digest] = :MD5
547
547
  end
548
548
 
549
+ def expected_fingerprint(name, x509)
550
+ digest = OpenSSL::Digest.new(name).hexdigest(x509.to_der)
551
+ digest.scan(/../).join(':').upcase
552
+ end
553
+
549
554
  it "should fingerprint the certificate if it exists" do
550
555
  cert = cert_fixture('signed.pem')
551
556
  allow_any_instance_of(Puppet::X509::CertProvider).to receive(:load_client_cert).and_return(cert)
552
557
 
553
- expect(@puppetd).to receive(:puts).with('(MD5) E2:BA:9A:EF:20:A8:7D:10:8D:82:9A:61:5D:FD:5B:33')
558
+ expect(@puppetd).to receive(:puts).with("(MD5) #{expected_fingerprint('md5', cert)}")
554
559
 
555
560
  @puppetd.fingerprint
556
561
  end
@@ -560,7 +565,7 @@ describe Puppet::Application::Agent do
560
565
  allow_any_instance_of(Puppet::X509::CertProvider).to receive(:load_client_cert).and_return(nil)
561
566
  allow_any_instance_of(Puppet::X509::CertProvider).to receive(:load_request).and_return(request)
562
567
 
563
- expect(@puppetd).to receive(:puts).with('(MD5) B8:4C:FB:31:AE:17:86:E3:AD:53:97:CA:F6:3C:4A:CB')
568
+ expect(@puppetd).to receive(:puts).with("(MD5) #{expected_fingerprint('md5', request)}")
564
569
 
565
570
  @puppetd.fingerprint
566
571
  end
@@ -3,7 +3,7 @@ require 'puppet/application/facts'
3
3
 
4
4
  describe Puppet::Application::Facts do
5
5
  let(:app) { Puppet::Application[:facts] }
6
- let(:values) { {"filesystems" => "apfs,autofs,devfs", "macaddress" => "64:52:11:22:03:25"} }
6
+ let(:values) { {"filesystems" => "apfs,autofs,devfs", "macaddress" => "64:52:11:22:03:2e"} }
7
7
 
8
8
  before :each do
9
9
  Puppet::Node::Facts.indirection.terminus_class = :memory
@@ -21,7 +21,7 @@ describe Puppet::Application::Facts do
21
21
  name: whatever
22
22
  values:
23
23
  filesystems: apfs,autofs,devfs
24
- macaddress: "64:52:11:22:03:25"
24
+ macaddress: "64:52:11:22:03:2e"
25
25
  END
26
26
 
27
27
  expect {
@@ -42,7 +42,7 @@ describe Puppet::Application::Facts do
42
42
  name: #{Puppet[:certname]}
43
43
  values:
44
44
  filesystems: apfs,autofs,devfs
45
- macaddress: "64:52:11:22:03:25"
45
+ macaddress: "64:52:11:22:03:2e"
46
46
  END
47
47
 
48
48
  expect {
@@ -52,7 +52,12 @@ describe Puppet::Application::Facts do
52
52
  end
53
53
 
54
54
  context 'when show action is called' do
55
- let(:expected) { "{\n \"filesystems\": \"apfs,autofs,devfs\",\n \"macaddress\": \"64:52:11:22:03:25\"\n}\n" }
55
+ let(:expected) { <<~END }
56
+ {
57
+ "filesystems": "apfs,autofs,devfs",
58
+ "macaddress": "64:52:11:22:03:2e"
59
+ }
60
+ END
56
61
 
57
62
  before :each do
58
63
  Puppet::Node::Facts.indirection.terminus_class = :facter
@@ -64,12 +69,58 @@ describe Puppet::Application::Facts do
64
69
  expect {
65
70
  app.run
66
71
  }.to exit_with(0)
67
- .and output(expected).to_stdout
72
+ .and output(expected).to_stdout
73
+ end
74
+
75
+ it 'displays a single fact value' do
76
+ app.command_line.args << 'filesystems' << '--value-only'
77
+ expect {
78
+ app.run
79
+ }.to exit_with(0)
80
+ .and output("apfs,autofs,devfs\n").to_stdout
81
+ end
82
+
83
+ it "warns and ignores value-only when multiple fact names are specified" do
84
+ app.command_line.args << 'filesystems' << 'macaddress' << '--value-only'
85
+ expect {
86
+ app.run
87
+ }.to exit_with(0)
88
+ .and output(expected).to_stdout
89
+ .and output(/it can only be used when querying for a single fact/).to_stderr
90
+ end
91
+
92
+ {
93
+ "type_hash" => [{'a' => 2}, "{\n \"a\": 2\n}"],
94
+ "type_array" => [[], "[\n\n]"],
95
+ "type_string" => ["str", "str"],
96
+ "type_int" => [1, "1"],
97
+ "type_float" => [1.0, "1.0"],
98
+ "type_true" => [true, "true"],
99
+ "type_false" => [false, "false"],
100
+ "type_nil" => [nil, ""],
101
+ "type_sym" => [:sym, "sym"]
102
+ }.each_pair do |name, values|
103
+ it "renders '#{name}' as '#{values.last}'" do
104
+ fact_value = values.first
105
+ fact_output = values.last
106
+
107
+ allow(Facter).to receive(:resolve).and_return({name => fact_value})
108
+
109
+ app.command_line.args << name << '--value-only'
110
+ expect {
111
+ app.run
112
+ }.to exit_with(0)
113
+ .and output("#{fact_output}\n").to_stdout
114
+ end
68
115
  end
69
116
  end
70
117
 
71
118
  context 'when default action is called' do
72
- let(:expected) { "---\nfilesystems: apfs,autofs,devfs\nmacaddress: 64:52:11:22:03:25\n" }
119
+ let(:expected) { <<~END }
120
+ ---
121
+ filesystems: apfs,autofs,devfs
122
+ macaddress: 64:52:11:22:03:2e
123
+ END
73
124
 
74
125
  before :each do
75
126
  Puppet::Node::Facts.indirection.terminus_class = :facter
@@ -81,7 +132,7 @@ describe Puppet::Application::Facts do
81
132
  expect {
82
133
  app.run
83
134
  }.to exit_with(0)
84
- .and output(expected).to_stdout
135
+ .and output(expected).to_stdout
85
136
  expect(app.action.name).to eq(:show)
86
137
  end
87
138
  end
@@ -432,4 +432,27 @@ describe Puppet::Application::Ssl, unless: Puppet::Util::Platform.jruby? do
432
432
  expects_command_to_pass
433
433
  end
434
434
  end
435
+
436
+ context 'when showing' do
437
+ before do
438
+ ssl.command_line.args << 'show'
439
+ File.write(Puppet[:hostcert], @host[:cert].to_pem)
440
+ end
441
+
442
+ it 'reports if the key is missing' do
443
+ File.delete(Puppet[:hostprivkey])
444
+
445
+ expects_command_to_fail(/The private key is missing from/)
446
+ end
447
+
448
+ it 'reports if the cert is missing' do
449
+ File.delete(Puppet[:hostcert])
450
+
451
+ expects_command_to_fail(/The client certificate is missing from/)
452
+ end
453
+
454
+ it 'prints certificate information' do
455
+ expects_command_to_pass(@host[:cert].to_text)
456
+ end
457
+ end
435
458
  end
@@ -81,6 +81,12 @@ describe Puppet::Configurer::Downloader do
81
81
  expect(file[:source_permissions]).to eq(:ignore)
82
82
  end
83
83
 
84
+ it "should ignore the max file limit" do
85
+ file = generate_file_resource
86
+
87
+ expect(file[:max_files]).to eq(-1)
88
+ end
89
+
84
90
  describe "on POSIX", :if => Puppet.features.posix? do
85
91
  it "should allow source_permissions to be overridden" do
86
92
  file = generate_file_resource(:source_permissions => :use)
@@ -1075,6 +1075,29 @@ describe Puppet::Configurer do
1075
1075
  }.to raise_error(Puppet::Error, /Could not select a functional puppet server from server_list: 'myserver:123,someotherservername'/)
1076
1076
  end
1077
1077
 
1078
+ it "should warn when servers in 'server_list' are unreachable" do
1079
+ Puppet.settings[:server_list] = "mybadserver1:123,mybadserver2:123,mygoodserver"
1080
+ Puppet[:usecacheonfailure] = false
1081
+
1082
+ stub_request(:get, 'https://mybadserver1:123/status/v1/simple/server').and_raise(Puppet::HTTP::HTTPError)
1083
+ stub_request(:get, 'https://mybadserver2:123/status/v1/simple/server').and_raise(Puppet::HTTP::HTTPError)
1084
+ stub_request(:get, 'https://mygoodserver:8140/status/v1/simple/server').to_return(status: 200)
1085
+
1086
+ expect(Puppet).to receive(:warning).with(/^Unable to connect to server from server_list setting:.*Trying with next server from server_list.$/).twice
1087
+ configurer.run
1088
+ end
1089
+
1090
+ it "should warn when servers in 'server_list' respond with error" do
1091
+ Puppet.settings[:server_list] = "mybadserver:123,someotherservername"
1092
+ Puppet[:usecacheonfailure] = false
1093
+
1094
+ stub_request(:get, 'https://mybadserver:123/status/v1/simple/server').to_return(status: 400)
1095
+ stub_request(:get, 'https://someotherservername:8140/status/v1/simple/server').to_return(status: 200)
1096
+
1097
+ expect(Puppet).to receive(:warning).with(/^Puppet server mybadserver:123 is unavailable: 400 Trying with next server from server_list.$/)
1098
+ configurer.run
1099
+ end
1100
+
1078
1101
  it "should not error when usecacheonfailure is true and no servers in 'server_list' are reachable" do
1079
1102
  Puppet.settings[:server_list] = "myserver:123,someotherservername"
1080
1103
  Puppet[:usecacheonfailure] = true
@@ -1,13 +1,8 @@
1
1
  require 'spec_helper'
2
2
  require 'puppet/environments'
3
3
  require 'puppet/file_system'
4
- require 'matchers/include'
5
- require 'matchers/include_in_order'
6
4
 
7
- module PuppetEnvironments
8
5
  describe Puppet::Environments do
9
- include Matchers::Include
10
-
11
6
  FS = Puppet::FileSystem
12
7
 
13
8
  before(:each) do
@@ -49,7 +44,7 @@ describe Puppet::Environments do
49
44
  loader_from(:filesystem => [directory_tree, global_path_1, global_path_2],
50
45
  :directory => directory_tree.children.first,
51
46
  :modulepath => [global_path_1_location, global_path_2_location]) do |loader|
52
- expect(loader.list).to include_in_any_order(
47
+ expect(loader.list).to contain_exactly(
53
48
  environment(:an_environment).
54
49
  with_manifest("#{FS.path_string(directory_tree)}/envdir/an_environment/manifests").
55
50
  with_modulepath(["#{FS.path_string(directory_tree)}/envdir/an_environment/modules",
@@ -87,7 +82,7 @@ describe Puppet::Environments do
87
82
 
88
83
  loader_from(:filesystem => [envdir],
89
84
  :directory => envdir) do |loader|
90
- expect(loader.list).to include_in_any_order(environment(:env1), environment(:env2))
85
+ expect(loader.list).to contain_exactly(environment(:env1), environment(:env2))
91
86
  end
92
87
  end
93
88
 
@@ -406,33 +401,29 @@ config_version=$vardir/random/scripts
406
401
  ]),
407
402
  ])
408
403
 
409
- FS.overlay(original_envdir) do
410
- dir_loader = Puppet::Environments::Directories.new(original_envdir, [])
411
- loader = Puppet::Environments::Cached.new(dir_loader)
412
- Puppet.override(:environments => loader) do
413
- original_env = loader.get("env3") # force the environment.conf to be read
414
-
415
- changed_envdir = FS::MemoryFile.a_directory(base_dir, [
416
- FS::MemoryFile.a_directory("env3", [
417
- FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
418
- manifest=/manifest_changed
419
- modulepath=/modules_changed
420
- environment_timeout=0
421
- EOF
422
- ]),
423
- ])
404
+ cached_loader_from(:filesystem => [original_envdir], :directory => original_envdir) do |loader|
405
+ original_env = loader.get("env3") # force the environment.conf to be read
424
406
 
425
- FS.overlay(changed_envdir) do
426
- changed_env = loader.get("env3")
407
+ changed_envdir = FS::MemoryFile.a_directory(base_dir, [
408
+ FS::MemoryFile.a_directory("env3", [
409
+ FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
410
+ manifest=/manifest_changed
411
+ modulepath=/modules_changed
412
+ environment_timeout=0
413
+ EOF
414
+ ]),
415
+ ])
427
416
 
428
- expect(original_env).to environment(:env3).
429
- with_manifest(File.expand_path("/manifest_orig")).
430
- with_full_modulepath([File.expand_path("/modules_orig")])
417
+ FS.overlay(changed_envdir) do
418
+ changed_env = loader.get("env3")
431
419
 
432
- expect(changed_env).to environment(:env3).
433
- with_manifest(File.expand_path("/manifest_changed")).
434
- with_full_modulepath([File.expand_path("/modules_changed")])
435
- end
420
+ expect(original_env).to environment(:env3).
421
+ with_manifest(File.expand_path("/manifest_orig")).
422
+ with_full_modulepath([File.expand_path("/modules_orig")])
423
+
424
+ expect(changed_env).to environment(:env3).
425
+ with_manifest(File.expand_path("/manifest_changed")).
426
+ with_full_modulepath([File.expand_path("/modules_changed")])
436
427
  end
437
428
  end
438
429
  end
@@ -558,24 +549,49 @@ config_version=$vardir/random/scripts
558
549
 
559
550
  describe "cached loaders" do
560
551
  it "lists environments" do
561
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
562
- expect(Puppet::Environments::Cached.new(loader).list).to include_in_any_order(
552
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
553
+ expect(loader.list).to contain_exactly(
563
554
  environment(:an_environment),
564
555
  environment(:another_environment),
565
556
  environment(:symlinked_environment))
566
557
  end
567
558
  end
568
559
 
560
+ it "returns the same cached environment object for list and get methods" do
561
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
562
+ env = loader.list.find { |e| e.name == :an_environment }
563
+
564
+ expect(env).to equal(loader.get(:an_environment)) # same object
565
+ end
566
+ end
567
+
568
+ it "returns the same cached environment object for multiple list calls" do
569
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
570
+ expect(loader.list.first).to equal(loader.list.first) # same object
571
+ end
572
+ end
573
+
574
+ it "expires environments and returns a new environment object with the same value" do
575
+ Puppet[:environment_timeout] = "0"
576
+
577
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
578
+ a = loader.list.first
579
+ b = loader.list.first
580
+ expect(a).to eq(b) # same value
581
+ expect(a).to_not equal(b) # not same object
582
+ end
583
+ end
584
+
569
585
  it "has search_paths" do
570
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
571
- expect(Puppet::Environments::Cached.new(loader).search_paths).to eq(["file://#{directory_tree.children.first}"])
586
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
587
+ expect(loader.search_paths).to eq(["file://#{directory_tree.children.first}"])
572
588
  end
573
589
  end
574
590
 
575
591
  context "#get" do
576
592
  it "gets an environment" do
577
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
578
- expect(Puppet::Environments::Cached.new(loader).get(:an_environment)).to environment(:an_environment)
593
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
594
+ expect(loader.get(:an_environment)).to environment(:an_environment)
579
595
  end
580
596
  end
581
597
 
@@ -592,16 +608,16 @@ config_version=$vardir/random/scripts
592
608
  end
593
609
 
594
610
  it "returns nil if env not found" do
595
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
596
- expect(Puppet::Environments::Cached.new(loader).get(:doesnotexist)).to be_nil
611
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
612
+ expect(loader.get(:doesnotexist)).to be_nil
597
613
  end
598
614
  end
599
615
  end
600
616
 
601
617
  context "#get!" do
602
618
  it "gets an environment" do
603
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
604
- expect(Puppet::Environments::Cached.new(loader).get!(:an_environment)).to environment(:an_environment)
619
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
620
+ expect(loader.get!(:an_environment)).to environment(:an_environment)
605
621
  end
606
622
  end
607
623
 
@@ -618,14 +634,41 @@ config_version=$vardir/random/scripts
618
634
  end
619
635
 
620
636
  it "raises error if environment is not found" do
621
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
637
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
622
638
  expect do
623
- Puppet::Environments::Cached.new(loader).get!(:doesnotexist)
639
+ loader.get!(:doesnotexist)
624
640
  end.to raise_error(Puppet::Environments::EnvironmentNotFound)
625
641
  end
626
642
  end
627
643
  end
628
644
 
645
+ context "#get_conf" do
646
+ it "loads environment.conf" do
647
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
648
+ expect(loader.get_conf(:an_environment)).to match_environment_conf(:an_environment).
649
+ with_env_path(directory_tree.children.first).
650
+ with_global_module_path([])
651
+ end
652
+ end
653
+
654
+ it "always reloads environment.conf" do
655
+ env = Puppet::Node::Environment.create(:cached, [])
656
+ mocked_loader = double('loader')
657
+ expect(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20)).twice
658
+
659
+ cached = Puppet::Environments::Cached.new(mocked_loader)
660
+
661
+ cached.get_conf(:cached)
662
+ cached.get_conf(:cached)
663
+ end
664
+
665
+ it "returns nil if environment is not found" do
666
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
667
+ expect(loader.get_conf(:doesnotexist)).to be_nil
668
+ end
669
+ end
670
+ end
671
+
629
672
  context "expiration policies" do
630
673
  let(:service) { ReplayExpirationService.new }
631
674
 
@@ -647,8 +690,6 @@ config_version=$vardir/random/scripts
647
690
  end
648
691
 
649
692
  it "evicts an expired environment" do
650
- service = ReplayExpirationService.new
651
-
652
693
  expect(service).to receive(:expired?).and_return(true)
653
694
 
654
695
  with_environment_loaded(service) do |cached|
@@ -700,13 +741,15 @@ config_version=$vardir/random/scripts
700
741
  expect(service.created_envs).to eq([:an_environment, :an_environment])
701
742
  expect(service.evicted_envs).to eq([:an_environment])
702
743
  end
703
- end
704
744
 
705
- it "gets an environment.conf" do
706
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
707
- expect(Puppet::Environments::Cached.new(loader).get_conf(:an_environment)).to match_environment_conf(:an_environment).
708
- with_env_path(directory_tree.children.first).
709
- with_global_module_path([])
745
+ it "evicts expired environments when listing" do
746
+ expect(service).to receive(:expired?).with(:an_environment).and_return(true)
747
+
748
+ with_environment_loaded(service) do |cached|
749
+ cached.list
750
+ end
751
+
752
+ expect(service.evicted_envs).to eq([:an_environment])
710
753
  end
711
754
  end
712
755
 
@@ -724,6 +767,30 @@ config_version=$vardir/random/scripts
724
767
 
725
768
  context '#clear_all' do
726
769
  let(:service) { ReplayExpirationService.new }
770
+ let(:envdir) { File.expand_path("envdir") }
771
+ let(:default_dir) { File.join(envdir, "cached_env", "modules") }
772
+ let(:expected_dir) { File.join(envdir, "cached_env", "site") }
773
+
774
+ let(:base_dir) do
775
+ FS::MemoryFile.a_directory(envdir, [
776
+ FS::MemoryFile.a_directory("cached_env", [
777
+ FS::MemoryFile.a_missing_file("environment.conf")
778
+ ])
779
+ ])
780
+ end
781
+
782
+ let(:updated_dir) do
783
+ FS::MemoryFile.a_directory(envdir, [
784
+ FS::MemoryFile.a_directory("cached_env", [
785
+ FS::MemoryFile.a_directory("site"),
786
+ FS::MemoryFile.a_missing_directory("modules"),
787
+ FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
788
+ modulepath=site
789
+ environment_timeout=unlimited
790
+ EOF
791
+ ])
792
+ ])
793
+ end
727
794
 
728
795
  it 'evicts all environments' do
729
796
  with_environment_loaded(service) do |cached|
@@ -735,48 +802,44 @@ config_version=$vardir/random/scripts
735
802
  end
736
803
  end
737
804
 
738
- it 'clears cached environment settings' do
739
- base_dir = File.expand_path("envdir")
740
- original_envdir = FS::MemoryFile.a_directory(base_dir, [
741
- FS::MemoryFile.a_directory("env3", [
742
- FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
743
- manifest=/manifest_orig
744
- modulepath=/modules_orig
745
- environment_timeout=60
746
- EOF
747
- ]),
748
- ])
805
+ it "recomputes modulepath if 'get' is called before 'clear_all'" do
806
+ cached_loader_from(:filesystem => [base_dir], :directory => base_dir) do |loader|
807
+ loader.get(:cached_env)
749
808
 
750
- FS.overlay(original_envdir) do
751
- dir_loader = Puppet::Environments::Directories.new(original_envdir, [])
752
- loader = Puppet::Environments::Cached.new(dir_loader)
753
- Puppet.override(:environments => loader) do
754
- original_env = loader.get("env3") # force the environment.conf to be read
755
-
756
- changed_envdir = FS::MemoryFile.a_directory(base_dir, [
757
- FS::MemoryFile.a_directory("env3", [
758
- FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
759
- manifest=/manifest_changed
760
- modulepath=/modules_changed
761
- environment_timeout=60
762
- EOF
763
- ]),
764
- ])
809
+ expect(Puppet.settings.value(:modulepath, :cached_env)).to eq(default_dir)
765
810
 
766
- #Clear all cached environments
811
+ FS.overlay(updated_dir) do
767
812
  loader.clear_all
768
813
 
769
- FS.overlay(changed_envdir) do
770
- changed_env = loader.get("env3")
814
+ expect(loader.get(:cached_env).modulepath).to contain_exactly(expected_dir)
815
+ end
816
+ end
817
+ end
818
+
819
+ it "recomputes modulepath if 'list' is called before 'clear_all'" do
820
+ cached_loader_from(:filesystem => [base_dir], :directory => base_dir) do |loader|
821
+ loader.list
771
822
 
772
- expect(original_env).to environment(:env3).
773
- with_manifest(File.expand_path("/manifest_orig")).
774
- with_full_modulepath([File.expand_path("/modules_orig")])
823
+ expect(Puppet.settings.value(:modulepath, :cached_env)).to eq(default_dir)
775
824
 
776
- expect(changed_env).to environment(:env3).
777
- with_manifest(File.expand_path("/manifest_changed")).
778
- with_full_modulepath([File.expand_path("/modules_changed")])
779
- end
825
+ FS.overlay(updated_dir) do
826
+ loader.clear_all
827
+
828
+ expect(loader.get(:cached_env).modulepath).to contain_exactly(expected_dir)
829
+ end
830
+ end
831
+ end
832
+
833
+ it "recomputes modulepath if 'get_conf' is called before 'clear_all'" do
834
+ cached_loader_from(:filesystem => [base_dir], :directory => base_dir) do |loader|
835
+ loader.get_conf(:cached_env)
836
+
837
+ expect(Puppet.settings.value(:modulepath, :cached_env)).to eq(default_dir)
838
+
839
+ FS.overlay(updated_dir) do
840
+ loader.clear_all
841
+
842
+ expect(loader.get(:cached_env).modulepath).to contain_exactly(expected_dir)
780
843
  end
781
844
  end
782
845
  end
@@ -862,6 +925,20 @@ config_version=$vardir/random/scripts
862
925
  end
863
926
  end
864
927
 
928
+ def cached_loader_from(options, &block)
929
+ FS.overlay(*options[:filesystem]) do
930
+ environments = Puppet::Environments::Cached.new(
931
+ Puppet::Environments::Directories.new(
932
+ options[:directory],
933
+ options[:modulepath] || []
934
+ )
935
+ )
936
+ Puppet.override(:environments => environments) do
937
+ yield environments
938
+ end
939
+ end
940
+ end
941
+
865
942
  def loader_from(options, &block)
866
943
  FS.overlay(*options[:filesystem]) do
867
944
  environments = Puppet::Environments::Directories.new(
@@ -914,4 +991,3 @@ config_version=$vardir/random/scripts
914
991
  end
915
992
  end
916
993
  end
917
- end