puppet 6.18.0 → 6.21.1

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 (276) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +2 -0
  4. data/Gemfile.lock +37 -34
  5. data/README.md +1 -2
  6. data/Rakefile +4 -12
  7. data/lib/puppet/agent/locker.rb +0 -7
  8. data/lib/puppet/application.rb +10 -6
  9. data/lib/puppet/application/agent.rb +9 -3
  10. data/lib/puppet/application/apply.rb +3 -2
  11. data/lib/puppet/application/device.rb +1 -0
  12. data/lib/puppet/application/doc.rb +1 -1
  13. data/lib/puppet/application/filebucket.rb +2 -2
  14. data/lib/puppet/application/lookup.rb +5 -5
  15. data/lib/puppet/application/script.rb +1 -0
  16. data/lib/puppet/application_support.rb +7 -0
  17. data/lib/puppet/configurer.rb +50 -8
  18. data/lib/puppet/defaults.rb +67 -35
  19. data/lib/puppet/environments.rb +84 -59
  20. data/lib/puppet/face/catalog.rb +1 -1
  21. data/lib/puppet/face/config.rb +56 -16
  22. data/lib/puppet/face/epp.rb +12 -2
  23. data/lib/puppet/face/facts.rb +60 -0
  24. data/lib/puppet/face/node.rb +3 -3
  25. data/lib/puppet/face/node/clean.rb +2 -2
  26. data/lib/puppet/face/status.rb +1 -1
  27. data/lib/puppet/ffi/posix.rb +10 -0
  28. data/lib/puppet/ffi/posix/constants.rb +14 -0
  29. data/lib/puppet/ffi/posix/functions.rb +24 -0
  30. data/lib/puppet/file_bucket/dipper.rb +1 -1
  31. data/lib/puppet/functions/epp.rb +1 -0
  32. data/lib/puppet/functions/inline_epp.rb +1 -0
  33. data/lib/puppet/functions/new.rb +8 -3
  34. data/lib/puppet/http.rb +1 -0
  35. data/lib/puppet/http/client.rb +1 -1
  36. data/lib/puppet/http/resolver.rb +5 -8
  37. data/lib/puppet/http/resolver/server_list.rb +18 -36
  38. data/lib/puppet/http/resolver/settings.rb +4 -4
  39. data/lib/puppet/http/resolver/srv.rb +5 -5
  40. data/lib/puppet/http/service.rb +3 -1
  41. data/lib/puppet/http/service/compiler.rb +1 -1
  42. data/lib/puppet/http/service/file_server.rb +1 -1
  43. data/lib/puppet/http/service/puppetserver.rb +39 -0
  44. data/lib/puppet/http/session.rb +5 -4
  45. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  46. data/lib/puppet/indirector/fact_search.rb +60 -0
  47. data/lib/puppet/indirector/facts/json.rb +27 -0
  48. data/lib/puppet/indirector/facts/yaml.rb +4 -59
  49. data/lib/puppet/indirector/json.rb +5 -1
  50. data/lib/puppet/indirector/msgpack.rb +1 -1
  51. data/lib/puppet/indirector/node/json.rb +8 -0
  52. data/lib/puppet/indirector/report/json.rb +34 -0
  53. data/lib/puppet/indirector/request.rb +4 -4
  54. data/lib/puppet/indirector/yaml.rb +1 -1
  55. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  56. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  57. data/lib/puppet/network/formats.rb +2 -1
  58. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  59. data/lib/puppet/node/facts.rb +17 -0
  60. data/lib/puppet/pal/pal_impl.rb +70 -17
  61. data/lib/puppet/parser/ast/leaf.rb +3 -2
  62. data/lib/puppet/parser/templatewrapper.rb +1 -1
  63. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  64. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  65. data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -3
  66. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  67. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  68. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  69. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  70. data/lib/puppet/property/list.rb +1 -1
  71. data/lib/puppet/provider/group/groupadd.rb +13 -8
  72. data/lib/puppet/provider/package/apt.rb +34 -2
  73. data/lib/puppet/provider/package/aptitude.rb +6 -0
  74. data/lib/puppet/provider/package/dpkg.rb +1 -1
  75. data/lib/puppet/provider/package/pip2.rb +17 -0
  76. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  77. data/lib/puppet/provider/package/yum.rb +1 -0
  78. data/lib/puppet/provider/service/debian.rb +2 -0
  79. data/lib/puppet/provider/user/aix.rb +2 -2
  80. data/lib/puppet/provider/user/useradd.rb +62 -8
  81. data/lib/puppet/reference/configuration.rb +6 -5
  82. data/lib/puppet/resource/type.rb +2 -1
  83. data/lib/puppet/rest/route.rb +2 -2
  84. data/lib/puppet/settings.rb +62 -20
  85. data/lib/puppet/settings/alias_setting.rb +37 -0
  86. data/lib/puppet/settings/base_setting.rb +26 -2
  87. data/lib/puppet/transaction/report.rb +11 -7
  88. data/lib/puppet/type/file/source.rb +1 -1
  89. data/lib/puppet/type/filebucket.rb +1 -1
  90. data/lib/puppet/type/package.rb +3 -3
  91. data/lib/puppet/util/autoload.rb +1 -8
  92. data/lib/puppet/util/connection.rb +8 -8
  93. data/lib/puppet/util/fact_dif.rb +62 -0
  94. data/lib/puppet/util/posix.rb +54 -5
  95. data/lib/puppet/util/rubygems.rb +5 -1
  96. data/lib/puppet/util/run_mode.rb +5 -1
  97. data/lib/puppet/util/windows/service.rb +1 -1
  98. data/lib/puppet/version.rb +1 -1
  99. data/locales/puppet.pot +289 -268
  100. data/man/man5/puppet.conf.5 +33 -17
  101. data/man/man8/puppet-agent.8 +7 -4
  102. data/man/man8/puppet-apply.8 +2 -2
  103. data/man/man8/puppet-catalog.8 +1 -1
  104. data/man/man8/puppet-config.8 +6 -6
  105. data/man/man8/puppet-describe.8 +1 -1
  106. data/man/man8/puppet-device.8 +2 -2
  107. data/man/man8/puppet-doc.8 +1 -1
  108. data/man/man8/puppet-epp.8 +1 -1
  109. data/man/man8/puppet-facts.8 +32 -1
  110. data/man/man8/puppet-filebucket.8 +3 -3
  111. data/man/man8/puppet-generate.8 +1 -1
  112. data/man/man8/puppet-help.8 +1 -1
  113. data/man/man8/puppet-key.8 +1 -1
  114. data/man/man8/puppet-lookup.8 +1 -1
  115. data/man/man8/puppet-man.8 +1 -1
  116. data/man/man8/puppet-module.8 +1 -1
  117. data/man/man8/puppet-node.8 +7 -4
  118. data/man/man8/puppet-parser.8 +1 -1
  119. data/man/man8/puppet-plugin.8 +1 -1
  120. data/man/man8/puppet-report.8 +4 -1
  121. data/man/man8/puppet-resource.8 +1 -1
  122. data/man/man8/puppet-script.8 +2 -2
  123. data/man/man8/puppet-ssl.8 +1 -1
  124. data/man/man8/puppet-status.8 +2 -2
  125. data/man/man8/puppet.8 +2 -2
  126. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  127. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  128. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  129. data/spec/integration/application/agent_spec.rb +183 -22
  130. data/spec/integration/application/apply_spec.rb +19 -0
  131. data/spec/integration/application/filebucket_spec.rb +7 -7
  132. data/spec/integration/application/plugin_spec.rb +3 -3
  133. data/spec/integration/configurer_spec.rb +14 -0
  134. data/spec/integration/defaults_spec.rb +19 -1
  135. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  136. data/spec/integration/resource/type_collection_spec.rb +2 -6
  137. data/spec/integration/transaction_spec.rb +4 -9
  138. data/spec/integration/util/windows/adsi_spec.rb +5 -3
  139. data/spec/integration/util/windows/registry_spec.rb +0 -10
  140. data/spec/lib/puppet_spec/settings.rb +6 -1
  141. data/spec/shared_contexts/types_setup.rb +2 -0
  142. data/spec/spec_helper.rb +1 -4
  143. data/spec/unit/agent_spec.rb +8 -6
  144. data/spec/unit/application/agent_spec.rb +0 -1
  145. data/spec/unit/application/config_spec.rb +224 -4
  146. data/spec/unit/application/doc_spec.rb +2 -2
  147. data/spec/unit/application/facts_spec.rb +3 -1
  148. data/spec/unit/application/filebucket_spec.rb +0 -2
  149. data/spec/unit/application_spec.rb +60 -13
  150. data/spec/unit/configurer_spec.rb +39 -6
  151. data/spec/unit/confine/feature_spec.rb +1 -1
  152. data/spec/unit/confine_spec.rb +8 -2
  153. data/spec/unit/defaults_spec.rb +20 -1
  154. data/spec/unit/environments_spec.rb +176 -32
  155. data/spec/unit/face/config_spec.rb +62 -11
  156. data/spec/unit/face/node_spec.rb +2 -13
  157. data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
  158. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  159. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  160. data/spec/unit/file_system_spec.rb +1 -2
  161. data/spec/unit/forge/module_release_spec.rb +2 -7
  162. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  163. data/spec/unit/http/resolver_spec.rb +24 -4
  164. data/spec/unit/http/service/ca_spec.rb +2 -2
  165. data/spec/unit/http/service/compiler_spec.rb +51 -2
  166. data/spec/unit/http/service/file_server_spec.rb +2 -2
  167. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  168. data/spec/unit/http/service/report_spec.rb +2 -2
  169. data/spec/unit/http/service_spec.rb +1 -1
  170. data/spec/unit/http/session_spec.rb +8 -20
  171. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  172. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  173. data/spec/unit/indirector/face_spec.rb +0 -1
  174. data/spec/unit/indirector/facts/facter_spec.rb +0 -1
  175. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  176. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  177. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  178. data/spec/unit/indirector/indirection_spec.rb +8 -12
  179. data/spec/unit/indirector/json_spec.rb +8 -8
  180. data/spec/unit/indirector/key/file_spec.rb +0 -1
  181. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  182. data/spec/unit/indirector/node/json_spec.rb +33 -0
  183. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  184. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  185. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  186. data/spec/unit/indirector/request_spec.rb +4 -4
  187. data/spec/unit/indirector/rest_spec.rb +1 -1
  188. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  189. data/spec/unit/indirector/yaml_spec.rb +7 -7
  190. data/spec/unit/indirector_spec.rb +2 -2
  191. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  192. data/spec/unit/network/authconfig_spec.rb +0 -3
  193. data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -9
  194. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  195. data/spec/unit/network/http/handler_spec.rb +0 -5
  196. data/spec/unit/parser/compiler_spec.rb +3 -19
  197. data/spec/unit/parser/resource_spec.rb +14 -8
  198. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  199. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  200. data/spec/unit/property_spec.rb +1 -0
  201. data/spec/unit/provider/exec_spec.rb +4 -3
  202. data/spec/unit/provider/group/groupadd_spec.rb +5 -2
  203. data/spec/unit/provider/nameservice_spec.rb +66 -65
  204. data/spec/unit/provider/package/apt_spec.rb +28 -23
  205. data/spec/unit/provider/package/aptitude_spec.rb +1 -1
  206. data/spec/unit/provider/package/base_spec.rb +6 -5
  207. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  208. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  209. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  210. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  211. data/spec/unit/provider/package/pip_spec.rb +6 -11
  212. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  213. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  214. data/spec/unit/provider/package/yum_spec.rb +31 -0
  215. data/spec/unit/provider/service/base_spec.rb +2 -4
  216. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  217. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  218. data/spec/unit/provider/service/debian_spec.rb +3 -5
  219. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  220. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  221. data/spec/unit/provider/service/init_spec.rb +4 -5
  222. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  223. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  224. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  225. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  226. data/spec/unit/provider/service/runit_spec.rb +2 -1
  227. data/spec/unit/provider/service/smf_spec.rb +1 -1
  228. data/spec/unit/provider/service/src_spec.rb +3 -5
  229. data/spec/unit/provider/service/systemd_spec.rb +3 -1
  230. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  231. data/spec/unit/provider/user/aix_spec.rb +5 -0
  232. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  233. data/spec/unit/provider/user/pw_spec.rb +2 -0
  234. data/spec/unit/provider/user/useradd_spec.rb +56 -3
  235. data/spec/unit/provider_spec.rb +8 -10
  236. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  237. data/spec/unit/resource/capability_finder_spec.rb +6 -1
  238. data/spec/unit/resource/type_spec.rb +1 -1
  239. data/spec/unit/resource_spec.rb +11 -10
  240. data/spec/unit/rest/route_spec.rb +4 -4
  241. data/spec/unit/settings_spec.rb +576 -239
  242. data/spec/unit/ssl/base_spec.rb +0 -1
  243. data/spec/unit/ssl/host_spec.rb +0 -5
  244. data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
  245. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  246. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  247. data/spec/unit/transaction/report_spec.rb +2 -0
  248. data/spec/unit/transaction_spec.rb +13 -4
  249. data/spec/unit/type/file/content_spec.rb +0 -1
  250. data/spec/unit/type/file/selinux_spec.rb +0 -2
  251. data/spec/unit/type/file/source_spec.rb +1 -1
  252. data/spec/unit/type/file_spec.rb +0 -6
  253. data/spec/unit/type/filebucket_spec.rb +1 -1
  254. data/spec/unit/type/group_spec.rb +13 -6
  255. data/spec/unit/type/resources_spec.rb +7 -7
  256. data/spec/unit/type/service_spec.rb +1 -1
  257. data/spec/unit/type/tidy_spec.rb +0 -1
  258. data/spec/unit/type_spec.rb +2 -2
  259. data/spec/unit/util/at_fork_spec.rb +2 -2
  260. data/spec/unit/util/autoload_spec.rb +5 -1
  261. data/spec/unit/util/backups_spec.rb +1 -2
  262. data/spec/unit/util/execution_spec.rb +15 -11
  263. data/spec/unit/util/inifile_spec.rb +6 -14
  264. data/spec/unit/util/log_spec.rb +8 -7
  265. data/spec/unit/util/logging_spec.rb +3 -3
  266. data/spec/unit/util/posix_spec.rb +363 -15
  267. data/spec/unit/util/rubygems_spec.rb +2 -2
  268. data/spec/unit/util/run_mode_spec.rb +6 -6
  269. data/spec/unit/util/selinux_spec.rb +76 -52
  270. data/spec/unit/util/storage_spec.rb +3 -1
  271. data/spec/unit/util/suidmanager_spec.rb +44 -41
  272. data/spec/unit/util_spec.rb +13 -6
  273. metadata +32 -10
  274. data/spec/integration/application/config_spec.rb +0 -74
  275. data/spec/unit/face/catalog_spec.rb +0 -6
  276. data/spec/unit/face/module_spec.rb +0 -3
