puppet 7.6.1-universal-darwin → 7.10.0-universal-darwin

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 (816) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +7 -7
  3. data/Gemfile +2 -1
  4. data/Gemfile.lock +18 -18
  5. data/README.md +4 -4
  6. data/{ext → examples/enc}/regexp_nodes/classes/databases +0 -0
  7. data/{ext → examples/enc}/regexp_nodes/classes/webservers +0 -0
  8. data/{ext → examples/enc}/regexp_nodes/environment/development +0 -0
  9. data/{ext → examples/enc}/regexp_nodes/parameters/service/prod +0 -0
  10. data/{ext → examples/enc}/regexp_nodes/parameters/service/qa +0 -0
  11. data/{ext → examples/enc}/regexp_nodes/parameters/service/sandbox +0 -0
  12. data/{ext → examples/enc}/regexp_nodes/regexp_nodes.rb +0 -0
  13. data/{ext → examples}/nagios/check_puppet.rb +2 -2
  14. data/ext/README.md +13 -0
  15. data/ext/osx/puppet.plist +2 -0
  16. data/ext/project_data.yaml +1 -0
  17. data/install.rb +11 -15
  18. data/lib/hiera_puppet.rb +1 -1
  19. data/lib/puppet.rb +40 -40
  20. data/lib/puppet/agent.rb +6 -6
  21. data/lib/puppet/agent/disabler.rb +1 -1
  22. data/lib/puppet/agent/locker.rb +2 -2
  23. data/lib/puppet/application.rb +6 -6
  24. data/lib/puppet/application/agent.rb +18 -11
  25. data/lib/puppet/application/apply.rb +6 -5
  26. data/lib/puppet/application/catalog.rb +1 -1
  27. data/lib/puppet/application/config.rb +1 -1
  28. data/lib/puppet/application/describe.rb +1 -1
  29. data/lib/puppet/application/device.rb +8 -7
  30. data/lib/puppet/application/doc.rb +7 -7
  31. data/lib/puppet/application/epp.rb +2 -2
  32. data/lib/puppet/application/face_base.rb +2 -2
  33. data/lib/puppet/application/facts.rb +1 -1
  34. data/lib/puppet/application/filebucket.rb +3 -2
  35. data/lib/puppet/application/generate.rb +1 -1
  36. data/lib/puppet/application/help.rb +1 -1
  37. data/lib/puppet/application/indirection_base.rb +1 -1
  38. data/lib/puppet/application/lookup.rb +6 -6
  39. data/lib/puppet/application/module.rb +1 -1
  40. data/lib/puppet/application/node.rb +1 -1
  41. data/lib/puppet/application/parser.rb +2 -2
  42. data/lib/puppet/application/plugin.rb +1 -1
  43. data/lib/puppet/application/report.rb +1 -1
  44. data/lib/puppet/application/resource.rb +18 -4
  45. data/lib/puppet/application/script.rb +6 -5
  46. data/lib/puppet/application/ssl.rb +3 -2
  47. data/lib/puppet/application_support.rb +4 -4
  48. data/lib/puppet/compilable_resource_type.rb +1 -1
  49. data/lib/puppet/concurrent/lock.rb +1 -1
  50. data/lib/puppet/configurer.rb +159 -50
  51. data/lib/puppet/configurer/downloader.rb +4 -3
  52. data/lib/puppet/configurer/fact_handler.rb +3 -3
  53. data/lib/puppet/configurer/plugin_handler.rb +1 -1
  54. data/lib/puppet/confine.rb +1 -1
  55. data/lib/puppet/confine/boolean.rb +1 -1
  56. data/lib/puppet/confine/exists.rb +1 -1
  57. data/lib/puppet/confine/false.rb +1 -1
  58. data/lib/puppet/confine/feature.rb +1 -1
  59. data/lib/puppet/confine/true.rb +1 -1
  60. data/lib/puppet/confine/variable.rb +1 -1
  61. data/lib/puppet/confine_collection.rb +1 -1
  62. data/lib/puppet/confiner.rb +1 -1
  63. data/lib/puppet/context.rb +2 -2
  64. data/lib/puppet/context/trusted_information.rb +1 -1
  65. data/lib/puppet/daemon.rb +2 -2
  66. data/lib/puppet/data_binding.rb +1 -1
  67. data/lib/puppet/datatypes/error.rb +1 -1
  68. data/lib/puppet/defaults.rb +67 -33
  69. data/lib/puppet/environments.rb +76 -26
  70. data/lib/puppet/etc.rb +1 -1
  71. data/lib/puppet/external/pson/common.rb +1 -1
  72. data/lib/puppet/external/pson/pure.rb +3 -3
  73. data/lib/puppet/face.rb +1 -1
  74. data/lib/puppet/face/catalog.rb +1 -1
  75. data/lib/puppet/face/config.rb +2 -2
  76. data/lib/puppet/face/epp.rb +6 -6
  77. data/lib/puppet/face/facts.rb +2 -2
  78. data/lib/puppet/face/generate.rb +2 -2
  79. data/lib/puppet/face/help.rb +3 -3
  80. data/lib/puppet/face/help/action.erb +1 -0
  81. data/lib/puppet/face/help/face.erb +1 -0
  82. data/lib/puppet/face/module.rb +3 -3
  83. data/lib/puppet/face/module/install.rb +2 -2
  84. data/lib/puppet/face/node.rb +1 -1
  85. data/lib/puppet/face/node/clean.rb +1 -1
  86. data/lib/puppet/face/parser.rb +4 -4
  87. data/lib/puppet/face/plugin.rb +2 -2
  88. data/lib/puppet/face/report.rb +1 -1
  89. data/lib/puppet/face/resource.rb +1 -1
  90. data/lib/puppet/feature/base.rb +2 -2
  91. data/lib/puppet/feature/bolt.rb +1 -1
  92. data/lib/puppet/feature/cfpropertylist.rb +1 -1
  93. data/lib/puppet/feature/eventlog.rb +1 -1
  94. data/lib/puppet/feature/hiera_eyaml.rb +1 -1
  95. data/lib/puppet/feature/hocon.rb +1 -1
  96. data/lib/puppet/feature/libuser.rb +2 -2
  97. data/lib/puppet/feature/msgpack.rb +1 -1
  98. data/lib/puppet/feature/pe_license.rb +1 -1
  99. data/lib/puppet/feature/selinux.rb +1 -1
  100. data/lib/puppet/feature/ssh.rb +1 -1
  101. data/lib/puppet/feature/telnet.rb +1 -1
  102. data/lib/puppet/feature/zlib.rb +1 -1
  103. data/lib/puppet/ffi/posix.rb +2 -2
  104. data/lib/puppet/ffi/posix/constants.rb +1 -1
  105. data/lib/puppet/ffi/posix/functions.rb +1 -1
  106. data/lib/puppet/ffi/windows.rb +4 -4
  107. data/lib/puppet/ffi/windows/api_types.rb +2 -2
  108. data/lib/puppet/ffi/windows/constants.rb +1 -1
  109. data/lib/puppet/ffi/windows/functions.rb +1 -1
  110. data/lib/puppet/ffi/windows/structs.rb +1 -1
  111. data/lib/puppet/file_bucket/dipper.rb +4 -4
  112. data/lib/puppet/file_bucket/file.rb +3 -3
  113. data/lib/puppet/file_serving/base.rb +2 -2
  114. data/lib/puppet/file_serving/configuration.rb +12 -10
  115. data/lib/puppet/file_serving/configuration/parser.rb +4 -2
  116. data/lib/puppet/file_serving/content.rb +3 -3
  117. data/lib/puppet/file_serving/fileset.rb +16 -4
  118. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  119. data/lib/puppet/file_serving/metadata.rb +6 -6
  120. data/lib/puppet/file_serving/mount.rb +4 -4
  121. data/lib/puppet/file_serving/mount/file.rb +1 -1
  122. data/lib/puppet/file_serving/mount/locales.rb +1 -1
  123. data/lib/puppet/file_serving/mount/modules.rb +1 -1
  124. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -1
  125. data/lib/puppet/file_serving/mount/plugins.rb +1 -1
  126. data/lib/puppet/file_serving/mount/scripts.rb +24 -0
  127. data/lib/puppet/file_serving/mount/tasks.rb +1 -1
  128. data/lib/puppet/file_serving/terminus_helper.rb +2 -2
  129. data/lib/puppet/file_serving/terminus_selector.rb +1 -1
  130. data/lib/puppet/file_system.rb +9 -9
  131. data/lib/puppet/file_system/file_impl.rb +1 -1
  132. data/lib/puppet/file_system/jruby.rb +1 -1
  133. data/lib/puppet/file_system/path_pattern.rb +1 -1
  134. data/lib/puppet/file_system/uniquefile.rb +1 -1
  135. data/lib/puppet/file_system/windows.rb +4 -4
  136. data/lib/puppet/forge.rb +8 -8
  137. data/lib/puppet/forge/cache.rb +2 -2
  138. data/lib/puppet/forge/errors.rb +3 -3
  139. data/lib/puppet/forge/repository.rb +4 -4
  140. data/lib/puppet/functions/all.rb +1 -1
  141. data/lib/puppet/functions/camelcase.rb +1 -1
  142. data/lib/puppet/functions/capitalize.rb +2 -2
  143. data/lib/puppet/functions/downcase.rb +2 -2
  144. data/lib/puppet/functions/empty.rb +8 -0
  145. data/lib/puppet/functions/find_template.rb +2 -2
  146. data/lib/puppet/functions/get.rb +5 -5
  147. data/lib/puppet/functions/group_by.rb +13 -5
  148. data/lib/puppet/functions/lest.rb +1 -1
  149. data/lib/puppet/functions/new.rb +100 -100
  150. data/lib/puppet/functions/partition.rb +4 -4
  151. data/lib/puppet/functions/require.rb +5 -5
  152. data/lib/puppet/functions/sort.rb +3 -3
  153. data/lib/puppet/functions/strftime.rb +1 -0
  154. data/lib/puppet/functions/tree_each.rb +7 -9
  155. data/lib/puppet/functions/type.rb +4 -4
  156. data/lib/puppet/functions/unwrap.rb +17 -2
  157. data/lib/puppet/functions/upcase.rb +2 -2
  158. data/lib/puppet/functions/versioncmp.rb +1 -1
  159. data/lib/puppet/generate/models/type/type.rb +1 -1
  160. data/lib/puppet/generate/type.rb +2 -2
  161. data/lib/puppet/gettext/config.rb +3 -3
  162. data/lib/puppet/gettext/module_translations.rb +1 -1
  163. data/lib/puppet/graph.rb +6 -6
  164. data/lib/puppet/graph/simple_graph.rb +2 -2
  165. data/lib/puppet/http.rb +26 -26
  166. data/lib/puppet/http/factory.rb +2 -2
  167. data/lib/puppet/http/proxy.rb +1 -1
  168. data/lib/puppet/http/resolver/server_list.rb +15 -4
  169. data/lib/puppet/http/service/compiler.rb +79 -2
  170. data/lib/puppet/http/service/file_server.rb +3 -2
  171. data/lib/puppet/indirector.rb +5 -5
  172. data/lib/puppet/indirector/catalog/compiler.rb +28 -9
  173. data/lib/puppet/indirector/catalog/json.rb +2 -2
  174. data/lib/puppet/indirector/catalog/msgpack.rb +2 -2
  175. data/lib/puppet/indirector/catalog/rest.rb +3 -2
  176. data/lib/puppet/indirector/catalog/store_configs.rb +2 -2
  177. data/lib/puppet/indirector/catalog/yaml.rb +2 -2
  178. data/lib/puppet/indirector/code.rb +1 -1
  179. data/lib/puppet/indirector/data_binding/hiera.rb +1 -1
  180. data/lib/puppet/indirector/data_binding/none.rb +1 -1
  181. data/lib/puppet/indirector/direct_file_server.rb +2 -2
  182. data/lib/puppet/indirector/envelope.rb +1 -1
  183. data/lib/puppet/indirector/errors.rb +1 -1
  184. data/lib/puppet/indirector/exec.rb +2 -2
  185. data/lib/puppet/indirector/face.rb +1 -1
  186. data/lib/puppet/indirector/facts/facter.rb +2 -2
  187. data/lib/puppet/indirector/facts/json.rb +3 -3
  188. data/lib/puppet/indirector/facts/memory.rb +2 -2
  189. data/lib/puppet/indirector/facts/network_device.rb +2 -2
  190. data/lib/puppet/indirector/facts/rest.rb +2 -2
  191. data/lib/puppet/indirector/facts/store_configs.rb +2 -2
  192. data/lib/puppet/indirector/facts/yaml.rb +3 -3
  193. data/lib/puppet/indirector/file_bucket_file/file.rb +4 -4
  194. data/lib/puppet/indirector/file_bucket_file/rest.rb +2 -2
  195. data/lib/puppet/indirector/file_bucket_file/selector.rb +1 -1
  196. data/lib/puppet/indirector/file_content.rb +1 -1
  197. data/lib/puppet/indirector/file_content/file.rb +3 -3
  198. data/lib/puppet/indirector/file_content/file_server.rb +3 -3
  199. data/lib/puppet/indirector/file_content/rest.rb +3 -3
  200. data/lib/puppet/indirector/file_content/selector.rb +4 -4
  201. data/lib/puppet/indirector/file_metadata.rb +1 -1
  202. data/lib/puppet/indirector/file_metadata/file.rb +3 -3
  203. data/lib/puppet/indirector/file_metadata/file_server.rb +3 -3
  204. data/lib/puppet/indirector/file_metadata/http.rb +3 -3
  205. data/lib/puppet/indirector/file_metadata/rest.rb +4 -3
  206. data/lib/puppet/indirector/file_metadata/selector.rb +4 -4
  207. data/lib/puppet/indirector/file_server.rb +4 -4
  208. data/lib/puppet/indirector/generic_http.rb +1 -1
  209. data/lib/puppet/indirector/hiera.rb +1 -1
  210. data/lib/puppet/indirector/indirection.rb +5 -5
  211. data/lib/puppet/indirector/json.rb +2 -2
  212. data/lib/puppet/indirector/memory.rb +1 -1
  213. data/lib/puppet/indirector/msgpack.rb +2 -2
  214. data/lib/puppet/indirector/node/exec.rb +2 -2
  215. data/lib/puppet/indirector/node/json.rb +2 -2
  216. data/lib/puppet/indirector/node/memory.rb +2 -2
  217. data/lib/puppet/indirector/node/msgpack.rb +2 -2
  218. data/lib/puppet/indirector/node/plain.rb +2 -2
  219. data/lib/puppet/indirector/node/rest.rb +2 -2
  220. data/lib/puppet/indirector/node/store_configs.rb +2 -2
  221. data/lib/puppet/indirector/node/yaml.rb +2 -2
  222. data/lib/puppet/indirector/none.rb +1 -1
  223. data/lib/puppet/indirector/plain.rb +1 -1
  224. data/lib/puppet/indirector/report/json.rb +2 -2
  225. data/lib/puppet/indirector/report/msgpack.rb +2 -2
  226. data/lib/puppet/indirector/report/processor.rb +3 -3
  227. data/lib/puppet/indirector/report/rest.rb +1 -1
  228. data/lib/puppet/indirector/report/yaml.rb +2 -2
  229. data/lib/puppet/indirector/request.rb +3 -3
  230. data/lib/puppet/indirector/resource/ral.rb +7 -2
  231. data/lib/puppet/indirector/resource/store_configs.rb +2 -2
  232. data/lib/puppet/indirector/terminus.rb +9 -5
  233. data/lib/puppet/indirector/yaml.rb +2 -2
  234. data/lib/puppet/info_service.rb +3 -3
  235. data/lib/puppet/info_service/class_information_service.rb +3 -3
  236. data/lib/puppet/info_service/plan_information_service.rb +1 -1
  237. data/lib/puppet/info_service/task_information_service.rb +1 -1
  238. data/lib/puppet/interface.rb +10 -10
  239. data/lib/puppet/interface/documentation.rb +2 -1
  240. data/lib/puppet/loaders.rb +21 -21
  241. data/lib/puppet/metatype/manager.rb +3 -3
  242. data/lib/puppet/module.rb +4 -4
  243. data/lib/puppet/module/plan.rb +1 -2
  244. data/lib/puppet/module/task.rb +2 -2
  245. data/lib/puppet/module_tool.rb +10 -10
  246. data/lib/puppet/module_tool/applications.rb +7 -7
  247. data/lib/puppet/module_tool/applications/application.rb +2 -2
  248. data/lib/puppet/module_tool/applications/checksummer.rb +2 -2
  249. data/lib/puppet/module_tool/applications/installer.rb +19 -11
  250. data/lib/puppet/module_tool/applications/unpacker.rb +2 -2
  251. data/lib/puppet/module_tool/applications/upgrader.rb +5 -5
  252. data/lib/puppet/module_tool/checksums.rb +1 -1
  253. data/lib/puppet/module_tool/contents_description.rb +1 -1
  254. data/lib/puppet/module_tool/dependency.rb +2 -2
  255. data/lib/puppet/module_tool/errors.rb +6 -6
  256. data/lib/puppet/module_tool/errors/shared.rb +17 -0
  257. data/lib/puppet/module_tool/install_directory.rb +2 -2
  258. data/lib/puppet/module_tool/installed_modules.rb +2 -2
  259. data/lib/puppet/module_tool/local_tarball.rb +2 -2
  260. data/lib/puppet/module_tool/metadata.rb +3 -3
  261. data/lib/puppet/module_tool/tar.rb +4 -4
  262. data/lib/puppet/module_tool/tar/mini.rb +1 -1
  263. data/lib/puppet/network/format.rb +1 -1
  264. data/lib/puppet/network/format_handler.rb +3 -3
  265. data/lib/puppet/network/format_support.rb +1 -1
  266. data/lib/puppet/network/formats.rb +2 -2
  267. data/lib/puppet/network/http.rb +12 -12
  268. data/lib/puppet/network/http/api.rb +1 -1
  269. data/lib/puppet/network/http/api/indirected_routes.rb +2 -2
  270. data/lib/puppet/network/http/api/master.rb +1 -1
  271. data/lib/puppet/network/http/api/master/v3.rb +2 -2
  272. data/lib/puppet/network/http/api/master/v3/environments.rb +2 -2
  273. data/lib/puppet/network/http/api/server/v3.rb +2 -2
  274. data/lib/puppet/network/http/api/server/v3/environments.rb +1 -1
  275. data/lib/puppet/network/http/connection.rb +1 -1
  276. data/lib/puppet/network/http/error.rb +1 -1
  277. data/lib/puppet/network/http/handler.rb +3 -3
  278. data/lib/puppet/network/http_pool.rb +1 -1
  279. data/lib/puppet/node.rb +3 -3
  280. data/lib/puppet/node/environment.rb +13 -14
  281. data/lib/puppet/node/facts.rb +3 -3
  282. data/lib/puppet/pal/pal_api.rb +10 -10
  283. data/lib/puppet/pal/pal_impl.rb +3 -3
  284. data/lib/puppet/parameter.rb +4 -4
  285. data/lib/puppet/parameter/boolean.rb +1 -1
  286. data/lib/puppet/parameter/package_options.rb +1 -1
  287. data/lib/puppet/parameter/path.rb +1 -1
  288. data/lib/puppet/parameter/value.rb +1 -1
  289. data/lib/puppet/parameter/value_collection.rb +1 -1
  290. data/lib/puppet/parser.rb +10 -10
  291. data/lib/puppet/parser/ast.rb +8 -8
  292. data/lib/puppet/parser/ast/hostclass.rb +1 -1
  293. data/lib/puppet/parser/ast/pops_bridge.rb +2 -2
  294. data/lib/puppet/parser/catalog_compiler.rb +2 -2
  295. data/lib/puppet/parser/compiler.rb +5 -5
  296. data/lib/puppet/parser/e4_parser_adapter.rb +1 -1
  297. data/lib/puppet/parser/functions.rb +4 -4
  298. data/lib/puppet/parser/functions/digest.rb +1 -1
  299. data/lib/puppet/parser/functions/file.rb +1 -1
  300. data/lib/puppet/parser/functions/fqdn_rand.rb +14 -6
  301. data/lib/puppet/parser/functions/versioncmp.rb +1 -1
  302. data/lib/puppet/parser/parser_factory.rb +2 -2
  303. data/lib/puppet/parser/resource.rb +3 -3
  304. data/lib/puppet/parser/scope.rb +3 -3
  305. data/lib/puppet/parser/script_compiler.rb +2 -2
  306. data/lib/puppet/parser/templatewrapper.rb +2 -2
  307. data/lib/puppet/parser/type_loader.rb +1 -1
  308. data/lib/puppet/plugins/configuration.rb +5 -5
  309. data/lib/puppet/pops.rb +57 -57
  310. data/lib/puppet/pops/evaluator/deferred_resolver.rb +1 -1
  311. data/lib/puppet/pops/evaluator/evaluator_impl.rb +7 -7
  312. data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
  313. data/lib/puppet/pops/loader/task_instantiator.rb +1 -1
  314. data/lib/puppet/pops/lookup/invocation.rb +1 -1
  315. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  316. data/lib/puppet/pops/model/pn_transformer.rb +1 -1
  317. data/lib/puppet/pops/parser/eparser.rb +2 -2
  318. data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
  319. data/lib/puppet/pops/parser/lexer2.rb +5 -5
  320. data/lib/puppet/pops/parser/lexer_support.rb +1 -1
  321. data/lib/puppet/pops/parser/parser_support.rb +4 -4
  322. data/lib/puppet/pops/puppet_stack.rb +1 -1
  323. data/lib/puppet/pops/serialization/json.rb +1 -1
  324. data/lib/puppet/pops/serialization/json_path.rb +1 -1
  325. data/lib/puppet/pops/serialization/to_data_converter.rb +18 -6
  326. data/lib/puppet/pops/time/timespan.rb +1 -1
  327. data/lib/puppet/pops/types/p_sem_ver_type.rb +8 -2
  328. data/lib/puppet/pops/types/p_sensitive_type.rb +10 -0
  329. data/lib/puppet/pops/types/string_converter.rb +1 -1
  330. data/lib/puppet/pops/types/type_calculator.rb +1 -1
  331. data/lib/puppet/pops/types/type_formatter.rb +1 -1
  332. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  333. data/lib/puppet/pops/types/type_parser.rb +1 -1
  334. data/lib/puppet/pops/types/types.rb +1 -1
  335. data/lib/puppet/pops/validation/checker4_0.rb +1 -1
  336. data/lib/puppet/property.rb +3 -3
  337. data/lib/puppet/property/boolean.rb +1 -1
  338. data/lib/puppet/property/ensure.rb +1 -1
  339. data/lib/puppet/property/keyvalue.rb +1 -1
  340. data/lib/puppet/property/list.rb +1 -1
  341. data/lib/puppet/property/ordered_list.rb +1 -1
  342. data/lib/puppet/provider.rb +2 -2
  343. data/lib/puppet/provider/confine.rb +2 -2
  344. data/lib/puppet/provider/exec.rb +2 -2
  345. data/lib/puppet/provider/exec/posix.rb +17 -5
  346. data/lib/puppet/provider/exec/windows.rb +1 -1
  347. data/lib/puppet/provider/file/posix.rb +1 -1
  348. data/lib/puppet/provider/file/windows.rb +1 -1
  349. data/lib/puppet/provider/group/aix.rb +1 -1
  350. data/lib/puppet/provider/group/directoryservice.rb +1 -1
  351. data/lib/puppet/provider/group/groupadd.rb +2 -2
  352. data/lib/puppet/provider/group/ldap.rb +1 -1
  353. data/lib/puppet/provider/group/pw.rb +1 -1
  354. data/lib/puppet/provider/group/windows_adsi.rb +1 -1
  355. data/lib/puppet/provider/ldap.rb +2 -2
  356. data/lib/puppet/provider/nameservice.rb +1 -1
  357. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
  358. data/lib/puppet/provider/nameservice/objectadd.rb +1 -1
  359. data/lib/puppet/provider/nameservice/pw.rb +1 -1
  360. data/lib/puppet/provider/package.rb +1 -1
  361. data/lib/puppet/provider/package/aix.rb +2 -2
  362. data/lib/puppet/provider/package/appdmg.rb +2 -2
  363. data/lib/puppet/provider/package/apple.rb +1 -1
  364. data/lib/puppet/provider/package/apt.rb +5 -5
  365. data/lib/puppet/provider/package/dnfmodule.rb +1 -1
  366. data/lib/puppet/provider/package/dpkg.rb +1 -1
  367. data/lib/puppet/provider/package/gem.rb +3 -3
  368. data/lib/puppet/provider/package/hpux.rb +1 -1
  369. data/lib/puppet/provider/package/macports.rb +2 -2
  370. data/lib/puppet/provider/package/nim.rb +13 -8
  371. data/lib/puppet/provider/package/openbsd.rb +1 -1
  372. data/lib/puppet/provider/package/opkg.rb +1 -1
  373. data/lib/puppet/provider/package/pacman.rb +1 -1
  374. data/lib/puppet/provider/package/pip.rb +18 -6
  375. data/lib/puppet/provider/package/pkg.rb +10 -3
  376. data/lib/puppet/provider/package/pkgdmg.rb +3 -3
  377. data/lib/puppet/provider/package/pkgin.rb +1 -1
  378. data/lib/puppet/provider/package/pkgng.rb +1 -1
  379. data/lib/puppet/provider/package/portage.rb +1 -1
  380. data/lib/puppet/provider/package/portupgrade.rb +1 -1
  381. data/lib/puppet/provider/package/puppetserver_gem.rb +0 -0
  382. data/lib/puppet/provider/package/rpm.rb +2 -2
  383. data/lib/puppet/provider/package/sun.rb +1 -1
  384. data/lib/puppet/provider/package/windows.rb +17 -4
  385. data/lib/puppet/provider/package/windows/exe_package.rb +31 -2
  386. data/lib/puppet/provider/package/windows/msi_package.rb +1 -1
  387. data/lib/puppet/provider/package/windows/package.rb +6 -5
  388. data/lib/puppet/provider/package/yum.rb +6 -6
  389. data/lib/puppet/provider/package/zypper.rb +3 -3
  390. data/lib/puppet/provider/package_targetable.rb +1 -1
  391. data/lib/puppet/provider/parsedfile.rb +6 -3
  392. data/lib/puppet/provider/service/base.rb +6 -4
  393. data/lib/puppet/provider/service/daemontools.rb +0 -1
  394. data/lib/puppet/provider/service/debian.rb +3 -5
  395. data/lib/puppet/provider/service/freebsd.rb +1 -1
  396. data/lib/puppet/provider/service/init.rb +1 -1
  397. data/lib/puppet/provider/service/launchd.rb +10 -4
  398. data/lib/puppet/provider/service/service.rb +28 -3
  399. data/lib/puppet/provider/service/smf.rb +0 -24
  400. data/lib/puppet/provider/service/src.rb +2 -2
  401. data/lib/puppet/provider/service/systemd.rb +18 -8
  402. data/lib/puppet/provider/service/windows.rb +38 -0
  403. data/lib/puppet/provider/user/aix.rb +2 -2
  404. data/lib/puppet/provider/user/directoryservice.rb +26 -13
  405. data/lib/puppet/provider/user/ldap.rb +1 -1
  406. data/lib/puppet/provider/user/openbsd.rb +1 -1
  407. data/lib/puppet/provider/user/pw.rb +1 -1
  408. data/lib/puppet/provider/user/user_role_add.rb +2 -2
  409. data/lib/puppet/provider/user/useradd.rb +45 -12
  410. data/lib/puppet/provider/user/windows_adsi.rb +1 -1
  411. data/lib/puppet/reference/configuration.rb +1 -1
  412. data/lib/puppet/reference/indirection.rb +4 -4
  413. data/lib/puppet/reference/report.rb +1 -1
  414. data/lib/puppet/reports.rb +1 -1
  415. data/lib/puppet/reports/http.rb +2 -2
  416. data/lib/puppet/reports/log.rb +1 -1
  417. data/lib/puppet/reports/store.rb +2 -2
  418. data/lib/puppet/resource.rb +4 -4
  419. data/lib/puppet/resource/catalog.rb +5 -5
  420. data/lib/puppet/resource/status.rb +2 -2
  421. data/lib/puppet/resource/type.rb +4 -4
  422. data/lib/puppet/resource/type_collection.rb +6 -4
  423. data/lib/puppet/runtime.rb +1 -1
  424. data/lib/puppet/scheduler.rb +4 -4
  425. data/lib/puppet/settings.rb +58 -35
  426. data/lib/puppet/settings/autosign_setting.rb +1 -1
  427. data/lib/puppet/settings/base_setting.rb +2 -2
  428. data/lib/puppet/settings/certificate_revocation_setting.rb +1 -1
  429. data/lib/puppet/settings/config_file.rb +2 -9
  430. data/lib/puppet/settings/errors.rb +1 -1
  431. data/lib/puppet/settings/priority_setting.rb +3 -3
  432. data/lib/puppet/settings/value_translator.rb +0 -1
  433. data/lib/puppet/ssl.rb +11 -11
  434. data/lib/puppet/ssl/base.rb +3 -3
  435. data/lib/puppet/ssl/certificate.rb +1 -1
  436. data/lib/puppet/ssl/certificate_request.rb +2 -2
  437. data/lib/puppet/ssl/certificate_request_attributes.rb +2 -2
  438. data/lib/puppet/ssl/oids.rb +1 -1
  439. data/lib/puppet/ssl/openssl_loader.rb +1 -1
  440. data/lib/puppet/ssl/ssl_context.rb +1 -1
  441. data/lib/puppet/ssl/ssl_provider.rb +1 -1
  442. data/lib/puppet/ssl/state_machine.rb +2 -2
  443. data/lib/puppet/ssl/verifier.rb +5 -1
  444. data/lib/puppet/syntax_checkers/base64.rb +1 -1
  445. data/lib/puppet/syntax_checkers/epp.rb +1 -1
  446. data/lib/puppet/syntax_checkers/json.rb +1 -1
  447. data/lib/puppet/syntax_checkers/pp.rb +1 -1
  448. data/lib/puppet/transaction.rb +11 -11
  449. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  450. data/lib/puppet/transaction/event.rb +4 -4
  451. data/lib/puppet/transaction/event_manager.rb +1 -1
  452. data/lib/puppet/transaction/persistence.rb +12 -2
  453. data/lib/puppet/transaction/report.rb +17 -3
  454. data/lib/puppet/transaction/resource_harness.rb +1 -1
  455. data/lib/puppet/type.rb +15 -15
  456. data/lib/puppet/type/component.rb +3 -3
  457. data/lib/puppet/type/exec.rb +26 -4
  458. data/lib/puppet/type/file.rb +43 -25
  459. data/lib/puppet/type/file/checksum.rb +1 -1
  460. data/lib/puppet/type/file/checksum_value.rb +2 -2
  461. data/lib/puppet/type/file/content.rb +2 -2
  462. data/lib/puppet/type/file/data_sync.rb +2 -2
  463. data/lib/puppet/type/file/ensure.rb +1 -1
  464. data/lib/puppet/type/file/group.rb +1 -1
  465. data/lib/puppet/type/file/mode.rb +7 -1
  466. data/lib/puppet/type/file/selcontext.rb +2 -2
  467. data/lib/puppet/type/file/source.rb +4 -4
  468. data/lib/puppet/type/filebucket.rb +3 -3
  469. data/lib/puppet/type/group.rb +2 -2
  470. data/lib/puppet/type/package.rb +2 -2
  471. data/lib/puppet/type/resources.rb +2 -2
  472. data/lib/puppet/type/service.rb +18 -38
  473. data/lib/puppet/type/tidy.rb +25 -6
  474. data/lib/puppet/type/user.rb +43 -25
  475. data/lib/puppet/util.rb +43 -34
  476. data/lib/puppet/util/at_fork.rb +3 -3
  477. data/lib/puppet/util/at_fork/solaris.rb +1 -1
  478. data/lib/puppet/util/autoload.rb +4 -4
  479. data/lib/puppet/util/checksums.rb +3 -3
  480. data/lib/puppet/util/colors.rb +1 -1
  481. data/lib/puppet/util/command_line.rb +6 -6
  482. data/lib/puppet/util/command_line/puppet_option_parser.rb +2 -2
  483. data/lib/puppet/util/execution.rb +2 -2
  484. data/lib/puppet/util/feature.rb +2 -2
  485. data/lib/puppet/util/filetype.rb +1 -1
  486. data/lib/puppet/util/http_proxy.rb +1 -1
  487. data/lib/puppet/util/inifile.rb +2 -2
  488. data/lib/puppet/util/instance_loader.rb +3 -3
  489. data/lib/puppet/util/json_lockfile.rb +1 -1
  490. data/lib/puppet/util/ldap/connection.rb +1 -1
  491. data/lib/puppet/util/ldap/generator.rb +1 -1
  492. data/lib/puppet/util/ldap/manager.rb +3 -3
  493. data/lib/puppet/util/limits.rb +1 -1
  494. data/lib/puppet/util/log.rb +6 -6
  495. data/lib/puppet/util/log/destinations.rb +1 -1
  496. data/lib/puppet/util/logging.rb +2 -2
  497. data/lib/puppet/util/metric.rb +2 -2
  498. data/lib/puppet/util/monkey_patches.rb +9 -20
  499. data/lib/puppet/util/network_device/base.rb +3 -3
  500. data/lib/puppet/util/network_device/config.rb +2 -2
  501. data/lib/puppet/util/network_device/transport.rb +1 -1
  502. data/lib/puppet/util/network_device/transport/base.rb +2 -2
  503. data/lib/puppet/util/package/version/range.rb +6 -6
  504. data/lib/puppet/util/package/version/range/eq.rb +1 -1
  505. data/lib/puppet/util/package/version/range/gt.rb +1 -1
  506. data/lib/puppet/util/package/version/range/gt_eq.rb +1 -1
  507. data/lib/puppet/util/package/version/range/lt.rb +1 -1
  508. data/lib/puppet/util/package/version/range/lt_eq.rb +1 -1
  509. data/lib/puppet/util/package/version/range/min_max.rb +1 -1
  510. data/lib/puppet/util/package/version/range/simple.rb +1 -1
  511. data/lib/puppet/util/package/version/rpm.rb +1 -1
  512. data/lib/puppet/util/pidlock.rb +1 -1
  513. data/lib/puppet/util/plist.rb +1 -1
  514. data/lib/puppet/util/posix.rb +1 -1
  515. data/lib/puppet/util/profiler.rb +3 -3
  516. data/lib/puppet/util/profiler/aggregate.rb +2 -2
  517. data/lib/puppet/util/profiler/object_counts.rb +1 -1
  518. data/lib/puppet/util/profiler/wall_clock.rb +1 -1
  519. data/lib/puppet/util/provider_features.rb +2 -2
  520. data/lib/puppet/util/rdoc.rb +2 -2
  521. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
  522. data/lib/puppet/util/rdoc/parser.rb +6 -6
  523. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +1 -1
  524. data/lib/puppet/util/reference.rb +1 -1
  525. data/lib/puppet/util/resource_template.rb +2 -2
  526. data/lib/puppet/util/rubygems.rb +1 -1
  527. data/lib/puppet/util/selinux.rb +30 -4
  528. data/lib/puppet/util/skip_tags.rb +1 -1
  529. data/lib/puppet/util/storage.rb +1 -1
  530. data/lib/puppet/util/suidmanager.rb +2 -2
  531. data/lib/puppet/util/symbolic_file_mode.rb +30 -18
  532. data/lib/puppet/util/tag_set.rb +1 -1
  533. data/lib/puppet/util/tagging.rb +1 -1
  534. data/lib/puppet/util/watched_file.rb +1 -1
  535. data/lib/puppet/util/watcher.rb +3 -3
  536. data/lib/puppet/util/windows.rb +20 -20
  537. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  538. data/lib/puppet/util/windows/adsi.rb +1 -1
  539. data/lib/puppet/util/windows/daemon.rb +1 -1
  540. data/lib/puppet/util/windows/error.rb +2 -2
  541. data/lib/puppet/util/windows/file.rb +1 -1
  542. data/lib/puppet/util/windows/monkey_patches/process.rb +2 -2
  543. data/lib/puppet/util/windows/principal.rb +1 -1
  544. data/lib/puppet/util/windows/process.rb +2 -2
  545. data/lib/puppet/util/windows/registry.rb +1 -1
  546. data/lib/puppet/util/windows/root_certs.rb +2 -2
  547. data/lib/puppet/util/windows/security.rb +1 -1
  548. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  549. data/lib/puppet/util/windows/service.rb +1 -1
  550. data/lib/puppet/util/windows/sid.rb +4 -2
  551. data/lib/puppet/util/windows/user.rb +1 -1
  552. data/lib/puppet/vendor.rb +1 -1
  553. data/lib/puppet/version.rb +1 -1
  554. data/lib/puppet/x509.rb +4 -4
  555. data/lib/puppet/x509/cert_provider.rb +4 -22
  556. data/lib/puppet/x509/pem_store.rb +1 -1
  557. data/lib/puppet_pal.rb +2 -2
  558. data/locales/puppet.pot +441 -357
  559. data/man/man5/puppet.conf.5 +322 -264
  560. data/man/man8/puppet-agent.8 +1 -1
  561. data/man/man8/puppet-apply.8 +1 -1
  562. data/man/man8/puppet-catalog.8 +9 -9
  563. data/man/man8/puppet-config.8 +1 -1
  564. data/man/man8/puppet-describe.8 +1 -1
  565. data/man/man8/puppet-device.8 +1 -1
  566. data/man/man8/puppet-doc.8 +1 -1
  567. data/man/man8/puppet-epp.8 +1 -1
  568. data/man/man8/puppet-facts.8 +7 -7
  569. data/man/man8/puppet-filebucket.8 +1 -1
  570. data/man/man8/puppet-generate.8 +1 -1
  571. data/man/man8/puppet-help.8 +1 -1
  572. data/man/man8/puppet-lookup.8 +1 -1
  573. data/man/man8/puppet-module.8 +3 -3
  574. data/man/man8/puppet-node.8 +5 -5
  575. data/man/man8/puppet-parser.8 +1 -1
  576. data/man/man8/puppet-plugin.8 +1 -1
  577. data/man/man8/puppet-report.8 +5 -5
  578. data/man/man8/puppet-resource.8 +1 -1
  579. data/man/man8/puppet-script.8 +1 -1
  580. data/man/man8/puppet-ssl.8 +1 -1
  581. data/man/man8/puppet.8 +2 -2
  582. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
  583. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
  584. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
  585. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
  586. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
  587. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
  588. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
  589. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
  590. data/spec/fixtures/ssl/127.0.0.1-key.pem +107 -57
  591. data/spec/fixtures/ssl/127.0.0.1.pem +52 -31
  592. data/spec/fixtures/ssl/bad-basic-constraints.pem +57 -35
  593. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +57 -35
  594. data/spec/fixtures/ssl/ca.pem +57 -35
  595. data/spec/fixtures/ssl/crl.pem +28 -18
  596. data/spec/fixtures/ssl/ec-key-openssl.pem +8 -0
  597. data/spec/fixtures/ssl/ec-key-pk8.pem +5 -0
  598. data/spec/fixtures/ssl/ec-key.pem +11 -11
  599. data/spec/fixtures/ssl/ec.pem +33 -24
  600. data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
  601. data/spec/fixtures/ssl/encrypted-key.pem +108 -58
  602. data/spec/fixtures/ssl/intermediate-agent-crl.pem +28 -19
  603. data/spec/fixtures/ssl/intermediate-agent.pem +57 -36
  604. data/spec/fixtures/ssl/intermediate-crl.pem +31 -21
  605. data/spec/fixtures/ssl/intermediate.pem +57 -36
  606. data/spec/fixtures/ssl/oid-key.pem +117 -0
  607. data/spec/fixtures/ssl/oid.pem +69 -0
  608. data/spec/fixtures/ssl/pluto-key.pem +107 -57
  609. data/spec/fixtures/ssl/pluto.pem +52 -30
  610. data/spec/fixtures/ssl/request-key.pem +107 -57
  611. data/spec/fixtures/ssl/request.pem +47 -26
  612. data/spec/fixtures/ssl/revoked-key.pem +107 -57
  613. data/spec/fixtures/ssl/revoked.pem +52 -30
  614. data/spec/fixtures/ssl/signed-key.pem +107 -57
  615. data/spec/fixtures/ssl/signed.pem +52 -30
  616. data/spec/fixtures/ssl/tampered-cert.pem +52 -30
  617. data/spec/fixtures/ssl/tampered-csr.pem +47 -26
  618. data/spec/fixtures/ssl/trusted_oid_mapping.yaml +5 -0
  619. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +107 -57
  620. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +50 -29
  621. data/spec/fixtures/ssl/unknown-ca-key.pem +107 -57
  622. data/spec/fixtures/ssl/unknown-ca.pem +55 -33
  623. data/spec/integration/application/agent_spec.rb +102 -52
  624. data/spec/integration/application/filebucket_spec.rb +16 -0
  625. data/spec/integration/application/module_spec.rb +21 -0
  626. data/spec/integration/application/resource_spec.rb +64 -0
  627. data/spec/integration/application/ssl_spec.rb +20 -0
  628. data/spec/integration/configurer_spec.rb +17 -1
  629. data/spec/integration/defaults_spec.rb +5 -0
  630. data/spec/integration/environments/settings_interpolation_spec.rb +0 -4
  631. data/spec/integration/indirector/facts/facter_spec.rb +90 -36
  632. data/spec/integration/l10n/compiler_spec.rb +37 -0
  633. data/spec/integration/type/exec_spec.rb +70 -45
  634. data/spec/integration/type/file_spec.rb +5 -5
  635. data/spec/lib/puppet/test_ca.rb +7 -2
  636. data/spec/lib/puppet_spec/files.rb +1 -1
  637. data/spec/lib/puppet_spec/modules.rb +13 -2
  638. data/spec/lib/puppet_spec/puppetserver.rb +15 -0
  639. data/spec/lib/puppet_spec/settings.rb +1 -0
  640. data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
  641. data/spec/shared_contexts/l10n.rb +27 -0
  642. data/spec/shared_contexts/provider.rb +16 -0
  643. data/spec/spec_helper.rb +1 -10
  644. data/spec/unit/application/agent_spec.rb +7 -2
  645. data/spec/unit/configurer/downloader_spec.rb +6 -0
  646. data/spec/unit/configurer_spec.rb +288 -54
  647. data/spec/unit/environments_spec.rb +184 -0
  648. data/spec/unit/file_bucket/dipper_spec.rb +1 -1
  649. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
  650. data/spec/unit/file_serving/configuration_spec.rb +12 -4
  651. data/spec/unit/file_serving/fileset_spec.rb +60 -0
  652. data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
  653. data/spec/unit/file_system_spec.rb +6 -0
  654. data/spec/unit/functions/assert_type_spec.rb +1 -1
  655. data/spec/unit/functions/empty_spec.rb +10 -0
  656. data/spec/unit/functions/logging_spec.rb +1 -0
  657. data/spec/unit/functions/lookup_spec.rb +23 -0
  658. data/spec/unit/functions/unwrap_spec.rb +8 -0
  659. data/spec/unit/functions4_spec.rb +19 -10
  660. data/spec/unit/gettext/config_spec.rb +12 -0
  661. data/spec/unit/http/service/compiler_spec.rb +131 -0
  662. data/spec/unit/indirector/catalog/compiler_spec.rb +101 -10
  663. data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
  664. data/spec/unit/indirector/resource/ral_spec.rb +40 -75
  665. data/spec/unit/interface/action_spec.rb +0 -9
  666. data/spec/unit/module_spec.rb +14 -0
  667. data/spec/unit/module_tool/applications/installer_spec.rb +52 -14
  668. data/spec/unit/parser/compiler_spec.rb +29 -0
  669. data/spec/unit/parser/functions/fqdn_rand_spec.rb +15 -1
  670. data/spec/unit/parser/templatewrapper_spec.rb +12 -2
  671. data/spec/unit/pops/loaders/dependency_loader_spec.rb +0 -9
  672. data/spec/unit/pops/lookup/context_spec.rb +1 -1
  673. data/spec/unit/pops/parser/lexer2_spec.rb +0 -4
  674. data/spec/unit/pops/parser/parse_containers_spec.rb +0 -11
  675. data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
  676. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +18 -0
  677. data/spec/unit/pops/types/p_sensitive_type_spec.rb +18 -0
  678. data/spec/unit/provider/package/dnfmodule_spec.rb +3 -3
  679. data/spec/unit/provider/package/gem_spec.rb +3 -1
  680. data/spec/unit/provider/package/nim_spec.rb +42 -0
  681. data/spec/unit/provider/package/pip2_spec.rb +3 -1
  682. data/spec/unit/provider/package/pip3_spec.rb +3 -1
  683. data/spec/unit/provider/package/pip_spec.rb +40 -1
  684. data/spec/unit/provider/package/pkg_spec.rb +63 -49
  685. data/spec/unit/provider/package/puppet_gem_spec.rb +3 -1
  686. data/spec/unit/provider/package/puppetserver_gem_spec.rb +2 -0
  687. data/spec/unit/provider/package/windows/exe_package_spec.rb +17 -0
  688. data/spec/unit/provider/parsedfile_spec.rb +10 -0
  689. data/spec/unit/provider/service/base_spec.rb +8 -8
  690. data/spec/unit/provider/service/bsd_spec.rb +0 -4
  691. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  692. data/spec/unit/provider/service/debian_spec.rb +15 -17
  693. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  694. data/spec/unit/provider/service/gentoo_spec.rb +19 -14
  695. data/spec/unit/provider/service/init_spec.rb +29 -20
  696. data/spec/unit/provider/service/launchd_spec.rb +21 -12
  697. data/spec/unit/provider/service/openbsd_spec.rb +21 -35
  698. data/spec/unit/provider/service/openrc_spec.rb +15 -14
  699. data/spec/unit/provider/service/openwrt_spec.rb +3 -1
  700. data/spec/unit/provider/service/redhat_spec.rb +20 -19
  701. data/spec/unit/provider/service/smf_spec.rb +6 -5
  702. data/spec/unit/provider/service/src_spec.rb +5 -10
  703. data/spec/unit/provider/service/systemd_spec.rb +70 -30
  704. data/spec/unit/provider/service/upstart_spec.rb +25 -20
  705. data/spec/unit/provider/service/windows_spec.rb +202 -0
  706. data/spec/unit/provider/user/directoryservice_spec.rb +67 -35
  707. data/spec/unit/provider/user/useradd_spec.rb +3 -2
  708. data/spec/unit/resource/catalog_spec.rb +1 -1
  709. data/spec/unit/resource/type_collection_spec.rb +16 -0
  710. data/spec/unit/resource/type_spec.rb +2 -2
  711. data/spec/unit/settings/config_file_spec.rb +1 -11
  712. data/spec/unit/settings/value_translator_spec.rb +4 -5
  713. data/spec/unit/settings_spec.rb +120 -79
  714. data/spec/unit/ssl/ssl_provider_spec.rb +18 -16
  715. data/spec/unit/ssl/state_machine_spec.rb +19 -5
  716. data/spec/unit/transaction/additional_resource_generator_spec.rb +0 -2
  717. data/spec/unit/transaction_spec.rb +18 -20
  718. data/spec/unit/type/exec_spec.rb +76 -29
  719. data/spec/unit/type/file/selinux_spec.rb +3 -3
  720. data/spec/unit/type/file/source_spec.rb +4 -4
  721. data/spec/unit/type/service_spec.rb +59 -188
  722. data/spec/unit/type/tidy_spec.rb +24 -7
  723. data/spec/unit/type/user_spec.rb +45 -0
  724. data/spec/unit/util/at_fork_spec.rb +9 -9
  725. data/spec/unit/util/ldap/connection_spec.rb +10 -10
  726. data/spec/unit/util/ldap/manager_spec.rb +2 -2
  727. data/spec/unit/util/posix_spec.rb +1 -1
  728. data/spec/unit/util/selinux_spec.rb +87 -16
  729. data/spec/unit/util/windows/sid_spec.rb +39 -4
  730. data/spec/unit/util_spec.rb +1 -3
  731. data/spec/unit/x509/cert_provider_spec.rb +9 -1
  732. data/tasks/generate_cert_fixtures.rake +12 -3
  733. metadata +52 -95
  734. data/ext/README.environment +0 -8
  735. data/ext/dbfix.sql +0 -132
  736. data/ext/debian/README.Debian +0 -8
  737. data/ext/debian/README.source +0 -2
  738. data/ext/debian/TODO.Debian +0 -1
  739. data/ext/debian/changelog.erb +0 -1122
  740. data/ext/debian/compat +0 -1
  741. data/ext/debian/control +0 -144
  742. data/ext/debian/copyright +0 -339
  743. data/ext/debian/docs +0 -1
  744. data/ext/debian/fileserver.conf +0 -41
  745. data/ext/debian/puppet-common.dirs +0 -13
  746. data/ext/debian/puppet-common.install +0 -3
  747. data/ext/debian/puppet-common.lintian-overrides +0 -5
  748. data/ext/debian/puppet-common.manpages +0 -28
  749. data/ext/debian/puppet-common.postinst +0 -35
  750. data/ext/debian/puppet-common.postrm +0 -33
  751. data/ext/debian/puppet-el.dirs +0 -1
  752. data/ext/debian/puppet-el.emacsen-install +0 -25
  753. data/ext/debian/puppet-el.emacsen-remove +0 -11
  754. data/ext/debian/puppet-el.emacsen-startup +0 -9
  755. data/ext/debian/puppet-el.install +0 -1
  756. data/ext/debian/puppet-testsuite.install +0 -2
  757. data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
  758. data/ext/debian/puppet.lintian-overrides +0 -3
  759. data/ext/debian/puppet.logrotate +0 -20
  760. data/ext/debian/puppet.postinst +0 -20
  761. data/ext/debian/puppet.postrm +0 -20
  762. data/ext/debian/puppet.preinst +0 -20
  763. data/ext/debian/puppetmaster-common.install +0 -2
  764. data/ext/debian/puppetmaster-common.manpages +0 -2
  765. data/ext/debian/puppetmaster-common.postinst +0 -6
  766. data/ext/debian/puppetmaster-passenger.dirs +0 -4
  767. data/ext/debian/puppetmaster-passenger.postinst +0 -162
  768. data/ext/debian/puppetmaster-passenger.postrm +0 -61
  769. data/ext/debian/puppetmaster.README.debian +0 -17
  770. data/ext/debian/puppetmaster.default +0 -14
  771. data/ext/debian/puppetmaster.init +0 -137
  772. data/ext/debian/puppetmaster.lintian-overrides +0 -3
  773. data/ext/debian/puppetmaster.postinst +0 -20
  774. data/ext/debian/puppetmaster.postrm +0 -5
  775. data/ext/debian/puppetmaster.preinst +0 -22
  776. data/ext/debian/rules +0 -132
  777. data/ext/debian/source/format +0 -1
  778. data/ext/debian/source/options +0 -1
  779. data/ext/debian/vim-puppet.README.Debian +0 -13
  780. data/ext/debian/vim-puppet.dirs +0 -5
  781. data/ext/debian/vim-puppet.yaml +0 -7
  782. data/ext/debian/watch +0 -2
  783. data/ext/freebsd/puppetd +0 -26
  784. data/ext/freebsd/puppetmasterd +0 -26
  785. data/ext/gentoo/conf.d/puppet +0 -5
  786. data/ext/gentoo/conf.d/puppetmaster +0 -12
  787. data/ext/gentoo/init.d/puppet +0 -38
  788. data/ext/gentoo/init.d/puppetmaster +0 -51
  789. data/ext/gentoo/puppet/fileserver.conf +0 -41
  790. data/ext/ips/puppet-agent +0 -44
  791. data/ext/ips/puppet-master +0 -44
  792. data/ext/ips/puppet.p5m.erb +0 -12
  793. data/ext/ips/puppetagent.xml +0 -42
  794. data/ext/ips/puppetmaster.xml +0 -42
  795. data/ext/ips/rules +0 -19
  796. data/ext/ips/transforms +0 -34
  797. data/ext/ldap/puppet.schema +0 -24
  798. data/ext/logcheck/puppet +0 -23
  799. data/ext/osx/file_mapping.yaml +0 -28
  800. data/ext/osx/postflight.erb +0 -109
  801. data/ext/osx/preflight.erb +0 -52
  802. data/ext/osx/prototype.plist.erb +0 -38
  803. data/ext/redhat/fileserver.conf +0 -41
  804. data/ext/redhat/logrotate +0 -21
  805. data/ext/redhat/puppet.spec.erb +0 -841
  806. data/ext/redhat/server.init +0 -128
  807. data/ext/redhat/server.sysconfig +0 -13
  808. data/ext/solaris/pkginfo +0 -6
  809. data/ext/solaris/smf/puppetd.xml +0 -77
  810. data/ext/solaris/smf/puppetmasterd.xml +0 -77
  811. data/ext/solaris/smf/svc-puppetd +0 -71
  812. data/ext/solaris/smf/svc-puppetmasterd +0 -67
  813. data/ext/suse/puppet.spec +0 -310
  814. data/ext/suse/server.init +0 -173
  815. data/ext/yaml_nodes.rb +0 -105
  816. data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -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
