puppet 7.6.1 → 7.7.0

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

Potentially problematic release.


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

Files changed (625) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +9 -9
  3. data/install.rb +11 -11
  4. data/lib/hiera_puppet.rb +1 -1
  5. data/lib/puppet.rb +37 -37
  6. data/lib/puppet/agent.rb +6 -6
  7. data/lib/puppet/agent/disabler.rb +1 -1
  8. data/lib/puppet/agent/locker.rb +2 -2
  9. data/lib/puppet/application.rb +6 -6
  10. data/lib/puppet/application/agent.rb +18 -11
  11. data/lib/puppet/application/apply.rb +6 -5
  12. data/lib/puppet/application/catalog.rb +1 -1
  13. data/lib/puppet/application/config.rb +1 -1
  14. data/lib/puppet/application/describe.rb +1 -1
  15. data/lib/puppet/application/device.rb +8 -7
  16. data/lib/puppet/application/doc.rb +7 -7
  17. data/lib/puppet/application/epp.rb +2 -2
  18. data/lib/puppet/application/face_base.rb +2 -2
  19. data/lib/puppet/application/facts.rb +1 -1
  20. data/lib/puppet/application/filebucket.rb +2 -2
  21. data/lib/puppet/application/generate.rb +1 -1
  22. data/lib/puppet/application/help.rb +1 -1
  23. data/lib/puppet/application/indirection_base.rb +1 -1
  24. data/lib/puppet/application/lookup.rb +6 -6
  25. data/lib/puppet/application/module.rb +1 -1
  26. data/lib/puppet/application/node.rb +1 -1
  27. data/lib/puppet/application/parser.rb +2 -2
  28. data/lib/puppet/application/plugin.rb +1 -1
  29. data/lib/puppet/application/report.rb +1 -1
  30. data/lib/puppet/application/resource.rb +3 -2
  31. data/lib/puppet/application/script.rb +6 -5
  32. data/lib/puppet/application/ssl.rb +2 -2
  33. data/lib/puppet/application_support.rb +4 -4
  34. data/lib/puppet/compilable_resource_type.rb +1 -1
  35. data/lib/puppet/concurrent/lock.rb +1 -1
  36. data/lib/puppet/configurer.rb +4 -4
  37. data/lib/puppet/configurer/downloader.rb +4 -3
  38. data/lib/puppet/configurer/fact_handler.rb +3 -3
  39. data/lib/puppet/configurer/plugin_handler.rb +1 -1
  40. data/lib/puppet/confine.rb +1 -1
  41. data/lib/puppet/confine/boolean.rb +1 -1
  42. data/lib/puppet/confine/exists.rb +1 -1
  43. data/lib/puppet/confine/false.rb +1 -1
  44. data/lib/puppet/confine/feature.rb +1 -1
  45. data/lib/puppet/confine/true.rb +1 -1
  46. data/lib/puppet/confine/variable.rb +1 -1
  47. data/lib/puppet/confine_collection.rb +1 -1
  48. data/lib/puppet/confiner.rb +1 -1
  49. data/lib/puppet/context.rb +2 -2
  50. data/lib/puppet/context/trusted_information.rb +1 -1
  51. data/lib/puppet/daemon.rb +2 -2
  52. data/lib/puppet/data_binding.rb +1 -1
  53. data/lib/puppet/datatypes/error.rb +1 -1
  54. data/lib/puppet/defaults.rb +6 -6
  55. data/lib/puppet/environments.rb +1 -1
  56. data/lib/puppet/etc.rb +1 -1
  57. data/lib/puppet/external/pson/common.rb +1 -1
  58. data/lib/puppet/external/pson/pure.rb +3 -3
  59. data/lib/puppet/face.rb +1 -1
  60. data/lib/puppet/face/catalog.rb +1 -1
  61. data/lib/puppet/face/config.rb +2 -2
  62. data/lib/puppet/face/epp.rb +6 -6
  63. data/lib/puppet/face/facts.rb +2 -2
  64. data/lib/puppet/face/generate.rb +2 -2
  65. data/lib/puppet/face/help.rb +3 -3
  66. data/lib/puppet/face/module.rb +3 -3
  67. data/lib/puppet/face/module/install.rb +2 -2
  68. data/lib/puppet/face/node.rb +1 -1
  69. data/lib/puppet/face/parser.rb +4 -4
  70. data/lib/puppet/face/plugin.rb +2 -2
  71. data/lib/puppet/face/report.rb +1 -1
  72. data/lib/puppet/face/resource.rb +1 -1
  73. data/lib/puppet/feature/base.rb +2 -2
  74. data/lib/puppet/feature/bolt.rb +1 -1
  75. data/lib/puppet/feature/cfpropertylist.rb +1 -1
  76. data/lib/puppet/feature/eventlog.rb +1 -1
  77. data/lib/puppet/feature/hiera_eyaml.rb +1 -1
  78. data/lib/puppet/feature/hocon.rb +1 -1
  79. data/lib/puppet/feature/libuser.rb +2 -2
  80. data/lib/puppet/feature/msgpack.rb +1 -1
  81. data/lib/puppet/feature/pe_license.rb +1 -1
  82. data/lib/puppet/feature/selinux.rb +1 -1
  83. data/lib/puppet/feature/ssh.rb +1 -1
  84. data/lib/puppet/feature/telnet.rb +1 -1
  85. data/lib/puppet/feature/zlib.rb +1 -1
  86. data/lib/puppet/ffi/posix.rb +2 -2
  87. data/lib/puppet/ffi/posix/constants.rb +1 -1
  88. data/lib/puppet/ffi/posix/functions.rb +1 -1
  89. data/lib/puppet/ffi/windows.rb +4 -4
  90. data/lib/puppet/ffi/windows/api_types.rb +2 -2
  91. data/lib/puppet/ffi/windows/constants.rb +1 -1
  92. data/lib/puppet/ffi/windows/functions.rb +1 -1
  93. data/lib/puppet/ffi/windows/structs.rb +1 -1
  94. data/lib/puppet/file_bucket/dipper.rb +4 -4
  95. data/lib/puppet/file_bucket/file.rb +3 -3
  96. data/lib/puppet/file_serving/base.rb +2 -2
  97. data/lib/puppet/file_serving/configuration.rb +10 -10
  98. data/lib/puppet/file_serving/configuration/parser.rb +2 -2
  99. data/lib/puppet/file_serving/content.rb +3 -3
  100. data/lib/puppet/file_serving/fileset.rb +16 -4
  101. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  102. data/lib/puppet/file_serving/metadata.rb +6 -6
  103. data/lib/puppet/file_serving/mount.rb +4 -4
  104. data/lib/puppet/file_serving/mount/file.rb +1 -1
  105. data/lib/puppet/file_serving/mount/locales.rb +1 -1
  106. data/lib/puppet/file_serving/mount/modules.rb +1 -1
  107. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -1
  108. data/lib/puppet/file_serving/mount/plugins.rb +1 -1
  109. data/lib/puppet/file_serving/mount/tasks.rb +1 -1
  110. data/lib/puppet/file_serving/terminus_helper.rb +2 -2
  111. data/lib/puppet/file_serving/terminus_selector.rb +1 -1
  112. data/lib/puppet/file_system.rb +9 -9
  113. data/lib/puppet/file_system/jruby.rb +1 -1
  114. data/lib/puppet/file_system/path_pattern.rb +1 -1
  115. data/lib/puppet/file_system/uniquefile.rb +1 -1
  116. data/lib/puppet/file_system/windows.rb +2 -2
  117. data/lib/puppet/forge.rb +5 -5
  118. data/lib/puppet/forge/cache.rb +1 -1
  119. data/lib/puppet/forge/errors.rb +3 -3
  120. data/lib/puppet/forge/repository.rb +4 -4
  121. data/lib/puppet/functions/all.rb +1 -1
  122. data/lib/puppet/functions/camelcase.rb +1 -1
  123. data/lib/puppet/functions/capitalize.rb +2 -2
  124. data/lib/puppet/functions/downcase.rb +2 -2
  125. data/lib/puppet/functions/get.rb +5 -5
  126. data/lib/puppet/functions/group_by.rb +13 -5
  127. data/lib/puppet/functions/lest.rb +1 -1
  128. data/lib/puppet/functions/new.rb +100 -100
  129. data/lib/puppet/functions/partition.rb +4 -4
  130. data/lib/puppet/functions/require.rb +5 -5
  131. data/lib/puppet/functions/sort.rb +3 -3
  132. data/lib/puppet/functions/tree_each.rb +7 -9
  133. data/lib/puppet/functions/type.rb +4 -4
  134. data/lib/puppet/functions/upcase.rb +2 -2
  135. data/lib/puppet/functions/versioncmp.rb +1 -1
  136. data/lib/puppet/generate/models/type/type.rb +1 -1
  137. data/lib/puppet/generate/type.rb +2 -2
  138. data/lib/puppet/gettext/config.rb +3 -3
  139. data/lib/puppet/gettext/module_translations.rb +1 -1
  140. data/lib/puppet/graph.rb +6 -6
  141. data/lib/puppet/graph/simple_graph.rb +2 -2
  142. data/lib/puppet/http.rb +26 -26
  143. data/lib/puppet/http/factory.rb +2 -2
  144. data/lib/puppet/http/proxy.rb +1 -1
  145. data/lib/puppet/http/resolver/server_list.rb +15 -4
  146. data/lib/puppet/http/service/compiler.rb +73 -1
  147. data/lib/puppet/http/service/file_server.rb +3 -2
  148. data/lib/puppet/indirector.rb +5 -5
  149. data/lib/puppet/indirector/catalog/compiler.rb +7 -6
  150. data/lib/puppet/indirector/catalog/json.rb +2 -2
  151. data/lib/puppet/indirector/catalog/msgpack.rb +2 -2
  152. data/lib/puppet/indirector/catalog/rest.rb +2 -2
  153. data/lib/puppet/indirector/catalog/store_configs.rb +2 -2
  154. data/lib/puppet/indirector/catalog/yaml.rb +2 -2
  155. data/lib/puppet/indirector/code.rb +1 -1
  156. data/lib/puppet/indirector/data_binding/hiera.rb +1 -1
  157. data/lib/puppet/indirector/data_binding/none.rb +1 -1
  158. data/lib/puppet/indirector/direct_file_server.rb +2 -2
  159. data/lib/puppet/indirector/envelope.rb +1 -1
  160. data/lib/puppet/indirector/errors.rb +1 -1
  161. data/lib/puppet/indirector/exec.rb +2 -2
  162. data/lib/puppet/indirector/face.rb +1 -1
  163. data/lib/puppet/indirector/facts/facter.rb +2 -2
  164. data/lib/puppet/indirector/facts/json.rb +3 -3
  165. data/lib/puppet/indirector/facts/memory.rb +2 -2
  166. data/lib/puppet/indirector/facts/network_device.rb +2 -2
  167. data/lib/puppet/indirector/facts/rest.rb +2 -2
  168. data/lib/puppet/indirector/facts/store_configs.rb +2 -2
  169. data/lib/puppet/indirector/facts/yaml.rb +3 -3
  170. data/lib/puppet/indirector/file_bucket_file/file.rb +4 -4
  171. data/lib/puppet/indirector/file_bucket_file/rest.rb +2 -2
  172. data/lib/puppet/indirector/file_bucket_file/selector.rb +1 -1
  173. data/lib/puppet/indirector/file_content.rb +1 -1
  174. data/lib/puppet/indirector/file_content/file.rb +3 -3
  175. data/lib/puppet/indirector/file_content/file_server.rb +3 -3
  176. data/lib/puppet/indirector/file_content/rest.rb +3 -3
  177. data/lib/puppet/indirector/file_content/selector.rb +4 -4
  178. data/lib/puppet/indirector/file_metadata.rb +1 -1
  179. data/lib/puppet/indirector/file_metadata/file.rb +3 -3
  180. data/lib/puppet/indirector/file_metadata/file_server.rb +3 -3
  181. data/lib/puppet/indirector/file_metadata/http.rb +3 -3
  182. data/lib/puppet/indirector/file_metadata/rest.rb +4 -3
  183. data/lib/puppet/indirector/file_metadata/selector.rb +4 -4
  184. data/lib/puppet/indirector/file_server.rb +4 -4
  185. data/lib/puppet/indirector/generic_http.rb +1 -1
  186. data/lib/puppet/indirector/hiera.rb +1 -1
  187. data/lib/puppet/indirector/indirection.rb +5 -5
  188. data/lib/puppet/indirector/json.rb +2 -2
  189. data/lib/puppet/indirector/memory.rb +1 -1
  190. data/lib/puppet/indirector/msgpack.rb +2 -2
  191. data/lib/puppet/indirector/node/exec.rb +2 -2
  192. data/lib/puppet/indirector/node/json.rb +2 -2
  193. data/lib/puppet/indirector/node/memory.rb +2 -2
  194. data/lib/puppet/indirector/node/msgpack.rb +2 -2
  195. data/lib/puppet/indirector/node/plain.rb +2 -2
  196. data/lib/puppet/indirector/node/rest.rb +2 -2
  197. data/lib/puppet/indirector/node/store_configs.rb +2 -2
  198. data/lib/puppet/indirector/node/yaml.rb +2 -2
  199. data/lib/puppet/indirector/none.rb +1 -1
  200. data/lib/puppet/indirector/plain.rb +1 -1
  201. data/lib/puppet/indirector/report/json.rb +2 -2
  202. data/lib/puppet/indirector/report/msgpack.rb +2 -2
  203. data/lib/puppet/indirector/report/processor.rb +3 -3
  204. data/lib/puppet/indirector/report/rest.rb +1 -1
  205. data/lib/puppet/indirector/report/yaml.rb +2 -2
  206. data/lib/puppet/indirector/request.rb +3 -3
  207. data/lib/puppet/indirector/resource/ral.rb +1 -1
  208. data/lib/puppet/indirector/resource/store_configs.rb +2 -2
  209. data/lib/puppet/indirector/terminus.rb +5 -5
  210. data/lib/puppet/indirector/yaml.rb +2 -2
  211. data/lib/puppet/info_service.rb +3 -3
  212. data/lib/puppet/info_service/class_information_service.rb +3 -3
  213. data/lib/puppet/info_service/plan_information_service.rb +1 -1
  214. data/lib/puppet/info_service/task_information_service.rb +1 -1
  215. data/lib/puppet/interface.rb +10 -10
  216. data/lib/puppet/interface/documentation.rb +1 -1
  217. data/lib/puppet/loaders.rb +21 -21
  218. data/lib/puppet/metatype/manager.rb +3 -3
  219. data/lib/puppet/module.rb +4 -4
  220. data/lib/puppet/module/plan.rb +1 -1
  221. data/lib/puppet/module/task.rb +1 -1
  222. data/lib/puppet/module_tool.rb +10 -10
  223. data/lib/puppet/module_tool/applications.rb +7 -7
  224. data/lib/puppet/module_tool/applications/application.rb +2 -2
  225. data/lib/puppet/module_tool/applications/checksummer.rb +2 -2
  226. data/lib/puppet/module_tool/applications/installer.rb +7 -7
  227. data/lib/puppet/module_tool/applications/unpacker.rb +2 -2
  228. data/lib/puppet/module_tool/applications/upgrader.rb +5 -5
  229. data/lib/puppet/module_tool/checksums.rb +1 -1
  230. data/lib/puppet/module_tool/contents_description.rb +1 -1
  231. data/lib/puppet/module_tool/dependency.rb +2 -2
  232. data/lib/puppet/module_tool/errors.rb +6 -6
  233. data/lib/puppet/module_tool/install_directory.rb +2 -2
  234. data/lib/puppet/module_tool/installed_modules.rb +2 -2
  235. data/lib/puppet/module_tool/local_tarball.rb +2 -2
  236. data/lib/puppet/module_tool/metadata.rb +3 -3
  237. data/lib/puppet/module_tool/tar.rb +4 -4
  238. data/lib/puppet/network/format.rb +1 -1
  239. data/lib/puppet/network/format_handler.rb +3 -3
  240. data/lib/puppet/network/format_support.rb +1 -1
  241. data/lib/puppet/network/formats.rb +2 -2
  242. data/lib/puppet/network/http.rb +12 -12
  243. data/lib/puppet/network/http/api.rb +1 -1
  244. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  245. data/lib/puppet/network/http/api/master.rb +1 -1
  246. data/lib/puppet/network/http/api/master/v3.rb +2 -2
  247. data/lib/puppet/network/http/api/master/v3/environments.rb +2 -2
  248. data/lib/puppet/network/http/api/server/v3.rb +2 -2
  249. data/lib/puppet/network/http/api/server/v3/environments.rb +1 -1
  250. data/lib/puppet/network/http/connection.rb +1 -1
  251. data/lib/puppet/network/http/error.rb +1 -1
  252. data/lib/puppet/network/http/handler.rb +3 -3
  253. data/lib/puppet/network/http_pool.rb +1 -1
  254. data/lib/puppet/node.rb +3 -3
  255. data/lib/puppet/node/environment.rb +3 -3
  256. data/lib/puppet/node/facts.rb +3 -3
  257. data/lib/puppet/pal/pal_api.rb +10 -10
  258. data/lib/puppet/pal/pal_impl.rb +3 -3
  259. data/lib/puppet/parameter.rb +4 -4
  260. data/lib/puppet/parameter/boolean.rb +1 -1
  261. data/lib/puppet/parameter/package_options.rb +1 -1
  262. data/lib/puppet/parameter/path.rb +1 -1
  263. data/lib/puppet/parameter/value.rb +1 -1
  264. data/lib/puppet/parameter/value_collection.rb +1 -1
  265. data/lib/puppet/parser.rb +10 -10
  266. data/lib/puppet/parser/ast.rb +8 -8
  267. data/lib/puppet/parser/ast/hostclass.rb +1 -1
  268. data/lib/puppet/parser/ast/pops_bridge.rb +2 -2
  269. data/lib/puppet/parser/catalog_compiler.rb +2 -2
  270. data/lib/puppet/parser/compiler.rb +5 -5
  271. data/lib/puppet/parser/e4_parser_adapter.rb +1 -1
  272. data/lib/puppet/parser/functions.rb +4 -4
  273. data/lib/puppet/parser/functions/digest.rb +1 -1
  274. data/lib/puppet/parser/functions/file.rb +1 -1
  275. data/lib/puppet/parser/functions/fqdn_rand.rb +14 -6
  276. data/lib/puppet/parser/functions/versioncmp.rb +1 -1
  277. data/lib/puppet/parser/parser_factory.rb +2 -2
  278. data/lib/puppet/parser/resource.rb +3 -3
  279. data/lib/puppet/parser/scope.rb +3 -3
  280. data/lib/puppet/parser/script_compiler.rb +2 -2
  281. data/lib/puppet/parser/templatewrapper.rb +2 -2
  282. data/lib/puppet/parser/type_loader.rb +1 -1
  283. data/lib/puppet/plugins/configuration.rb +5 -5
  284. data/lib/puppet/pops.rb +57 -57
  285. data/lib/puppet/pops/evaluator/deferred_resolver.rb +1 -1
  286. data/lib/puppet/pops/evaluator/evaluator_impl.rb +7 -7
  287. data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
  288. data/lib/puppet/pops/loader/task_instantiator.rb +1 -1
  289. data/lib/puppet/pops/lookup/invocation.rb +1 -1
  290. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  291. data/lib/puppet/pops/model/pn_transformer.rb +1 -1
  292. data/lib/puppet/pops/parser/eparser.rb +2 -2
  293. data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
  294. data/lib/puppet/pops/parser/lexer2.rb +5 -5
  295. data/lib/puppet/pops/parser/lexer_support.rb +1 -1
  296. data/lib/puppet/pops/parser/parser_support.rb +4 -4
  297. data/lib/puppet/pops/puppet_stack.rb +1 -1
  298. data/lib/puppet/pops/serialization/json.rb +1 -1
  299. data/lib/puppet/pops/serialization/json_path.rb +1 -1
  300. data/lib/puppet/pops/time/timespan.rb +1 -1
  301. data/lib/puppet/pops/types/string_converter.rb +1 -1
  302. data/lib/puppet/pops/types/type_calculator.rb +1 -1
  303. data/lib/puppet/pops/types/type_formatter.rb +1 -1
  304. data/lib/puppet/pops/types/type_parser.rb +1 -1
  305. data/lib/puppet/pops/types/types.rb +1 -1
  306. data/lib/puppet/pops/validation/checker4_0.rb +1 -1
  307. data/lib/puppet/property.rb +3 -3
  308. data/lib/puppet/property/boolean.rb +1 -1
  309. data/lib/puppet/property/ensure.rb +1 -1
  310. data/lib/puppet/property/keyvalue.rb +1 -1
  311. data/lib/puppet/property/list.rb +1 -1
  312. data/lib/puppet/property/ordered_list.rb +1 -1
  313. data/lib/puppet/provider.rb +2 -2
  314. data/lib/puppet/provider/confine.rb +2 -2
  315. data/lib/puppet/provider/exec.rb +2 -2
  316. data/lib/puppet/provider/exec/posix.rb +1 -1
  317. data/lib/puppet/provider/exec/windows.rb +1 -1
  318. data/lib/puppet/provider/file/posix.rb +1 -1
  319. data/lib/puppet/provider/file/windows.rb +1 -1
  320. data/lib/puppet/provider/group/aix.rb +1 -1
  321. data/lib/puppet/provider/group/directoryservice.rb +1 -1
  322. data/lib/puppet/provider/group/groupadd.rb +2 -2
  323. data/lib/puppet/provider/group/ldap.rb +1 -1
  324. data/lib/puppet/provider/group/pw.rb +1 -1
  325. data/lib/puppet/provider/group/windows_adsi.rb +1 -1
  326. data/lib/puppet/provider/ldap.rb +2 -2
  327. data/lib/puppet/provider/nameservice.rb +1 -1
  328. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
  329. data/lib/puppet/provider/nameservice/objectadd.rb +1 -1
  330. data/lib/puppet/provider/nameservice/pw.rb +1 -1
  331. data/lib/puppet/provider/package.rb +1 -1
  332. data/lib/puppet/provider/package/aix.rb +2 -2
  333. data/lib/puppet/provider/package/appdmg.rb +2 -2
  334. data/lib/puppet/provider/package/apple.rb +1 -1
  335. data/lib/puppet/provider/package/apt.rb +2 -2
  336. data/lib/puppet/provider/package/dnfmodule.rb +1 -1
  337. data/lib/puppet/provider/package/dpkg.rb +1 -1
  338. data/lib/puppet/provider/package/gem.rb +3 -3
  339. data/lib/puppet/provider/package/hpux.rb +1 -1
  340. data/lib/puppet/provider/package/macports.rb +2 -2
  341. data/lib/puppet/provider/package/nim.rb +2 -2
  342. data/lib/puppet/provider/package/openbsd.rb +1 -1
  343. data/lib/puppet/provider/package/opkg.rb +1 -1
  344. data/lib/puppet/provider/package/pacman.rb +1 -1
  345. data/lib/puppet/provider/package/pip.rb +3 -3
  346. data/lib/puppet/provider/package/pkg.rb +2 -2
  347. data/lib/puppet/provider/package/pkgdmg.rb +3 -3
  348. data/lib/puppet/provider/package/pkgin.rb +1 -1
  349. data/lib/puppet/provider/package/pkgng.rb +1 -1
  350. data/lib/puppet/provider/package/portage.rb +1 -1
  351. data/lib/puppet/provider/package/portupgrade.rb +1 -1
  352. data/lib/puppet/provider/package/puppetserver_gem.rb +0 -0
  353. data/lib/puppet/provider/package/rpm.rb +2 -2
  354. data/lib/puppet/provider/package/sun.rb +1 -1
  355. data/lib/puppet/provider/package/windows.rb +3 -3
  356. data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
  357. data/lib/puppet/provider/package/windows/msi_package.rb +1 -1
  358. data/lib/puppet/provider/package/windows/package.rb +4 -4
  359. data/lib/puppet/provider/package/yum.rb +3 -3
  360. data/lib/puppet/provider/package_targetable.rb +1 -1
  361. data/lib/puppet/provider/parsedfile.rb +3 -3
  362. data/lib/puppet/provider/service/base.rb +6 -4
  363. data/lib/puppet/provider/service/daemontools.rb +0 -1
  364. data/lib/puppet/provider/service/debian.rb +3 -5
  365. data/lib/puppet/provider/service/init.rb +1 -1
  366. data/lib/puppet/provider/service/launchd.rb +9 -3
  367. data/lib/puppet/provider/service/service.rb +28 -3
  368. data/lib/puppet/provider/service/smf.rb +0 -24
  369. data/lib/puppet/provider/service/src.rb +2 -2
  370. data/lib/puppet/provider/service/systemd.rb +11 -6
  371. data/lib/puppet/provider/service/windows.rb +38 -0
  372. data/lib/puppet/provider/user/aix.rb +2 -2
  373. data/lib/puppet/provider/user/directoryservice.rb +2 -2
  374. data/lib/puppet/provider/user/ldap.rb +1 -1
  375. data/lib/puppet/provider/user/openbsd.rb +1 -1
  376. data/lib/puppet/provider/user/pw.rb +1 -1
  377. data/lib/puppet/provider/user/user_role_add.rb +2 -2
  378. data/lib/puppet/provider/user/useradd.rb +3 -3
  379. data/lib/puppet/provider/user/windows_adsi.rb +1 -1
  380. data/lib/puppet/reference/configuration.rb +1 -1
  381. data/lib/puppet/reference/indirection.rb +4 -4
  382. data/lib/puppet/reference/report.rb +1 -1
  383. data/lib/puppet/reports.rb +1 -1
  384. data/lib/puppet/reports/http.rb +2 -2
  385. data/lib/puppet/reports/log.rb +1 -1
  386. data/lib/puppet/reports/store.rb +2 -2
  387. data/lib/puppet/resource.rb +4 -4
  388. data/lib/puppet/resource/catalog.rb +5 -5
  389. data/lib/puppet/resource/status.rb +2 -2
  390. data/lib/puppet/resource/type.rb +4 -4
  391. data/lib/puppet/resource/type_collection.rb +4 -4
  392. data/lib/puppet/runtime.rb +1 -1
  393. data/lib/puppet/scheduler.rb +4 -4
  394. data/lib/puppet/settings.rb +28 -28
  395. data/lib/puppet/settings/autosign_setting.rb +1 -1
  396. data/lib/puppet/settings/base_setting.rb +2 -2
  397. data/lib/puppet/settings/certificate_revocation_setting.rb +1 -1
  398. data/lib/puppet/settings/config_file.rb +1 -1
  399. data/lib/puppet/settings/errors.rb +1 -1
  400. data/lib/puppet/settings/priority_setting.rb +3 -3
  401. data/lib/puppet/ssl.rb +11 -11
  402. data/lib/puppet/ssl/base.rb +3 -3
  403. data/lib/puppet/ssl/certificate.rb +1 -1
  404. data/lib/puppet/ssl/certificate_request.rb +2 -2
  405. data/lib/puppet/ssl/certificate_request_attributes.rb +2 -2
  406. data/lib/puppet/ssl/oids.rb +1 -1
  407. data/lib/puppet/ssl/openssl_loader.rb +1 -1
  408. data/lib/puppet/ssl/ssl_context.rb +1 -1
  409. data/lib/puppet/ssl/ssl_provider.rb +1 -1
  410. data/lib/puppet/ssl/state_machine.rb +2 -2
  411. data/lib/puppet/ssl/verifier.rb +5 -1
  412. data/lib/puppet/syntax_checkers/base64.rb +1 -1
  413. data/lib/puppet/syntax_checkers/epp.rb +1 -1
  414. data/lib/puppet/syntax_checkers/json.rb +1 -1
  415. data/lib/puppet/syntax_checkers/pp.rb +1 -1
  416. data/lib/puppet/transaction.rb +11 -11
  417. data/lib/puppet/transaction/event.rb +4 -4
  418. data/lib/puppet/transaction/event_manager.rb +1 -1
  419. data/lib/puppet/transaction/persistence.rb +1 -1
  420. data/lib/puppet/transaction/report.rb +2 -2
  421. data/lib/puppet/transaction/resource_harness.rb +1 -1
  422. data/lib/puppet/type.rb +14 -14
  423. data/lib/puppet/type/component.rb +3 -3
  424. data/lib/puppet/type/file.rb +37 -19
  425. data/lib/puppet/type/file/checksum.rb +1 -1
  426. data/lib/puppet/type/file/checksum_value.rb +2 -2
  427. data/lib/puppet/type/file/content.rb +2 -2
  428. data/lib/puppet/type/file/data_sync.rb +2 -2
  429. data/lib/puppet/type/file/ensure.rb +1 -1
  430. data/lib/puppet/type/file/group.rb +1 -1
  431. data/lib/puppet/type/file/mode.rb +1 -1
  432. data/lib/puppet/type/file/selcontext.rb +2 -2
  433. data/lib/puppet/type/file/source.rb +4 -4
  434. data/lib/puppet/type/filebucket.rb +1 -1
  435. data/lib/puppet/type/group.rb +2 -2
  436. data/lib/puppet/type/package.rb +2 -2
  437. data/lib/puppet/type/resources.rb +2 -2
  438. data/lib/puppet/type/service.rb +10 -29
  439. data/lib/puppet/type/tidy.rb +24 -5
  440. data/lib/puppet/type/user.rb +4 -4
  441. data/lib/puppet/util.rb +43 -34
  442. data/lib/puppet/util/at_fork.rb +3 -3
  443. data/lib/puppet/util/at_fork/solaris.rb +1 -1
  444. data/lib/puppet/util/autoload.rb +4 -4
  445. data/lib/puppet/util/checksums.rb +3 -3
  446. data/lib/puppet/util/colors.rb +1 -1
  447. data/lib/puppet/util/command_line.rb +6 -6
  448. data/lib/puppet/util/command_line/puppet_option_parser.rb +2 -2
  449. data/lib/puppet/util/execution.rb +2 -2
  450. data/lib/puppet/util/feature.rb +2 -2
  451. data/lib/puppet/util/filetype.rb +1 -1
  452. data/lib/puppet/util/http_proxy.rb +1 -1
  453. data/lib/puppet/util/inifile.rb +2 -2
  454. data/lib/puppet/util/instance_loader.rb +3 -3
  455. data/lib/puppet/util/json_lockfile.rb +1 -1
  456. data/lib/puppet/util/ldap/connection.rb +1 -1
  457. data/lib/puppet/util/ldap/generator.rb +1 -1
  458. data/lib/puppet/util/ldap/manager.rb +3 -3
  459. data/lib/puppet/util/limits.rb +1 -1
  460. data/lib/puppet/util/log.rb +6 -6
  461. data/lib/puppet/util/log/destinations.rb +1 -1
  462. data/lib/puppet/util/logging.rb +2 -2
  463. data/lib/puppet/util/metric.rb +2 -2
  464. data/lib/puppet/util/monkey_patches.rb +7 -3
  465. data/lib/puppet/util/network_device/base.rb +3 -3
  466. data/lib/puppet/util/network_device/config.rb +2 -2
  467. data/lib/puppet/util/network_device/transport.rb +1 -1
  468. data/lib/puppet/util/network_device/transport/base.rb +2 -2
  469. data/lib/puppet/util/package/version/range.rb +6 -6
  470. data/lib/puppet/util/package/version/range/eq.rb +1 -1
  471. data/lib/puppet/util/package/version/range/gt.rb +1 -1
  472. data/lib/puppet/util/package/version/range/gt_eq.rb +1 -1
  473. data/lib/puppet/util/package/version/range/lt.rb +1 -1
  474. data/lib/puppet/util/package/version/range/lt_eq.rb +1 -1
  475. data/lib/puppet/util/package/version/range/min_max.rb +1 -1
  476. data/lib/puppet/util/package/version/range/simple.rb +1 -1
  477. data/lib/puppet/util/package/version/rpm.rb +1 -1
  478. data/lib/puppet/util/pidlock.rb +1 -1
  479. data/lib/puppet/util/plist.rb +1 -1
  480. data/lib/puppet/util/posix.rb +1 -1
  481. data/lib/puppet/util/profiler.rb +3 -3
  482. data/lib/puppet/util/profiler/aggregate.rb +2 -2
  483. data/lib/puppet/util/profiler/object_counts.rb +1 -1
  484. data/lib/puppet/util/profiler/wall_clock.rb +1 -1
  485. data/lib/puppet/util/provider_features.rb +2 -2
  486. data/lib/puppet/util/rdoc.rb +2 -2
  487. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
  488. data/lib/puppet/util/rdoc/parser.rb +6 -6
  489. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +1 -1
  490. data/lib/puppet/util/reference.rb +1 -1
  491. data/lib/puppet/util/resource_template.rb +2 -2
  492. data/lib/puppet/util/rubygems.rb +1 -1
  493. data/lib/puppet/util/selinux.rb +30 -4
  494. data/lib/puppet/util/skip_tags.rb +1 -1
  495. data/lib/puppet/util/storage.rb +1 -1
  496. data/lib/puppet/util/suidmanager.rb +2 -2
  497. data/lib/puppet/util/symbolic_file_mode.rb +1 -1
  498. data/lib/puppet/util/tag_set.rb +1 -1
  499. data/lib/puppet/util/tagging.rb +1 -1
  500. data/lib/puppet/util/watched_file.rb +1 -1
  501. data/lib/puppet/util/watcher.rb +3 -3
  502. data/lib/puppet/util/windows.rb +20 -20
  503. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  504. data/lib/puppet/util/windows/adsi.rb +1 -1
  505. data/lib/puppet/util/windows/daemon.rb +1 -1
  506. data/lib/puppet/util/windows/error.rb +2 -2
  507. data/lib/puppet/util/windows/file.rb +1 -1
  508. data/lib/puppet/util/windows/monkey_patches/process.rb +2 -2
  509. data/lib/puppet/util/windows/principal.rb +1 -1
  510. data/lib/puppet/util/windows/process.rb +2 -2
  511. data/lib/puppet/util/windows/registry.rb +1 -1
  512. data/lib/puppet/util/windows/root_certs.rb +2 -2
  513. data/lib/puppet/util/windows/security.rb +1 -1
  514. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  515. data/lib/puppet/util/windows/service.rb +1 -1
  516. data/lib/puppet/util/windows/sid.rb +1 -1
  517. data/lib/puppet/util/windows/user.rb +1 -1
  518. data/lib/puppet/vendor.rb +1 -1
  519. data/lib/puppet/version.rb +1 -1
  520. data/lib/puppet/x509.rb +4 -4
  521. data/lib/puppet/x509/cert_provider.rb +1 -1
  522. data/lib/puppet/x509/pem_store.rb +1 -1
  523. data/lib/puppet_pal.rb +2 -2
  524. data/locales/puppet.pot +156 -144
  525. data/man/man5/puppet.conf.5 +256 -241
  526. data/man/man8/puppet-agent.8 +1 -1
  527. data/man/man8/puppet-apply.8 +1 -1
  528. data/man/man8/puppet-catalog.8 +1 -1
  529. data/man/man8/puppet-config.8 +1 -1
  530. data/man/man8/puppet-describe.8 +1 -1
  531. data/man/man8/puppet-device.8 +1 -1
  532. data/man/man8/puppet-doc.8 +1 -1
  533. data/man/man8/puppet-epp.8 +1 -1
  534. data/man/man8/puppet-facts.8 +1 -1
  535. data/man/man8/puppet-filebucket.8 +1 -1
  536. data/man/man8/puppet-generate.8 +1 -1
  537. data/man/man8/puppet-help.8 +1 -1
  538. data/man/man8/puppet-lookup.8 +1 -1
  539. data/man/man8/puppet-module.8 +1 -1
  540. data/man/man8/puppet-node.8 +1 -1
  541. data/man/man8/puppet-parser.8 +1 -1
  542. data/man/man8/puppet-plugin.8 +1 -1
  543. data/man/man8/puppet-report.8 +1 -1
  544. data/man/man8/puppet-resource.8 +1 -1
  545. data/man/man8/puppet-script.8 +1 -1
  546. data/man/man8/puppet-ssl.8 +1 -1
  547. data/man/man8/puppet.8 +2 -2
  548. data/spec/fixtures/ssl/127.0.0.1-key.pem +107 -57
  549. data/spec/fixtures/ssl/127.0.0.1.pem +52 -31
  550. data/spec/fixtures/ssl/bad-basic-constraints.pem +57 -35
  551. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +57 -35
  552. data/spec/fixtures/ssl/ca.pem +57 -35
  553. data/spec/fixtures/ssl/crl.pem +28 -18
  554. data/spec/fixtures/ssl/ec-key.pem +11 -11
  555. data/spec/fixtures/ssl/ec.pem +33 -24
  556. data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
  557. data/spec/fixtures/ssl/encrypted-key.pem +108 -58
  558. data/spec/fixtures/ssl/intermediate-agent-crl.pem +28 -19
  559. data/spec/fixtures/ssl/intermediate-agent.pem +57 -36
  560. data/spec/fixtures/ssl/intermediate-crl.pem +31 -21
  561. data/spec/fixtures/ssl/intermediate.pem +57 -36
  562. data/spec/fixtures/ssl/pluto-key.pem +107 -57
  563. data/spec/fixtures/ssl/pluto.pem +52 -30
  564. data/spec/fixtures/ssl/request-key.pem +107 -57
  565. data/spec/fixtures/ssl/request.pem +47 -26
  566. data/spec/fixtures/ssl/revoked-key.pem +107 -57
  567. data/spec/fixtures/ssl/revoked.pem +52 -30
  568. data/spec/fixtures/ssl/signed-key.pem +107 -57
  569. data/spec/fixtures/ssl/signed.pem +52 -30
  570. data/spec/fixtures/ssl/tampered-cert.pem +52 -30
  571. data/spec/fixtures/ssl/tampered-csr.pem +47 -26
  572. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +107 -57
  573. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +50 -29
  574. data/spec/fixtures/ssl/unknown-ca-key.pem +107 -57
  575. data/spec/fixtures/ssl/unknown-ca.pem +55 -33
  576. data/spec/integration/type/file_spec.rb +5 -5
  577. data/spec/lib/puppet/test_ca.rb +2 -2
  578. data/spec/lib/puppet_spec/files.rb +1 -1
  579. data/spec/shared_contexts/provider.rb +16 -0
  580. data/spec/unit/application/agent_spec.rb +7 -2
  581. data/spec/unit/configurer/downloader_spec.rb +6 -0
  582. data/spec/unit/configurer_spec.rb +23 -0
  583. data/spec/unit/file_bucket/dipper_spec.rb +1 -1
  584. data/spec/unit/file_serving/fileset_spec.rb +60 -0
  585. data/spec/unit/gettext/config_spec.rb +12 -0
  586. data/spec/unit/http/service/compiler_spec.rb +123 -0
  587. data/spec/unit/indirector/catalog/compiler_spec.rb +14 -10
  588. data/spec/unit/parser/functions/fqdn_rand_spec.rb +15 -1
  589. data/spec/unit/pops/lookup/context_spec.rb +1 -1
  590. data/spec/unit/provider/package/dnfmodule_spec.rb +3 -3
  591. data/spec/unit/provider/package/gem_spec.rb +3 -1
  592. data/spec/unit/provider/package/pip2_spec.rb +3 -1
  593. data/spec/unit/provider/package/pip3_spec.rb +3 -1
  594. data/spec/unit/provider/package/pip_spec.rb +3 -1
  595. data/spec/unit/provider/package/pkg_spec.rb +44 -44
  596. data/spec/unit/provider/package/puppet_gem_spec.rb +3 -1
  597. data/spec/unit/provider/package/puppetserver_gem_spec.rb +2 -0
  598. data/spec/unit/provider/service/base_spec.rb +8 -8
  599. data/spec/unit/provider/service/bsd_spec.rb +0 -4
  600. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  601. data/spec/unit/provider/service/debian_spec.rb +15 -17
  602. data/spec/unit/provider/service/gentoo_spec.rb +19 -14
  603. data/spec/unit/provider/service/init_spec.rb +29 -20
  604. data/spec/unit/provider/service/launchd_spec.rb +10 -12
  605. data/spec/unit/provider/service/openbsd_spec.rb +21 -35
  606. data/spec/unit/provider/service/openrc_spec.rb +15 -14
  607. data/spec/unit/provider/service/openwrt_spec.rb +3 -1
  608. data/spec/unit/provider/service/redhat_spec.rb +20 -19
  609. data/spec/unit/provider/service/smf_spec.rb +6 -5
  610. data/spec/unit/provider/service/src_spec.rb +5 -10
  611. data/spec/unit/provider/service/systemd_spec.rb +57 -29
  612. data/spec/unit/provider/service/upstart_spec.rb +25 -20
  613. data/spec/unit/provider/service/windows_spec.rb +202 -0
  614. data/spec/unit/resource/catalog_spec.rb +1 -1
  615. data/spec/unit/ssl/state_machine_spec.rb +19 -5
  616. data/spec/unit/transaction/additional_resource_generator_spec.rb +0 -2
  617. data/spec/unit/transaction_spec.rb +18 -20
  618. data/spec/unit/type/file/selinux_spec.rb +3 -3
  619. data/spec/unit/type/service_spec.rb +10 -154
  620. data/spec/unit/type/tidy_spec.rb +17 -7
  621. data/spec/unit/util/at_fork_spec.rb +9 -9
  622. data/spec/unit/util/posix_spec.rb +1 -1
  623. data/spec/unit/util/selinux_spec.rb +87 -16
  624. data/tasks/generate_cert_fixtures.rake +2 -2
  625. metadata +4 -2
