puppet 6.11.1-x64-mingw32 → 6.16.0-x64-mingw32

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

Potentially problematic release.


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

Files changed (395) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +3 -8
  3. data/CONTRIBUTING.md +7 -13
  4. data/Gemfile +1 -0
  5. data/Gemfile.lock +39 -36
  6. data/README.md +17 -24
  7. data/ext/build_defaults.yaml +1 -0
  8. data/ext/project_data.yaml +1 -1
  9. data/ext/windows/service/daemon.rb +25 -20
  10. data/lib/puppet.rb +52 -13
  11. data/lib/puppet/agent.rb +20 -14
  12. data/lib/puppet/application/agent.rb +12 -14
  13. data/lib/puppet/application/describe.rb +7 -5
  14. data/lib/puppet/application/device.rb +2 -2
  15. data/lib/puppet/application/filebucket.rb +19 -15
  16. data/lib/puppet/application/plugin.rb +1 -0
  17. data/lib/puppet/application/resource.rb +1 -1
  18. data/lib/puppet/application/ssl.rb +4 -4
  19. data/lib/puppet/concurrent.rb +2 -0
  20. data/lib/puppet/concurrent/lock.rb +16 -0
  21. data/lib/puppet/concurrent/synchronized.rb +15 -0
  22. data/lib/puppet/concurrent/thread_local_singleton.rb +14 -0
  23. data/lib/puppet/configurer.rb +85 -83
  24. data/lib/puppet/configurer/plugin_handler.rb +10 -1
  25. data/lib/puppet/context/trusted_information.rb +14 -8
  26. data/lib/puppet/daemon.rb +13 -27
  27. data/lib/puppet/defaults.rb +158 -40
  28. data/lib/puppet/environments.rb +30 -20
  29. data/lib/puppet/error.rb +9 -1
  30. data/lib/puppet/face/facts.rb +8 -5
  31. data/lib/puppet/face/help.rb +29 -3
  32. data/lib/puppet/face/module/search.rb +5 -0
  33. data/lib/puppet/face/plugin.rb +2 -2
  34. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  35. data/lib/puppet/file_system/file_impl.rb +13 -9
  36. data/lib/puppet/file_system/memory_file.rb +6 -0
  37. data/lib/puppet/file_system/memory_impl.rb +13 -0
  38. data/lib/puppet/file_system/uniquefile.rb +4 -0
  39. data/lib/puppet/file_system/windows.rb +7 -10
  40. data/lib/puppet/forge.rb +3 -3
  41. data/lib/puppet/forge/errors.rb +2 -2
  42. data/lib/puppet/forge/repository.rb +31 -86
  43. data/lib/puppet/functions/call.rb +1 -1
  44. data/lib/puppet/functions/camelcase.rb +2 -2
  45. data/lib/puppet/functions/epp.rb +4 -4
  46. data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
  47. data/lib/puppet/functions/filter.rb +1 -0
  48. data/lib/puppet/functions/find_file.rb +9 -9
  49. data/lib/puppet/functions/find_template.rb +63 -0
  50. data/lib/puppet/functions/inline_epp.rb +5 -5
  51. data/lib/puppet/functions/reduce.rb +2 -4
  52. data/lib/puppet/http.rb +7 -0
  53. data/lib/puppet/http/client.rb +341 -54
  54. data/lib/puppet/http/errors.rb +2 -0
  55. data/lib/puppet/http/external_client.rb +90 -0
  56. data/lib/puppet/http/redirector.rb +34 -0
  57. data/lib/puppet/http/resolver.rb +57 -1
  58. data/lib/puppet/http/resolver/server_list.rb +98 -0
  59. data/lib/puppet/http/resolver/settings.rb +23 -2
  60. data/lib/puppet/http/resolver/srv.rb +36 -4
  61. data/lib/puppet/http/response.rb +68 -1
  62. data/lib/puppet/http/retry_after_handler.rb +39 -0
  63. data/lib/puppet/http/service.rb +179 -3
  64. data/lib/puppet/http/service/ca.rb +84 -21
  65. data/lib/puppet/http/service/compiler.rb +319 -0
  66. data/lib/puppet/http/service/file_server.rb +206 -0
  67. data/lib/puppet/http/service/report.rb +66 -0
  68. data/lib/puppet/http/session.rb +106 -31
  69. data/lib/puppet/indirector/catalog/compiler.rb +10 -0
  70. data/lib/puppet/indirector/catalog/rest.rb +34 -0
  71. data/lib/puppet/indirector/facts/rest.rb +42 -0
  72. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  73. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  74. data/lib/puppet/indirector/file_content/http.rb +5 -0
  75. data/lib/puppet/indirector/file_content/rest.rb +30 -0
  76. data/lib/puppet/indirector/file_metadata/http.rb +4 -4
  77. data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
  78. data/lib/puppet/indirector/json.rb +1 -1
  79. data/lib/puppet/indirector/msgpack.rb +1 -1
  80. data/lib/puppet/indirector/node/rest.rb +24 -0
  81. data/lib/puppet/indirector/report/rest.rb +19 -0
  82. data/lib/puppet/indirector/report/yaml.rb +23 -0
  83. data/lib/puppet/indirector/rest.rb +12 -0
  84. data/lib/puppet/indirector/status/rest.rb +18 -0
  85. data/lib/puppet/loaders.rb +6 -0
  86. data/lib/puppet/metatype/manager.rb +80 -80
  87. data/lib/puppet/network/http/base_pool.rb +19 -1
  88. data/lib/puppet/network/http/compression.rb +7 -0
  89. data/lib/puppet/network/http/connection.rb +6 -0
  90. data/lib/puppet/network/http/connection_adapter.rb +182 -0
  91. data/lib/puppet/network/http/nocache_pool.rb +2 -0
  92. data/lib/puppet/network/http/pool.rb +13 -6
  93. data/lib/puppet/network/http_pool.rb +2 -1
  94. data/lib/puppet/node/environment.rb +24 -8
  95. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  96. data/lib/puppet/pal/pal_impl.rb +9 -29
  97. data/lib/puppet/parser/ast/pops_bridge.rb +6 -11
  98. data/lib/puppet/parser/compiler.rb +42 -32
  99. data/lib/puppet/parser/functions.rb +18 -13
  100. data/lib/puppet/parser/functions/epp.rb +3 -3
  101. data/lib/puppet/parser/functions/filter.rb +1 -0
  102. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  103. data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
  104. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  105. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  106. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
  107. data/lib/puppet/pops/loaders.rb +7 -5
  108. data/lib/puppet/pops/lookup/invocation.rb +10 -3
  109. data/lib/puppet/pops/model/pn_transformer.rb +5 -9
  110. data/lib/puppet/pops/parser/evaluating_parser.rb +8 -11
  111. data/lib/puppet/pops/serialization/json_path.rb +3 -3
  112. data/lib/puppet/pops/time/timespan.rb +3 -5
  113. data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
  114. data/lib/puppet/pops/types/string_converter.rb +6 -9
  115. data/lib/puppet/pops/types/type_calculator.rb +30 -10
  116. data/lib/puppet/pops/types/type_formatter.rb +9 -11
  117. data/lib/puppet/pops/types/type_parser.rb +3 -3
  118. data/lib/puppet/pops/validation/checker4_0.rb +1 -1
  119. data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
  120. data/lib/puppet/provider/aix_object.rb +4 -2
  121. data/lib/puppet/provider/group/aix.rb +1 -0
  122. data/lib/puppet/provider/group/groupadd.rb +57 -24
  123. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  124. data/lib/puppet/provider/package/aix.rb +17 -2
  125. data/lib/puppet/provider/package/apt.rb +78 -4
  126. data/lib/puppet/provider/package/dnfmodule.rb +69 -15
  127. data/lib/puppet/provider/package/dpkg.rb +14 -7
  128. data/lib/puppet/provider/package/fink.rb +20 -3
  129. data/lib/puppet/provider/package/gem.rb +41 -7
  130. data/lib/puppet/provider/package/openbsd.rb +13 -1
  131. data/lib/puppet/provider/package/pacman.rb +2 -5
  132. data/lib/puppet/provider/package/pip.rb +143 -48
  133. data/lib/puppet/provider/package/pip3.rb +0 -2
  134. data/lib/puppet/provider/package/pkg.rb +18 -5
  135. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  136. data/lib/puppet/provider/package/pkgng.rb +16 -4
  137. data/lib/puppet/provider/package/portage.rb +5 -5
  138. data/lib/puppet/provider/package/puppet_gem.rb +6 -2
  139. data/lib/puppet/provider/package/rpm.rb +6 -213
  140. data/lib/puppet/provider/package/yum.rb +108 -24
  141. data/lib/puppet/provider/package/zypper.rb +59 -1
  142. data/lib/puppet/provider/package_targetable.rb +5 -4
  143. data/lib/puppet/provider/service/systemd.rb +23 -5
  144. data/lib/puppet/provider/user/aix.rb +1 -0
  145. data/lib/puppet/provider/user/directoryservice.rb +30 -5
  146. data/lib/puppet/provider/user/hpux.rb +1 -1
  147. data/lib/puppet/provider/user/useradd.rb +11 -8
  148. data/lib/puppet/reports/http.rb +13 -9
  149. data/lib/puppet/reports/store.rb +1 -1
  150. data/lib/puppet/resource/type_collection.rb +20 -16
  151. data/lib/puppet/runtime.rb +32 -1
  152. data/lib/puppet/settings.rb +4 -0
  153. data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
  154. data/lib/puppet/ssl.rb +1 -0
  155. data/lib/puppet/ssl/certificate.rb +2 -1
  156. data/lib/puppet/ssl/host.rb +4 -4
  157. data/lib/puppet/ssl/oids.rb +1 -0
  158. data/lib/puppet/ssl/ssl_provider.rb +20 -0
  159. data/lib/puppet/ssl/state_machine.rb +81 -35
  160. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  161. data/lib/puppet/test/test_helper.rb +7 -1
  162. data/lib/puppet/transaction.rb +33 -11
  163. data/lib/puppet/transaction/report.rb +2 -2
  164. data/lib/puppet/transaction/resource_harness.rb +1 -1
  165. data/lib/puppet/type.rb +7 -2
  166. data/lib/puppet/type/file.rb +13 -0
  167. data/lib/puppet/type/file/data_sync.rb +5 -1
  168. data/lib/puppet/type/file/source.rb +49 -58
  169. data/lib/puppet/type/group.rb +5 -4
  170. data/lib/puppet/type/package.rb +102 -10
  171. data/lib/puppet/type/service.rb +6 -8
  172. data/lib/puppet/type/user.rb +6 -30
  173. data/lib/puppet/util.rb +34 -11
  174. data/lib/puppet/util/at_fork.rb +1 -1
  175. data/lib/puppet/util/autoload.rb +4 -18
  176. data/lib/puppet/util/instance_loader.rb +14 -10
  177. data/lib/puppet/util/log/destinations.rb +2 -11
  178. data/lib/puppet/util/logging.rb +30 -18
  179. data/lib/puppet/util/package/version/debian.rb +175 -0
  180. data/lib/puppet/util/package/version/gem.rb +15 -0
  181. data/lib/puppet/util/package/version/pip.rb +167 -0
  182. data/lib/puppet/util/package/version/range.rb +53 -0
  183. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  184. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  185. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  186. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  187. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  188. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  189. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  190. data/lib/puppet/util/package/version/rpm.rb +73 -0
  191. data/lib/puppet/util/pidlock.rb +36 -10
  192. data/lib/puppet/util/platform.rb +5 -0
  193. data/lib/puppet/util/plist.rb +6 -0
  194. data/lib/puppet/util/rpm_compare.rb +193 -0
  195. data/lib/puppet/util/storage.rb +0 -1
  196. data/lib/puppet/util/windows/adsi.rb +50 -20
  197. data/lib/puppet/util/windows/process.rb +15 -14
  198. data/lib/puppet/util/windows/security.rb +1 -0
  199. data/lib/puppet/util/windows/sid.rb +3 -3
  200. data/lib/puppet/util/yaml.rb +1 -1
  201. data/lib/puppet/version.rb +1 -1
  202. data/lib/puppet/x509/cert_provider.rb +9 -5
  203. data/locales/puppet.pot +640 -521
  204. data/man/man5/puppet.conf.5 +88 -9
  205. data/man/man8/puppet-agent.8 +6 -6
  206. data/man/man8/puppet-apply.8 +1 -1
  207. data/man/man8/puppet-catalog.8 +1 -1
  208. data/man/man8/puppet-config.8 +1 -1
  209. data/man/man8/puppet-describe.8 +1 -1
  210. data/man/man8/puppet-device.8 +2 -2
  211. data/man/man8/puppet-doc.8 +1 -1
  212. data/man/man8/puppet-epp.8 +1 -1
  213. data/man/man8/puppet-facts.8 +1 -1
  214. data/man/man8/puppet-filebucket.8 +17 -2
  215. data/man/man8/puppet-generate.8 +1 -1
  216. data/man/man8/puppet-help.8 +6 -3
  217. data/man/man8/puppet-key.8 +1 -1
  218. data/man/man8/puppet-lookup.8 +1 -1
  219. data/man/man8/puppet-man.8 +1 -1
  220. data/man/man8/puppet-module.8 +4 -1
  221. data/man/man8/puppet-node.8 +1 -1
  222. data/man/man8/puppet-parser.8 +1 -1
  223. data/man/man8/puppet-plugin.8 +1 -1
  224. data/man/man8/puppet-report.8 +1 -1
  225. data/man/man8/puppet-resource.8 +1 -1
  226. data/man/man8/puppet-script.8 +1 -1
  227. data/man/man8/puppet-ssl.8 +2 -2
  228. data/man/man8/puppet-status.8 +1 -1
  229. data/man/man8/puppet.8 +2 -2
  230. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  231. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  232. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  233. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  234. data/spec/fixtures/unit/forge/bacula.json +76 -0
  235. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  236. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  237. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  238. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  239. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  240. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -102
  241. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -106
  242. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -106
  243. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -102
  244. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -98
  245. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -102
  246. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -102
  247. data/spec/integration/application/agent_spec.rb +394 -0
  248. data/spec/integration/application/apply_spec.rb +132 -3
  249. data/spec/integration/application/filebucket_spec.rb +190 -0
  250. data/spec/integration/application/plugin_spec.rb +73 -0
  251. data/spec/integration/configurer_spec.rb +26 -7
  252. data/spec/integration/http/client_spec.rb +154 -0
  253. data/spec/integration/indirector/facts/facter_spec.rb +4 -0
  254. data/spec/integration/indirector/report/yaml.rb +83 -0
  255. data/spec/integration/module_tool/forge_spec.rb +51 -0
  256. data/spec/integration/network/http_pool_spec.rb +76 -20
  257. data/spec/integration/node/environment_spec.rb +15 -0
  258. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  259. data/spec/lib/puppet/test_ca.rb +2 -2
  260. data/spec/lib/puppet_spec/https.rb +20 -9
  261. data/spec/lib/puppet_spec/puppetserver.rb +119 -0
  262. data/spec/shared_contexts/https.rb +29 -0
  263. data/spec/spec_helper.rb +6 -2
  264. data/spec/unit/agent_spec.rb +80 -26
  265. data/spec/unit/application/agent_spec.rb +9 -5
  266. data/spec/unit/application/apply_spec.rb +2 -12
  267. data/spec/unit/application/describe_spec.rb +88 -50
  268. data/spec/unit/application/device_spec.rb +2 -2
  269. data/spec/unit/application/filebucket_spec.rb +22 -2
  270. data/spec/unit/application/resource_spec.rb +2 -2
  271. data/spec/unit/concurrent/lock_spec.rb +29 -0
  272. data/spec/unit/configurer/fact_handler_spec.rb +0 -4
  273. data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
  274. data/spec/unit/configurer_spec.rb +400 -406
  275. data/spec/unit/context/trusted_information_spec.rb +17 -0
  276. data/spec/unit/daemon_spec.rb +5 -64
  277. data/spec/unit/defaults_spec.rb +38 -4
  278. data/spec/unit/environments_spec.rb +65 -28
  279. data/spec/unit/face/facts_spec.rb +24 -20
  280. data/spec/unit/face/module/search_spec.rb +17 -0
  281. data/spec/unit/face/plugin_spec.rb +12 -10
  282. data/spec/unit/file_system/uniquefile_spec.rb +11 -0
  283. data/spec/unit/file_system_spec.rb +26 -2
  284. data/spec/unit/forge/errors_spec.rb +1 -1
  285. data/spec/unit/forge/forge_spec.rb +12 -54
  286. data/spec/unit/forge/module_release_spec.rb +19 -6
  287. data/spec/unit/forge/repository_spec.rb +63 -157
  288. data/spec/unit/forge_spec.rb +46 -116
  289. data/spec/unit/functions/find_template_spec.rb +69 -0
  290. data/spec/unit/functions/lookup_spec.rb +13 -0
  291. data/spec/unit/http/client_spec.rb +395 -27
  292. data/spec/unit/http/external_client_spec.rb +201 -0
  293. data/spec/unit/http/resolver_spec.rb +81 -12
  294. data/spec/unit/http/response_spec.rb +69 -0
  295. data/spec/unit/http/service/ca_spec.rb +100 -7
  296. data/spec/unit/http/service/compiler_spec.rb +627 -0
  297. data/spec/unit/http/service/file_server_spec.rb +308 -0
  298. data/spec/unit/http/service/report_spec.rb +118 -0
  299. data/spec/unit/http/service_spec.rb +117 -4
  300. data/spec/unit/http/session_spec.rb +237 -19
  301. data/spec/unit/indirector/catalog/compiler_spec.rb +47 -29
  302. data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
  303. data/spec/unit/indirector/facts/rest_spec.rb +79 -24
  304. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  305. data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
  306. data/spec/unit/indirector/file_metadata/http_spec.rb +167 -0
  307. data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
  308. data/spec/unit/indirector/node/rest_spec.rb +57 -2
  309. data/spec/unit/indirector/report/rest_spec.rb +58 -51
  310. data/spec/unit/indirector/resource/ral_spec.rb +7 -8
  311. data/spec/unit/indirector/rest_spec.rb +13 -0
  312. data/spec/unit/indirector/status/rest_spec.rb +43 -2
  313. data/spec/unit/network/http/connection_spec.rb +549 -176
  314. data/spec/unit/network/http/nocache_pool_spec.rb +25 -3
  315. data/spec/unit/network/http/pool_spec.rb +89 -11
  316. data/spec/unit/network/http_pool_spec.rb +63 -57
  317. data/spec/unit/network/http_spec.rb +1 -1
  318. data/spec/unit/node/environment_spec.rb +16 -0
  319. data/spec/unit/node/facts_spec.rb +2 -1
  320. data/spec/unit/node_spec.rb +7 -4
  321. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
  322. data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
  323. data/spec/unit/pops/validator/validator_spec.rb +7 -2
  324. data/spec/unit/provider/aix_object_spec.rb +16 -2
  325. data/spec/unit/provider/group/groupadd_spec.rb +181 -56
  326. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  327. data/spec/unit/provider/package/aix_spec.rb +29 -0
  328. data/spec/unit/provider/package/apt_spec.rb +43 -2
  329. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  330. data/spec/unit/provider/package/dnfmodule_spec.rb +76 -15
  331. data/spec/unit/provider/package/dpkg_spec.rb +28 -6
  332. data/spec/unit/provider/package/gem_spec.rb +40 -0
  333. data/spec/unit/provider/package/openbsd_spec.rb +17 -0
  334. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  335. data/spec/unit/provider/package/pip_spec.rb +68 -19
  336. data/spec/unit/provider/package/pkg_spec.rb +15 -1
  337. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  338. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  339. data/spec/unit/provider/package/portage_spec.rb +9 -4
  340. data/spec/unit/provider/package/puppet_gem_spec.rb +8 -0
  341. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  342. data/spec/unit/provider/package/yum_spec.rb +292 -0
  343. data/spec/unit/provider/package/zypper_spec.rb +84 -0
  344. data/spec/unit/provider/package_targetable_spec.rb +60 -0
  345. data/spec/unit/provider/service/init_spec.rb +1 -0
  346. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  347. data/spec/unit/provider/service/openwrt_spec.rb +1 -0
  348. data/spec/unit/provider/service/redhat_spec.rb +9 -0
  349. data/spec/unit/provider/service/systemd_spec.rb +92 -12
  350. data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
  351. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  352. data/spec/unit/provider/user/useradd_spec.rb +21 -8
  353. data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
  354. data/spec/unit/puppet_pal_2pec.rb +0 -26
  355. data/spec/unit/puppet_pal_catalog_spec.rb +46 -0
  356. data/spec/unit/puppet_spec.rb +47 -0
  357. data/spec/unit/reports/http_spec.rb +70 -52
  358. data/spec/unit/settings/autosign_setting_spec.rb +1 -1
  359. data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
  360. data/spec/unit/ssl/certificate_spec.rb +7 -0
  361. data/spec/unit/ssl/host_spec.rb +4 -2
  362. data/spec/unit/ssl/oids_spec.rb +1 -0
  363. data/spec/unit/ssl/ssl_provider_spec.rb +71 -0
  364. data/spec/unit/ssl/state_machine_spec.rb +99 -13
  365. data/spec/unit/transaction/persistence_spec.rb +1 -10
  366. data/spec/unit/transaction/report_spec.rb +4 -0
  367. data/spec/unit/transaction_spec.rb +45 -1
  368. data/spec/unit/type/file/content_spec.rb +9 -3
  369. data/spec/unit/type/file/ensure_spec.rb +1 -2
  370. data/spec/unit/type/file/source_spec.rb +86 -35
  371. data/spec/unit/type/package_spec.rb +8 -0
  372. data/spec/unit/type/service_spec.rb +9 -8
  373. data/spec/unit/type/user_spec.rb +1 -2
  374. data/spec/unit/util/at_fork_spec.rb +3 -2
  375. data/spec/unit/util/autoload_spec.rb +2 -1
  376. data/spec/unit/util/log/destinations_spec.rb +1 -29
  377. data/spec/unit/util/log_spec.rb +0 -138
  378. data/spec/unit/util/logging_spec.rb +200 -0
  379. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  380. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  381. data/spec/unit/util/package/version/range_spec.rb +175 -0
  382. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  383. data/spec/unit/util/pidlock_spec.rb +112 -42
  384. data/spec/unit/util/plist_spec.rb +20 -0
  385. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  386. data/spec/unit/util/storage_spec.rb +1 -8
  387. data/spec/unit/util/windows/adsi_spec.rb +55 -4
  388. data/spec/unit/util/windows/sid_spec.rb +2 -2
  389. data/spec/unit/x509/cert_provider_spec.rb +24 -4
  390. data/tasks/generate_cert_fixtures.rake +15 -1
  391. data/tasks/manpages.rake +6 -35
  392. metadata +92 -12
  393. data/COMMITTERS.md +0 -244
  394. data/spec/integration/faces/plugin_spec.rb +0 -61
  395. data/spec/lib/puppet_spec/validators.rb +0 -37