@@ -36,7 +36,7 @@ module PuppetSpec::Modules
36
36
  end
37
37
  end
38
38
 
39
- if plans = options[:plans]
39
+ if (plans = options[:plans])
40
40
  plans_dir = File.join(module_dir, 'plans')
41
41
  FileUtils.mkdir_p(plans_dir)
42
42
  plans.each do |plan_file|
@@ -48,6 +48,17 @@ module PuppetSpec::Modules
48
48
  end
49
49
  end
50
50
 
51
+ if (scripts = options[:scripts])
52
+ scripts_dir = File.join(module_dir, 'scripts')
53
+ FileUtils.mkdir_p(scripts_dir)
54
+ scripts.each do |script_file|
55
+ if script_file.is_a?(String)
56
+ script_file = { :name => script_file, :content => "" }
57
+ end
58
+ File.write(File.join(scripts_dir, script_file[:name]), script_file[:content])
59
+ end
60
+ end
61
+
51
62
  (options[:files] || {}).each do |fname, content|
52
63
  path = File.join(module_dir, fname)
53
64
  FileUtils.mkdir_p(File.dirname(path))
@@ -61,7 +72,7 @@ module PuppetSpec::Modules
61
72
  module_dir = File.join(dir, name)
62
73
  FileUtils.mkdir_p(module_dir)
