puppet 6.24.0-x86-mingw32 → 6.25.0-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 (279) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/Gemfile.lock +12 -12
  4. data/{ext → examples/enc}/regexp_nodes/classes/databases +0 -0
  5. data/{ext → examples/enc}/regexp_nodes/classes/webservers +0 -0
  6. data/{ext → examples/enc}/regexp_nodes/environment/development +0 -0
  7. data/{ext → examples/enc}/regexp_nodes/parameters/service/prod +0 -0
  8. data/{ext → examples/enc}/regexp_nodes/parameters/service/qa +0 -0
  9. data/{ext → examples/enc}/regexp_nodes/parameters/service/sandbox +0 -0
  10. data/{ext → examples/enc}/regexp_nodes/regexp_nodes.rb +0 -0
  11. data/{ext → examples}/nagios/check_puppet.rb +2 -2
  12. data/ext/README.md +13 -0
  13. data/lib/puppet/application/agent.rb +4 -0
  14. data/lib/puppet/application/apply.rb +20 -2
  15. data/lib/puppet/application/resource.rb +15 -13
  16. data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
  17. data/lib/puppet/configurer.rb +85 -57
  18. data/lib/puppet/confine/variable.rb +1 -1
  19. data/lib/puppet/defaults.rb +36 -30
  20. data/lib/puppet/environments.rb +66 -26
  21. data/lib/puppet/face/facts.rb +1 -1
  22. data/lib/puppet/facter_impl.rb +96 -0
  23. data/lib/puppet/file_serving/configuration/parser.rb +2 -0
  24. data/lib/puppet/file_serving/configuration.rb +3 -0
  25. data/lib/puppet/file_serving/mount/file.rb +4 -4
  26. data/lib/puppet/file_serving/mount/scripts.rb +24 -0
  27. data/lib/puppet/file_system/file_impl.rb +3 -1
  28. data/lib/puppet/forge.rb +1 -1
  29. data/lib/puppet/functions/find_template.rb +2 -2
  30. data/lib/puppet/http/service/compiler.rb +6 -1
  31. data/lib/puppet/indirector/catalog/compiler.rb +24 -6
  32. data/lib/puppet/indirector/catalog/rest.rb +1 -0
  33. data/lib/puppet/indirector/facts/facter.rb +6 -6
  34. data/lib/puppet/indirector/indirection.rb +1 -1
  35. data/lib/puppet/indirector/terminus.rb +4 -0
  36. data/lib/puppet/module/plan.rb +0 -1
  37. data/lib/puppet/module/task.rb +1 -1
  38. data/lib/puppet/module.rb +1 -0
  39. data/lib/puppet/module_tool/applications/installer.rb +8 -4
  40. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
  41. data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
  42. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  43. data/lib/puppet/node/environment.rb +10 -11
  44. data/lib/puppet/pal/pal_impl.rb +1 -1
  45. data/lib/puppet/parser/scope.rb +1 -0
  46. data/lib/puppet/parser/templatewrapper.rb +1 -0
  47. data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
  48. data/lib/puppet/pops/model/ast.rb +1 -0
  49. data/lib/puppet/pops/model/factory.rb +2 -1
  50. data/lib/puppet/pops/parser/eparser.rb +201 -201
  51. data/lib/puppet/pops/parser/lexer2.rb +92 -91
  52. data/lib/puppet/pops/parser/slurp_support.rb +1 -0
  53. data/lib/puppet/pops/serialization/to_data_converter.rb +18 -6
  54. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  55. data/lib/puppet/pops/types/type_formatter.rb +4 -3
  56. data/lib/puppet/pops/types/types.rb +1 -1
  57. data/lib/puppet/provider/aix_object.rb +1 -1
  58. data/lib/puppet/provider/group/groupadd.rb +5 -2
  59. data/lib/puppet/provider/package/pkg.rb +19 -2
  60. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
  61. data/lib/puppet/provider/package/yum.rb +1 -1
  62. data/lib/puppet/provider/service/base.rb +1 -1
  63. data/lib/puppet/provider/service/init.rb +5 -5
  64. data/lib/puppet/provider/service/launchd.rb +2 -2
  65. data/lib/puppet/provider/service/redhat.rb +1 -1
  66. data/lib/puppet/provider/service/smf.rb +3 -3
  67. data/lib/puppet/provider/service/systemd.rb +2 -2
  68. data/lib/puppet/provider/service/upstart.rb +5 -5
  69. data/lib/puppet/provider/user/aix.rb +44 -1
  70. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  71. data/lib/puppet/provider/user/useradd.rb +72 -16
  72. data/lib/puppet/provider.rb +1 -1
  73. data/lib/puppet/reference/providers.rb +2 -2
  74. data/lib/puppet/resource/type_collection.rb +1 -0
  75. data/lib/puppet/runtime.rb +11 -1
  76. data/lib/puppet/settings.rb +2 -2
  77. data/lib/puppet/test/test_helper.rb +4 -1
  78. data/lib/puppet/transaction/persistence.rb +11 -1
  79. data/lib/puppet/transaction/report.rb +15 -1
  80. data/lib/puppet/type/exec.rb +19 -2
  81. data/lib/puppet/type/file.rb +6 -6
  82. data/lib/puppet/type/filebucket.rb +3 -3
  83. data/lib/puppet/type/group.rb +0 -1
  84. data/lib/puppet/type/resources.rb +1 -1
  85. data/lib/puppet/type/service.rb +8 -3
  86. data/lib/puppet/type/user.rb +0 -1
  87. data/lib/puppet/type.rb +1 -1
  88. data/lib/puppet/util/command_line.rb +1 -1
  89. data/lib/puppet/util/filetype.rb +2 -2
  90. data/lib/puppet/util/json.rb +3 -0
  91. data/lib/puppet/util/log.rb +1 -2
  92. data/lib/puppet/util/logging.rb +1 -25
  93. data/lib/puppet/util/pidlock.rb +1 -1
  94. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  95. data/lib/puppet/util/suidmanager.rb +1 -2
  96. data/lib/puppet/util/tagging.rb +1 -0
  97. data/lib/puppet/util/windows/user.rb +0 -2
  98. data/lib/puppet/util.rb +4 -3
  99. data/lib/puppet/version.rb +1 -1
  100. data/lib/puppet.rb +2 -6
  101. data/locales/puppet.pot +246 -230
  102. data/man/man5/puppet.conf.5 +33 -25
  103. data/man/man8/puppet-agent.8 +4 -1
  104. data/man/man8/puppet-apply.8 +1 -1
  105. data/man/man8/puppet-catalog.8 +1 -1
  106. data/man/man8/puppet-config.8 +1 -1
  107. data/man/man8/puppet-describe.8 +1 -1
  108. data/man/man8/puppet-device.8 +1 -1
  109. data/man/man8/puppet-doc.8 +1 -1
  110. data/man/man8/puppet-epp.8 +1 -1
  111. data/man/man8/puppet-facts.8 +1 -1
  112. data/man/man8/puppet-filebucket.8 +1 -1
  113. data/man/man8/puppet-generate.8 +1 -1
  114. data/man/man8/puppet-help.8 +1 -1
  115. data/man/man8/puppet-key.8 +1 -1
  116. data/man/man8/puppet-lookup.8 +1 -1
  117. data/man/man8/puppet-man.8 +1 -1
  118. data/man/man8/puppet-module.8 +3 -3
  119. data/man/man8/puppet-node.8 +1 -1
  120. data/man/man8/puppet-parser.8 +1 -1
  121. data/man/man8/puppet-plugin.8 +1 -1
  122. data/man/man8/puppet-report.8 +1 -1
  123. data/man/man8/puppet-resource.8 +1 -1
  124. data/man/man8/puppet-script.8 +1 -1
  125. data/man/man8/puppet-ssl.8 +1 -1
  126. data/man/man8/puppet-status.8 +1 -1
  127. data/man/man8/puppet.8 +2 -2
  128. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
  129. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
  130. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
  131. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
  132. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
  133. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
  134. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
  135. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
  136. data/spec/integration/application/agent_spec.rb +113 -37
  137. data/spec/integration/application/filebucket_spec.rb +5 -0
  138. data/spec/integration/configurer_spec.rb +18 -2
  139. data/spec/integration/indirector/facts/facter_spec.rb +3 -3
  140. data/spec/integration/l10n/compiler_spec.rb +37 -0
  141. data/spec/integration/transaction/report_spec.rb +1 -1
  142. data/spec/integration/type/file_spec.rb +2 -2
  143. data/spec/integration/type/package_spec.rb +6 -6
  144. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  145. data/spec/integration/util/windows/process_spec.rb +1 -9
  146. data/spec/lib/puppet_spec/modules.rb +13 -2
  147. data/spec/lib/puppet_spec/puppetserver.rb +15 -0
  148. data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
  149. data/spec/shared_contexts/l10n.rb +27 -0
  150. data/spec/spec_helper.rb +1 -10
  151. data/spec/unit/application/apply_spec.rb +76 -56
  152. data/spec/unit/application/resource_spec.rb +29 -0
  153. data/spec/unit/configurer_spec.rb +171 -56
  154. data/spec/unit/defaults_spec.rb +1 -0
  155. data/spec/unit/environments_spec.rb +150 -1
  156. data/spec/unit/facter_impl_spec.rb +31 -0
  157. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  158. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
  159. data/spec/unit/file_serving/configuration_spec.rb +14 -4
  160. data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
  161. data/spec/unit/file_system_spec.rb +7 -0
  162. data/spec/unit/functions/logging_spec.rb +1 -0
  163. data/spec/unit/functions/lookup_spec.rb +64 -0
  164. data/spec/unit/http/service/compiler_spec.rb +8 -0
  165. data/spec/unit/indirector/catalog/compiler_spec.rb +87 -0
  166. data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
  167. data/spec/unit/indirector/indirection_spec.rb +10 -3
  168. data/spec/unit/interface/action_spec.rb +0 -9
  169. data/spec/unit/module_spec.rb +15 -1
  170. data/spec/unit/module_tool/applications/installer_spec.rb +39 -12
  171. data/spec/unit/network/authstore_spec.rb +0 -15
  172. data/spec/unit/network/formats_spec.rb +6 -0
  173. data/spec/unit/pops/parser/parse_containers_spec.rb +0 -11
  174. data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
  175. data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
  176. data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
  177. data/spec/unit/provider/package/gem_spec.rb +1 -1
  178. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  179. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  180. data/spec/unit/provider/package/pip_spec.rb +1 -1
  181. data/spec/unit/provider/package/pkg_spec.rb +29 -4
  182. data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
  183. data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
  184. data/spec/unit/provider/service/launchd_spec.rb +11 -0
  185. data/spec/unit/provider/service/systemd_spec.rb +1 -1
  186. data/spec/unit/provider/user/aix_spec.rb +100 -0
  187. data/spec/unit/provider/user/directoryservice_spec.rb +1 -1
  188. data/spec/unit/provider/user/useradd_spec.rb +43 -2
  189. data/spec/unit/provider_spec.rb +4 -4
  190. data/spec/unit/puppet_spec.rb +12 -4
  191. data/spec/unit/ssl/certificate_request_spec.rb +8 -14
  192. data/spec/unit/type/service_spec.rb +27 -0
  193. data/spec/unit/type_spec.rb +2 -2
  194. data/spec/unit/util/logging_spec.rb +2 -0
  195. data/tasks/parallel.rake +3 -3
  196. metadata +37 -94
  197. data/ext/README.environment +0 -8
  198. data/ext/dbfix.sql +0 -132
  199. data/ext/debian/README.Debian +0 -8
  200. data/ext/debian/README.source +0 -2
  201. data/ext/debian/TODO.Debian +0 -1
  202. data/ext/debian/changelog.erb +0 -1122
  203. data/ext/debian/compat +0 -1
  204. data/ext/debian/control +0 -144
  205. data/ext/debian/copyright +0 -339
  206. data/ext/debian/docs +0 -1
  207. data/ext/debian/fileserver.conf +0 -41
  208. data/ext/debian/puppet-common.dirs +0 -13
  209. data/ext/debian/puppet-common.install +0 -3
  210. data/ext/debian/puppet-common.lintian-overrides +0 -5
  211. data/ext/debian/puppet-common.manpages +0 -28
  212. data/ext/debian/puppet-common.postinst +0 -35
  213. data/ext/debian/puppet-common.postrm +0 -33
  214. data/ext/debian/puppet-el.dirs +0 -1
  215. data/ext/debian/puppet-el.emacsen-install +0 -25
  216. data/ext/debian/puppet-el.emacsen-remove +0 -11
  217. data/ext/debian/puppet-el.emacsen-startup +0 -9
  218. data/ext/debian/puppet-el.install +0 -1
  219. data/ext/debian/puppet-testsuite.install +0 -2
  220. data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
  221. data/ext/debian/puppet.lintian-overrides +0 -3
  222. data/ext/debian/puppet.logrotate +0 -20
  223. data/ext/debian/puppet.postinst +0 -20
  224. data/ext/debian/puppet.postrm +0 -20
  225. data/ext/debian/puppet.preinst +0 -20
  226. data/ext/debian/puppetmaster-common.install +0 -2
  227. data/ext/debian/puppetmaster-common.manpages +0 -2
  228. data/ext/debian/puppetmaster-common.postinst +0 -6
  229. data/ext/debian/puppetmaster-passenger.dirs +0 -4
  230. data/ext/debian/puppetmaster-passenger.postinst +0 -162
  231. data/ext/debian/puppetmaster-passenger.postrm +0 -61
  232. data/ext/debian/puppetmaster.README.debian +0 -17
  233. data/ext/debian/puppetmaster.default +0 -14
  234. data/ext/debian/puppetmaster.init +0 -137
  235. data/ext/debian/puppetmaster.lintian-overrides +0 -3
  236. data/ext/debian/puppetmaster.postinst +0 -20
  237. data/ext/debian/puppetmaster.postrm +0 -5
  238. data/ext/debian/puppetmaster.preinst +0 -22
  239. data/ext/debian/rules +0 -132
  240. data/ext/debian/source/format +0 -1
  241. data/ext/debian/source/options +0 -1
  242. data/ext/debian/vim-puppet.README.Debian +0 -13
  243. data/ext/debian/vim-puppet.dirs +0 -5
  244. data/ext/debian/vim-puppet.yaml +0 -7
  245. data/ext/debian/watch +0 -2
  246. data/ext/freebsd/puppetd +0 -26
  247. data/ext/freebsd/puppetmasterd +0 -26
  248. data/ext/gentoo/conf.d/puppet +0 -5
  249. data/ext/gentoo/conf.d/puppetmaster +0 -12
  250. data/ext/gentoo/init.d/puppet +0 -38
  251. data/ext/gentoo/init.d/puppetmaster +0 -51
  252. data/ext/gentoo/puppet/fileserver.conf +0 -41
  253. data/ext/ips/puppet-agent +0 -44
  254. data/ext/ips/puppet-master +0 -44
  255. data/ext/ips/puppet.p5m.erb +0 -12
  256. data/ext/ips/puppetagent.xml +0 -42
  257. data/ext/ips/puppetmaster.xml +0 -42
  258. data/ext/ips/rules +0 -19
  259. data/ext/ips/transforms +0 -34
  260. data/ext/ldap/puppet.schema +0 -24
  261. data/ext/logcheck/puppet +0 -23
  262. data/ext/osx/file_mapping.yaml +0 -33
  263. data/ext/osx/postflight.erb +0 -109
  264. data/ext/osx/preflight.erb +0 -52
  265. data/ext/osx/prototype.plist.erb +0 -38
  266. data/ext/redhat/fileserver.conf +0 -41
  267. data/ext/redhat/logrotate +0 -21
  268. data/ext/redhat/puppet.spec.erb +0 -842
  269. data/ext/redhat/server.init +0 -128
  270. data/ext/redhat/server.sysconfig +0 -13
  271. data/ext/solaris/pkginfo +0 -6
  272. data/ext/solaris/smf/puppetd.xml +0 -77
  273. data/ext/solaris/smf/puppetmasterd.xml +0 -77
  274. data/ext/solaris/smf/svc-puppetd +0 -71
  275. data/ext/solaris/smf/svc-puppetmasterd +0 -67
  276. data/ext/suse/puppet.spec +0 -310
  277. data/ext/suse/server.init +0 -173
  278. data/ext/yaml_nodes.rb +0 -105
  279. data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -69,6 +69,10 @@ class Puppet::HTTP::Service::Compiler < Puppet::HTTP::Service