@@ -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
@@ -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
@@ -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
@@ -225,7 +225,7 @@ describe Puppet::FileBucket::Dipper, :uses_checksums => true do
225
225
  # Modify mtime of the second file to be an hour ago
226
226
  onehourago = Time.now - onehour
227
227
  bucketed_paths_file = Dir.glob("#{file_bucket}/**/#{checksum}/paths")
228
- FileUtils.touch(bucketed_paths_file, :mtime => onehourago)
228
+ FileUtils.touch(bucketed_paths_file, mtime: onehourago)
229
229
  expected_list2 = /#{checksum} \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} #{real_path}\n/
230
230
 
231
231
  now = Time.now
@@ -46,6 +46,13 @@ describe Puppet::FileServing::Fileset do
46
46
  expect(set.recurselimit).to eq(3)
47
47
  end
48
48
 
49
+ it "accepts a 'max_files' option" do
50
+ expect(Puppet::FileSystem).to receive(:lstat).with(somefile).and_return(double('stat'))
51
+ set = Puppet::FileServing::Fileset.new(somefile, :recurselimit => 3, :max_files => 100)
52
+ expect(set.recurselimit).to eq(3)
53
+ expect(set.max_files).to eq(100)
54
+ end
55
+
49
56
  it "accepts an 'ignore' option" do
