puppet 5.5.17-x86-mingw32 → 5.5.22-x86-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 (340) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +1 -1
  3. data/Gemfile +4 -5
  4. data/Gemfile.lock +59 -55
  5. data/ext/build_defaults.yaml +1 -0
  6. data/ext/cert_inspector +3 -3
  7. data/ext/puppet-test +2 -2
  8. data/ext/regexp_nodes/regexp_nodes.rb +4 -4
  9. data/ext/windows/service/daemon.rb +54 -8
  10. data/install.rb +6 -6
  11. data/lib/puppet.rb +5 -2
  12. data/lib/puppet/agent.rb +5 -13
  13. data/lib/puppet/application.rb +1 -1
  14. data/lib/puppet/application/agent.rb +3 -1
  15. data/lib/puppet/application/apply.rb +2 -2
  16. data/lib/puppet/application/describe.rb +3 -9
  17. data/lib/puppet/application/doc.rb +1 -1
  18. data/lib/puppet/application/filebucket.rb +13 -0
  19. data/lib/puppet/application/lookup.rb +1 -1
  20. data/lib/puppet/application/script.rb +2 -2
  21. data/lib/puppet/configurer.rb +106 -31
  22. data/lib/puppet/configurer/downloader.rb +33 -16
  23. data/lib/puppet/daemon.rb +1 -1
  24. data/lib/puppet/defaults.rb +86 -40
  25. data/lib/puppet/error.rb +9 -1
  26. data/lib/puppet/external/nagios/base.rb +1 -1
  27. data/lib/puppet/face/ca.rb +1 -1
  28. data/lib/puppet/face/module/list.rb +5 -5
  29. data/lib/puppet/face/module/search.rb +1 -1
  30. data/lib/puppet/face/module/uninstall.rb +1 -1
  31. data/lib/puppet/face/module/upgrade.rb +1 -1
  32. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  33. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  34. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  35. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  36. data/lib/puppet/file_system.rb +0 -8
  37. data/lib/puppet/file_system/memory_file.rb +1 -1
  38. data/lib/puppet/file_system/posix.rb +3 -2
  39. data/lib/puppet/file_system/uniquefile.rb +4 -0
  40. data/lib/puppet/forge.rb +3 -3
  41. data/lib/puppet/functions/epp.rb +4 -4
  42. data/lib/puppet/functions/inline_epp.rb +5 -5
  43. data/lib/puppet/functions/new.rb +8 -3
  44. data/lib/puppet/functions/reduce.rb +2 -4
  45. data/lib/puppet/functions/reverse_each.rb +1 -1
  46. data/lib/puppet/functions/step.rb +1 -1
  47. data/lib/puppet/gettext/module_translations.rb +1 -1
  48. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  49. data/lib/puppet/graph/simple_graph.rb +6 -5
  50. data/lib/puppet/indirector/catalog/compiler.rb +8 -0
  51. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  52. data/lib/puppet/indirector/hiera.rb +6 -0
  53. data/lib/puppet/indirector/resource/ral.rb +1 -3
  54. data/lib/puppet/indirector/resource/validator.rb +1 -1
  55. data/lib/puppet/interface.rb +2 -1
  56. data/lib/puppet/loaders.rb +0 -1
  57. data/lib/puppet/metatype/manager.rb +1 -1
  58. data/lib/puppet/module.rb +1 -1
  59. data/lib/puppet/module_tool/applications/builder.rb +1 -1
  60. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  61. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
  62. data/lib/puppet/module_tool/metadata.rb +1 -1
  63. data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
  64. data/lib/puppet/module_tool/tar/mini.rb +1 -1
  65. data/lib/puppet/network/http/api/indirected_routes.rb +13 -12
  66. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  67. data/lib/puppet/network/http/connection.rb +14 -12
  68. data/lib/puppet/network/http/pool.rb +7 -1
  69. data/lib/puppet/network/http/rack/rest.rb +2 -2
  70. data/lib/puppet/network/http/site.rb +1 -1
  71. data/lib/puppet/network/resolver.rb +2 -2
  72. data/lib/puppet/node/environment.rb +11 -3
  73. data/lib/puppet/parser/ast.rb +1 -1
  74. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  75. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  76. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  77. data/lib/puppet/parser/environment_compiler.rb +3 -0
  78. data/lib/puppet/parser/functions.rb +14 -10
  79. data/lib/puppet/parser/functions/epp.rb +3 -3
  80. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  81. data/lib/puppet/parser/resource.rb +3 -2
  82. data/lib/puppet/parser/resource/param.rb +6 -0
  83. data/lib/puppet/pops/adaptable.rb +7 -13
  84. data/lib/puppet/pops/adapters.rb +8 -4
  85. data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
  86. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  87. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  88. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  89. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  90. data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
  91. data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
  92. data/lib/puppet/pops/issues.rb +5 -0
  93. data/lib/puppet/pops/loaders.rb +1 -1
  94. data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
  95. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  96. data/lib/puppet/pops/merge_strategy.rb +22 -18
  97. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  98. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  99. data/lib/puppet/pops/parser/locator.rb +1 -1
  100. data/lib/puppet/pops/parser/pn_parser.rb +17 -16
  101. data/lib/puppet/pops/puppet_stack.rb +51 -48
  102. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  103. data/lib/puppet/pops/types/iterable.rb +34 -8
  104. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  105. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
  106. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  107. data/lib/puppet/pops/types/string_converter.rb +10 -10
  108. data/lib/puppet/pops/types/type_calculator.rb +24 -0
  109. data/lib/puppet/pops/types/types.rb +3 -3
  110. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  111. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  112. data/lib/puppet/property.rb +1 -1
  113. data/lib/puppet/property/ensure.rb +1 -1
  114. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  115. data/lib/puppet/provider/cron/crontab.rb +1 -1
  116. data/lib/puppet/provider/exec.rb +6 -2
  117. data/lib/puppet/provider/group/groupadd.rb +19 -19
  118. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  119. data/lib/puppet/provider/mailalias/aliases.rb +1 -1
  120. data/lib/puppet/provider/mount.rb +1 -1
  121. data/lib/puppet/provider/mount/parsed.rb +8 -8
  122. data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
  123. data/lib/puppet/provider/nameservice/pw.rb +2 -2
  124. data/lib/puppet/provider/package/aix.rb +17 -2
  125. data/lib/puppet/provider/package/apt.rb +14 -3
  126. data/lib/puppet/provider/package/dnfmodule.rb +141 -0
  127. data/lib/puppet/provider/package/dpkg.rb +16 -18
  128. data/lib/puppet/provider/package/fink.rb +20 -3
  129. data/lib/puppet/provider/package/gem.rb +4 -2
  130. data/lib/puppet/provider/package/openbsd.rb +14 -2
  131. data/lib/puppet/provider/package/pip.rb +37 -10
  132. data/lib/puppet/provider/package/pkg.rb +18 -5
  133. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  134. data/lib/puppet/provider/package/pkgng.rb +16 -4
  135. data/lib/puppet/provider/package/portage.rb +4 -4
  136. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  137. data/lib/puppet/provider/package/rpm.rb +6 -6
  138. data/lib/puppet/provider/package/windows/package.rb +1 -1
  139. data/lib/puppet/provider/package/yum.rb +28 -20
  140. data/lib/puppet/provider/package/zypper.rb +1 -0
  141. data/lib/puppet/provider/package_targetable.rb +5 -4
  142. data/lib/puppet/provider/parsedfile.rb +1 -1
  143. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +3 -3
  144. data/lib/puppet/provider/selmodule/semodule.rb +43 -26
  145. data/lib/puppet/provider/service/daemontools.rb +9 -9
  146. data/lib/puppet/provider/service/openbsd.rb +1 -1
  147. data/lib/puppet/provider/service/rcng.rb +2 -2
  148. data/lib/puppet/provider/service/runit.rb +2 -8
  149. data/lib/puppet/provider/service/systemd.rb +31 -13
  150. data/lib/puppet/provider/user/directoryservice.rb +31 -6
  151. data/lib/puppet/provider/user/hpux.rb +1 -1
  152. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  153. data/lib/puppet/provider/user/useradd.rb +39 -20
  154. data/lib/puppet/provider/user/windows_adsi.rb +4 -5
  155. data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
  156. data/lib/puppet/reference/indirection.rb +2 -2
  157. data/lib/puppet/reference/metaparameter.rb +1 -3
  158. data/lib/puppet/reference/providers.rb +1 -1
  159. data/lib/puppet/reference/type.rb +3 -9
  160. data/lib/puppet/reports.rb +1 -1
  161. data/lib/puppet/resource.rb +1 -1
  162. data/lib/puppet/resource/catalog.rb +1 -1
  163. data/lib/puppet/resource/type.rb +10 -1
  164. data/lib/puppet/settings.rb +3 -3
  165. data/lib/puppet/settings/environment_conf.rb +1 -0
  166. data/lib/puppet/ssl/certificate.rb +2 -1
  167. data/lib/puppet/ssl/certificate_authority.rb +6 -5
  168. data/lib/puppet/ssl/certificate_authority/interface.rb +1 -1
  169. data/lib/puppet/ssl/certificate_factory.rb +2 -2
  170. data/lib/puppet/ssl/host.rb +3 -3
  171. data/lib/puppet/ssl/oids.rb +1 -1
  172. data/lib/puppet/test/test_helper.rb +20 -12
  173. data/lib/puppet/transaction/report.rb +1 -1
  174. data/lib/puppet/transaction/resource_harness.rb +1 -1
  175. data/lib/puppet/type.rb +8 -4
  176. data/lib/puppet/type/cron.rb +1 -1
  177. data/lib/puppet/type/exec.rb +7 -3
  178. data/lib/puppet/type/file.rb +14 -2
  179. data/lib/puppet/type/file/data_sync.rb +5 -1
  180. data/lib/puppet/type/group.rb +4 -2
  181. data/lib/puppet/type/interface.rb +1 -1
  182. data/lib/puppet/type/notify.rb +3 -2
  183. data/lib/puppet/type/package.rb +97 -8
  184. data/lib/puppet/type/schedule.rb +1 -1
  185. data/lib/puppet/type/selboolean.rb +17 -3
  186. data/lib/puppet/type/service.rb +2 -8
  187. data/lib/puppet/type/user.rb +5 -9
  188. data/lib/puppet/util.rb +35 -12
  189. data/lib/puppet/util/autoload.rb +9 -7
  190. data/lib/puppet/util/command_line/trollop.rb +1 -1
  191. data/lib/puppet/util/http_proxy.rb +8 -14
  192. data/lib/puppet/util/instance_loader.rb +1 -1
  193. data/lib/puppet/util/log.rb +1 -1
  194. data/lib/puppet/util/log/destinations.rb +3 -12
  195. data/lib/puppet/util/logging.rb +30 -18
  196. data/lib/puppet/util/metric.rb +2 -2
  197. data/lib/puppet/util/monkey_patches.rb +1 -1
  198. data/lib/puppet/util/nagios_maker.rb +2 -2
  199. data/lib/puppet/util/network_device/cisco/device.rb +1 -1
  200. data/lib/puppet/util/network_device/cisco/interface.rb +2 -2
  201. data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
  202. data/lib/puppet/util/pidlock.rb +12 -6
  203. data/lib/puppet/util/plist.rb +6 -0
  204. data/lib/puppet/util/provider_features.rb +2 -4
  205. data/lib/puppet/util/rdoc.rb +1 -1
  206. data/lib/puppet/util/reference.rb +1 -1
  207. data/lib/puppet/util/resource_template.rb +1 -1
  208. data/lib/puppet/util/selinux.rb +3 -1
  209. data/lib/puppet/util/windows/adsi.rb +60 -30
  210. data/lib/puppet/util/windows/api_types.rb +45 -32
  211. data/lib/puppet/util/windows/eventlog.rb +1 -6
  212. data/lib/puppet/util/windows/principal.rb +8 -6
  213. data/lib/puppet/util/windows/process.rb +16 -15
  214. data/lib/puppet/util/windows/registry.rb +17 -15
  215. data/lib/puppet/util/windows/security.rb +1 -0
  216. data/lib/puppet/util/windows/sid.rb +3 -3
  217. data/lib/puppet/vendor.rb +1 -1
  218. data/lib/puppet/version.rb +1 -1
  219. data/lib/puppet_pal.rb +2 -2
  220. data/locales/puppet.pot +362 -318
  221. data/man/man5/puppet.conf.5 +39 -9
  222. data/man/man8/puppet-agent.8 +2 -2
  223. data/man/man8/puppet-apply.8 +1 -1
  224. data/man/man8/puppet-ca.8 +1 -1
  225. data/man/man8/puppet-catalog.8 +1 -1
  226. data/man/man8/puppet-cert.8 +1 -1
  227. data/man/man8/puppet-certificate.8 +1 -1
  228. data/man/man8/puppet-certificate_request.8 +1 -1
  229. data/man/man8/puppet-certificate_revocation_list.8 +1 -1
  230. data/man/man8/puppet-config.8 +1 -1
  231. data/man/man8/puppet-describe.8 +1 -1
  232. data/man/man8/puppet-device.8 +1 -1
  233. data/man/man8/puppet-doc.8 +1 -1
  234. data/man/man8/puppet-epp.8 +1 -1
  235. data/man/man8/puppet-facts.8 +1 -1
  236. data/man/man8/puppet-filebucket.8 +16 -1
  237. data/man/man8/puppet-generate.8 +1 -1
  238. data/man/man8/puppet-help.8 +1 -1
  239. data/man/man8/puppet-key.8 +1 -1
  240. data/man/man8/puppet-lookup.8 +1 -1
  241. data/man/man8/puppet-man.8 +1 -1
  242. data/man/man8/puppet-master.8 +1 -1
  243. data/man/man8/puppet-module.8 +1 -1
  244. data/man/man8/puppet-node.8 +1 -1
  245. data/man/man8/puppet-parser.8 +1 -1
  246. data/man/man8/puppet-plugin.8 +1 -1
  247. data/man/man8/puppet-report.8 +1 -1
  248. data/man/man8/puppet-resource.8 +1 -1
  249. data/man/man8/puppet-script.8 +1 -1
  250. data/man/man8/puppet-status.8 +1 -1
  251. data/man/man8/puppet.8 +2 -2
  252. data/spec/fixtures/integration/provider/mailalias/aliases/test1 +1 -0
  253. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt +19 -0
  254. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  255. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  256. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  257. data/spec/integration/configurer_spec.rb +66 -0
  258. data/spec/integration/data_binding_spec.rb +1 -0
  259. data/spec/integration/defaults_spec.rb +1 -2
  260. data/spec/integration/faces/plugin_spec.rb +29 -47
  261. data/spec/integration/indirector/facts/facter_spec.rb +4 -0
  262. data/spec/integration/parser/compiler_spec.rb +11 -0
  263. data/spec/integration/type/notify_spec.rb +46 -0
  264. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  265. data/spec/integration/util/windows/registry_spec.rb +7 -7
  266. data/spec/shared_contexts/types_setup.rb +2 -0
  267. data/spec/unit/agent_spec.rb +34 -26
  268. data/spec/unit/application/apply_spec.rb +2 -12
  269. data/spec/unit/configurer/downloader_spec.rb +10 -0
  270. data/spec/unit/configurer/fact_handler_spec.rb +0 -4
  271. data/spec/unit/configurer_spec.rb +430 -415
  272. data/spec/unit/daemon_spec.rb +0 -1
  273. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  274. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  275. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  276. data/spec/unit/file_system/uniquefile_spec.rb +11 -0
  277. data/spec/unit/forge/forge_spec.rb +1 -3
  278. data/spec/unit/forge/repository_spec.rb +1 -3
  279. data/spec/unit/indirector/catalog/compiler_spec.rb +45 -26
  280. data/spec/unit/indirector/resource/ral_spec.rb +4 -4
  281. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  282. data/spec/unit/network/http/connection_spec.rb +43 -1
  283. data/spec/unit/network/http/pool_spec.rb +32 -0
  284. data/spec/unit/node_spec.rb +7 -4
  285. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  286. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
  287. data/spec/unit/provider/exec_spec.rb +209 -0
  288. data/spec/unit/provider/group/groupadd_spec.rb +30 -1
  289. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  290. data/spec/unit/provider/package/aix_spec.rb +29 -0
  291. data/spec/unit/provider/package/apt_spec.rb +13 -2
  292. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  293. data/spec/unit/provider/package/dnfmodule_spec.rb +247 -0
  294. data/spec/unit/provider/package/dpkg_spec.rb +35 -7
  295. data/spec/unit/provider/package/openbsd_spec.rb +17 -0
  296. data/spec/unit/provider/package/pip_spec.rb +93 -22
  297. data/spec/unit/provider/package/pkg_spec.rb +13 -1
  298. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  299. data/spec/unit/provider/package/pkgng_spec.rb +36 -0
  300. data/spec/unit/provider/package/portage_spec.rb +4 -4
  301. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  302. data/spec/unit/provider/package/yum_spec.rb +90 -0
  303. data/spec/unit/provider/package/zypper_spec.rb +13 -0
  304. data/spec/unit/provider/package_targetable_spec.rb +60 -0
  305. data/spec/unit/provider/selmodule_spec.rb +118 -47
  306. data/spec/unit/provider/service/daemontools_spec.rb +24 -0
  307. data/spec/unit/provider/service/runit_spec.rb +24 -0
  308. data/spec/unit/provider/service/systemd_spec.rb +109 -36
  309. data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
  310. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  311. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  312. data/spec/unit/provider/user/useradd_spec.rb +81 -16
  313. data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
  314. data/spec/unit/puppet_pal_2pec.rb +3 -0
  315. data/spec/unit/ssl/certificate_authority_spec.rb +2 -3
  316. data/spec/unit/ssl/certificate_spec.rb +7 -0
  317. data/spec/unit/ssl/host_spec.rb +2 -0
  318. data/spec/unit/test/test_helper_spec.rb +17 -0
  319. data/spec/unit/type/exec_spec.rb +6 -12
  320. data/spec/unit/type/file/content_spec.rb +9 -3
  321. data/spec/unit/type/file_spec.rb +9 -4
  322. data/spec/unit/type/package_spec.rb +8 -0
  323. data/spec/unit/type/selboolean_spec.rb +4 -6
  324. data/spec/unit/type/service_spec.rb +9 -8
  325. data/spec/unit/type/user_spec.rb +19 -13
  326. data/spec/unit/util/execution_spec.rb +16 -0
  327. data/spec/unit/util/http_proxy_spec.rb +97 -0
  328. data/spec/unit/util/log/destinations_spec.rb +2 -26
  329. data/spec/unit/util/log_spec.rb +0 -138
  330. data/spec/unit/util/logging_spec.rb +200 -0
  331. data/spec/unit/util/pidlock_spec.rb +67 -40
  332. data/spec/unit/util/plist_spec.rb +20 -0
  333. data/spec/unit/util/windows/adsi_spec.rb +55 -4
  334. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  335. data/spec/unit/util/windows/sid_spec.rb +2 -2
  336. data/tasks/manpages.rake +1 -0
  337. metadata +16 -7
  338. data/lib/puppet/pops/loader/null_loader.rb +0 -60
  339. data/locales/ja/puppet.po +0 -12114
  340. data/spec/integration/test/test_helper_spec.rb +0 -31
