puppet 5.4.0-x86-mingw32 → 5.5.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 (441) hide show
  1. data/Gemfile +3 -3
  2. data/MAINTAINERS +0 -19
  3. data/README.md +5 -5
  4. data/Rakefile +26 -0
  5. data/conf/auth.conf +5 -0
  6. data/ext/project_data.yaml +1 -0
  7. data/ext/regexp_nodes/regexp_nodes.rb +3 -4
  8. data/lib/puppet/application/apply.rb +1 -1
  9. data/lib/puppet/application/cert.rb +3 -1
  10. data/lib/puppet/application/device.rb +100 -13
  11. data/lib/puppet/application/facts.rb +5 -0
  12. data/lib/puppet/application/lookup.rb +12 -2
  13. data/lib/puppet/configurer.rb +37 -17
  14. data/lib/puppet/confine.rb +4 -1
  15. data/lib/puppet/datatypes.rb +1 -1
  16. data/lib/puppet/environments.rb +1 -1
  17. data/lib/puppet/error.rb +6 -3
  18. data/lib/puppet/external/dot.rb +0 -7
  19. data/lib/puppet/external/nagios/parser.rb +1 -1
  20. data/lib/puppet/face/config.rb +92 -10
  21. data/lib/puppet/face/epp.rb +31 -6
  22. data/lib/puppet/face/facts.rb +49 -0
  23. data/lib/puppet/face/help.rb +33 -35
  24. data/lib/puppet/face/help/action.erb +1 -1
  25. data/lib/puppet/face/help/face.erb +1 -1
  26. data/lib/puppet/face/man.rb +55 -12
  27. data/lib/puppet/face/parser.rb +30 -3
  28. data/lib/puppet/file_bucket/file.rb +0 -2
  29. data/lib/puppet/file_serving/base.rb +10 -10
  30. data/lib/puppet/forge.rb +3 -3
  31. data/lib/puppet/forge/errors.rb +3 -3
  32. data/lib/puppet/functions.rb +1 -3
  33. data/lib/puppet/functions/alert.rb +1 -1
  34. data/lib/puppet/functions/all.rb +6 -6
  35. data/lib/puppet/functions/annotate.rb +10 -10
  36. data/lib/puppet/functions/any.rb +6 -6
  37. data/lib/puppet/functions/assert_type.rb +4 -4
  38. data/lib/puppet/functions/binary_file.rb +14 -2
  39. data/lib/puppet/functions/break.rb +31 -2
  40. data/lib/puppet/functions/call.rb +4 -4
  41. data/lib/puppet/functions/contain.rb +19 -3
  42. data/lib/puppet/functions/convert_to.rb +6 -5
  43. data/lib/puppet/functions/crit.rb +1 -1
  44. data/lib/puppet/functions/debug.rb +1 -1
  45. data/lib/puppet/functions/defined.rb +11 -9
  46. data/lib/puppet/functions/dig.rb +26 -2
  47. data/lib/puppet/functions/each.rb +8 -8
  48. data/lib/puppet/functions/emerg.rb +1 -1
  49. data/lib/puppet/functions/empty.rb +79 -0
  50. data/lib/puppet/functions/err.rb +1 -1
  51. data/lib/puppet/functions/eyaml_lookup_key.rb +3 -1
  52. data/lib/puppet/functions/filter.rb +7 -7
  53. data/lib/puppet/functions/find_file.rb +15 -1
  54. data/lib/puppet/functions/flatten.rb +64 -0
  55. data/lib/puppet/functions/hiera.rb +6 -6
  56. data/lib/puppet/functions/hiera_array.rb +6 -6
  57. data/lib/puppet/functions/hiera_hash.rb +6 -6
  58. data/lib/puppet/functions/hiera_include.rb +8 -8
  59. data/lib/puppet/functions/include.rb +28 -2
  60. data/lib/puppet/functions/info.rb +1 -1
  61. data/lib/puppet/functions/inline_epp.rb +2 -2
  62. data/lib/puppet/functions/join.rb +56 -0
  63. data/lib/puppet/functions/json_data.rb +2 -2
  64. data/lib/puppet/functions/keys.rb +25 -0
  65. data/lib/puppet/functions/length.rb +44 -0
  66. data/lib/puppet/functions/lest.rb +39 -1
  67. data/lib/puppet/functions/lookup.rb +2 -1
  68. data/lib/puppet/functions/map.rb +10 -9
  69. data/lib/puppet/functions/match.rb +6 -6
  70. data/lib/puppet/functions/new.rb +995 -2
  71. data/lib/puppet/functions/next.rb +1 -1
  72. data/lib/puppet/functions/notice.rb +1 -1
  73. data/lib/puppet/functions/reduce.rb +6 -6
  74. data/lib/puppet/functions/regsubst.rb +9 -3
  75. data/lib/puppet/functions/require.rb +36 -2
  76. data/lib/puppet/functions/return.rb +1 -1
  77. data/lib/puppet/functions/reverse_each.rb +71 -2
  78. data/lib/puppet/functions/slice.rb +23 -9
  79. data/lib/puppet/functions/split.rb +12 -10
  80. data/lib/puppet/functions/step.rb +73 -1
  81. data/lib/puppet/functions/strftime.rb +176 -2
  82. data/lib/puppet/functions/then.rb +65 -2
  83. data/lib/puppet/functions/tree_each.rb +19 -19
  84. data/lib/puppet/functions/type.rb +42 -1
  85. data/lib/puppet/functions/unique.rb +13 -13
  86. data/lib/puppet/functions/unwrap.rb +8 -4
  87. data/lib/puppet/functions/values.rb +25 -0
  88. data/lib/puppet/functions/versioncmp.rb +1 -1
  89. data/lib/puppet/functions/warning.rb +1 -1
  90. data/lib/puppet/functions/with.rb +6 -4
  91. data/lib/puppet/functions/yaml_data.rb +3 -1
  92. data/lib/puppet/indirector/certificate_status/file.rb +1 -1
  93. data/lib/puppet/indirector/facts/facter.rb +1 -3
  94. data/lib/puppet/indirector/facts/rest.rb +21 -0
  95. data/lib/puppet/indirector/facts/yaml.rb +0 -4
  96. data/lib/puppet/indirector/rest.rb +2 -2
  97. data/lib/puppet/module.rb +3 -3
  98. data/lib/puppet/module/task.rb +2 -3
  99. data/lib/puppet/module_tool/applications/application.rb +4 -4
  100. data/lib/puppet/module_tool/applications/builder.rb +2 -2
  101. data/lib/puppet/module_tool/applications/checksummer.rb +3 -3
  102. data/lib/puppet/module_tool/applications/unpacker.rb +2 -2
  103. data/lib/puppet/module_tool/metadata.rb +3 -3
  104. data/lib/puppet/network/authconfig.rb +1 -1
  105. data/lib/puppet/network/format_support.rb +1 -1
  106. data/lib/puppet/network/formats.rb +5 -7
  107. data/lib/puppet/network/http/api/indirected_routes.rb +1 -0
  108. data/lib/puppet/network/http/api/master/v3/environment.rb +2 -2
  109. data/lib/puppet/network/http/api/master/v3/environments.rb +2 -2
  110. data/lib/puppet/network/http/error.rb +3 -3
  111. data/lib/puppet/network/resolver.rb +1 -2
  112. data/lib/puppet/parser/compiler.rb +12 -5
  113. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +1 -1
  114. data/lib/puppet/parser/functions/fqdn_rand.rb +15 -4
  115. data/lib/puppet/parser/functions/new.rb +31 -46
  116. data/lib/puppet/parser/parser_factory.rb +1 -1
  117. data/lib/puppet/parser/resource.rb +1 -1
  118. data/lib/puppet/parser/type_loader.rb +11 -11
  119. data/lib/puppet/pops/evaluator/closure.rb +1 -1
  120. data/lib/puppet/pops/evaluator/collector_transformer.rb +1 -1
  121. data/lib/puppet/pops/evaluator/epp_evaluator.rb +2 -2
  122. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +2 -2
  123. data/lib/puppet/pops/evaluator/runtime3_support.rb +5 -2
  124. data/lib/puppet/pops/functions/dispatch.rb +1 -1
  125. data/lib/puppet/pops/issue_reporter.rb +18 -1
  126. data/lib/puppet/pops/issues.rb +6 -3
  127. data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +1 -2
  128. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -2
  129. data/lib/puppet/pops/loader/task_instantiator.rb +5 -5
  130. data/lib/puppet/pops/loader/type_definition_instantiator.rb +4 -1
  131. data/lib/puppet/pops/loaders.rb +18 -7
  132. data/lib/puppet/pops/lookup/global_data_provider.rb +1 -1
  133. data/lib/puppet/pops/lookup/lookup_adapter.rb +55 -6
  134. data/lib/puppet/pops/model/factory.rb +6 -3
  135. data/lib/puppet/pops/model/model_tree_dumper.rb +4 -0
  136. data/lib/puppet/pops/model/pn_transformer.rb +400 -0
  137. data/lib/puppet/pops/parser/egrammar.ra +1 -1
  138. data/lib/puppet/pops/parser/eparser.rb +1 -1
  139. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  140. data/lib/puppet/pops/parser/lexer_support.rb +3 -2
  141. data/lib/puppet/pops/parser/locator.rb +0 -2
  142. data/lib/puppet/pops/parser/pn_parser.rb +316 -0
  143. data/lib/puppet/pops/pcore.rb +17 -17
  144. data/lib/puppet/pops/pn.rb +236 -0
  145. data/lib/puppet/pops/serialization/json.rb +7 -7
  146. data/lib/puppet/pops/types/class_loader.rb +6 -3
  147. data/lib/puppet/pops/types/implementation_registry.rb +28 -35
  148. data/lib/puppet/pops/types/p_object_type.rb +3 -3
  149. data/lib/puppet/pops/types/p_timespan_type.rb +2 -2
  150. data/lib/puppet/pops/types/p_type_set_type.rb +24 -1
  151. data/lib/puppet/pops/types/ruby_generator.rb +3 -4
  152. data/lib/puppet/pops/types/type_calculator.rb +1 -1
  153. data/lib/puppet/pops/types/type_factory.rb +0 -4
  154. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  155. data/lib/puppet/pops/types/type_parser.rb +14 -7
  156. data/lib/puppet/pops/types/types.rb +1 -1
  157. data/lib/puppet/pops/utils.rb +2 -2
  158. data/lib/puppet/pops/validation/checker4_0.rb +6 -2
  159. data/lib/puppet/provider/group/groupadd.rb +3 -1
  160. data/lib/puppet/provider/group/windows_adsi.rb +4 -7
  161. data/lib/puppet/provider/nameservice.rb +3 -3
  162. data/lib/puppet/provider/package/pacman.rb +4 -4
  163. data/lib/puppet/provider/package/pip.rb +3 -3
  164. data/lib/puppet/provider/package/pkgdmg.rb +3 -3
  165. data/lib/puppet/provider/package/pkgutil.rb +2 -2
  166. data/lib/puppet/provider/package/portage.rb +9 -9
  167. data/lib/puppet/provider/package/zypper.rb +2 -2
  168. data/lib/puppet/provider/service/base.rb +1 -1
  169. data/lib/puppet/provider/service/smf.rb +3 -2
  170. data/lib/puppet/provider/service/systemd.rb +1 -1
  171. data/lib/puppet/provider/user/useradd.rb +6 -2
  172. data/lib/puppet/provider/user/windows_adsi.rb +1 -1
  173. data/lib/puppet/provider/yumrepo/inifile.rb +20 -9
  174. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  175. data/lib/puppet/reference/configuration.rb +2 -0
  176. data/lib/puppet/reference/type.rb +11 -11
  177. data/lib/puppet/resource.rb +1 -1
  178. data/lib/puppet/resource/capability_finder.rb +5 -5
  179. data/lib/puppet/resource/catalog.rb +6 -3
  180. data/lib/puppet/resource/status.rb +9 -2
  181. data/lib/puppet/resource/type.rb +1 -1
  182. data/lib/puppet/settings.rb +31 -19
  183. data/lib/puppet/settings/base_setting.rb +5 -0
  184. data/lib/puppet/settings/config_file.rb +1 -1
  185. data/lib/puppet/settings/ttl_setting.rb +5 -0
  186. data/lib/puppet/ssl/certificate_factory.rb +2 -2
  187. data/lib/puppet/ssl/certificate_request.rb +0 -2
  188. data/lib/puppet/syntax_checkers/json.rb +1 -1
  189. data/lib/puppet/transaction/additional_resource_generator.rb +2 -2
  190. data/lib/puppet/transaction/event.rb +1 -1
  191. data/lib/puppet/transaction/report.rb +18 -12
  192. data/lib/puppet/type.rb +9 -13
  193. data/lib/puppet/type/augeas.rb +2 -2
  194. data/lib/puppet/type/cron.rb +11 -6
  195. data/lib/puppet/type/exec.rb +1 -1
  196. data/lib/puppet/type/file.rb +4 -5
  197. data/lib/puppet/type/host.rb +1 -1
  198. data/lib/puppet/type/k5login.rb +30 -54
  199. data/lib/puppet/type/package.rb +3 -3
  200. data/lib/puppet/type/schedule.rb +12 -12
  201. data/lib/puppet/type/scheduled_task.rb +2 -2
  202. data/lib/puppet/type/ssh_authorized_key.rb +5 -5
  203. data/lib/puppet/type/sshkey.rb +2 -2
  204. data/lib/puppet/type/tidy.rb +1 -1
  205. data/lib/puppet/type/user.rb +1 -1
  206. data/lib/puppet/type/yumrepo.rb +26 -5
  207. data/lib/puppet/util.rb +0 -4
  208. data/lib/puppet/util/backups.rb +1 -1
  209. data/lib/puppet/util/inifile.rb +3 -4
  210. data/lib/puppet/util/json.rb +68 -0
  211. data/lib/puppet/util/json_lockfile.rb +3 -3
  212. data/lib/puppet/util/log.rb +2 -5
  213. data/lib/puppet/util/log/destinations.rb +2 -2
  214. data/lib/puppet/util/network_device/cisco/facts.rb +1 -1
  215. data/lib/puppet/util/plist.rb +1 -1
  216. data/lib/puppet/util/reference.rb +1 -8
  217. data/lib/puppet/util/tagging.rb +1 -1
  218. data/lib/puppet/util/warnings.rb +0 -2
  219. data/lib/puppet/util/windows/adsi.rb +15 -18
  220. data/lib/puppet/util/windows/com.rb +2 -1
  221. data/lib/puppet/util/windows/file.rb +2 -2
  222. data/lib/puppet/util/windows/principal.rb +7 -6
  223. data/lib/puppet/util/windows/sid.rb +60 -7
  224. data/lib/puppet/util/windows/taskscheduler.rb +0 -9
  225. data/lib/puppet/version.rb +1 -1
  226. data/lib/puppet_pal.rb +53 -48
  227. data/locales/ja/puppet.po +1357 -912
  228. data/locales/puppet.pot +549 -466
  229. data/man/man5/puppet.conf.5 +103 -20
  230. data/man/man8/puppet-agent.8 +6 -2
  231. data/man/man8/puppet-apply.8 +2 -2
  232. data/man/man8/puppet-ca.8 +1 -1
  233. data/man/man8/puppet-catalog.8 +1 -1
  234. data/man/man8/puppet-cert.8 +1 -1
  235. data/man/man8/puppet-certificate.8 +1 -1
  236. data/man/man8/puppet-certificate_request.8 +1 -1
  237. data/man/man8/puppet-certificate_revocation_list.8 +1 -1
  238. data/man/man8/puppet-config.8 +35 -1
  239. data/man/man8/puppet-describe.8 +1 -1
  240. data/man/man8/puppet-device.8 +33 -11
  241. data/man/man8/puppet-doc.8 +1 -1
  242. data/man/man8/puppet-epp.8 +34 -12
  243. data/man/man8/puppet-facts.8 +50 -1
  244. data/man/man8/puppet-filebucket.8 +38 -11
  245. data/man/man8/puppet-generate.8 +1 -1
  246. data/man/man8/puppet-help.8 +1 -1
  247. data/man/man8/puppet-key.8 +1 -1
  248. data/man/man8/puppet-lookup.8 +1 -1
  249. data/man/man8/puppet-man.8 +10 -4
  250. data/man/man8/puppet-master.8 +1 -1
  251. data/man/man8/puppet-module.8 +15 -6
  252. data/man/man8/puppet-node.8 +1 -1
  253. data/man/man8/puppet-parser.8 +31 -8
  254. data/man/man8/puppet-plugin.8 +1 -1
  255. data/man/man8/puppet-report.8 +1 -1
  256. data/man/man8/puppet-resource.8 +1 -1
  257. data/man/man8/puppet-script.8 +67 -0
  258. data/man/man8/puppet-status.8 +1 -1
  259. data/man/man8/puppet.8 +3 -3
  260. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet_x/awesome2/echo_scheme_handler.rb +1 -1
  261. data/spec/integration/application/apply_spec.rb +15 -15
  262. data/spec/integration/application/lookup_spec.rb +21 -0
  263. data/spec/integration/faces/config_spec.rb +16 -4
  264. data/spec/integration/network/http/api/indirected_routes_spec.rb +5 -5
  265. data/spec/integration/parser/catalog_spec.rb +1 -1
  266. data/spec/integration/parser/collection_spec.rb +2 -2
  267. data/spec/integration/parser/compiler_spec.rb +17 -18
  268. data/spec/integration/parser/pcore_resource_spec.rb +2 -2
  269. data/spec/integration/parser/scope_spec.rb +2 -2
  270. data/spec/integration/ssl/certificate_authority_spec.rb +7 -7
  271. data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
  272. data/spec/integration/ssl/key_spec.rb +1 -1
  273. data/spec/integration/transaction/report_spec.rb +3 -3
  274. data/spec/integration/transaction_spec.rb +0 -1
  275. data/spec/integration/type/file_spec.rb +10 -11
  276. data/spec/integration/type_spec.rb +1 -2
  277. data/spec/integration/util/windows/adsi_spec.rb +86 -1
  278. data/spec/integration/util/windows/principal_spec.rb +11 -2
  279. data/spec/integration/util/windows/security_spec.rb +2 -2
  280. data/spec/lib/matchers/json.rb +4 -4
  281. data/spec/lib/puppet_spec/language.rb +34 -35
  282. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
  283. data/spec/shared_behaviours/file_server_terminus.rb +0 -2
  284. data/spec/shared_behaviours/things_that_declare_options.rb +2 -2
  285. data/spec/spec_helper.rb +1 -1
  286. data/spec/unit/application/cert_spec.rb +21 -9
  287. data/spec/unit/application/device_spec.rb +96 -2
  288. data/spec/unit/application/face_base_spec.rb +2 -2
  289. data/spec/unit/application/lookup_spec.rb +0 -1
  290. data/spec/unit/configurer_spec.rb +14 -0
  291. data/spec/unit/confine_spec.rb +16 -0
  292. data/spec/unit/data_providers/hiera_data_provider_spec.rb +4 -4
  293. data/spec/unit/datatypes_spec.rb +49 -0
  294. data/spec/unit/environments_spec.rb +7 -0
  295. data/spec/unit/face/config_spec.rb +116 -12
  296. data/spec/unit/face/epp_face_spec.rb +53 -2
  297. data/spec/unit/face/facts_spec.rb +53 -0
  298. data/spec/unit/face/help_spec.rb +62 -69
  299. data/spec/unit/face/man_spec.rb +26 -0
  300. data/spec/unit/face/module/list_spec.rb +0 -1
  301. data/spec/unit/face/parser_spec.rb +78 -0
  302. data/spec/unit/file_bucket/dipper_spec.rb +0 -4
  303. data/spec/unit/file_serving/content_spec.rb +0 -1
  304. data/spec/unit/file_serving/fileset_spec.rb +0 -1
  305. data/spec/unit/file_serving/metadata_spec.rb +0 -1
  306. data/spec/unit/file_serving/terminus_selector_spec.rb +0 -2
  307. data/spec/unit/forge_spec.rb +1 -2
  308. data/spec/unit/functions/assert_type_spec.rb +1 -1
  309. data/spec/unit/functions/empty_spec.rb +77 -0
  310. data/spec/unit/functions/epp_spec.rb +1 -1
  311. data/spec/unit/functions/flatten_spec.rb +31 -0
  312. data/spec/unit/functions/include_spec.rb +2 -2
  313. data/spec/unit/functions/inline_epp_spec.rb +1 -1
  314. data/spec/unit/functions/join_spec.rb +33 -0
  315. data/spec/unit/functions/keys_spec.rb +31 -0
  316. data/spec/unit/functions/length_spec.rb +50 -0
  317. data/spec/unit/functions/lookup_fixture_spec.rb +1 -1
  318. data/spec/unit/functions/lookup_spec.rb +52 -0
  319. data/spec/unit/functions/shared.rb +1 -1
  320. data/spec/unit/functions/values_spec.rb +30 -0
  321. data/spec/unit/functions/versioncmp_spec.rb +1 -1
  322. data/spec/unit/functions4_spec.rb +30 -32
  323. data/spec/unit/graph/title_hash_prioritizer_spec.rb +2 -1
  324. data/spec/unit/indirector/catalog/compiler_spec.rb +0 -15
  325. data/spec/unit/indirector/facts/rest_spec.rb +45 -0
  326. data/spec/unit/indirector/facts/yaml_spec.rb +6 -0
  327. data/spec/unit/indirector/file_bucket_file/file_spec.rb +2 -2
  328. data/spec/unit/indirector/indirection_spec.rb +1 -1
  329. data/spec/unit/indirector/node/ldap_spec.rb +2 -2
  330. data/spec/unit/indirector/request_spec.rb +0 -2
  331. data/spec/unit/indirector/rest_spec.rb +2 -2
  332. data/spec/unit/indirector_spec.rb +0 -1
  333. data/spec/unit/info_service_spec.rb +1 -1
  334. data/spec/unit/interface/action_manager_spec.rb +1 -1
  335. data/spec/unit/interface/action_spec.rb +1 -1
  336. data/spec/unit/module_spec.rb +0 -5
  337. data/spec/unit/module_tool/applications/builder_spec.rb +1 -1
  338. data/spec/unit/module_tool/applications/unpacker_spec.rb +4 -4
  339. data/spec/unit/network/formats_spec.rb +5 -13
  340. data/spec/unit/network/http/api/indirected_routes_spec.rb +6 -2
  341. data/spec/unit/network/http/connection_spec.rb +1 -1
  342. data/spec/unit/network/http/handler_spec.rb +3 -2
  343. data/spec/unit/node/environment_spec.rb +1 -1
  344. data/spec/unit/node_spec.rb +3 -3
  345. data/spec/unit/parser/compiler_spec.rb +9 -2
  346. data/spec/unit/parser/environment_compiler_spec.rb +8 -8
  347. data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
  348. data/spec/unit/parser/functions/fail_spec.rb +1 -1
  349. data/spec/unit/parser/functions/fqdn_rand_spec.rb +24 -0
  350. data/spec/unit/parser/functions/realize_spec.rb +1 -1
  351. data/spec/unit/parser/resource_spec.rb +0 -1
  352. data/spec/unit/parser/scope_spec.rb +3 -3
  353. data/spec/unit/parser/type_loader_spec.rb +1 -1
  354. data/spec/unit/pops/adaptable_spec.rb +0 -1
  355. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +0 -3
  356. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +0 -4
  357. data/spec/unit/pops/factory_rspec_helper.rb +1 -1
  358. data/spec/unit/pops/factory_spec.rb +5 -5
  359. data/spec/unit/pops/issues_spec.rb +23 -8
  360. data/spec/unit/pops/loaders/loaders_spec.rb +24 -2
  361. data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
  362. data/spec/unit/pops/lookup/interpolation_spec.rb +5 -0
  363. data/spec/unit/pops/lookup/lookup_spec.rb +56 -0
  364. data/spec/unit/pops/model/pn_transformer_spec.rb +53 -0
  365. data/spec/unit/pops/parser/lexer2_spec.rb +14 -5
  366. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +9 -9
  367. data/spec/unit/pops/parser/parse_calls_spec.rb +1 -1
  368. data/spec/unit/pops/parser/parse_functions_spec.rb +1 -1
  369. data/spec/unit/pops/parser/parse_heredoc_spec.rb +3 -3
  370. data/spec/unit/pops/parser/parse_lambda_spec.rb +1 -1
  371. data/spec/unit/pops/parser/parse_resource_spec.rb +35 -35
  372. data/spec/unit/pops/parser/pn_parser_spec.rb +101 -0
  373. data/spec/unit/pops/pn_spec.rb +148 -0
  374. data/spec/unit/pops/types/iterable_spec.rb +1 -1
  375. data/spec/unit/pops/types/p_object_type_spec.rb +5 -5
  376. data/spec/unit/pops/types/p_timespan_type_spec.rb +11 -4
  377. data/spec/unit/pops/types/p_timestamp_type_spec.rb +9 -2
  378. data/spec/unit/pops/types/p_type_set_type_spec.rb +106 -2
  379. data/spec/unit/pops/types/ruby_generator_spec.rb +3 -8
  380. data/spec/unit/pops/types/string_converter_spec.rb +3 -3
  381. data/spec/unit/pops/types/type_calculator_spec.rb +1 -1
  382. data/spec/unit/pops/validator/validator_spec.rb +3 -1
  383. data/spec/unit/property_spec.rb +2 -2
  384. data/spec/unit/provider/aixobject_spec.rb +1 -1
  385. data/spec/unit/provider/cron/crontab_spec.rb +3 -3
  386. data/spec/unit/provider/exec/posix_spec.rb +6 -6
  387. data/spec/unit/provider/group/groupadd_spec.rb +4 -4
  388. data/spec/unit/provider/group/windows_adsi_spec.rb +79 -22
  389. data/spec/unit/provider/ldap_spec.rb +0 -1
  390. data/spec/unit/provider/nameservice_spec.rb +5 -5
  391. data/spec/unit/provider/package/rpm_spec.rb +3 -4
  392. data/spec/unit/provider/package/yum_spec.rb +6 -2
  393. data/spec/unit/provider/parsedfile_spec.rb +1 -1
  394. data/spec/unit/provider/service/base_spec.rb +2 -4
  395. data/spec/unit/provider/service/init_spec.rb +2 -2
  396. data/spec/unit/provider/service/openrc_spec.rb +2 -2
  397. data/spec/unit/provider/service/redhat_spec.rb +2 -2
  398. data/spec/unit/provider/service/smf_spec.rb +2 -0
  399. data/spec/unit/provider/service/systemd_spec.rb +3 -3
  400. data/spec/unit/provider/service/upstart_spec.rb +7 -7
  401. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +0 -4
  402. data/spec/unit/provider/sshkey/parsed_spec.rb +0 -2
  403. data/spec/unit/provider/user/useradd_spec.rb +15 -9
  404. data/spec/unit/provider/user/windows_adsi_spec.rb +4 -4
  405. data/spec/unit/provider/yumrepo/inifile_spec.rb +76 -0
  406. data/spec/unit/puppet_pal_2pec.rb +4 -5
  407. data/spec/unit/resource/catalog_spec.rb +8 -3
  408. data/spec/unit/resource/status_spec.rb +15 -4
  409. data/spec/unit/resource/type_spec.rb +2 -3
  410. data/spec/unit/settings_spec.rb +9 -4
  411. data/spec/unit/ssl/certificate_authority_spec.rb +1 -9
  412. data/spec/unit/ssl/certificate_request_spec.rb +1 -2
  413. data/spec/unit/transaction/report_spec.rb +41 -0
  414. data/spec/unit/transaction_spec.rb +1 -1
  415. data/spec/unit/type/exec_spec.rb +7 -9
  416. data/spec/unit/type/file/selinux_spec.rb +0 -1
  417. data/spec/unit/type/file_spec.rb +4 -3
  418. data/spec/unit/type/k5login_spec.rb +79 -10
  419. data/spec/unit/type/mount_spec.rb +1 -1
  420. data/spec/unit/type/nagios_spec.rb +6 -6
  421. data/spec/unit/type/user_spec.rb +1 -1
  422. data/spec/unit/type/yumrepo_spec.rb +18 -0
  423. data/spec/unit/type/zfs_spec.rb +1 -1
  424. data/spec/unit/type_spec.rb +14 -15
  425. data/spec/unit/util/docs_spec.rb +1 -1
  426. data/spec/unit/util/execution_spec.rb +0 -1
  427. data/spec/unit/util/inifile_spec.rb +35 -4
  428. data/spec/unit/util/log/destinations_spec.rb +2 -2
  429. data/spec/unit/util/log_spec.rb +6 -5
  430. data/spec/unit/util/network_device/cisco/device_spec.rb +2 -2
  431. data/spec/unit/util/plist_spec.rb +3 -3
  432. data/spec/unit/util/selinux_spec.rb +2 -2
  433. data/spec/unit/util/tagging_spec.rb +1 -7
  434. data/spec/unit/util/windows/adsi_spec.rb +31 -27
  435. data/spec/unit/util/windows/sid_spec.rb +86 -15
  436. data/spec/unit/util_spec.rb +2 -2
  437. data/spec/watchr.rb +0 -1
  438. data/tasks/benchmark.rake +37 -0
  439. data/tasks/manpages.rake +1 -1
  440. metadata +83 -11
  441. checksums.yaml +0 -7