63
74
 
64
- if metadata = options[:metadata]
75
+ if (metadata = options[:metadata])
65
76
  File.open(File.join(module_dir, 'metadata.json'), 'w') do |f|
66
77
  f.write(metadata.to_json)
67
78
  end
@@ -31,6 +31,19 @@ class PuppetSpec::Puppetserver
31
31
  end
32
32
  end
33
33
 
34
+ class FileMetadataServlet < WEBrick::HTTPServlet::AbstractServlet
35
+ def do_GET request, response
36
+ response['Content-Type'] = 'application/json'
37
+ response.body = "{\"path\":\"/etc/puppetlabs/code/environments/production/modules\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":0,\"group\":0,\"mode\":493,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-03-06 20:14:25 UTC\"},\"type\":\"directory\",\"destination\":null}"
38
+ end
39
+ end
40
+
41
+ class FileContentServlet < WEBrick::HTTPServlet::AbstractServlet
42
+ def do_GET request, response
43
+ response.status = 404
44
+ end
45
+ end
46
+
34
47
  class ReportServlet < WEBrick::HTTPServlet::AbstractServlet
35
48
  def do_PUT request, response
36
49
  response['Content-Type'] = 'application/json'
@@ -106,7 +119,9 @@ class PuppetSpec::Puppetserver
106
119
  register_mount('/status/v1/simple/server', proc { |req, res| }, nil)