@@ -97,7 +97,7 @@ Puppet::Indirector::Face.define(:catalog, '0.0.1') do
97
97
  A serialized catalog.
98
98
  EOT
99
99
  when_invoked do |*args|
100
- Puppet.settings.preferred_run_mode = :master
100
+ Puppet.settings.preferred_run_mode = :server
101
101
  Puppet::Face[:catalog, :current].find(*args)
102
102
  end
103
103
  end
@@ -20,10 +20,10 @@ Puppet::Face.define(:config, '0.0.1') do
20
20
  description <<-EOT
21
21
  The section of the puppet.conf configuration file to interact with.
22
22
 
23
- The three most commonly used sections are 'main', 'master', and 'agent'.
23
+ The three most commonly used sections are 'main', 'server', and 'agent'.
24
24
  'Main' is the default, and is used by all Puppet applications. Other
25
25
  sections can override 'main' values for specific applications --- the
26
- 'master' section affects Puppet Server, and the 'agent'
26
+ 'server' section affects Puppet Server, and the 'agent'
27
27
  section affects puppet agent.
28
28
 
29
29
  Less commonly used is the 'user' section, which affects puppet apply. Any
@@ -52,9 +52,9 @@ Puppet::Face.define(:config, '0.0.1') do
52
52
 
53
53
  $ puppet config print rundir