69
69
  # @param [String] environment The name of the environment we are operating in
70
70
  # @param [String] configured_environment Optional, the name of the configured
71
71
  # environment. If unset, `environment` is used.
72
+ # @param [Boolean] check_environment If true, request that the server check if
73
+ # our `environment` matches the server-specified environment. If they do not
74
+ # match, then the server may return an empty catalog in the server-specified
75
+ # environment.
72
76
  # @param [String] transaction_uuid An agent generated transaction uuid, used
73
77
  # for connecting catalogs and reports.
74
78
  # @param [String] job_uuid A unique job identifier defined when the orchestrator
@@ -85,7 +89,7 @@ class Puppet::HTTP::Service::Compiler < Puppet::HTTP::Service
85
89
  # containing the request response and the deserialized catalog returned by
86
90
  # the server
87
91
  #
88
- def post_catalog(name, facts:, environment:, configured_environment: nil, transaction_uuid: nil, job_uuid: nil, static_catalog: true, checksum_type: Puppet[:supported_checksum_types])
92
+ def post_catalog(name, facts:, environment:, configured_environment: nil, check_environment: false, transaction_uuid: nil, job_uuid: nil, static_catalog: true, checksum_type: Puppet[:supported_checksum_types])
89
93
  if Puppet[:preferred_serialization_format] == "pson"