107
120
  register_mount('/puppet/v3/node', mounts[:node], NodeServlet)
108
121
  register_mount('/puppet/v3/catalog', mounts[:catalog], CatalogServlet)
122
+ register_mount('/puppet/v3/file_metadata', mounts[:file_metadata], FileMetadataServlet)
109
123
  register_mount('/puppet/v3/file_metadatas', mounts[:file_metadatas], FileMetadatasServlet)
124
+ register_mount('/puppet/v3/file_content', mounts[:file_content], FileContentServlet)
110
125
  register_mount('/puppet/v3/static_file_content', mounts[:static_file_content], StaticFileContentServlet)
111
126
  register_mount('/puppet/v3/report', mounts[:report], ReportServlet)
112
127
  register_mount('/puppet/v3/file_bucket_file', mounts[:filebucket], FilebucketServlet)
@@ -21,6 +21,7 @@ module PuppetSpec::Settings
21
21
  end.freeze
22
22
 
23
23
  def set_puppet_conf(confdir, settings)
24
+ FileUtils.mkdir_p(confdir)
24
25
  write_file(File.join(confdir, "puppet.conf"), settings)
25
26
  end
26
27
 
@@ -176,8 +176,6 @@ shared_examples_for "documentation on faces" do
176
176
  subject.license = "foo"