54
54
 
55
- Get a list of important directories from the master's config:
55
+ Get a list of important directories from the server's config:
56
56
 
57
- $ puppet config print all --section master | grep -E "(path|dir)"
57
+ $ puppet config print all --section server | grep -E "(path|dir)"
58
58
  EOT
59
59
 
60
60
  when_invoked do |*args|
@@ -144,7 +144,7 @@ Puppet::Face.define(:config, '0.0.1') do
144
144
 
145
145
  if name == 'environment' && options[:section] == 'main'
146
146
  Puppet.warning _(<<-EOM).chomp
147
- The environment should be set in either the `[user]`, `[agent]`, or `[master]`
147
+ The environment should be set in either the `[user]`, `[agent]`, or `[server]`
148
148
  section. Variables set in the `[agent]` section are used when running
149
149
  `puppet agent`. Variables set in the `[user]` section are used when running
150
150
  various other puppet subcommands, like `puppet apply` and `puppet module`; these
@@ -159,11 +159,38 @@ https://puppet.com/docs/puppet/latest/configuration.html#environment
159
159
  report_section_and_environment(options[:section], Puppet.settings[:environment])
160
160
  end
161
161
 
162
+ # only validate settings we recognize
163
+ setting = Puppet.settings.setting(name.to_sym)
164
+ if setting
165
+ # set the value, which will call `on_*_and_write` hooks, if any
166
+ Puppet.settings[setting.name] = value
167
+
168
+ # read the value to trigger interpolation and munge validation logic
169
+ Puppet.settings[setting.name]
170
+ end
171
+
162
172
  path = Puppet::FileSystem.pathname(Puppet.settings.which_configuration_file)