@@ -337,10 +337,11 @@ class Puppet::Parser::Resource < Puppet::Resource
337
337
  end
338
338
 
339
339
  def replace_sensitive_data
340
- parameters.each_pair do |name, param|
340
+ parameters.keys.each do |name|
341
+ param = parameters[name]
341
342
  if param.value.is_a?(Puppet::Pops::Types::PSensitiveType::Sensitive)
342
343
  @sensitive_parameters << name
343
- param.value = param.value.unwrap
344
+ parameters[name] = Puppet::Parser::Resource::Param.from_param(param, param.value.unwrap)
344
345
  end
345
346
  end
346
347
  end
@@ -19,4 +19,10 @@ class Puppet::Parser::Resource::Param
19
19
  def to_s
20
20
  "#{self.name} => #{self.value}"
21
21
  end
22
+
23
+ def self.from_param(param, value)
24
+ new_param = param.dup
25
+ new_param.value = value
26
+ return new_param
27
+ end
22
28
  end
@@ -69,11 +69,7 @@ module Adaptable
69
69
  #
70
70
  def self.get(o)
71
71
  attr_name = self_attr_name
72
- if o.instance_variable_defined?(attr_name)
73
- o.instance_variable_get(attr_name)
74
- else
75
- nil
76
- end
72
+ o.instance_variable_get(attr_name)
77
73
  end