90
94
  formatter = Puppet::Network::FormatHandler.format_for(:pson)
91
95
  # must use 'pson' instead of 'text/pson'
@@ -103,6 +107,7 @@ class Puppet::HTTP::Service::Compiler < Puppet::HTTP::Service
103
107
  facts: Puppet::Util.uri_query_encode(facts_as_string),
104
108
  environment: environment,
105
109
  configured_environment: configured_environment || environment,
110
+ check_environment: !!check_environment,
106
111
  transaction_uuid: transaction_uuid,
107
112
  job_uuid: job_uuid,
108
113
  static_catalog: static_catalog,
@@ -53,8 +53,22 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
53
53
  node.trusted_data = Puppet.lookup(:trusted_information) { Puppet::Context::TrustedInformation.local(node) }.to_h
54
54
 
55
55
  if node.environment
56
+ # If the requested environment doesn't match the server specified environment,
57
+ # as determined by the node terminus, and the request wants us to check for an
58
+ # environment mismatch, then return an empty catalog with the server-specified
59
+ # enviroment.
60
+ if request.remote? && request.options[:check_environment] && node.environment != request.environment
61
+ return Puppet::Resource::Catalog.new(node.name, node.environment)
62
+ end
63
+
56
64
  node.environment.with_text_domain do