50
57
  expect(Puppet::FileSystem).to receive(:lstat).with(somefile).and_return(double('stat'))
51
58
  set = Puppet::FileServing::Fileset.new(somefile, :ignore => ".svn")
@@ -160,6 +167,29 @@ describe Puppet::FileServing::Fileset do
160
167
  end
161
168
  end
162
169
 
170
+ def mock_big_dir_structure(path, stat_method = :lstat)
171
+ allow(Puppet::FileSystem).to receive(stat_method).with(path).and_return(@dirstat)
172
+
173
+ # Keep track of the files we're stubbing.
174
+ @files = %w{.}
175
+
176
+ top_names = (1..10).map {|i| "dir_#{i}" }
177
+ sub_names = (1..100).map {|i| "file__#{i}" }
178
+
179
+ allow(Dir).to receive(:entries).with(path, encoding: Encoding::UTF_8).and_return(top_names)
180
+ top_names.each do |subdir|
181
+ @files << subdir # relative path
182
+ subpath = File.join(path, subdir)
183
+ allow(Puppet::FileSystem).to receive(stat_method).with(subpath).and_return(@dirstat)
184
+ allow(Dir).to receive(:entries).with(subpath, encoding: Encoding::UTF_8).and_return(sub_names)
185
+ sub_names.each do |file|
186
+ @files << File.join(subdir, file) # relative path
187
+ subfile_path = File.join(subpath, file)
188
+ allow(Puppet::FileSystem).to receive(stat_method).with(subfile_path).and_return(@filestat)
189
+ end
190
+ end
191
+ end
192
+
163
193
  def setup_mocks_for_dir(mock_dir, base_path)