78
74
 
79
75
  # Returns an existing adapter for the given object, or creates a new adapter if the
@@ -94,17 +90,16 @@ module Adaptable
94
90
  #
95
91
  def self.adapt(o, &block)
96
92
  attr_name = self_attr_name
97
- adapter = if o.instance_variable_defined?(attr_name) && value = o.instance_variable_get(attr_name)
93
+ adapter = if value = o.instance_variable_get(attr_name)
98
94
  value
99
95
  else
100
96
  associate_adapter(create_adapter(o), o)
101
97
  end
102
98
  if block_given?
103
- case block.arity
104
- when 1
105
- block.call(adapter)
106
- else
107
- block.call(adapter, o)
99
+ if block.arity == 1
100
+ block.call(adapter)
101
+ else
102
+ block.call(adapter, o)
108
103
  end
109
104
  end
110
105
  adapter
@@ -130,8 +125,7 @@ module Adaptable
130
125
  def self.adapt_new(o, &block)
131
126
  adapter = associate_adapter(create_adapter(o), o)
132
127
  if block_given?
133
- case block.arity
134
- when 1
128
+ if block.arity == 1
135
129
  block.call(adapter)
136
130
  else
137
131
  block.call(adapter, o)
@@ -85,6 +85,13 @@ module Adapters
85
85
 