data/Gemfile CHANGED
@@ -49,9 +49,7 @@ group(:development, :test) do
49
49
  gem "yarjuf", "~> 2.0"
50
50
 
51
51
  # json-schema does not support windows, so omit it from the platforms list
52
- # json-schema uses multi_json, but chokes with multi_json 1.7.9, so prefer 1.7.7
53
- gem "multi_json", "1.7.7", :require => false, :platforms => [:ruby, :jruby]
54
- gem "json-schema", "2.1.1", :require => false, :platforms => [:ruby, :jruby]
52
+ gem "json-schema", "~> 2.0", :require => false, :platforms => [:ruby, :jruby]
55
53
 
56
54
  if RUBY_VERSION >= '2.0'
57
55
  # pin rubocop as 0.50 requires a higher version of the rainbow gem (see below)
@@ -74,6 +72,8 @@ group(:development, :test) do
74
72
  gem 'webmock', '~> 1.24'
75
73
  gem 'vcr', '~> 2.9'
76
74
  gem "hiera-eyaml", :require => false
75
+
76
+ gem 'memory_profiler', :platforms => [:mri_21, :mri_22, :mri_23, :mri_24, :mri_25]
77
77
  end
78
78
 
79
79
  group(:development) do
data/MAINTAINERS CHANGED
@@ -33,34 +33,15 @@
33
33
  "github": "Iristyle",