164
194
  path = File.join(base_path, mock_dir.name)
165
195
  allow(Puppet::FileSystem).to receive(:lstat).with(path).and_return(MockStat.new(path, true))
@@ -258,6 +288,36 @@ describe Puppet::FileServing::Fileset do
258
288
  expect(@fileset.files.find { |file| file.include?("0") }).to be_nil
259
289
  end
260
290
 
291
+ it "raises exception if number of files is greater than :max_files" do
292
+ mock_dir_structure(@path)
293
+ @fileset.recurse = true
294
+ @fileset.max_files = 22
295
+ expect { @fileset.files }.to raise_error(Puppet::Error, "The directory '#{@path}' contains 28 entries, which exceeds the limit of 22 specified by the max_files parameter for this resource. The limit may be increased, but be aware that large number of file resources can result in excessive resource consumption and degraded performance. Consider using an alternate method to manage large directory trees")
296
+ end
297
+
298
+ it "logs a warning if number of files is greater than soft max_files limit of 1000" do
299
+ mock_big_dir_structure(@path)
300
+ @fileset.recurse = true
301
+ expect(Puppet).to receive(:warning).with("The directory '#{@path}' contains 1010 entries, which exceeds the default soft limit 1000 and may cause excessive resource consumption and degraded performance. To remove this warning set a value for `max_files` parameter or consider using an alternate method to manage large directory trees")
302
+ expect { @fileset.files }.to_not raise_error
303
+ end
304
+
305
+ it "does not emit a warning if max_files is -1" do
306
+ mock_big_dir_structure(@path)
307
+ @fileset.recurse = true
308
+ @fileset.max_files = -1
309
+ expect(Puppet).to receive(:warning).never
310
+ @fileset.files
311
+ end
312
+
313
+ it "does not emit a warning if max_files is `-1`(string)" do
314
+ mock_big_dir_structure(@path)
315
+ @fileset.recurse = true
316
+ @fileset.max_files = '-1'
317
+ expect(Puppet).to receive(:warning).never
318
+ @fileset.files
319
+ end
320
+
261
321
  it "ignores files that match a pattern given as a boolean" do