163
173
  Puppet::FileSystem.touch(path)
164
174
  Puppet::FileSystem.open(path, nil, 'r+:UTF-8') do |file|
165
175
  Puppet::Settings::IniFile.update(file) do |config|
166
- config.set(options[:section], name, value)
176
+ if options[:section] == "master"
177
+ # delete requested master section if it exists,
178
+ # as server section should be used
179
+ setting_string = config.delete("master", name)
180
+ if setting_string
181
+
182
+ if Puppet::Util::Log.sendlevel?(:info)
183
+ report_section_and_environment(options[:section], Puppet.settings[:environment])
184
+ end
185
+
186
+ puts(_("Deleted setting from '%{section_name}': '%{setting_string}', and adding it to 'server' section") %
187
+ { section_name: options[:section], name: name, setting_string: setting_string.strip })
188
+ end
189
+ # add the setting to the to server section instead of master section
190
+ config.set("server", name, value)
191
+ else
192
+ config.set(options[:section], name, value)
193
+ end
167
194
  end
168
195
  end
169
196
  nil
@@ -185,9 +212,9 @@ https://puppet.com/docs/puppet/latest/configuration.html#environment
185
212
 
186
213
  $ puppet config delete setting_name
187
214
 
188
- Delete the setting 'setting_name' from the 'master' configuration domain:
215
+ Delete the setting 'setting_name' from the 'server' configuration domain:
189
216
 
190
- $ puppet config delete setting_name --section master
217
+ $ puppet config delete setting_name --section server
191
218
  EOT
192
219
 
193
220
  when_invoked do |name, options|
@@ -202,18 +229,31 @@ https://puppet.com/docs/puppet/latest/configuration.html#environment
202
229
  if Puppet::FileSystem.exist?(path)
203
230
  Puppet::FileSystem.open(path, nil, 'r+:UTF-8') do |file|
204
231
  Puppet::Settings::IniFile.update(file) do |config|
205
- setting_string = config.delete(options[:section], name)
206
- if setting_string
207
232
 