@@ -43,6 +43,7 @@ as an array in the form `[key, value]` and returns a hash containing the results
43
43
  $data = { "orange" => 0, "blueberry" => 1, "raspberry" => 2 }
44
44
  $filtered_data = $data.filter |$items| { $items[0] =~ /berry$/ }
45
45
  # $filtered_data = {blueberry => 1, raspberry => 2}
46
+ ~~~
46
47
 
47
48
  When the first argument is an array and the lambda has two parameters, Puppet passes the
48
49
  array's indexes (enumerated from 0) in the first parameter and its values in the second
@@ -6,12 +6,12 @@ text result as a String.
6
6
 
7
7
  The first argument to this function should be a string containing an EPP
8
8
  template. In most cases, the last argument is optional; if used, it should be a
9
- [hash](/puppet/latest/reference/lang_data_hash.html) that contains parameters to
9
+ [hash](https://puppet.com/docs/puppet/latest/lang_data_hash.html) that contains parameters to
10
10
  pass to the template.
11
11
 
12
- - See the [template](/puppet/latest/reference/lang_template.html) documentation
12
+ - See the [template](https://puppet.com/docs/puppet/latest/lang_template.html) documentation
13
13
  for general template usage information.
14
- - See the [EPP syntax](/puppet/latest/reference/lang_template_epp.html)
14
+ - See the [EPP syntax](https://puppet.com/docs/puppet/latest/lang_template_epp.html)
15
15
  documentation for examples of EPP.
16
16
 
17
17
  For example, to evaluate an inline EPP template and pass it the `docroot` and
@@ -29,7 +29,7 @@ parameter tag without default values. Puppet produces an error if the
29
29
  `inline_epp` function fails to pass any required parameter.
30
30
 
31
31
  An inline EPP template should be written as a single-quoted string or
32
- [heredoc](/puppet/latest/reference/lang_data_string.html#heredocs).
32
+ [heredoc](https://puppet.com/docs/puppet/latest/lang_data_string.html#heredocs).
33
33
  A double-quoted string is subject to expression interpolation before the string
34
34
  is parsed as an EPP template.
35
35
 
@@ -45,7 +45,7 @@ END
45
45
  ~~~
46
46
 
47
47
  - Since 3.5
48
- - Requires [future parser](/puppet/3.8/reference/experiments_future.html) in Puppet 3.5 to 3.8") do |arguments|
48
+ - Requires [future parser](https://puppet.com/docs/puppet/3.8/experiments_future.html) in Puppet 3.5 to 3.8") do |arguments|
49
49
 
50
50
  Puppet::Parser::Functions::Error.is4x('inline_epp')
51
51
  end
@@ -20,14 +20,14 @@ class AccessOperator
20
20
  @semantic = access_expression
21
21
  end
22
22
 
23
- def access (o, scope, *keys)
23
+ def access(o, scope, *keys)
24
24
  @@access_visitor.visit_this_2(self, o, scope, keys)
25
25
  end
26
26
 
27
27
  protected
28
28
 
29
29
  def access_Object(o, scope, keys)
30
- type = Puppet::Pops::Types::TypeCalculator.infer(o)
30
+ type = Puppet::Pops::Types::TypeCalculator.infer_callable_methods_t(o)
31
31
  if type.is_a?(Puppet::Pops::Types::TypeWithMembers)
32
32
  access_func = type['[]']
33
33
  return access_func.invoke(o, scope, keys) unless access_func.nil?
@@ -959,7 +959,7 @@ class EvaluatorImpl
959
959
  name = name.value # the string function name
960
960
 
961
961
  obj = receiver[0]
962
- receiver_type = Types::TypeCalculator.infer(obj)
962
+ receiver_type = Types::TypeCalculator.infer_callable_methods_t(obj)
963
963
  if receiver_type.is_a?(Types::TypeWithMembers)
964
964
  member = receiver_type[name]
965
965
  unless member.nil?
@@ -33,7 +33,7 @@ module Runtime3Support
33
33
  # @raise [Puppet::ParseError] an evaluation error initialized from the arguments (TODO: Change to EvaluationError?)
34
34
  #
35
35
  def optionally_fail(issue, semantic, options={}, except=nil)
36
- if except.nil?
36
+ if except.nil? && diagnostic_producer.severity_producer[issue] == :error
37
37
  # Want a stacktrace, and it must be passed as an exception
38
38
  begin
39
39
  raise EvaluationError.new()
@@ -19,8 +19,17 @@ class PuppetPlanInstantiator
19
19
 
20
20
  # parse and validate
21
21
  result = parser.parse_string(pp_code_string, source_ref)
22
- # Only one function is allowed (and no other definitions)
23
- case result.definitions.size
22
+
23
+ # The parser attaches all definitions, including those nested in apply
24
+ # blocks, to the Program object. Node definitions in apply blocks are
25
+ # perfectly legal and don't count as the file containing multiple
26
+ # definitions for this purpose. By this point, we've already validated that
27
+ # there are no node definitions *outside* apply blocks, so we simply ignore
28
+ # them here.
29
+ definitions = result.definitions.reject { |definition| definition.is_a?(Puppet::Pops::Model::NodeDefinition) }
30
+
31
+ # Only one plan is allowed (and no other definitions)
32
+ case definitions.size
24
33
  when 0
25
34
  raise ArgumentError, _("The code loaded from %{source_ref} does not define the plan '%{plan_name}' - it is empty.") % { source_ref: source_ref, plan_name: typed_name.name }
26
35
  when 1
@@ -28,7 +37,7 @@ class PuppetPlanInstantiator
28
37
  else
29
38
  raise ArgumentError, _("The code loaded from %{source_ref} must contain only the plan '%{plan_name}' - it has additional definitions.") % { source_ref: source_ref, plan_name: typed_name.name }
30
39
  end
31
- the_plan_definition = result.definitions[0]
40
+ the_plan_definition = definitions[0]
32
41
 
33
42
  unless the_plan_definition.is_a?(Model::PlanDefinition)
34
43
  raise ArgumentError, _("The code loaded from %{source_ref} does not define the plan '%{plan_name}' - no plan found.") % { source_ref: source_ref, plan_name: typed_name.name }
@@ -19,12 +19,14 @@ class Loaders
19
19
  attr_reader :environment
20
20
 
21
21
  def self.new(environment, for_agent = false)
22
- obj = environment.loaders
23
- if obj.nil?
24
- obj = self.allocate
25
- obj.send(:initialize, environment, for_agent)
22
+ environment.lock.synchronize do
23
+ obj = environment.loaders
24
+ if obj.nil?
25
+ obj = self.allocate
26
+ obj.send(:initialize, environment, for_agent)
27
+ end
28
+ obj
26
29
  end
27
- obj
28
30
  end
29
31
 
30
32
  def initialize(environment, for_agent)
@@ -1,3 +1,5 @@
1
+ require 'puppet/thread_local'
2
+
1
3
  require_relative 'explainer'
2
4
 
3
5
  module Puppet::Pops
@@ -7,7 +9,11 @@ class Invocation
7
9
  attr_reader :scope, :override_values, :default_values, :explainer, :module_name, :top_key, :adapter_class
8
10
 
9
11
  def self.current
10
- @current
12
+ (@current ||= Puppet::ThreadLocal.new(nil)).value
13
+ end
14
+
15
+ def self.current=(new_value)
16
+ @current.value = new_value
11
17
  end
12
18
 
13
19
  # Creates a new instance with same settings as this instance but with a new given scope
@@ -37,6 +43,7 @@ class Invocation
37
43
  @default_values = default_values
38
44
 
39
45
  parent_invocation = self.class.current
46
+
40
47
  if parent_invocation && (adapter_class.nil? || adapter_class == parent_invocation.adapter_class)
41
48
  # Inherit from parent invocation (track recursion)
42
49
  @name_stack = parent_invocation.name_stack
@@ -71,10 +78,10 @@ class Invocation
71
78
  yield
72
79
  else
73
80
  begin
74
- self.class.instance_variable_set(:@current, self)
81
+ self.class.current = self
75
82
  yield
76
83
  ensure
77
- self.class.instance_variable_set(:@current, save_current)
84
+ self.class.current = save_current
78
85
  end
79
86
  end
80
87
  end
@@ -1,22 +1,18 @@
1
+ require 'puppet/concurrent/thread_local_singleton'
2
+
1
3
  module Puppet::Pops
2
4
  module Model
3
5
 
4
6
 
5
7
  class PNTransformer
6
- def self.visitor
7
- @visitor ||= Visitor.new(nil, 'transform', 0, 0)
8
- end
9
-
10
- def self.singleton
11
- @singleton ||= new(visitor)
12
- end
8
+ extend Puppet::Concurrent::ThreadLocalSingleton
13
9
 
14
10
  def self.transform(ast)
15
11
  singleton.transform(ast)
16
12
  end
17
13
 
18
- def initialize(visitor)
19
- @visitor = visitor
14
+ def initialize
15
+ @visitor = Visitor.new(nil, 'transform', 0, 0)
20
16
  end
21
17
 
22
18
  def transform(ast)
@@ -1,9 +1,12 @@
1
+ require 'puppet/concurrent/thread_local_singleton'
2
+
1
3
  module Puppet::Pops
2
4
  module Parser
3
5
 
4
6
  # Does not support "import" and parsing ruby files
5
7
  #
6
8
  class EvaluatingParser
9
+ extend Puppet::Concurrent::ThreadLocalSingleton
7
10
 
8
11
  attr_reader :parser
9
12
 
@@ -11,12 +14,7 @@ class EvaluatingParser
11
14
  @parser = Parser.new()
12
15
  end
13
16
 
14
- def self.singleton
15
- @instance ||= new
16
- end
17
-
18
17
  def parse_string(s, file_source = nil)
19
- @file_source = file_source
20
18
  clear()
21
19
  # Handling of syntax error can be much improved (in general), now it bails out of the parser
22
20
  # and does not have as rich information (when parsing a string), need to update it with the file source
@@ -25,20 +23,19 @@ class EvaluatingParser
25
23
  # Also a possible improvement (if the YAML parser returns positions) is to provide correct output of position.
26
24
  #
27
25
  begin
28
- assert_and_report(parser.parse_string(s, file_source)).model
26
+ assert_and_report(parser.parse_string(s, file_source), file_source).model
29
27
  rescue Puppet::ParseErrorWithIssue => e
30
28
  raise e
31
29
  rescue Puppet::ParseError => e
32
30
  # TODO: This is not quite right, why does not the exception have the correct file?
33
- e.file = @file_source unless e.file.is_a?(String) && !e.file.empty?
31
+ e.file = file_source unless e.file.is_a?(String) && !e.file.empty?
34
32
  raise e
35
33
  end
36
34
  end
37
35
 
38
36
  def parse_file(file)
39
- @file_source = file
40
37
  clear()
41
- assert_and_report(parser.parse_file(file)).model
38
+ assert_and_report(parser.parse_file(file), file).model
42
39
  end
43
40
 
44
41
  def evaluate_string(scope, s, file_source = nil)
@@ -97,10 +94,10 @@ class EvaluatingParser
97
94
  Validation::ValidatorFactory_4_0.new().validator(acceptor)
98
95
  end
99
96
 
100
- def assert_and_report(parse_result)
97
+ def assert_and_report(parse_result, file_source)
101
98
  return nil unless parse_result
102
99
  if parse_result['source_ref'].nil? || parse_result['source_ref'] == ''
103
- parse_result['source_ref'] = @file_source
100
+ parse_result['source_ref'] = file_source
104
101
  end
105
102
  validation_result = validate(parse_result.model)
106
103
 
@@ -1,3 +1,5 @@
1
+ require 'puppet/concurrent/thread_local_singleton'
2
+
1
3
  module Puppet::Pops
2
4
  module Serialization
3
5
  module JsonPath
@@ -31,9 +33,7 @@ module JsonPath
31
33
  #
32
34
  # @api private
33
35
  class Resolver
34
- def self.singleton
35
- @singleton ||= self.new
36
- end
36
+ extend Puppet::Concurrent::ThreadLocalSingleton
37
37
 
38
38
  def initialize
39
39
  @parser = Parser::Parser.new
@@ -1,3 +1,5 @@
1
+ require 'puppet/concurrent/thread_local_singleton'
2
+
1
3
  module Puppet::Pops
2
4
  module Time
3
5
  NSECS_PER_USEC = 1000
@@ -581,9 +583,7 @@ module Time
581
583
 
582
584
  # Parses a string into a Timestamp::Format instance
583
585
  class FormatParser
584
- def self.singleton
585
- @singleton
586
- end
586
+ extend Puppet::Concurrent::ThreadLocalSingleton
587
587
 
588
588
  def initialize
589
589
  @formats = Hash.new { |hash, str| hash[str] = internal_parse(str) }
@@ -706,8 +706,6 @@ module Time
706
706
  end
707
707
  Format.new(str, bld)
708
708
  end
709
-
710
- @singleton = FormatParser.new
711
709
  end
712
710
 
713
711
  class Format
@@ -153,6 +153,16 @@ class PObjectTypeExtension < PAnyType
153
153
  @base_type.simple_name
154
154
  end
155
155
 
156
+ # @api private
157
+ def implementation_class(create = true)
158
+ @base_type.implementation_class(create)
159
+ end
160
+
161
+ # @api private
162
+ def parameter_info(impl_class)
163
+ @base_type.parameter_info(impl_class)
164
+ end
165
+
156
166
  protected
157
167
 
158
168
  # Checks that the given `param_values` hash contains all keys present in the `parameters` of
@@ -1,3 +1,5 @@
1
+ require 'puppet/concurrent/thread_local_singleton'
2
+
1
3
  module Puppet::Pops
2
4
  module Types
3
5
 
@@ -238,22 +240,17 @@ class StringConverter
238
240
  end
239
241
  end
240
242
 
243
+ extend Puppet::Concurrent::ThreadLocalSingleton
244
+
241
245
  # @api public
242
246
  def self.convert(value, string_formats = :default)
243
247
  singleton.convert(value, string_formats)
244
248
  end
245
249
 
246
- # @return [TypeConverter] the singleton instance
247
- #
248
- # @api public
249
- def self.singleton
250
- @tconv_instance ||= new
251
- end
252
-
253
250
  # @api private
254
251
  #
255
252
  def initialize
256
- @@string_visitor ||= Visitor.new(self, "string", 3, 3)
253
+ @string_visitor = Visitor.new(self, "string", 3, 3)
257
254
  end
258
255
 
259
256
  DEFAULT_INDENTATION = Indentation.new(0, true, false).freeze
@@ -523,7 +520,7 @@ class StringConverter
523
520
  # end
524
521
 
525
522
  def _convert(val_type, value, format_map, indentation)
526
- @@string_visitor.visit_this_3(self, val_type, value, format_map, indentation)
523
+ @string_visitor.visit_this_3(self, val_type, value, format_map, indentation)
527
524
  end
528
525
  private :_convert
529
526
 
@@ -1,3 +1,5 @@
1
+ require 'puppet/concurrent/thread_local_singleton'
2
+
1
3
  module Puppet::Pops
2
4
  module Types
3
5
  # The TypeCalculator can answer questions about puppet types.
@@ -99,6 +101,7 @@ module Types
99
101
  # @api public
100
102
  #
101
103
  class TypeCalculator
104
+ extend Puppet::Concurrent::ThreadLocalSingleton
102
105
 
103
106
  # @api public
104
107
  def self.assignable?(t1, t2)
@@ -120,6 +123,30 @@ class TypeCalculator
120
123
  singleton.infer(o)
121
124
  end
122
125
 
126
+ # Infers a type if given object may have callable members, else returns nil.
127
+ # Caller must check for nil or if returned type supports members.
128
+ # This is a much cheaper call than doing a call to the general infer(o) method.
129
+ #
130
+ # @api private
131
+ def self.infer_callable_methods_t(o)
132
+ # If being a value that cannot have Pcore based methods callable from Puppet Language
133
+ if (o.is_a?(String) ||
134
+ o.is_a?(Numeric) ||
135
+ o.is_a?(TrueClass) ||
136
+ o.is_a?(FalseClass) ||
137
+ o.is_a?(Regexp) ||
138
+ o.instance_of?(Array) ||
139
+ o.instance_of?(Hash) ||
140
+ Types::PUndefType::DEFAULT.instance?(o)
141
+ )
142
+ return nil
143
+ end
144
+ # For other objects (e.g. PObjectType instances, and runtime types) full inference needed, since that will
145
+ # cover looking into the runtime type registry.
146
+ #
147
+ infer(o)
148
+ end
149
+
123
150
  # @api public
124
151
  def self.generalize(o)
125
152
  singleton.generalize(o)
@@ -135,18 +162,11 @@ class TypeCalculator
135
162
  singleton.iterable(t)
136
163
  end
137
164
 
138
- # @return [TypeCalculator] the singleton instance
139
- #
140
- # @api private
141
- def self.singleton
142
- @tc_instance ||= new
143
- end
144
-
145
165
  # @api public
146
166
  #
147
167
  def initialize
148
- @@infer_visitor ||= Visitor.new(nil, 'infer',0,0)
149
- @@extract_visitor ||= Visitor.new(nil, 'extract',0,0)
168
+ @infer_visitor = Visitor.new(nil, 'infer',0,0)
169
+ @extract_visitor = Visitor.new(nil, 'extract',0,0)
150
170
  end
151
171
 
152
172
  # Answers 'can an instance of type t2 be assigned to a variable of type t'.
@@ -250,7 +270,7 @@ class TypeCalculator
250
270
  elsif o.is_a?(Evaluator::PuppetProc)
251
271
  infer_PuppetProc(o)
252
272
  else
253
- @@infer_visitor.visit_this_0(self, o)
273
+ @infer_visitor.visit_this_0(self, o)
254
274
  end
255
275
  end
256
276
 
@@ -1,3 +1,5 @@
1
+ require 'puppet/concurrent/thread_local_singleton'
2
+
1
3
  module Puppet::Pops
2
4
  module Types
3
5
  # String
@@ -7,6 +9,8 @@ module Types
7
9
  # @api public
8
10
  #
9
11
  class TypeFormatter
12
+ extend Puppet::Concurrent::ThreadLocalSingleton
13
+
10
14
  # Produces a String representation of the given type.
11
15
  # @param t [PAnyType] the type to produce a string form
12
16
  # @return [String] the type in string form
@@ -14,14 +18,11 @@ class TypeFormatter
14
18
  # @api public
15
19
  #
16
20
  def self.string(t)
17
- @singleton.string(t)
21
+ singleton.string(t)
18
22
  end
19
23
 
20
- # @return [TypeCalculator] the singleton instance
21
- #
22
- # @api private
23
- def self.singleton
24
- @singleton
24
+ def initialize
25
+ @string_visitor = Visitor.new(nil, 'string',0,0)
25
26
  end
26
27
 
27
28
  def expanded
@@ -105,13 +106,13 @@ class TypeFormatter
105
106
  @ruby = false
106
107
  begin
107
108
  @bld << @ref_ctor << '('
108
- @@string_visitor.visit_this_0(self, TypeFormatter.new.string(t))
109
+ @string_visitor.visit_this_0(self, TypeFormatter.new.string(t))
109
110
  @bld << ')'
110
111
  ensure
111
112
  @ruby = true
112
113
  end
113
114
  else
114
- @@string_visitor.visit_this_0(self, t)
115
+ @string_visitor.visit_this_0(self, t)
115
116
  end
116
117
  end
117
118
 
@@ -794,9 +795,6 @@ class TypeFormatter
794
795
  def chomp_list
795
796
  @bld.chomp!(COMMA_SEP)
796
797
  end
797
-
798
- @singleton = new
799
- @@string_visitor = Visitor.new(nil, 'string',0,0)
800
798
  end
801
799
  end
802
800
  end