57
- compile(node, request.options)
65
+ envs = Puppet.lookup(:environments)
66
+ envs.guard(node.environment.name)
67
+ begin
68
+ compile(node, request.options)
69
+ ensure
70
+ envs.unguard(node.environment.name)
71
+ end
58
72
  end
59
73
  else
60
74
  compile(node, request.options)
@@ -78,6 +92,10 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
78
92
  Puppet.run_mode.server?
79
93
  end
80
94
 
95
+ def require_environment?
96
+ false
97
+ end
98
+
81
99
  private
82
100
 
83
101
  # @param facts [String] facts in a wire format for decoding
@@ -154,7 +172,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
154
172
  location = Puppet::Module::FILETYPES['files']
155
173
 
156
174
  !!(source_as_uri.path =~ /^\/modules\// &&
157
- metadata.full_path =~ /#{environment_path}[^\/]+\/[^\/]+\/#{location}\/.+/)
175
+ metadata.full_path =~ /#{environment_path}\/[^\/]+\/[^\/]+\/#{location}\/.+/)
158
176
  end
159
177
 
160
178
  # Helper method to log file resources that could not be inlined because they
@@ -173,7 +191,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
173
191
  # Inline file metadata for static catalogs
174
192
  # Initially restricted to files sourced from codedir via puppet:/// uri.
175
193
  def inline_metadata(catalog, checksum_type)
176
- environment_path = Pathname.new File.join(Puppet[:environmentpath], catalog.environment, "")
194
+ environment_path = Pathname.new File.join(Puppet[:environmentpath], catalog.environment)
177
195
  environment_path = Puppet::Environments::Directories.real_path(environment_path)
178
196
  list_of_resources = catalog.resources.find_all { |res| res.type == "File" }
179
197
 
@@ -415,17 +433,17 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
415
433
  "serverip" => "ipaddress",
416
434
  "serverip6" => "ipaddress6"
417
435
  }.each do |var, fact|