208
- if Puppet::Util::Log.sendlevel?(:info)
209
- report_section_and_environment(options[:section], Puppet.settings[:environment])
210
- end
233
+ # delete from both master section and server section
234
+ if options[:section] == "master" || options[:section] == "server"
235
+ master_setting_string = config.delete("master", name)
236
+ puts(_("Deleted setting from '%{section_name}': '%{setting_string}'") %
237
+ { section_name: 'master', name: name, setting_string: master_setting_string.strip[/[^=]+/] }) if master_setting_string
211
238
 
239
+ server_setting_string = config.delete("server", name)
212
240
  puts(_("Deleted setting from '%{section_name}': '%{setting_string}'") %
213
- { section_name: options[:section], name: name, setting_string: setting_string.strip })
241
+ { section_name: 'server', name: name, setting_string: server_setting_string.strip[/[^=]+/] }) if server_setting_string
242
+
214
243
  else
215
- Puppet.warning(_("No setting found in configuration file for section '%{section_name}' setting name '%{name}'") %
216
- { section_name: options[:section], name: name })
244
+ setting_string = config.delete(options[:section], name)
245
+ if setting_string
246
+
247
+ if Puppet::Util::Log.sendlevel?(:info)
248
+ report_section_and_environment(options[:section], Puppet.settings[:environment])
249
+ end
250
+
251
+ puts(_("Deleted setting from '%{section_name}': '%{setting_string}'") %
252
+ { section_name: options[:section], name: name, setting_string: setting_string.strip })
253
+ else
254
+ Puppet.warning(_("No setting found in configuration file for section '%{section_name}' setting name '%{name}'") %
255
+ { section_name: options[:section], name: name })
256
+ end
217
257
  end
218
258
  end
219
259
  end
@@ -440,7 +440,12 @@ Puppet::Face.define(:epp, '0.0.1') do
440
440
 
441
441
  def render_inline(epp_source, compiler, options)
442
442
  template_args = get_values(compiler, options)
443
- Puppet::Pops::Evaluator::EppEvaluator.inline_epp(compiler.topscope, epp_source, template_args)
443
+ result = Puppet::Pops::Evaluator::EppEvaluator.inline_epp(compiler.topscope, epp_source, template_args)
444
+ if result.instance_of?(Puppet::Pops::Types::PSensitiveType::Sensitive)
445
+ result.unwrap
446
+ else
447
+ result
448
+ end
444
449
  end
445
450
 
446
451
  def render_file(epp_template_name, compiler, options, show_filename, file_nbr)
@@ -457,7 +462,12 @@ Puppet::Face.define(:epp, '0.0.1') do
457
462
  if template_file.nil? && Puppet::FileSystem.exist?(epp_template_name)
458
463
  epp_template_name = File.expand_path(epp_template_name)
459
464
  end
460
- output << Puppet::Pops::Evaluator::EppEvaluator.epp(compiler.topscope, epp_template_name, compiler.environment, template_args)
465
+ result = Puppet::Pops::Evaluator::EppEvaluator.epp(compiler.topscope, epp_template_name, compiler.environment, template_args)
466
+ if result.instance_of?(Puppet::Pops::Types::PSensitiveType::Sensitive)
467
+ output << result.unwrap
468
+ else
469
+ output << result
470
+ end
461
471
  rescue Puppet::ParseError => detail
462
472
  Puppet.err("--- #{epp_template_name}") if show_filename
463
473
  raise detail
@@ -1,5 +1,29 @@
1
1
  require 'puppet/indirector/face'
2
2
  require 'puppet/node/facts'
3
+ require 'puppet/util/fact_dif'
4
+
5
+ EXCLUDE_LIST = %w[facterversion
6
+ swapfree_mb swapsize_mb
7
+ load_averages\.*
8
+ memory\.swap\.available_bytes memory\.swap\.capacity memory\.swap\.total_bytes
9
+ memory\.swap\.used_bytes memory\.swap\.available
10
+ memory\.system\.available memory\.system\.available_bytes memory\.system\.capacity memory\.swap\.used
11
+ memory\.system\.total_bytes memory\.system\.used memory\.system\.used_bytes
12
+ memoryfree memoryfree_mb memorysize_mb
13
+ mountpoints\..* mtu_.* mountpoints\..*\.capacity
14
+ networking\.interfaces\..*\.mtu networking\.mtu partitions\..*\.filesystem
15
+ partitions\..*\.size_bytes partitions\..*\.mount partitions\..*\.uuid
16
+ disks\..*\.size_bytes
17
+ hypervisors\.lpar\.partition_number hypervisors\.xen\.privileged hypervisors\.zone\..* hypervisors\.ldom\..*
18
+ processors\.speed
19
+ ldom_.*
20
+ boardassettag dmi\.board\.asset_tag
21
+ blockdevice_.*_vendor blockdevice_.*_size
22
+ system_uptime\.days system_uptime\.hours system_uptime\.seconds system_uptime\.uptime
23
+ uptime_days uptime_hours uptime_seconds
24
+ system_profiler\.uptime
25
+ sp_uptime
26
+ uptime]
3
27
 