177
177
  expect(subject.license).to eq("foo")
178
178
  end
179
-
180
- it "should accept symbols to specify existing licenses..."
181
179
  end
182
180
 
183
181
  describe "#copyright" do
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.shared_context('l10n') do |locale|
4
+ before :all do
5
+ @old_locale = Locale.current
6
+ Locale.current = locale
7
+ Puppet::GettextConfig.setup_locale
8
+
9
+ # overwrite stubs with real implementation
10
+ ::Object.send(:remove_method, :_)
11
+ ::Object.send(:remove_method, :n_)
12
+ class ::Object
13
+ include FastGettext::Translation
14
+ end
15
+ end
16
+
17
+ after :all do
18
+ Locale.current = @old_locale
19
+
20
+ # restore stubs
21
+ load File.expand_path(File.join(__dir__, '../../lib/puppet/gettext/stubs.rb'))
22
+ end
23
+
24
+ before :each do
25
+ Puppet[:disable_i18n] = false
26
+ end
27
+ 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
@@ -68,16 +68,7 @@ VCR.turn_off!
68
68
  RSpec.configure do |config|
69
69
  include PuppetSpec::Fixtures
70
70
 
71
- # Examples or groups can selectively tag themselves as broken.
72
- # For example;
73
- #
74
- # rbv = "#{RUBY_VERSION}-p#{RbConfig::CONFIG['PATCHLEVEL']}"
75
- # describe "mostly working", :broken => false unless rbv == "1.9.3-p327" do
76
- # it "parses a valid IP" do
77
- # IPAddr.new("::2:3:4:5:6:7:8")
78
- # end
79
- # end
80
- exclude_filters = {:broken => true}
71
+ exclude_filters = {}
81
72
  exclude_filters[:benchmark] = true unless ENV['BENCHMARK']