418
- value = Facter.value(fact)
436
+ value = Puppet.runtime[:facter].value(fact)
419
437
  if !value.nil?
420
438
  @server_facts[var] = value
421
439
  end
422
440
  end
423
441
 
424
442
  if @server_facts["servername"].nil?
425
- host = Facter.value(:hostname)
443
+ host = Puppet.runtime[:facter].value(:hostname)
426
444
  if host.nil?
427
445
  Puppet.warning _("Could not retrieve fact servername")
428
- elsif domain = Facter.value(:domain) #rubocop:disable Lint/AssignmentInCondition
446
+ elsif domain = Puppet.runtime[:facter].value(:domain) #rubocop:disable Lint/AssignmentInCondition
429
447
  @server_facts["servername"] = [host, domain].join(".")
430
448
  else
431
449
  @server_facts["servername"] = host
@@ -20,6 +20,7 @@ class Puppet::Resource::Catalog::Rest < Puppet::Indirector::REST
20
20
  facts: request.options[:facts_for_catalog],
21
21
  environment: request.environment.to_s,
22
22
  configured_environment: request.options[:configured_environment],
23
+ check_environment: request.options[:check_environment],
23
24
  transaction_uuid: request.options[:transaction_uuid],
24
25
  job_uuid: request.options[:job_id],