4
28
  Puppet::Indirector::Face.define(:facts, '0.0.1') do
5
29
  copyright "Puppet Inc.", 2011
@@ -87,4 +111,40 @@ Puppet::Indirector::Face.define(:facts, '0.0.1') do
87
111
  nil
88
112
  end
89
113
  end
114
+
115
+ action(:diff) do
116
+ summary _("Compare Facter 3 output with Facter 4 output")
117
+ description <<-'EOT'
118
+ Compares output from facter 3 with Facter 4 and prints the differences
119
+ EOT
120
+ returns "Differences between Facter 3 and Facter 4 output as an array."
121
+ notes <<-'EOT'
122
+ EOT
123
+ examples <<-'EOT'
124
+ get differences between facter versions:
125
+ $ puppet facts diff
126
+ EOT
127
+
128
+ render_as :json
129
+
130
+ when_invoked do |*args|
131
+ Puppet.settings.preferred_run_mode = :agent
132
+ Puppet::Node::Facts.indirection.terminus_class = :facter
133
+
134
+ if Puppet::Util::Package.versioncmp(Facter.value('facterversion'), '4.0.0') < 0
135
+ facter3_result = Puppet::Node::Facts.indirection.find(Puppet.settings[:certname])
136
+ begin
137
+ require 'facter-ng'
138
+ facter4_result = Puppet::Node::Facts.indirection.find(Puppet.settings[:certname])
139
+ rescue LoadError
140
+ raise ArgumentError, 'facter-ng could not be loaded'
141
+ end
142
+ fact_diff = FactDif.new(facter3_result.to_json, facter4_result.to_json, EXCLUDE_LIST)
143
+ fact_diff.difs
144
+ else
145
+ Puppet.warning _("Already using Facter 4. To use `puppet facts diff` remove facterng from the .conf file or run `puppet config set facterng false`.")
146
+ exit 0
147
+ end
148
+ end
149
+ end
90
150
  end
@@ -32,11 +32,11 @@ Puppet::Indirector::Face.define(:node, '0.0.1') do
32
32
 
33
33
  $ puppet node find somenode.puppetlabs.lan --terminus plain --render-as yaml
34
34
 
35
- Retrieve a node using the puppet master's configured ENC:
35
+ Retrieve a node using the Puppet Server's configured ENC:
36
36
 
37
- $ puppet node find somenode.puppetlabs.lan --terminus exec --run_mode master --render-as yaml
37
+ $ puppet node find somenode.puppetlabs.lan --terminus exec --run_mode server --render-as yaml
38
38
 
39
- Retrieve the same node from the puppet master:
39
+ Retrieve the same node from the Puppet Server:
40
40
 
41
41
  $ puppet node find somenode.puppetlabs.lan --terminus rest --render-as yaml
42
42
  EOT
@@ -26,9 +26,9 @@ Puppet::Face.define(:node, '0.0.1') do
26
26
  # definition, and should not be modifiable beyond that. This is one of
27
27
  # the only places left in the code that tries to manipulate it. Other
28
28
  # parts of code that handle certificates behave differently if the
29
- # run_mode is master. Those other behaviors are needed for cleaning the
29
+ # run_mode is server. Those other behaviors are needed for cleaning the
30
30
  # certificates correctly.
31
- Puppet.settings.preferred_run_mode = "master"
31
+ Puppet.settings.preferred_run_mode = "server"
32
32
 
33
33
  Puppet::Node::Facts.indirection.terminus_class = :yaml
34
34
  Puppet::Node::Facts.indirection.cache_class = :yaml
@@ -26,7 +26,7 @@ Puppet::Indirector::Face.define(:status, '0.0.1') do
26
26
 
27
27
  Over REST, this action will query the configured puppet master by default.
28
28
  To query other servers, including puppet agent nodes started with the
29
- <--listen> option, you can set the global <--server> and <--masterport>
29
+ <--listen> option, you can set the global <--server> and <--serverport>
30
30
  options on the command line; note that agent nodes listen on port 8139.
31
31
  EOT
32
32
  find.short_description <<-EOT
@@ -0,0 +1,10 @@
1
+ require 'ffi'
2
+
3
+ module Puppet
4
+ module FFI
5
+ module POSIX
6
+ require 'puppet/ffi/posix/functions'
7
+ require 'puppet/ffi/posix/constants'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,14 @@
1
+ require 'puppet/ffi/posix'
2
+
3
+ module Puppet::FFI::POSIX
4
+ module Constants
5
+ extend FFI::Library
6
+
7
+ # Maximum number of supplementary groups (groups
8
+ # that a user can be in plus its primary group)
9
+ # (64 + 1 primary group)
10
+ # Chosen a reasonable middle number from the list
11
+ # https://www.j3e.de/ngroups.html
12
+ MAXIMUM_NUMBER_OF_GROUPS = 65
13
+ end
14
+ end
@@ -0,0 +1,24 @@
1
+ require 'puppet/ffi/posix'
2
+
3
+ module Puppet::FFI::POSIX
4
+ module Functions
5
+
6
+ extend FFI::Library
7
+
8
+ ffi_convention :stdcall
9
+
10
+ # https://man7.org/linux/man-pages/man3/getgrouplist.3.html
11
+ # int getgrouplist (
12
+ # const char *user,
13
+ # gid_t group,
14
+ # gid_t *groups,
15
+ # int *ngroups
16
+ # );
17
+ begin
18
+ ffi_lib FFI::Library::LIBC
19
+ attach_function :getgrouplist, [:string, :uint, :pointer, :pointer], :int
20
+ rescue FFI::NotFoundError
21
+ # Do nothing
22
+ end
23
+ end
24
+ end
@@ -16,7 +16,7 @@ class Puppet::FileBucket::Dipper
16
16
  def initialize(hash = {})