86
86
  class PathsAndNameCacheAdapter < Puppet::Pops::Adaptable::Adapter
87
87
  attr_accessor :cache, :paths
88
+
89
+ def self.create_adapter(env)
90
+ adapter = super(env)
91
+ adapter.paths = env.modulepath.map { |p| Pathname.new(p) }
92
+ adapter.cache = {}
93
+ adapter
94
+ end
88
95
  end
89
96
 
90
97
  # Attempts to find the module that `instance` originates from by looking at it's {SourcePosAdapter} and
@@ -103,10 +110,7 @@ module Adapters
103
110
  def self.loader_name_by_source(environment, instance, file)
104
111
  file = instance.file if file.nil?
105
112
  return nil if file.nil? || EMPTY_STRING == file
106
- pn_adapter = PathsAndNameCacheAdapter.adapt(environment) do |a|
107
- a.paths ||= environment.modulepath.map { |p| Pathname.new(p) }
108
- a.cache ||= {}
109
- end
113
+ pn_adapter = PathsAndNameCacheAdapter.adapt(environment)
110
114
  dir = File.dirname(file)
111
115
  pn_adapter.cache.fetch(dir) do |key|
112
116
  mod = find_module_for_dir(environment, pn_adapter.paths, dir)
@@ -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?
@@ -45,9 +45,7 @@ class Puppet::Pops::Evaluator::Collectors::AbstractCollector
45
45
  return false if objects.empty?