262
322
  mock_dir_structure(@path)
263
323
  @fileset.recurse = true
@@ -27,6 +27,18 @@ describe Puppet::GettextConfig do
27
27
  Puppet::GettextConfig.delete_all_text_domains
28
28
  end
29
29
 
30
+ # These tests assume gettext is enabled, but it will be disabled when the
31
+ # first time the `Puppet[:disable_i18n]` setting is resolved
32
+ around(:each) do |example|
33
+ disabled = Puppet::GettextConfig.instance_variable_get(:@gettext_disabled)
34
+ Puppet::GettextConfig.instance_variable_set(:@gettext_disabled, false)
35
+ begin
36
+ example.run
37
+ ensure
38
+ Puppet::GettextConfig.instance_variable_set(:@gettext_disabled, disabled)
39
+ end
40
+ end
41
+
30
42
  describe 'setting and getting the locale' do
31
43
  it 'should return "en" when gettext is unavailable' do
32
44
  allow(Puppet::GettextConfig).to receive(:gettext_loaded?).and_return(false)
@@ -1,3 +1,4 @@
1
+
1
2
  # coding: utf-8
2
3
  require 'spec_helper'
3
4
  require 'puppet/http'
@@ -257,6 +258,128 @@ describe Puppet::HTTP::Service::Compiler do
257
258
  end