17
17
  # Emulate the XMLRPC client
18
18
  server = hash[:Server]
19
- port = hash[:Port] || Puppet[:masterport]
19
+ port = hash[:Port] || Puppet[:serverport]
20
20
 
21
21
  if hash.include?(:Path)
22
22
  @local_path = hash[:Path]
@@ -40,6 +40,7 @@ Puppet::Functions.create_function(:epp, Puppet::Functions::InternalFunction) do
40
40
  scope_param
41
41
  param 'String', :path
42
42
  optional_param 'Hash[Pattern[/^\w+$/], Any]', :parameters
43
+ return_type 'Variant[String, Sensitive[String]]'
43
44
  end
44
45
 
45
46
  def epp(scope, path, parameters = nil)
@@ -51,6 +51,7 @@ Puppet::Functions.create_function(:inline_epp, Puppet::Functions::InternalFuncti
51
51
  scope_param()
52
52
  param 'String', :template
53
53
  optional_param 'Hash[Pattern[/^\w+$/], Any]', :parameters
54
+ return_type 'Variant[String, Sensitive[String]]'
54
55
  end
55
56
 
56
57
  def inline_epp(scope, template, parameters = nil)
@@ -991,12 +991,17 @@ Puppet::Functions.create_function(:new, Puppet::Functions::InternalFunction) do
991
991
 
992
992
  def new_instance(scope, t, *args)
993
993
  return args[0] if args.size == 1 && !t.is_a?(Puppet::Pops::Types::PInitType) && t.instance?(args[0])
994
- result = assert_type(t, new_function_for_type(t, scope).call(scope, *args))
994
+ result = assert_type(t, new_function_for_type(t).call(scope, *args))
995
995
  return block_given? ? yield(result) : result
996
996
  end
997
997
 
998
- def new_function_for_type(t, scope)
999
- @new_function_cache ||= Hash.new() {|hsh, key| hsh[key] = key.new_function.new(scope, loader) }
998
+ def new_function_for_type(t)
999
+ @new_function_cache ||= {}
1000
+
1001
+ unless @new_function_cache.key?(t)
1002
+ @new_function_cache[t] = t.new_function.new(nil, loader)
1003
+ end
1004
+
1000
1005
  @new_function_cache[t]
1001
1006
  end
1002
1007
 
data/lib/puppet/http.rb CHANGED
@@ -22,6 +22,7 @@ module Puppet
22
22
  require 'puppet/http/service/ca'
23
23
  require 'puppet/http/service/compiler'
24
24
  require 'puppet/http/service/file_server'
25
+ require 'puppet/http/service/puppetserver'
25
26
  require 'puppet/http/service/report'
26
27
  require 'puppet/http/session'
27
28
  require 'puppet/http/resolver'
@@ -438,7 +438,7 @@ class Puppet::HTTP::Client
438
438
  services.delete(:report)
439
439
  end
440
440
 
441
- resolvers << Puppet::HTTP::Resolver::ServerList.new(self, server_list_setting: server_list_setting, default_port: Puppet[:masterport], services: services)
441
+ resolvers << Puppet::HTTP::Resolver::ServerList.new(self, server_list_setting: server_list_setting, default_port: Puppet[:serverport], services: services)
442
442
  end
443
443
 
444
444
  resolvers << Puppet::HTTP::Resolver::Settings.new(self)
@@ -28,12 +28,12 @@ class Puppet::HTTP::Resolver
28
28
  # @param [Symbol] name the service to resolve
29
29
  # @param [Puppet::SSL::SSLContext] ssl_context (nil) optional ssl context to
30
30
  # use when creating a connection
31
- # @param [Proc] error_handler (nil) optional callback for each error
32
- # encountered while resolving a route.
31
+ # @param [Proc] canceled_handler (nil) optional callback allowing a resolver
32
+ # to cancel resolution.
33
33
  #
34
34
  # @raise [NotImplementedError] this base class is not implemented
35
35
  #
36
- def resolve(session, name, ssl_context: nil, error_handler: nil)
36
+ def resolve(session, name, ssl_context: nil, canceled_handler: nil)
37
37
  raise NotImplementedError
38
38
  end
39
39
 
@@ -45,17 +45,14 @@ class Puppet::HTTP::Resolver
45
45
  # @param [Puppet::HTTP::Session] session
46
46
  # @param [Puppet::HTTP::Service] service
47
47
  # @param [Puppet::SSL::SSLContext] ssl_context
48
- # @param [Proc] error_handler (nil) optional callback for each error
49
- # encountered while resolving a route.
50
48
  #
51
49
  # @return [Boolean] Returns true if a connection is successful, false otherwise
52
50
  #
53
- def check_connection?(session, service, ssl_context: nil, error_handler: nil)
51
+ def check_connection?(session, service, ssl_context: nil)
54
52
  service.connect(ssl_context: ssl_context)
55
53
  return true
56
54
  rescue Puppet::HTTP::ConnectionError => e
57
- error_handler.call(e) if error_handler
58
- Puppet.debug("Connection to #{service.url} failed, trying next route: #{e.message}")
55
+ Puppet.log_exception(e, "Connection to #{service.url} failed, trying next route: #{e.message}")
59
56
  return false
60
57
  end
61
58
  end
@@ -22,7 +22,6 @@ class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
22
22
  @server_list_setting = server_list_setting
23
23
  @default_port = default_port
24
24
  @services = services
25
- @resolved_url = nil
26
25
  end
27
26
 
28
27
  #
@@ -33,8 +32,8 @@ class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
33
32
  # @param [Puppet::HTTP::Session] session <description>
34
33
  # @param [Symbol] name the name of the service being resolved
35
34
  # @param [Puppet::SSL::SSLContext] ssl_context
36
- # @param [Proc] error_handler (nil) optional callback for each error
37
- # encountered while resolving a route.
35
+ # @param [Proc] canceled_handler (nil) optional callback allowing a resolver
36
+ # to cancel resolution.
38
37
  #
39
38
  # @return [nil] return nil if the service to be resolved does not support
40
39
  # server_list
@@ -44,7 +43,7 @@ class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
44
43
  # @raise [Puppet::Error] raise if none of the servers defined in server_list
45
44
  # are available
46
45
  #
47
- def resolve(session, name, ssl_context: nil, error_handler: nil)
46
+ def resolve(session, name, ssl_context: nil, canceled_handler: nil)
48
47
  # If we're configured to use an explicit service host, e.g. report_server
49
48
  # then don't use server_list to resolve the `:report` service.
50
49
  return nil unless @services.include?(name)
@@ -58,41 +57,24 @@ class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
58
57
  @server_list_setting.value.each do |server|
59
58
  host = server[0]
60
59
  port = server[1] || @default_port
61
- uri = URI("https://#{host}:#{port}/status/v1/simple/master")
62
- if get_success?(uri, session, ssl_context: ssl_context, error_handler: error_handler)
63
- @resolved_url = uri
64
- return Puppet::HTTP::Service.create_service(@client, session, name, host, port)
60
+
61
+ service = Puppet::HTTP::Service.create_service(@client, session, :puppetserver, host, port)
62
+ begin
63
+ service.get_simple_status(ssl_context: ssl_context)
64
+ @resolved_url = service.url
65
+ return Puppet::HTTP::Service.create_service(@client, session, name, @resolved_url.host, @resolved_url.port)
66
+ rescue Puppet::HTTP::ResponseError => detail
67
+ Puppet.log_exception(detail, _("Puppet server %{host}:%{port} is unavailable: %{code} %{reason}") %
68
+ { host: service.url.host, port: service.url.port, code: detail.response.code, reason: detail.response.reason })
69
+ rescue Puppet::HTTP::HTTPError => detail
70
+ Puppet.log_exception(detail, _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail})
65
71
  end