46
46
 
47
47
  if @overrides and !objects.empty?
48
- overrides[:source].meta_def(:child_of?) do |klass|
49
- true
50
- end
48
+ overrides[:source].override = true
51
49
 
52
50
  objects.each do |res|
53
51
  unless @collected.include?(res.ref)
@@ -24,6 +24,6 @@ class Puppet::Pops::Evaluator::Collectors::CatalogCollector < Puppet::Pops::Eval
24
24
  end
25
25
 
26
26
  def to_s
27
- "Catalog-Collector[#{@type.to_s}]"
27
+ "Catalog-Collector[#{@type}]"
28
28
  end
29
29
  end
@@ -64,6 +64,6 @@ class Puppet::Pops::Evaluator::Collectors::ExportedCollector < Puppet::Pops::Eva
64
64
  end
65
65
 
66
66
  def to_s
67
- "Exported-Collector[#{@type.to_s}]"
67
+ "Exported-Collector[#{@type}]"
68
68
  end
69
69
  end
@@ -947,7 +947,7 @@ class EvaluatorImpl
947
947
  name = name.value # the string function name
948
948
 
949
949
  obj = receiver[0]
950
- receiver_type = Types::TypeCalculator.infer(obj)
950
+ receiver_type = Types::TypeCalculator.infer_callable_methods_t(obj)
951
951
  if receiver_type.is_a?(Types::TypeWithMembers)