258
259
  end
259
260
 
261
+ context 'when posting for a v4 catalog' do
262
+ let(:uri) {"https://compiler.example.com:8140/puppet/v4/catalog"}
263
+ let(:persistence) {{ facts: true, catalog: true }}
264
+ let(:facts) {{ 'foo' => 'bar' }}
265
+ let(:trusted_facts) {{}}
266
+ let(:uuid) { "ec3d2844-b236-4287-b0ad-632fbb4d1ff0" }
267
+ let(:job_id) { "1" }
268
+ let(:payload) {{
269
+ environment: environment,
270
+ persistence: persistence,
271
+ facts: facts,
272
+ trusted_facts: trusted_facts,
273
+ transaction_uuid: uuid,
274
+ job_id: job_id,
275
+ options: {
276
+ prefer_requested_environment: false,
277
+ capture_logs: false
278
+ }
279
+ }}
280
+ let(:serialized_catalog) {{ 'catalog' => catalog.to_data_hash }.to_json}
281
+ let(:catalog_response) {{ body: serialized_catalog, headers: {'Content-Type' => formatter.mime }}}
282
+
283
+ it 'includes default HTTP headers' do
284
+ stub_request(:post, uri).with do |request|
285
+ expect(request.headers).to include({'X-Puppet-Version' => /./, 'User-Agent' => /./})
286
+ expect(request.headers).to_not include('X-Puppet-Profiling')
287
+ end.to_return(**catalog_response)
288
+
289
+ subject.post_catalog4(certname, **payload)
290
+ end
291
+
292
+ it 'defaults the server and port based on settings' do
293
+ Puppet[:server] = 'compiler2.example.com'
294
+ Puppet[:serverport] = 8141
295
+
296
+ stub_request(:post, "https://compiler2.example.com:8141/puppet/v4/catalog")
297
+ .to_return(**catalog_response)
298
+
299
+ subject.post_catalog4(certname, **payload)
300
+ end
301
+
302
+ it 'includes puppet headers set via the :http_extra_headers and :profile settings' do
303
+ stub_request(:post, uri).with(headers: {'Example-Header' => 'real-thing', 'another' => 'thing', 'X-Puppet-Profiling' => 'true'}).
304
+ to_return(**catalog_response)
305
+
306
+ Puppet[:http_extra_headers] = 'Example-Header:real-thing,another:thing'
307
+ Puppet[:profile] = true
308
+
309
+ subject.post_catalog4(certname, **payload)
310
+ end
311
+
312
+ it 'returns a deserialized catalog' do
313
+ stub_request(:post, uri)
314
+ .to_return(**catalog_response)
315
+
316
+ _, cat, _ = subject.post_catalog4(certname, **payload)
317
+ expect(cat).to be_a(Puppet::Resource::Catalog)
318
+ expect(cat.name).to eq(certname)
319
+ end
320
+
321
+ it 'returns the request response' do
322
+ stub_request(:post, uri)
323
+ .to_return(**catalog_response)
324
+
325
+ resp, _, _ = subject.post_catalog4(certname, **payload)
326
+ expect(resp).to be_a(Puppet::HTTP::Response)
327
+ end
328
+
329
+ it 'raises a response error if unsuccessful' do
330
+ stub_request(:post, uri)
331
+ .to_return(status: [500, "Server Error"])
332
+
333
+ expect {
334
+ subject.post_catalog4(certname, **payload)
335
+ }.to raise_error do |err|
336
+ expect(err).to be_an_instance_of(Puppet::HTTP::ResponseError)
337
+ expect(err.message).to eq('Server Error')
338
+ expect(err.response.code).to eq(500)
339
+ end
340
+ end
341
+
342
+ it 'raises a response error when server response is not JSON' do
343
+ stub_request(:post, uri)
344
+ .to_return(body: "this isn't valid JSON", headers: {'Content-Type' => 'application/json'})
345
+
346
+ expect {
347
+ subject.post_catalog4(certname, **payload)
348
+ }.to raise_error do |err|
349
+ expect(err).to be_an_instance_of(Puppet::HTTP::SerializationError)
350
+ expect(err.message).to match(/Failed to deserialize catalog from puppetserver response/)
351
+ end
352
+ end
353
+
354
+ it 'raises a response error when server response a JSON serialized catalog' do
355
+ stub_request(:post, uri)
356
+ .to_return(body: {oops: 'bad response data'}.to_json, headers: {'Content-Type' => 'application/json'})
357
+
358
+ expect {
359
+ subject.post_catalog4(certname, **payload)
360
+ }.to raise_error do |err|
361
+ expect(err).to be_an_instance_of(Puppet::HTTP::SerializationError)
362
+ expect(err.message).to match(/Failed to deserialize catalog from puppetserver response/)
363
+ end
364
+ end
365
+
366
+ it 'raises ArgumentError when the `persistence` hash does not contain required keys' do
367
+ payload[:persistence].delete(:facts)
368
+ expect { subject.post_catalog4(certname, **payload) }.to raise_error do |err|
369
+ expect(err).to be_an_instance_of(ArgumentError)
370
+ expect(err.message).to match(/The 'persistence' hash is missing the keys: facts/)
371
+ end
372
+ end
373
+
374
+ it 'raises ArgumentError when `facts` are not a Hash' do
375
+ payload[:facts] = Puppet::Node::Facts.new(certname)
376
+ expect { subject.post_catalog4(certname, **payload) }.to raise_error do |err|
377
+ expect(err).to be_an_instance_of(ArgumentError)
378
+ expect(err.message).to match(/Facts must be a Hash not a Puppet::Node::Facts/)
379
+ end
380
+ end
381
+ end
382
+
260
383
  context 'when getting a node' do