25
26
  static_catalog: request.options[:static_catalog],
@@ -20,10 +20,10 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
20
20
 
21
21
  # Lookup a host's facts up in Facter.
22
22
  def find(request)
23
- Facter.reset
23
+ Puppet.runtime[:facter].reset
24
24
 
25
25
  # Note: we need to setup puppet's external search paths before adding the puppetversion
26
- # fact. This is because in Facter 2.x, the first `Facter.add` causes Facter to create
26
+ # fact. This is because in Facter 2.x, the first `Puppet.runtime[:facter].add` causes Facter to create
27
27
  # its directory loaders which cannot be changed, meaning other external facts won't
28
28
  # be resolved. (PUP-4607)
29
29
  self.class.setup_external_search_paths(request)
@@ -36,7 +36,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
36
36
  raise(Puppet::Error, _("puppet facts show requires version 4.0.40 or greater of Facter.")) unless Facter.respond_to?(:resolve)
37
37
  find_with_options(request)
38
38
  else
39
- Puppet::Node::Facts.new(request.key, Facter.to_hash)
39
+ Puppet::Node::Facts.new(request.key, Puppet.runtime[:facter].to_hash)
40
40
  end
41
41
 
42
42
  result.add_local_facts unless request.options[:resolve_options]
@@ -68,7 +68,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
68
68
  true
69
69
  end
70
70
  dirs << request.options[:custom_dir] if request.options[:custom_dir]
71
- Facter.search(*dirs)
71
+ Puppet.runtime[:facter].search(*dirs)
72
72
  end
73
73
 
74
74
  def self.setup_external_search_paths(request)
@@ -90,7 +90,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
90
90
  end
91
91
 
92
92
  dirs << request.options[:external_dir] if request.options[:external_dir]
93
- Facter.search_external dirs
93
+ Puppet.runtime[:facter].search_external dirs
94
94
  end
95
95
 
96
96
  private
@@ -104,6 +104,6 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
104
104
  options_for_facter += " --no-block" if options[:no_block] == false
105
105
  options_for_facter += " --no-cache" if options[:no_cache] == false
106
106
 
107
- Puppet::Node::Facts.new(request.key, Facter.resolve(options_for_facter))
107
+ Puppet::Node::Facts.new(request.key, Puppet.runtime[:facter].resolve(options_for_facter))
108
108
  end
109
109
  end
@@ -313,7 +313,7 @@ class Puppet::Indirector::Indirection
313
313
  request = request(:save, key, instance, options)
314
314
  terminus = prepare(request)
315
315
 
316
- result = terminus.save(request)
316
+ result = terminus.save(request) if !request.ignore_terminus?
317
317
 
318
318
  # If caching is enabled, save our document there
319
319
  cache.save(request) if cache? && !request.ignore_cache_save?
@@ -143,6 +143,10 @@ class Puppet::Indirector::Terminus
143
143
  self.class.name
144
144
  end
145
145
 
146
+ def require_environment?
147
+ true
148
+ end
149
+
146
150
  def allow_remote_requests?
147
151
  true
148
152
  end
@@ -50,7 +50,6 @@ class Puppet::Module
50
50
  RESERVED_DATA_TYPES = %w{any array boolean catalogentry class collection
51
51
  callable data default enum float hash integer numeric optional pattern
52
52
  resource runtime scalar string struct tuple type undef variant}
53
- MOUNTS = %w[lib files plans]
54
53
 
55
54
  def self.is_plan_name?(name)
56
55
  return true if name =~ /^[a-z][a-z0-9_]*$/
@@ -45,7 +45,7 @@ class Puppet::Module
45
45
  end
46
46
 
47
47
  FORBIDDEN_EXTENSIONS = %w{.conf .md}