952
952
  member = receiver_type[name]
953
953
  unless member.nil?
@@ -35,10 +35,11 @@ module Puppet::Pops::Evaluator::ExternalSyntaxSupport
35
35
  def lookup_keys_for_syntax(syntax)
36
36
  segments = syntax.split(/\+/)
37
37
  result = []
38
- begin
38
+ loop do
39
39
  result << segments.join("+")
40
40
  segments.shift
41
- end until segments.empty?
41
+ break if segments.empty?
42
+ end
42
43
  result
43
44
  end
44
45
 
@@ -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()
@@ -299,10 +299,10 @@ module Runtime3Support
299
299
  # 'ruby -wc' thinks that _func is unused, because the only reference to it
300
300
  # is inside of the Kernel.eval string below. By prefixing it with the
301
301
  # underscore, we let Ruby know to not worry about whether it's unused or not.
302
- if loader && _func = loader.load(:function, name)
302
+ if loader && func = loader.load(:function, name)
303
303
  Puppet::Util::Profiler.profile(name, [:functions, name]) do
304
- # Add stack frame when calling. See Puppet::Pops::PuppetStack
305
- return Kernel.eval('_func.call(scope, *args, &block)'.freeze, Kernel.binding, file || '', line)
304
+ # Add stack frame when calling.
305
+ return Puppet::Pops::PuppetStack.stack(file || '', line, func, :call, [scope, *args], &block)
306
306
  end
307
307
  end
308
308
  # Call via 3x API if function exists there
@@ -913,5 +913,10 @@ module Issues
913
913
  LOADER_FAILURE = issue :LOADER_FAILURE, :type do
914
914
  _('Failed to load: %{type_name}') % { type: type }
915
915
  end
916
+
917
+ DEPRECATED_APP_ORCHESTRATION = issue :DEPRECATED_APP_ORCHESTRATION, :klass do
918
+ _("Use of the application-orchestration %{expr} is deprecated. See https://puppet.com/docs/puppet/5.5/deprecated_language.html" % { expr: label(klass) })
919
+ end
920
+
916
921
  end
917
922
  end
@@ -283,7 +283,7 @@ class Loaders
283
283
  nil
284
284
  elsif File.directory?(file)
285
285
  raise Puppet::Error, "manifest of environment '#{@environment.name}' appoints directory '#{file}'. It must be a file"
286
- elsif File.exists?(file)
286
+ elsif File.exist?(file)
287
287
  parser.parse_file(file)
288
288
  else
289
289
  raise Puppet::Error, "manifest of environment '#{@environment.name}' appoints '#{file}'. It does not exist"
@@ -339,6 +339,7 @@ class HieraConfig
339
339
  def self.not_implemented(impl, method_name)
340
340
  raise NotImplementedError, "The class #{impl.class.name} should have implemented the method #{method_name}()"
341
341
  end
342
+ private_class_method :not_implemented
342
343
  end
343
344
 
344
345
  # @api private
@@ -30,7 +30,7 @@ module SubLookup
30
30
  raise yield('Syntax error') unless segments.size * 2 == count + 1
31
31
  segments.map! do |segment|
32
32
  segment.strip!
33
- if segment.start_with?('"') || segment.start_with?("'")
33
+ if segment.start_with?('"', "'")
34
34
  segment[1..-2]
35
35
  elsif segment =~ /^(:?[+-]?[0-9]+)$/
36
36
  segment.to_i
@@ -173,12 +173,14 @@ module Puppet::Pops
173
173
 
174
174
  protected
175
175
 
176
- # Returns the type used to validate the options hash
177
- #
178
- # @return [Types::PStructType] the puppet type
179
- #
180
- def self.options_t
181
- @options_t ||=Types::TypeParser.singleton.parse("Struct[{strategy=>Optional[Pattern[/#{key}/]]}]")
176
+ class << self
177
+ # Returns the type used to validate the options hash
178
+ #
179
+ # @return [Types::PStructType] the puppet type
180
+ #
181
+ def options_t
182
+ @options_t ||=Types::TypeParser.singleton.parse("Struct[{strategy=>Optional[Pattern[/#{key}/]]}]")
183
+ end
182
184
  end
183
185
 
184
186
  # Returns the type used to validate the options hash
@@ -383,18 +385,20 @@ module Puppet::Pops
383
385
 
384
386
  protected
385
387
 