261
384
  let(:uri) { %r{/puppet/v3/node/ziggy} }
262
385
  let(:node_response) { { body: formatter.render(node), headers: {'Content-Type' => formatter.mime } } }
@@ -909,9 +909,10 @@ describe Puppet::Resource::Catalog::Compiler do
909
909
  it "inlines child metadata" do
910
910
  catalog = compile_to_catalog(<<-MANIFEST, node)
911
911
  file { '#{path}':
912
- ensure => directory,
913
- recurse => true,
914
- source => '#{source_dir}'
912
+ ensure => directory,
913
+ recurse => true,
914
+ source => '#{source_dir}',
915
+ max_files => 1234,
915
916
  }
916
917
  MANIFEST
917
918
 
@@ -925,6 +926,7 @@ describe Puppet::Resource::Catalog::Compiler do
925
926
  :source_permissions => :ignore,
926
927
  :recurse => true,
927
928
  :recurselimit => nil,
929
+ :max_files => 1234,
928
930
  :ignore => nil,
929
931
  }
930
932
  expect(Puppet::FileServing::Metadata.indirection).to receive(:search).with(source_dir, options).and_return([metadata, child_metadata])
@@ -938,14 +940,15 @@ describe Puppet::Resource::Catalog::Compiler do
938
940
  it "uses resource parameters when inlining metadata" do