82
73
  config.filter_run_excluding exclude_filters
83
74
 
@@ -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)
@@ -7,6 +7,9 @@ describe Puppet::Configurer do
7
7
  Puppet[:report] = true
8
8
 
9
9
  catalog.add_resource(resource)
10
+ allow_any_instance_of(described_class).to(
11
+ receive(:valid_server_environment?).and_return(true)
12
+ )
10
13
  end
11
14
 
12
15
  let(:node_name) { Puppet[:node_name_value] }
@@ -78,10 +81,10 @@ describe Puppet::Configurer do
78
81
  configurer.run(:pluginsync => false)
79
82
  end
80
83
 
81
- it "should carry on when it can't fetch its node definition" do
82
- error = Net::HTTPError.new(400, 'dummy server communication error')
83
- expect(Puppet::Node.indirection).to receive(:find).and_raise(error)
84
- expect(configurer.run).to eq(0)
84
+ it "does not download plugins when specified environment is not vaild on server" do
85
+ expect(configurer).to receive(:valid_server_environment?).and_return(false)
86
+ expect(configurer).not_to receive(:download_plugins)
87
+ configurer.run(:pluginsync => true)
85
88
  end
86
89
 
87
90
  it "fails the run if pluginsync fails when usecacheonfailure is false" do