386
- # Returns a type that allows all deep_merge options except 'preserve_unmergeables' since we force
387
- # the setting of that option to false
388
- #
389
- # @return [Types::PAnyType] the puppet type used when validating the options hash
390
- def self.options_t
391
- @options_t ||= Types::TypeParser.singleton.parse('Struct[{'\
392
- "strategy=>Optional[Pattern[#{key}]],"\
393
- 'knockout_prefix=>Optional[String],'\
394
- 'merge_debug=>Optional[Boolean],'\
395
- 'merge_hash_arrays=>Optional[Boolean],'\
396
- 'sort_merged_arrays=>Optional[Boolean],'\
397
- '}]')
388
+ class << self
389
+ # Returns a type that allows all deep_merge options except 'preserve_unmergeables' since we force
390
+ # the setting of that option to false
391
+ #
392
+ # @return [Types::PAnyType] the puppet type used when validating the options hash
393
+ def options_t
394
+ @options_t ||= Types::TypeParser.singleton.parse('Struct[{'\
395
+ "strategy=>Optional[Pattern[#{key}]],"\
396
+ 'knockout_prefix=>Optional[String],'\
397
+ 'merge_debug=>Optional[Boolean],'\
398
+ 'merge_hash_arrays=>Optional[Boolean],'\
399
+ 'sort_merged_arrays=>Optional[Boolean],'\
400
+ '}]')
401
+ end
398
402
  end
399
403
 
400
404
  def value_t
@@ -136,7 +136,7 @@ module HeredocSupport
136
136
  # simply leaves lines that have text in the margin untouched.
137
137
  #
138
138
  processed_lines = lines.collect {|s| s.gsub(leading_pattern, '') }
139
- margin_per_line = processed_lines.length.times.map {|x| lines[x].length - processed_lines[x].length }
139
+ margin_per_line = Array.new(processed_lines.length) {|x| lines[x].length - processed_lines[x].length }
140
140
  lines = processed_lines
141
141
  else
142
142
  # Array with a 0 per line
@@ -23,7 +23,7 @@ module Puppet::Pops::Parser::InterpolationSupport
23
23
  value,terminator = slurp_dqstring()
24
24
  text = value
25
25
  after = scn.pos
26
- while true
26
+ loop do
27
27
  case terminator
28
28
  when '"'
29
29
  # simple case, there was no interpolation, return directly
@@ -63,7 +63,7 @@ module Puppet::Pops::Parser::InterpolationSupport
63
63
  value,terminator = slurp_dqstring
64
64
  text = value
65
65
  after = scn.pos
66
- while true
66
+ loop do
67
67
  case terminator
68
68
  when '"'
69
69
  # simple case, there was no further interpolation, return directly
@@ -107,7 +107,7 @@ module Puppet::Pops::Parser::InterpolationSupport
107
107
  value,terminator = slurp_uqstring()
108
108
  text = value
109
109
  after = scn.pos
110
- while true
110
+ loop do
111
111
  case terminator
112
112
  when ''
113
113
  # simple case, there was no interpolation, return directly
@@ -147,7 +147,7 @@ module Puppet::Pops::Parser::InterpolationSupport
147
147
  value,terminator = slurp_uqstring
148
148
  text = value
149
149
  after = scn.pos
150
- while true
150
+ loop do
151
151
  case terminator
152
152
  when ''
153
153
  # simple case, there was no further interpolation, return directly
@@ -90,7 +90,7 @@ class Locator
90
90
  f = Puppet::Util.path_to_uri(f).to_s
91
91
  end
92
92
  offset = ast.offset
93
- URI("#{f}?line=#{line_for_offset(offset).to_s}&pos=#{pos_on_line(offset).to_s}")
93
+ URI("#{f}?line=#{line_for_offset(offset)}&pos=#{pos_on_line(offset)}")
94
94
  end
95
95
 
96
96
  class AbstractLocator < Locator
@@ -48,6 +48,23 @@ class PNParser
48
48
  parse_next
49
49
  end
50
50
 
51
+ def self.char_types
52
+ unless instance_variable_defined?(:@char_types)
53
+ @char_types = Array.new(0x80, TYPE_IDENTIFIER)
54
+ @char_types[0] = TYPE_END
55
+ [0x09, 0x0d, 0x0a, 0x20].each { |n| @char_types[n] = TYPE_WS }
56
+ [TOKEN_LP, TOKEN_RP, TOKEN_LB, TOKEN_RB, TOKEN_LC, TOKEN_RC].each { |n| @char_types[n] = TYPE_DELIM }
57
+ @char_types[0x2d] = TYPE_MINUS
58
+ (0x30..0x39).each { |n| @char_types[n] = TYPE_DIGIT }
59
+ (0x41..0x5a).each { |n| @char_types[n] = TYPE_ALPHA }
60
+ (0x61..0x7a).each { |n| @char_types[n] = TYPE_ALPHA }
61
+ @char_types[TOKEN_KEY] = TYPE_KEY_START
62
+ @char_types[TOKEN_STRING] = TYPE_STRING_START
63
+ @char_types.freeze
64
+ end
65
+ @char_types
66
+ end
67
+
51
68
  private
52
69
 
53
70
  def parse_next
@@ -128,22 +145,6 @@ class PNParser
128
145
  end
129
146
 
130
147
  # All methods below belong to the PN lexer