939
941
  catalog = compile_to_catalog(<<-MANIFEST, node)
940
942
  file { '#{path}':
941
- ensure => directory,
942
- recurse => true,
943
- source => '#{source_dir}',
944
- checksum => sha256,
943
+ ensure => directory,
944
+ recurse => true,
945
+ source => '#{source_dir}',
946
+ checksum => sha256,
945
947
  source_permissions => use_when_creating,
946
- recurselimit => 2,
947
- ignore => 'foo.+',
948
- links => follow,
948
+ recurselimit => 2,
949
+ max_files => 4321,
950
+ ignore => 'foo.+',
951
+ links => follow,
949
952
  }
950
953
  MANIFEST
951
954
 
@@ -956,6 +959,7 @@ describe Puppet::Resource::Catalog::Compiler do
956
959
  :source_permissions => :use_when_creating,
957
960
  :recurse => true,
958
961
  :recurselimit => 2,
962
+ :max_files => 4321,
959
963
  :ignore => 'foo.+',
960
964
  }
961
965
  expect(Puppet::FileServing::Metadata.indirection).to receive(:search).with(source_dir, options).and_return([metadata, child_metadata])
@@ -61,12 +61,26 @@ describe "the fqdn_rand function" do
61
61
  expect(fqdn_rand(5000, :extra_identifier => ['expensive job 33'])).to eql(2389)
62
62
  end
63
63
 
64
+ it "returns the same value if only host differs by case" do
65
+ val1 = fqdn_rand(1000000000, :host => "host.example.com", :extra_identifier => [nil, true])
66
+ val2 = fqdn_rand(1000000000, :host => "HOST.example.com", :extra_identifier => [nil, true])
67
+
68
+ expect(val1).to eql(val2)
69
+ end
70
+
71
+ it "returns the same value if only host differs by case and an initial seed is given" do
72
+ val1 = fqdn_rand(1000000000, :host => "host.example.com", :extra_identifier => ['a seed', true])
73
+ val2 = fqdn_rand(1000000000, :host => "HOST.example.com", :extra_identifier => ['a seed', true])
74
+
75
+ expect(val1).to eql(val2)
76
+ end
77
+
64
78
  def fqdn_rand(max, args = {})
65
79
  host = args[:host] || '127.0.0.1'
66
80
  extra = args[:extra_identifier] || []
67
81
 
68
82
  scope = create_test_scope_for_node('localhost')
69
- allow(scope).to receive(:[]).with("::fqdn").and_return(host)
83
+ scope.compiler.topscope['fqdn'] = host.freeze
70
84
 
71
85
  scope.function_fqdn_rand([max] + extra)
72
86
  end
@@ -243,7 +243,7 @@ describe 'Puppet::Pops::Lookup::Context' do
243
243
  File.write(data_path, "a: value b\n")
244
244
 
245
245
  # Ensure mtime is at least 1 second ahead
246
- FileUtils.touch(data_path, :mtime => old_mtime + 1)
246
+ FileUtils.touch(data_path, mtime: old_mtime + 1)
247
247
 
248
248
  Puppet::Parser::Compiler.compile(node)
249
249
  end
@@ -45,12 +45,14 @@ describe Puppet::Type.type(:package).provider(:dnfmodule) do
45
45
  before(:each) do
46
46
  expect(Puppet::Type::Package::ProviderDnfmodule).to receive(:execute)
47
47
  .with(["/usr/bin/dnf", "--version"])
48
- .and_return(dnf_version).at_most(:once)
48
+ .and_return(Puppet::Util::Execution::ProcessOutput.new(dnf_version, 0)).at_most(:once)
49
49
  expect(Puppet::Util::Execution).to receive(:execute)
50
50
  .with(["/usr/bin/dnf", "--version"], execute_options)
51
51
  .and_return(Puppet::Util::Execution::ProcessOutput.new(dnf_version, 0))
52
52
  end
53
53
 
54
+ before(:each) { described_class.instance_variable_set("@current_version", nil) }
55
+
54
56
  describe "with a supported dnf version" do
55
57
  it "correctly parses the version" do
56
58
  expect(described_class.current_version).to eq('4.0.9')
@@ -69,8 +71,6 @@ describe Puppet::Type.type(:package).provider(:dnfmodule) do
69
71
  DNF_OUTPUT
70
72
  end
71
73
 
72
- before(:each) { described_class.instance_variable_set("@current_version", nil) }
73
-
74
74
  it "correctly parses the version" do
75
75
  expect(described_class.current_version).to eq('2.7.5')
76
76
  end