48
- MOUNTS = %w[lib files tasks]
48
+ MOUNTS = %w[files lib scripts tasks]
49
49
 
50
50
  def self.is_task_name?(name)
51
51
  return true if name =~ /^[a-z][a-z0-9_]*$/
data/lib/puppet/module.rb CHANGED
@@ -25,6 +25,7 @@ class Puppet::Module
25
25
  "plugins" => "lib",
26
26
  "pluginfacts" => "facts.d",
27
27
  "locales" => "locales",
28
+ "scripts" => "scripts",
28
29
  }
29
30
 
30
31
  # Find and return the +module+ that +path+ belongs to. If +path+ is
@@ -138,7 +138,7 @@ module Puppet::ModuleTool
138
138
  rescue SemanticPuppet::Dependency::UnsatisfiableGraph => e
139
139
  unsatisfied = nil
140
140
 
141
- if e.respond_to?(:unsatisfied)
141
+ if e.respond_to?(:unsatisfied) && e.unsatisfied
142
142
  constraints = {}
143
143
  # If the module we're installing satisfies all its
144
144
  # dependencies, but would break an already installed
@@ -164,8 +164,12 @@ module Puppet::ModuleTool
164
164
  # If the module fails to satisfy one of its
165
165
  # dependencies, show the unsatisfiable module
166
166
  else
167
- unsatisfied_range = graph.dependencies[name].max.constraints[e.unsatisfied].first[1]
168
- constraints[e.unsatisfied] = unsatisfied_range
167
+ dep_constraints = graph.dependencies[name].max.constraints
168
+
169
+ if dep_constraints.key?(e.unsatisfied)
170
+ unsatisfied_range = dep_constraints[e.unsatisfied].first[1]
171
+ constraints[e.unsatisfied] = unsatisfied_range
172
+ end
169
173
  end
170
174
 
171
175
  installed_module = @environment.module_by_forge_name(e.unsatisfied.tr('-', '/'))
@@ -175,7 +179,7 @@ module Puppet::ModuleTool
175
179
  :name => e.unsatisfied,
176
180
  :constraints => constraints,
177
181
  :current_version => current_version
178
- }
182
+ } if constraints.any?
179
183
  end
180
184
 