34
34
  "name": "Ethan J. Brown"
35
35
  },
36
- {
37
- "github": "HAIL9000",
38
- "email": "hailee@puppet.com",
39
- "name": "Hailee Kenney"
40
- },
41
36
  {
42
37
  "github": "er0ck",
43
38
  "email": "eric.thompson@puppet.com",
44
39
  "name": "Eric Thompson"
45
40
  },
46
- {
47
- "github": "johnduarte",
48
- "email": "john.duarte@puppet.com",
49
- "name": "John Duarte"
50
- },
51
- {
52
- "github": "adrienthebo",
53
- "name": "Adrien Thebo"
54
- },
55
41
  {
56
42
  "github": "jtappa",
57
43
  "email": "jorie@puppet.com",
58
44
  "name": "Jorie Tappa"
59
- },
60
- {
61
- "github": "MosesMendoza",
62
- "email": "moses@puppet.com",
63
- "name": "Moses Mendoza"
64
45
  }
65
46
  ]
66
47
  }
data/README.md CHANGED
@@ -23,26 +23,26 @@ HTTP API
23
23
  Installation
24
24
  ------------
25
25
 
26
- The best way to run Puppet is with [Puppet Enterprise](https://puppet.com/puppet/puppet-enterprise),
26
+ The best way to run Puppet is with [Puppet Enterprise (PE)](https://puppet.com/puppet/puppet-enterprise),
27
27
  which also includes orchestration features, a web console, and professional support.
28
- [The PE documentation is available here.](https://puppet.com/docs/pe/latest)
28
+ The PE documentation is [available here.](https://puppet.com/docs/pe/latest)
29
29
 
30
30
  To install an open source release of Puppet,
31
31
  [see the installation guide on the docs site.](http://puppet.com/docs/puppet/5.4/install_pre.html)
32
32
 
33
33
  If you need to run Puppet from source as a tester or developer,
34
- [see the running from source guide on the docs site.](https://docs.puppet.com/puppet/3.8/from_source.html)
34
+ see the [Running Puppet from Source](https://docs.puppet.com/puppet/3.8/from_source.html) guide on the docs site.
35
35
 
36
36
  Developing and Contributing
37
37
  ------
38
38
 
39
39
  We'd love to get contributions from you! For a quick guide to getting your
40
- system setup for developing take a look at our [Quickstart
40
+ system setup for developing, take a look at our [Quickstart
41
41
  Guide](https://github.com/puppetlabs/puppet/blob/master/docs/quickstart.md). Once you are up and running, take a look at the
42
42
  [Contribution Documents](https://github.com/puppetlabs/puppet/blob/master/CONTRIBUTING.md) to see how to get your changes merged
43
43
  in.
44
44
 
45
- For more complete docs on developing with puppet you can take a look at the
45
+ For more complete docs on developing with Puppet, take a look at the
46
46
  rest of the [developer documents](https://github.com/puppetlabs/puppet/blob/master/docs/index.md).
47
47
 
48
48
  License
data/Rakefile CHANGED
@@ -19,6 +19,7 @@ rescue LoadError
19
19
  end
20
20
 
21
21
  require 'rake'
22
+ require 'open3'
22
23
 
23
24
  Dir['tasks/**/*.rake'].each { |t| load t }
24
25
 
@@ -110,6 +111,31 @@ task(:commits) do
110
111
  end
111
112
  end
112
113
 
114
+ desc "verify that changed files are clean of Ruby warnings"
115
+ task(:warnings) do
116
+ # This rake task looks at all files modified in this branch. This is
117
+ # accomplished by using the TRAVIS_COMMIT_RANGE environment variable, which
118
+ # is present in travis CI and populated with the range of commits the PR
119
+ # contains. If not available, this falls back to `master..HEAD` as a next
120
+ # best bet as `master` is unlikely to ever be absent.
121
+ commit_range = ENV['TRAVIS_COMMIT_RANGE'].nil? ? 'master...HEAD' : ENV['TRAVIS_COMMIT_RANGE']
122
+ ruby_files_ok = true
123
+ puts "Checking modified files #{commit_range}"
124
+ %x{git diff --name-only #{commit_range}}.each_line do |modified_file|
125
+ modified_file.chomp!
126
+ next unless File.extname(modified_file) == '.rb'
127
+ puts modified_file
128
+
129
+ stdout, stderr, _ = Open3.capture3("ruby -wc \"#{modified_file}\"")
130
+ unless stderr.empty?
131
+ ruby_files_ok = false
132
+ puts stderr
133
+ end
134
+ puts stdout
135
+ end
136
+ raise "One or more ruby files contain warnings." unless ruby_files_ok
137
+ end
138
+
113
139
  if Rake.application.top_level_tasks.grep(/^gettext:/).any?
114
140
  begin
115
141
  spec = Gem::Specification.find_by_name 'gettext-setup'
data/conf/auth.conf CHANGED
@@ -100,6 +100,11 @@ path ~ ^/puppet/v3/report/([^/]+)$
100
100
  method save
101
101
  allow $1
102
102
 
103
+ # allow all nodes to update their own facts
104
+ path ~ ^/puppet/v3/facts/([^/]+)$
105
+ method save
106
+ allow $1
107
+
103
108
  # Allow all nodes to access all file services; this is necessary for
104
109
  # pluginsync, file serving from modules, and file serving from custom
105
110
  # mount points (see fileserver.conf). Note that the `/file` prefix matches
@@ -23,6 +23,7 @@ gem_runtime_dependencies:
23
23
  # semantic_puppet: ['>= 0.1.3', '< 2']
24
24
  fast_gettext: '~> 1.1.2'
25
25
  locale: '~> 2.1'
26
+ multi_json: '~> 1.10'
26
27
  gem_rdoc_options:
27
28
  - --title
28
29
  - "Puppet - Configuration Management"
@@ -89,7 +89,6 @@ class ExternalNode
89
89
  # parameters
90
90
  def initialize(hostname, classdir = 'classes/', parameterdir = 'parameters/', environmentdir = 'environment/')
91
91
  # instance variables that contain the lists of classes and parameters
92
- @hostname
93
92
  @classes = Set.new
94
93
  @parameters = Hash.new("unknown") # sets a default value of "unknown"
95
94
  @environment = "production"
@@ -134,13 +133,13 @@ class ExternalNode
134
133
  patternlist = []
135
134
 
136
135
  begin
137
- open(filepath).each { |l|
136
+ open(filepath).each do |l|
138
137
  l.chomp!
139
138
 
140
139
  next if l =~ /^$/
141
140
  next if l =~ /^#/
142
141
 
143
- if l =~ /^\s*(\S+)/
142
+ if l =~ /^\s*(\S+)/
144
143
  m = Regexp.last_match
145
144
  log("found a non-comment line, transforming [#{l}] into [#{m[1]}]")
146
145
  l.gsub!(l,m[1])
@@ -151,7 +150,7 @@ class ExternalNode
151
150
  pattern = %r{#{l}}
152
151
  patternlist << pattern
153
152
  log("appending [#{pattern}] to patternlist for [#{filepath}]")
154
- }
153
+ end
155
154
  rescue StandardError
156
155
  log("Problem reading #{filepath}: #{$!}",:err)
157
156
  exit(1)
@@ -245,7 +245,7 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
245
245
  $stderr.puts _("%{file} is not readable") % { file: file }
246
246
  exit(63)
247
247
  end
248
- node.classes = Puppet::FileSystem.read(file, :encoding => 'utf-8').split(/[\s\n]+/)
248
+ node.classes = Puppet::FileSystem.read(file, :encoding => 'utf-8').split(/[\s]+/)
249
249
  end
250
250
  end
251
251
 
@@ -269,8 +269,10 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
269
269
  end
270
270
  begin
271
271
  if subcommand == :destroy
272
+ raise _("Refusing to destroy all certs, provide an explicit list of certs to destroy") if hosts == :all
273
+
272
274
  signed_hosts = hosts - @ca.waiting?
273
- apply(@ca, :revoke, options.merge(:to => signed_hosts))
275
+ apply(@ca, :revoke, options.merge(:to => signed_hosts)) unless signed_hosts.empty?
274
276
  end
275
277
  apply(@ca, subcommand, options.merge(:to => hosts, :digest => @digest))
276
278
  rescue => detail
@@ -24,13 +24,16 @@ class Puppet::Application::Device < Puppet::Application
24
24
  end
25
25
 
26
26
  {
27
+ :apply => nil,
27
28
  :waitforcert => nil,
28
29
  :detailed_exitcodes => false,
29
30
  :verbose => false,
30
31
  :debug => false,
31
32
  :centrallogs => false,
32
33
  :setdest => false,
34
+ :resource => false,
33
35
  :target => nil,
36
+ :to_yaml => false,
34
37
  }.each do |opt,val|
35
38
  options[opt] = val
36
39
  end
@@ -40,12 +43,18 @@ class Puppet::Application::Device < Puppet::Application
40
43
 
41
44
  option("--centrallogging")
42
45
  option("--debug","-d")
46
+ option("--resource","-r")
47
+ option("--to_yaml","-y")
43
48
  option("--verbose","-v")
44
49
 
45
50
  option("--detailed-exitcodes") do |arg|
46
51
  options[:detailed_exitcodes] = true
47
52
  end
48
53
 
54
+ option("--apply MANIFEST") do |arg|
55
+ options[:apply] = arg.to_s
56
+ end
57
+
49
58
  option("--logdest DEST", "-l DEST") do |arg|
50
59
  handle_logdest_arg(arg)
51
60
  end
@@ -85,6 +94,7 @@ USAGE
85
94
  puppet device [-d|--debug] [--detailed-exitcodes] [--deviceconfig <file>]
86
95
  [-h|--help] [-l|--logdest syslog|<file>|console]
87
96
  [-v|--verbose] [-w|--waitforcert <seconds>]
97
+ [-a|--apply <file>] [-r|--resource <type> [name]]
88
98
  [-t|--target <device>] [--user=<user>] [-V|--version]
89
99
 
90
100
 
@@ -150,10 +160,21 @@ you can specify '--server <servername>' as an argument.
150
160
  appending nature of logging. It must be appended manually to make the content
151
161
  valid JSON.
152
162
 
163
+ * --apply:
164
+ Apply a manifest against a remote target. Target must be specified.
165
+
166
+ * --resource:
167
+ Displays a resource state as Puppet code, roughly equivalent to
168
+ `puppet resource`. Can be filterd by title. Requires --target be specified.
169
+
153
170
  * --target:
154
171
  Target a specific device/certificate in the device.conf. Doing so will perform a
155
172
  device run against only that device/certificate.
156
173
 
174
+ * --to_yaml:
175
+ Output found resources in yaml format, suitable to use with Hiera and
176
+ create_resources.
177
+
157
178
  * --user:
158
179
  The user to run as.
159
180
 
@@ -170,7 +191,7 @@ you can specify '--server <servername>' as an argument.
170
191
 
171
192
  EXAMPLE
172
193
  -------
173
- $ puppet device --server puppet.domain.com
194
+ $ puppet device --target remotehost --verbose
174
195
 
175
196
  AUTHOR
176
197
  ------
@@ -182,10 +203,24 @@ COPYRIGHT
182
203
  Copyright (c) 2011 Puppet Inc., LLC
183
204
  Licensed under the Apache 2.0 License
184
205
  HELP
185
- end
206
+ end
186
207
 
187
208
 
188
209
  def main
210
+ if options[:resource] and !options[:target]
211
+ Puppet.err _("resource command requires target")
212
+ exit(1)
213
+ end
214
+ unless options[:apply].nil?
215
+ if options[:target].nil?
216
+ Puppet.err _("missing argument: --target is required when using --apply")
217
+ exit(1)
218
+ end
219
+ unless File.file?(options[:apply])
220
+ Puppet.err _("%{file} does not exist, cannot apply") % { file: options[:apply] }
221
+ exit(1)
222
+ end
223
+ end
189
224
  vardir = Puppet[:vardir]
190
225
  confdir = Puppet[:confdir]
191
226
  certname = Puppet[:certname]
@@ -212,27 +247,61 @@ Licensed under the Apache 2.0 License
212
247
  # Handle nil scheme & port
213
248
  scheme = "#{device_url.scheme}://" if device_url.scheme
214
249
  port = ":#{device_url.port}" if device_url.port
215
- Puppet.info _("starting applying configuration to %{target} at %{scheme}%{url_host}%{port}%{url_path}") % { target: device.name, scheme: scheme, url_host: device_url.host, port: port, url_path: device_url.path }
216
250
 
217
251
  # override local $vardir and $certname
218
252
  Puppet[:confdir] = ::File.join(Puppet[:devicedir], device.name)
219
253
  Puppet[:vardir] = ::File.join(Puppet[:devicedir], device.name)
220
254
  Puppet[:certname] = device.name
221
255
 
222
- # this will reload and recompute default settings and create the devices sub vardir, or we hope so :-)
223
- Puppet.settings.use :main, :agent, :ssl
224
-
225
256
  # this init the device singleton, so that the facts terminus
226
257
  # and the various network_device provider can use it
227
258
  Puppet::Util::NetworkDevice.init(device)
228
259
 
229
- # ask for a ssl cert if needed, but at least
230
- # setup the ssl system for this device.
231
- setup_host
232
-
233
- require 'puppet/configurer'
234
- configurer = Puppet::Configurer.new
235
- configurer.run(:network_device => true, :pluginsync => Puppet::Configurer.should_pluginsync?)
260
+ if options[:resource]
261
+ type, name = parse_args(command_line.args)
262
+ Puppet.info _("retrieving resource: %{resource} from %{target} at %{scheme}%{url_host}%{port}%{url_path}") % { resource: type, target: device.name, scheme: scheme, url_host: device_url.host, port: port, url_path: device_url.path }
263
+
264
+ resources = find_resources(type, name)
265
+
266
+ if options[:to_yaml]
267
+ text = resources.map do |resource|
268
+ resource.prune_parameters(:parameters_to_include => @extra_params).to_hierayaml.force_encoding(Encoding.default_external)
269
+ end.join("\n")
270
+ text.prepend("#{type.downcase}:\n")
271
+ else
272
+ text = resources.map do |resource|
273
+ resource.prune_parameters(:parameters_to_include => @extra_params).to_manifest.force_encoding(Encoding.default_external)
274
+ end.join("\n")
275
+ end
276
+ (puts text)
277
+ elsif options[:apply]
278
+ # avoid reporting to server
279
+ Puppet::Transaction::Report.indirection.terminus_class = :yaml
280
+ Puppet::Resource::Catalog.indirection.cache_class = nil
281
+
282
+ require 'puppet/application/apply'
283
+ begin
284
+
285
+ Puppet[:node_terminus] = :plain
286
+ Puppet[:catalog_terminus] = :compiler
287
+ Puppet[:catalog_cache_terminus] = nil
288
+ Puppet[:facts_terminus] = :network_device
289
+ Puppet.override(:network_device => true) do
290
+ Puppet::Application::Apply.new(Puppet::Util::CommandLine.new('puppet', ["apply", options[:apply]])).run_command
291
+ end
292
+ end
293
+ else
294
+ Puppet.info _("starting applying configuration to %{target} at %{scheme}%{url_host}%{port}%{url_path}") % { target: device.name, scheme: scheme, url_host: device_url.host, port: port, url_path: device_url.path }
295
+ # this will reload and recompute default settings and create the devices sub vardir
296
+ Puppet.settings.use :main, :agent, :ssl
297
+ # ask for a ssl cert if needed, but at least
298
+ # setup the ssl system for this device.
299
+ setup_host
300
+
301
+ require 'puppet/configurer'
302
+ configurer = Puppet::Configurer.new
303
+ configurer.run(:network_device => true, :pluginsync => Puppet::Configurer.should_pluginsync?)
304
+ end
236
305
  rescue => detail
237
306
  Puppet.log_exception(detail)
238
307
  # If we rescued an error, then we return 1 as the exit code
@@ -258,6 +327,24 @@ Licensed under the Apache 2.0 License
258
327
  end
259
328
  end
260
329
 
330
+ def parse_args(args)
331
+ type = args.shift or raise _("You must specify the type to display")
332
+ Puppet::Type.type(type) or raise _("Could not find type %{type}") % { type: type }
333
+ name = args.shift
334
+
335
+ [type, name]
336
+ end
337
+
338
+ def find_resources(type, name)
339
+ key = [type, name].join('/')
340
+
341
+ if name
342
+ [ Puppet::Resource.indirection.find( key ) ]
343
+ else
344
+ Puppet::Resource.indirection.search( key, {} )
345
+ end
346
+ end
347
+
261
348
  def setup_host
262
349
  @host = Puppet::SSL::Host.new
263
350
  waitforcert = options[:waitforcert] || (Puppet[:onetime] ? 0 : Puppet[:waitforcert])
@@ -1,4 +1,9 @@
1
1
  require 'puppet/application/indirection_base'
2
2
 
3
3
  class Puppet::Application::Facts < Puppet::Application::IndirectionBase
4
+ # Allows `puppet facts` actions to be run against environments that
5
+ # don't exist locally, such as using the `--environment` flag to make a REST
6
+ # request to a specific environment on a master. There is no way to set this
7
+ # behavior per-action, so it must be set for the face as a whole.
8
+ environment_mode :not_required
4
9
  end
@@ -335,13 +335,23 @@ Copyright (c) 2015 Puppet Inc., LLC Licensed under the Apache 2.0 License
335
335
  Puppet.settings[:facts_terminus] = 'facter'
336
336
  end
337
337
 
338
- node = Puppet::Node.indirection.find(node) unless node.is_a?(Puppet::Node) # to allow unit tests to pass a node instance
338
+ unless node.is_a?(Puppet::Node) # to allow unit tests to pass a node instance
339
+ ni = Puppet::Node.indirection
340
+ tc = ni.terminus_class
341
+ if tc == :plain || options[:compile]
342
+ node = ni.find(node)
343
+ else
344
+ ni.terminus_class = :plain
345
+ node = ni.find(node)
346
+ ni.terminus_class = tc
347
+ end
348
+ end
339
349
 
340
350
  fact_file = options[:fact_file]
341
351
 
342
352
  if fact_file
343
353
  if fact_file.end_with?("json")
344
- given_facts = JSON.parse(Puppet::FileSystem.read(fact_file, :encoding => 'utf-8'))
354
+ given_facts = Puppet::Util::Json.load(Puppet::FileSystem.read(fact_file, :encoding => 'utf-8'))
345
355
  else
346
356
  given_facts = YAML.load(Puppet::FileSystem.read(fact_file, :encoding => 'utf-8'))
347
357
  end
@@ -102,22 +102,31 @@ class Puppet::Configurer
102
102
  end
103
103
 
104
104
  # Convert a plain resource catalog into our full host catalog.
105
- def convert_catalog(result, duration)
106
- catalog = result.to_ral
107
- catalog.finalize
108
- catalog.retrieval_duration = duration
109
- catalog.write_class_file
110
- catalog.write_resource_file
105
+ def convert_catalog(result, duration, options = {})
106
+ catalog = nil
107
+
108
+ catalog_conversion_time = thinmark do
109
+ catalog = result.to_ral
110
+ catalog.finalize
111
+ catalog.retrieval_duration = duration
112
+ catalog.write_class_file
113
+ catalog.write_resource_file
114
+ end
115
+ options[:report].add_times(:convert_catalog, catalog_conversion_time) if options[:report]
116
+
111
117
  catalog
112
118
  end
113
119
 
114
120
  def get_facts(options)
115
121
  if options[:pluginsync]
116
- remote_environment_for_plugins = Puppet::Node::Environment.remote(@environment)
117
- download_plugins(remote_environment_for_plugins)
122
+ plugin_sync_time = thinmark do
123
+ remote_environment_for_plugins = Puppet::Node::Environment.remote(@environment)
124
+ download_plugins(remote_environment_for_plugins)
118
125
 
119
- Puppet::GettextConfig.reset_text_domain('agent')
120
- Puppet::ModuleTranslations.load_from_vardir(Puppet[:vardir])
126
+ Puppet::GettextConfig.reset_text_domain('agent')
127
+ Puppet::ModuleTranslations.load_from_vardir(Puppet[:vardir])
128
+ end
129
+ options[:report].add_times(:plugin_sync, plugin_sync_time) if options[:report]
121
130
  end
122
131
 
123
132
  facts_hash = {}
@@ -127,7 +136,10 @@ class Puppet::Configurer
127
136
  # get a hash with both of these pieces of information.
128
137
  #
129
138
  # facts_for_uploading may set Puppet[:node_name_value] as a side effect
130
- facts_hash = facts_for_uploading
139
+ facter_time = thinmark do
140
+ facts_hash = facts_for_uploading
141
+ end
142
+ options[:report].add_times(:fact_generation, facter_time) if options[:report]
131
143
  end
132
144
  facts_hash
133
145
  end
@@ -149,17 +161,17 @@ class Puppet::Configurer
149
161
 
150
162
  # retrieve_catalog returns json catalog
151
163
  catalog = retrieve_catalog(query_options)
152
- return convert_catalog(catalog, @duration) if catalog
164
+ return convert_catalog(catalog, @duration, options) if catalog
153
165
 
154
166
  Puppet.err _("Could not retrieve catalog; skipping run")
155
167
  nil
156
168
  end
157
169
 
158
- def prepare_and_retrieve_catalog_from_cache
170
+ def prepare_and_retrieve_catalog_from_cache(options = {})
159
171
  result = retrieve_catalog_from_cache({:transaction_uuid => @transaction_uuid, :static_catalog => @static_catalog})
160
172
  if result
161
173
  Puppet.info _("Using cached catalog from environment '%{catalog_env}'") % { catalog_env: result.environment }
162
- return convert_catalog(result, @duration)
174
+ return convert_catalog(result, @duration, options)
163
175
  end
164
176
  nil
165
177
  end
@@ -171,7 +183,10 @@ class Puppet::Configurer
171
183
  report.configuration_version = catalog.version
172
184
 
173
185
  benchmark(:notice, _("Applied catalog in %{seconds} seconds")) do
174
- catalog.apply(options)
186
+ apply_catalog_time = thinmark do
187
+ catalog.apply(options)
188
+ end
189
+ options[:report].add_times(:catalog_application, apply_catalog_time)
175
190
  end
176
191
  ensure
177
192
  report.finalize_report
@@ -238,7 +253,7 @@ class Puppet::Configurer
238
253
  Puppet::GettextConfig.reset_text_domain('agent')
239
254
  Puppet::ModuleTranslations.load_from_vardir(Puppet[:vardir])
240
255
 
241
- if catalog = prepare_and_retrieve_catalog_from_cache
256
+ if catalog = prepare_and_retrieve_catalog_from_cache(options)
242
257
  options[:catalog] = catalog
243
258
  @cached_catalog_status = 'explicitly_requested'
244
259
 
@@ -267,13 +282,18 @@ class Puppet::Configurer
267
282
  # We only need to find out the environment to run in if we don't already have a catalog
268
283
  unless (options[:catalog] || Puppet[:strict_environment_mode])
269
284
  begin
270
- if node = options[:node] || Puppet::Node.indirection.find(Puppet[:node_name_value],
285
+ node = nil
286
+ node_retr_time = thinmark do
287
+ node = options[:node] || Puppet::Node.indirection.find(Puppet[:node_name_value],
271
288
  :environment => Puppet::Node::Environment.remote(@environment),
272
289
  :configured_environment => configured_environment,
273
290
  :ignore_cache => true,
274
291
  :transaction_uuid => @transaction_uuid,
275
292
  :fail_on_404 => true)
293
+ end
294
+ options[:report].add_times(:node_retrieval, node_retr_time)
276
295
 
296
+ if node
277
297
  # If we have deserialized a node from a rest call, we want to set
278
298
  # an environment instance as a simple 'remote' environment reference.
279
299
  if !node.has_environment_instance? && node.environment_name