66
72
  end
67
73
 
68
- raise Puppet::Error, _("Could not select a functional puppet master from server_list: '%{server_list}'") % { server_list: @server_list_setting.print(@server_list_setting.value) }
69
- end
70
-
71
- #
72
- # @api private
73
- #
74
- # Check if a server and port is available
75
- #
76
- # @param [URI] uri A URI created from the server and port to test
77
- # @param [Puppet::HTTP::Session] session
78
- # @param [Puppet::SSL::SSLContext] ssl_context
79
- # @param [Proc] error_handler (nil) optional callback for each error
80
- # encountered while resolving a route.
81
- #
82
- # @return [Boolean] true if a successful response is returned by the server,
83
- # false otherwise
84
- #
85
- def get_success?(uri, session, ssl_context: nil, error_handler: nil)
86
- response = @client.get(uri, options: {ssl_context: ssl_context})
87
- return true if response.success?
74
+ # don't fallback to other resolvers
75
+ canceled_handler.call(true) if canceled_handler
88
76
 
89
- Puppet.debug(_("Puppet server %{host}:%{port} is unavailable: %{code} %{reason}") %
90
- { host: uri.host, port: uri.port, code: response.code, reason: response.reason })
91
- return false
92
- rescue => detail
93
- error_handler.call(detail) if error_handler
94
- #TRANSLATORS 'server_list' is the name of a setting and should not be translated
95
- Puppet.debug _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail}
96
- return false
77
+ # not found
78
+ nil
97
79
  end
98
80
  end