181
185
  raise NoVersionsSatisfyError, results.merge(
@@ -89,7 +89,7 @@ module Puppet::ModuleTool
89
89
  mod = @installed.first
90
90
 
91
91
  unless @ignore_changes
92
- raise _("Either the `--ignore_changes` or `--force` argument must be specified to uninstall modules when running in FIPS mode.") if Facter.value(:fips_enabled)
92
+ raise _("Either the `--ignore_changes` or `--force` argument must be specified to uninstall modules when running in FIPS mode.") if Puppet.runtime[:facter].value(:fips_enabled)
93
93
 
94
94
  changes = begin
95
95
  Puppet::ModuleTool::Applications::Checksummer.run(mod.path)
@@ -27,7 +27,7 @@ module Puppet::ModuleTool
27
27
 
28
28
  def run
29
29
  # Disallow anything that invokes md5 to avoid un-friendly termination due to FIPS
30
- raise _("Module upgrade is prohibited in FIPS mode.") if Facter.value(:fips_enabled)
30
+ raise _("Module upgrade is prohibited in FIPS mode.") if Puppet.runtime[:facter].value(:fips_enabled)
31
31
 
32
32
  name = @name.tr('/', '-')
33
33
  version = options[:version] || '>= 0.0.0'
@@ -105,7 +105,7 @@ class Puppet::Network::HTTP::API::IndirectedRoutes
105
105
  raise Puppet::Network::HTTP::Error::HTTPNotAuthorizedError.new(e.message)
106
106
  end
107
107
 
108
- if configured_environment.nil?
108
+ if configured_environment.nil? && indirection.terminus.require_environment?
109
109
  raise Puppet::Network::HTTP::Error::HTTPNotFoundError.new(
110
110
  _("Could not find environment '%{environment}'") % { environment: environment })
111
111
  end
@@ -305,7 +305,9 @@ class Puppet::Node::Environment
305
305
  {}
306
306
  end
307
307
  modulepath.each do |path|
308
- Dir.entries(path).each do |name|
308
+ Puppet::FileSystem.children(path).map do |p|
309
+ Puppet::FileSystem.basename_string(p)
310
+ end.each do |name|
309
311
  next unless Puppet::Module.is_module_directory?(name, path)
310
312
  warn_about_mistaken_path(path, name)
311
313
  if not seen_modules[name]
@@ -350,9 +352,6 @@ class Puppet::Node::Environment
350
352
 
351
353
  # Modules broken out by directory in the modulepath
352
354
  #
353
- # @note This method _changes_ the current working directory while enumerating
354
- # the modules. This seems rather dangerous.
355
- #
356
355
  # @api public
357
356
  #
358
357
  # @return [Hash<String, Array<Puppet::Module>>] A hash whose keys are file
@@ -361,13 +360,13 @@ class Puppet::Node::Environment
361
360
  modules_by_path = {}
362
361
  modulepath.each do |path|
363
362
  if Puppet::FileSystem.exist?(path)
364
- Dir.chdir(path) do
365
- module_names = Dir.entries(path).select do |name|
366
- Puppet::Module.is_module_directory?(name, path)
367
- end
368
- modules_by_path[path] = module_names.sort.map do |name|
369
- Puppet::Module.new(name, File.join(path, name), self)
370
- end
363
+ module_names = Puppet::FileSystem.children(path).map do |p|
364
+ Puppet::FileSystem.basename_string(p)
365
+ end.select do |name|
366
+ Puppet::Module.is_module_directory?(name, path)
367
+ end
368
+ modules_by_path[path] = module_names.sort.map do |name|
369
+ Puppet::Module.new(name, File.join(path, name), self)
371
370
  end
372
371
  else
373
372
  modules_by_path[path] = []
@@ -413,7 +413,7 @@ module Pal
413
413
 
414
414
  # Puppet requires Facter, which initializes its lookup paths. Reset Facter to
415
415
  # pickup the new $LOAD_PATH.
416
- Facter.reset
416
+ Puppet.runtime[:facter].reset
417
417
 
418
418
  node = Puppet.lookup(:pal_current_node)
419
419
  pal_facts = Puppet.lookup(:pal_facts)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # The scope class, which handles storing and retrieving variables and types and
2
3
  # such.
3
4
  require 'forwardable'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'puppet/parser/files'
2
3
  require 'erb'
3
4
  require 'puppet/file_system'
@@ -292,7 +292,8 @@ class LookupAdapter < DataAdapter
292
292
  PROVIDER_STACK = [:lookup_global, :lookup_in_environment, :lookup_in_module].freeze
293
293
 
294
294
  def validate_lookup_options(options, module_name)
295
- raise Puppet::DataBinding::LookupError.new(_("value of %{opts} must be a hash") % { opts: LOOKUP_OPTIONS }) unless options.is_a?(Hash) unless options.nil?
295
+ return nil if options.nil?
296
+ raise Puppet::DataBinding::LookupError.new(_("value of %{opts} must be a hash") % { opts: LOOKUP_OPTIONS }) unless options.is_a?(Hash)
296
297
  return options if module_name.nil?
297
298
 
298
299
  pfx = "#{module_name}::"
@@ -352,7 +353,7 @@ class LookupAdapter < DataAdapter
352
353
  module_opts = validate_lookup_options(lookup_in_module(LookupKey::LOOKUP_OPTIONS, meta_invocation, merge_strategy), module_name)
353
354
  opts = if opts.nil?
354
355
  module_opts
355
- else
356
+ elsif module_opts
356
357
  merge_strategy.lookup([GLOBAL_ENV_MERGE, "Module #{lookup_invocation.module_name}"], meta_invocation) do |n|
357
358
  meta_invocation.with(:scope, n) { meta_invocation.report_found(LOOKUP_OPTIONS, n == GLOBAL_ENV_MERGE ? opts : module_opts) }
358
359
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # # Generated by Puppet::Pops::Types::RubyGenerator from TypeSet Puppet::AST on -4712-01-01
2
3
 
3
4
  module Puppet
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Factory is a helper class that makes construction of a Pops Model
2
3
  # much more convenient. It can be viewed as a small internal DSL for model
3
4
  # constructions.
@@ -1156,7 +1157,7 @@ class Factory
1156
1157
  end
1157
1158
 
1158
1159
  def self.concat(*args)
1159
- result = ''
1160
+ result = ''.dup
1160
1161
  args.each do |e|
1161
1162
  if e.instance_of?(Factory) && e.model_class <= LiteralString
1162
1163
  result << e[KEY_VALUE]