@@ -125,7 +128,6 @@ describe Puppet::Configurer do
125
128
  it "applies a cached catalog when it can't connect to the master" do
126
129
  error = Errno::ECONNREFUSED.new('Connection refused - connect(2)')
127
130
 
128
- expect(Puppet::Node.indirection).to receive(:find).and_raise(error)
129
131
  expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(:ignore_cache => true)).and_raise(error)
130
132
  expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(:ignore_terminus => true)).and_return(catalog)
131
133
 
@@ -149,6 +151,126 @@ describe Puppet::Configurer do
149
151
  expect(report.host).to eq('node_name_from_fact')
150
152
  end
151
153
 
154
+ it "should warn the user when the fact value length limits are exceeded" do
155
+ Puppet[:fact_name_length_soft_limit] = 0
156
+ Puppet[:fact_value_length_soft_limit] = 1
157
+ Puppet[:top_level_facts_soft_limit] = 0
158
+ Puppet[:number_of_facts_soft_limit] = 0
159
+ Puppet[:payload_soft_limit] = 0
160
+
161
+ facts.values = { 'processors' => {
162
+ 'cores' => 1,
163
+ 'count' => 2,
164
+ 'isa' => "i386",
165
+ 'models' => [
166
+ "CPU1 @ 2.80GHz"
167
+ ],
168
+ 'physicalcount' => 4 }
169
+ }
170
+ Puppet::Node::Facts.indirection.save(facts)
171
+
172
+ expect(Puppet).to receive(:warning).with(/Fact value '.+' with the value length: '[1-9]*' exceeds the value length limit: [1-9]*/).twice
173
+ configurer.run
174
+ end
175
+
176
+ it "should warn the user when the payload limits are exceeded" do
177
+ Puppet[:fact_name_length_soft_limit] = 0
178
+ Puppet[:fact_value_length_soft_limit] = 0
179
+ Puppet[:top_level_facts_soft_limit] = 0
180
+ Puppet[:number_of_facts_soft_limit] = 0
181
+ Puppet[:payload_soft_limit] = 1
182
+
183
+ facts.values = { 'processors' => {
184
+ 'cores' => 1,
185
+ 'count' => 2,
186
+ 'isa' => "i386",
187
+ 'models' => [
188
+ "CPU1 @ 2.80GHz"
189
+ ],
190
+ 'physicalcount' => 4 }
191
+ }
192
+ Puppet::Node::Facts.indirection.save(facts)
193
+
194
+ expect(Puppet).to receive(:warning).with(/Payload with the current size of: '[1-9]*' exceeds the payload size limit: [1-9]*/)
195
+ configurer.run
196
+ end
197
+
198
+ it "should warn the user when the total number of facts limit is exceeded" do
199
+ Puppet[:fact_name_length_soft_limit] = 0
200
+ Puppet[:fact_value_length_soft_limit] = 0
201
+ Puppet[:top_level_facts_soft_limit] = 0
202
+ Puppet[:number_of_facts_soft_limit] = 1
203
+ Puppet[:payload_soft_limit] = 0
204
+
205
+ facts.values = {
206
+ 'processors' => {
207
+ 'cores' => 1,
208
+ 'count' => 2,
209
+ 'isa' => "i386",
210
+ 'models' => [
211
+ "CPU1 @ 2.80GHz",
212
+ "CPU1 @ 2.80GHz",
213
+ "CPU1 @ 2.80GHz",
214
+ "CPU1 @ 2.80GHz",
215
+ "CPU1 @ 2.80GHz",
216
+ {
217
+ 'processors' => {
218
+ 'cores' => [1,2]
219
+ }
220
+ }
221
+ ],
222
+ 'physicalcount' => 4
223
+ }
224
+ }
225
+ Puppet::Node::Facts.indirection.save(facts)
226
+
227
+ expect(Puppet).to receive(:warning).with(/The current total number of facts: [1-9]* exceeds the number of facts limit: [1-9]*/)
228
+ configurer.run
229
+ end
230
+
231
+ it "should warn the user when the top level facts size limits are exceeded" do
232
+ Puppet[:fact_name_length_soft_limit] = 0
233
+ Puppet[:fact_value_length_soft_limit] = 0
234
+ Puppet[:top_level_facts_soft_limit] = 1
235
+ Puppet[:number_of_facts_soft_limit] = 0
236
+ Puppet[:payload_soft_limit] = 0
237
+
238
+ facts.values = {'my_new_fact_name' => 'my_new_fact_value',
239
+ 'my_new_fact_name2' => 'my_new_fact_value2'}
240
+ Puppet::Node::Facts.indirection.save(facts)
241
+
242
+ expect(Puppet).to receive(:warning).with(/The current number of top level facts: [1-9]* exceeds the top facts limit: [1-9]*/)
243
+ configurer.run
244
+ end
245
+
246
+ it "should warn the user when the fact name length limits are exceeded" do
247
+ Puppet[:fact_name_length_soft_limit] = 1
248
+ Puppet[:fact_value_length_soft_limit] = 0
249
+ Puppet[:top_level_facts_soft_limit] = 0
250
+ Puppet[:number_of_facts_soft_limit] = 0
251
+ Puppet[:payload_soft_limit] = 0
252
+
253
+ facts.values = {'my_new_fact_name' => 'my_new_fact_value'}
254
+ Puppet::Node::Facts.indirection.save(facts)
255
+
256
+ expect(Puppet).to receive(:warning).with(/Fact .+ with length: '[1-9]*' exceeds the length limit: [1-9]*/)
257
+ configurer.run
258
+ end
259
+
260
+ it "shouldn't warn the user when the fact limit settings are set to 0" do
261
+ Puppet[:fact_name_length_soft_limit] = 0
262
+ Puppet[:fact_value_length_soft_limit] = 0
263
+ Puppet[:top_level_facts_soft_limit] = 0
264
+ Puppet[:number_of_facts_soft_limit] = 0
265
+ Puppet[:payload_soft_limit] = 0
266
+
267
+ facts.values = {'my_new_fact_name' => 'my_new_fact_value'}
268
+ Puppet::Node::Facts.indirection.save(facts)
269
+
270
+ expect(Puppet).not_to receive(:warning)
271
+ configurer.run
272
+ end
273
+
152
274
  it "creates a new report when applying the catalog" do
153
275
  options = {}
154
276
  configurer.run(options)
@@ -553,24 +675,6 @@ describe Puppet::Configurer do
553
675
  end
554
676
  end
555
677
 
556
- describe "when requesting a node" do
557
- it "uses the transaction uuid in the request" do
558
- expect(Puppet::Node.indirection).to receive(:find).with(anything, hash_including(transaction_uuid: anything)).twice
559
- configurer.run
560
- end
561
-
562
- it "sends an explicitly configured environment request" do
563
- expect(Puppet.settings).to receive(:set_by_config?).with(:environment).and_return(true)
564
- expect(Puppet::Node.indirection).to receive(:find).with(anything, hash_including(configured_environment: Puppet[:environment])).twice
565
- configurer.run
566
- end
567
-
568
- it "does not send a configured_environment when using the default" do
569
- expect(Puppet::Node.indirection).to receive(:find).with(anything, hash_including(configured_environment: nil)).twice
570
- configurer.run
571
- end
572
- end
573
-
574
678
  def expects_pluginsync
575
679
  metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":0,\"group\":0,\"mode\":420,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
576
680
  stub_request(:get, %r{/puppet/v3/file_metadatas/(plugins|locales)}).to_return(status: 200, body: metadata, headers: {'Content-Type' => 'application/json'})
@@ -581,7 +685,7 @@ describe Puppet::Configurer do
581
685
  end
582
686
 
583
687
  def expects_new_catalog_only(catalog)
584
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
688
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true, check_environment: true)).and_return(catalog)
585
689
  expect(Puppet::Resource::Catalog.indirection).not_to receive(:find).with(anything, hash_including(ignore_terminus: true))
586
690
  end
587
691
 
@@ -598,7 +702,7 @@ describe Puppet::Configurer do
598
702
  def expects_fallback_to_new_catalog(catalog)
599
703
  expects_pluginsync
600
704
  expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(nil)
601
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
705
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true, check_environment: true)).and_return(catalog)
602
706
  end
603
707
 
604
708
  def expects_neither_new_or_cached_catalog
@@ -622,21 +726,13 @@ describe Puppet::Configurer do
622
726
  configurer.run
623
727
  end
624
728
 
625
- it "should not make a node request or pluginsync when a cached catalog is successfully retrieved" do
626
- expect(Puppet::Node.indirection).not_to receive(:find)
729
+ it "should not pluginsync when a cached catalog is successfully retrieved" do
627
730
  expects_cached_catalog_only(catalog)
628
731
  expect(configurer).not_to receive(:download_plugins)
629
732
 
630
733
  configurer.run
631
734
  end
632
735
 
633
- it "should make a node request and pluginsync when a cached catalog cannot be retrieved" do
634
- expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
635
- expects_fallback_to_new_catalog(catalog)
636
-
637
- configurer.run
638
- end
639
-
640
736
  it "should set its cached_catalog_status to 'explicitly_requested'" do