131
- def self.char_types
132
- unless instance_variable_defined?(:@char_types)
133
- @char_types = Array.new(0x80, TYPE_IDENTIFIER)
134
- @char_types[0] = TYPE_END
135
- [0x09, 0x0d, 0x0a, 0x20].each { |n| @char_types[n] = TYPE_WS }
136
- [TOKEN_LP, TOKEN_RP, TOKEN_LB, TOKEN_RB, TOKEN_LC, TOKEN_RC].each { |n| @char_types[n] = TYPE_DELIM }
137
- @char_types[0x2d] = TYPE_MINUS
138
- (0x30..0x39).each { |n| @char_types[n] = TYPE_DIGIT }
139
- (0x41..0x5a).each { |n| @char_types[n] = TYPE_ALPHA }
140
- (0x61..0x7a).each { |n| @char_types[n] = TYPE_ALPHA }
141
- @char_types[TOKEN_KEY] = TYPE_KEY_START
142
- @char_types[TOKEN_STRING] = TYPE_STRING_START
143
- @char_types.freeze
144
- end
145
- @char_types
146
- end
147
148
 
148
149
  def next_token
149
150
  skip_white
@@ -1,57 +1,60 @@
1
- module Puppet::Pops
2
- # Module for making a call such that there is an identifiable entry on
3
- # the ruby call stack enabling getting a puppet call stack
4
- # To use this make a call with:
5
- # ```
6
- # Puppet::Pops::PuppetStack.stack(file, line, receiver, message, args)
7
- # ```
8
- # To get the stack call:
9
- # ```
10
- # Puppet::Pops::PuppetStack.stacktrace
11
- #
12
- # When getting a backtrace in Ruby, the puppet stack frames are
13
- # identified as coming from "in 'stack'" and having a ".pp" file
14
- # name.
15
- # To support testing, a given file that is an empty string, or nil
16
- # as well as a nil line number are supported. Such stack frames
17
- # will be represented with the text `unknown` and `0´ respectively.
18
- #
19
- module PuppetStack
20
- # Pattern matching an entry in the ruby stack that is a puppet entry
21
- PP_ENTRY_PATTERN = /^(.*\.pp)?:([0-9]+):in (`stack'|`block in call_function')/
22
1
 
23
- # Sends a message to an obj such that it appears to come from
24
- # file, line when calling stacktrace.
25
- #
26
- def self.stack(file, line, obj, message, args, &block)
27
- file = '' if file.nil?
28
- line = 0 if line.nil?
2
+ module Puppet
3
+ module Pops
4
+ # Utility class for keeping track of the "Puppet stack", ie the file
5
+ # and line numbers of Puppet Code that created the current context.
6
+ #
7
+ # To use this make a call with:
8
+ #
9
+ # ```rb
10
+ # Puppet::Pops::PuppetStack.stack(file, line, receiver, message, args)
11
+ # ```
12
+ #
13
+ # To get the stack call:
14
+ #
15
+ # ```rb
16
+ # Puppet::Pops::PuppetStack.stacktrace
17
+ # ```
18
+ #
19
+ # or
20
+ #
21
+ # ```rb
22
+ # Puppet::Pops::PuppetStack.top_of_stack
23
+ # ```
24
+ #
25
+ # To support testing, a given file that is an empty string, or nil
26
+ # as well as a nil line number are supported. Such stack frames
27
+ # will be represented with the text `unknown` and `0´ respectively.
28
+ module PuppetStack
29
+ @stack = Array.new
29
30
 
30
- if block_given?
31
- Kernel.eval("obj.send(message, *args, &block)", Kernel.binding(), file, line)
32
- else
33
- Kernel.eval("obj.send(message, *args)", Kernel.binding(), file, line)
34
- end
35
- end
31
+ def self.stack(file, line, obj, message, args, &block)
32
+ file = 'unknown' if (file.nil? || file == '')
33
+ line = 0 if line.nil?
36
34
 
37
- def self.stacktrace
38
- caller().reduce([]) do |memo, loc|
39
- if loc =~ PP_ENTRY_PATTERN
40
- memo << [$1.nil? ? 'unknown' : $1, $2.to_i]
35
+ result = nil
36
+ @stack.unshift([file, line])
37
+ begin
38
+ if block_given?
39
+ result = obj.send(message, *args, &block)
40
+ else
41
+ result = obj.send(message, *args)
42
+ end
43
+ ensure
44
+ @stack.shift()
45
+ end
46
+ result
41
47
  end
42
- memo
43
- end
44
- end
45
48
 
46
- # Returns an Array with the top of the puppet stack, or an empty Array if there was no such entry.
47
- #
48
- def self.top_of_stack
49
- caller.each do |loc|
50
- if loc =~ PP_ENTRY_PATTERN
51
- return [$1.nil? ? 'unknown' : $1, $2.to_i]
49
+ def self.stacktrace
50
+ @stack.dup
51
+ end
52
+
53
+ # Returns an Array with the top of the puppet stack, or an empty
54
+ # Array if there was no such entry.
55
+ def self.top_of_stack
56
+ @stack.first || []
52
57
  end
53
58
  end
54
- []
55
59
  end
56
60
  end
57
- end