641
737
  expects_cached_catalog_only(catalog)
642
738
 
@@ -672,7 +768,6 @@ describe Puppet::Configurer do
672
768
  it "should not attempt to retrieve a cached catalog again if the first attempt failed" do
673
769
  Puppet[:ignore_plugin_errors] = true
674
770
 
675
- expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
676
771
  expects_neither_new_or_cached_catalog
677
772
  expects_pluginsync
678
773
 
@@ -728,16 +823,6 @@ describe Puppet::Configurer do
728
823
  Puppet.settings[:strict_environment_mode] = true
729
824
  end
730
825
 
731
- it "should not make a node request" do
732
- stub_request(:get, %r{/puppet/v3/file_metadatas?/plugins}).to_return(:status => 404)
733
- stub_request(:get, %r{/puppet/v3/file_metadatas?/pluginfacts}).to_return(:status => 404)
734
- expects_new_catalog_only(catalog)
735
-
736
- expect(Puppet::Node.indirection).not_to receive(:find)
737
-
738
- configurer.run
739
- end
740
-
741
826
  it "should return nil when the catalog's environment doesn't match the agent specified environment" do
742
827
  Puppet[:environment] = 'second_env'
743
828
  configurer = Puppet::Configurer.new
@@ -951,9 +1036,23 @@ describe Puppet::Configurer do
951
1036
  expect(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(apple, banana, banana)
952
1037
 
953
1038
  allow(Puppet).to receive(:notice)
1039
+ allow(Puppet).to receive(:push_context)
954
1040
  expect(Puppet).to receive(:notice).with("Local environment: 'production' doesn't match server specified environment 'apple', restarting agent run with environment 'apple'")
955
1041
  expect(Puppet).to receive(:notice).with("Local environment: 'apple' doesn't match server specified environment 'banana', restarting agent run with environment 'banana'")
956
1042
 
1043
+ expect(Puppet).to receive(:push_context).with(
1044
+ hash_including(current_environment: an_object_having_attributes(name: :production)),
1045
+ 'Local node environment production for configurer transaction'
1046
+ )
1047
+ expect(Puppet).to receive(:push_context).with(
1048
+ hash_including(current_environment: an_object_having_attributes(name: :apple)),
1049
+ 'Local node environment apple for configurer transaction'
1050
+ )
1051
+ expect(Puppet).to receive(:push_context).with(
1052
+ hash_including(current_environment: an_object_having_attributes(name: :banana)),
1053
+ 'Local node environment banana for configurer transaction'
1054
+ )
1055
+
957
1056
  configurer.run
958
1057
  end
959
1058
 
@@ -1075,6 +1174,29 @@ describe Puppet::Configurer do
1075
1174
  }.to raise_error(Puppet::Error, /Could not select a functional puppet server from server_list: 'myserver:123,someotherservername'/)
1076
1175
  end
1077
1176
 
1177
+ it "should warn when servers in 'server_list' are unreachable" do
1178
+ Puppet.settings[:server_list] = "mybadserver1:123,mybadserver2:123,mygoodserver"
1179
+ Puppet[:usecacheonfailure] = false
1180
+
1181
+ stub_request(:get, 'https://mybadserver1:123/status/v1/simple/server').and_raise(Puppet::HTTP::HTTPError)
1182
+ stub_request(:get, 'https://mybadserver2:123/status/v1/simple/server').and_raise(Puppet::HTTP::HTTPError)
1183
+ stub_request(:get, 'https://mygoodserver:8140/status/v1/simple/server').to_return(status: 200)
1184
+
1185
+ expect(Puppet).to receive(:warning).with(/^Unable to connect to server from server_list setting:.*Trying with next server from server_list.$/).twice
1186
+ configurer.run
1187
+ end
1188
+
1189
+ it "should warn when servers in 'server_list' respond with error" do
1190
+ Puppet.settings[:server_list] = "mybadserver:123,someotherservername"
1191
+ Puppet[:usecacheonfailure] = false
1192
+
1193
+ stub_request(:get, 'https://mybadserver:123/status/v1/simple/server').to_return(status: 400)
1194
+ stub_request(:get, 'https://someotherservername:8140/status/v1/simple/server').to_return(status: 200)
1195
+
1196
+ expect(Puppet).to receive(:warning).with(/^Puppet server mybadserver:123 is unavailable: 400 Trying with next server from server_list.$/)
1197
+ configurer.run
1198
+ end
1199
+
1078
1200
  it "should not error when usecacheonfailure is true and no servers in 'server_list' are reachable" do
1079
1201
  Puppet.settings[:server_list] = "myserver:123,someotherservername"
1080
1202
  Puppet[:usecacheonfailure] = true
@@ -1087,20 +1209,132 @@ describe Puppet::Configurer do
1087
1209
  expect(configurer.run(options)).to eq(0)
1088
1210
  expect(options[:report].server_used).to be_nil
1089
1211
  end
1212
+ end
1090
1213
 
1091
- it "should not make multiple node requests when the server is found" do
1092
- Puppet.settings[:server_list] = ["myserver:123"]
1214
+ describe "when selecting an environment" do
1215
+ include PuppetSpec::Files
1216
+ include PuppetSpec::Settings
1093
1217
 
1094
- Puppet::Node.indirection.terminus_class = :rest
1095
- Puppet::Resource::Catalog.indirection.terminus_class = :rest
1218
+ describe "when the last used environment is available" do
1219
+ let(:last_server_specified_environment) { 'development' }
1096
1220
 
1097
- stub_request(:get, 'https://myserver:123/status/v1/simple/server').to_return(status: 200)
1098
- stub_request(:post, %r{https://myserver:123/puppet/v3/catalog}).to_return(status: 200)
1099
- node_request = stub_request(:get, %r{https://myserver:123/puppet/v3/node/}).to_return(status: 200)
1221
+ before do
1222
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
1223
+ ---
1224
+ version:
1225
+ config: 1624882680
1226
+ puppet: 6.24.0
1227
+ application:
1228
+ initial_environment: #{Puppet[:environment]}
1229
+ converged_environment: #{last_server_specified_environment}
1230
+ run_mode: agent
1231
+ SUMMARY
1232
+ end
1100
1233
 
1101
- configurer.run
1234
+ it "prefers the environment set via cli" do
1235
+ Puppet.settings.handlearg('--environment', 'usethis')
1236
+ configurer.run
1237
+
1238
+ expect(configurer.environment).to eq('usethis')
1239
+ end
1240
+
1241
+ it "prefers the environment set via config" do
1242
+ FileUtils.mkdir_p(Puppet[:confdir])
1243
+ set_puppet_conf(Puppet[:confdir], <<~CONF)
1244
+ [main]
1245
+ environment = usethis
1246
+ CONF
1247
+
1248
+ Puppet.initialize_settings
1249
+ configurer.run
1102
1250
 
1103
- expect(node_request).to have_been_requested.once
1251
+ expect(configurer.environment).to eq('usethis')
1252
+ end
1253
+
1254
+ it "uses environment from Puppet[:environment] if given a catalog" do
1255
+ configurer.run(catalog: catalog)
1256
+
1257
+ expect(configurer.environment).to eq(Puppet[:environment])
1258
+ end
1259
+
1260
+ it "uses environment from Puppet[:environment] if use_cached_catalog = true" do
1261
+ Puppet[:use_cached_catalog] = true
1262
+ expects_cached_catalog_only(catalog)
1263
+ configurer.run
1264
+
1265
+ expect(configurer.environment).to eq(Puppet[:environment])
1266
+ end
1267
+
1268
+ describe "when the environment is not set via CLI" do
1269
+ it "uses the environment found in lastrunfile if the key exists" do
1270
+ configurer.run
1271
+
1272
+ expect(configurer.environment).to eq(last_server_specified_environment)
1273
+ end
1274
+
1275
+ it "uses environment from Puppet[:environment] if strict_environment_mode is set" do
1276
+ Puppet[:strict_environment_mode] = true
1277
+ configurer.run
1278
+
1279
+ expect(configurer.environment).to eq(Puppet[:environment])
1280
+ end
1281
+
1282
+ it "uses environment from Puppet[:environment] if initial_environment is the same as converged_environment" do
1283
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
1284
+ ---
1285
+ version:
1286
+ config: 1624882680
1287
+ puppet: 6.24.0
1288
+ application:
1289
+ initial_environment: development
1290
+ converged_environment: development
1291
+ run_mode: agent
1292
+ SUMMARY
1293
+ configurer.run
1294
+
1295
+ expect(configurer.environment).to eq(Puppet[:environment])
1296
+ end
1297
+
1298
+ it "uses environment from Puppet[:environment] if the run mode doesn't match" do
1299
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
1300
+ ---
1301
+ version:
1302
+ config: 1624882680
1303
+ puppet: 6.24.0
1304
+ application:
1305
+ initial_environment: #{Puppet[:environment]}
1306
+ converged_environment: #{last_server_specified_environment}
1307
+ run_mode: user
1308
+ SUMMARY
1309
+ configurer.run
1310
+
1311
+ expect(configurer.environment).to eq(Puppet[:environment])
1312
+ end
1313
+
1314
+ it "uses environment from Puppet[:environment] if lastrunfile is invalid YAML" do
1315
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
1316
+ Key: 'this is my very very very ' +
1317
+ 'long string'
1318
+ SUMMARY
1319
+ configurer.run
1320
+
1321
+ expect(configurer.environment).to eq(Puppet[:environment])
1322
+ end
1323
+
1324
+ it "uses environment from Puppet[:environment] if lastrunfile exists but is empty" do
1325
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', '')
1326
+ configurer.run
1327
+
1328
+ expect(configurer.environment).to eq(Puppet[:environment])
1329
+ end
1330
+
1331
+ it "uses environment from Puppet[:environment] if the last used one cannot be found" do
1332
+ Puppet[:lastrunfile] = tmpfile('last_run_summary.yaml')
1333
+ configurer.run
1334
+
1335
+ expect(configurer.environment).to eq(Puppet[:environment])
1336
+ end
1337
+ end
1104
1338
  end
1105
1339
  end
1106
1340
  end