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
@@ -21,7 +21,7 @@ class Puppet::Confine
21
21
  end
22
22
 
23
23
  def self.test(name)
24
- unless @tests[name]
24
+ unless @tests.include?(name)
25
25
  begin
26
26
  require "puppet/confine/#{name}"
27
27
  rescue LoadError => detail
@@ -29,6 +29,9 @@ class Puppet::Confine
29
29
  warn "Could not load confine test '#{name}': #{detail}"
30
30
  end
31
31
  # Could not find file
32
+ if !Puppet[:always_retry_plugins]
33
+ @tests[name] = nil
34
+ end
32
35
  end
33
36
  end
34
37
  @tests[name]
@@ -169,7 +169,7 @@ module Puppet::DataTypes
169
169
  end
170
170
  end
171
171
  else
172
- Puppet::Pops::Loaders.implementation_registry.register_implementation(created_type, @implementation_class, loader)
172
+ Puppet::Pops::Loaders.implementation_registry.register_implementation(created_type, @implementation_class)
173
173
  end
174
174
  created_type.implementation_class = @implementation_class
175
175
  elsif !@implementation.nil?
@@ -115,7 +115,7 @@ module Puppet::Environments
115
115
  def get_conf(name)
116
116
  env = get(name)
117
117
  if env
118
- Puppet::Settings::EnvironmentConf.static_for(env, 0, Puppet[:static_catalogs], Puppet[:rich_data])
118
+ Puppet::Settings::EnvironmentConf.static_for(env, Puppet[:environment_timeout], Puppet[:static_catalogs], Puppet[:rich_data])
119
119
  else
120
120
  nil
121
121
  end
data/lib/puppet/error.rb CHANGED
@@ -46,7 +46,7 @@ module Puppet
46
46
 
47
47
  # Contains an issue code and can be annotated with an environment and a node
48
48
  class ParseErrorWithIssue < Puppet::ParseError
49
- attr_reader :issue_code, :basic_message
49
+ attr_reader :issue_code, :basic_message, :arguments
50
50
  attr_accessor :environment, :node
51
51
 
52
52
  # @param message [String] The error message
@@ -55,11 +55,13 @@ module Puppet
55
55
  # @param pos [Integer] The position on the line
56
56
  # @param original [Exception] Original exception
57
57
  # @param issue_code [Symbol] The issue code
58
+ # @param arguments [Hash{Symbol=>Object}] Issue arguments
58
59
  #
59
- def initialize(message, file=nil, line=nil, pos=nil, original=nil, issue_code= nil)
60
+ def initialize(message, file=nil, line=nil, pos=nil, original=nil, issue_code= nil, arguments = nil)
60
61
  super(message, file, line, pos, original)
61
62
  @issue_code = issue_code
62
63
  @basic_message = message
64
+ @arguments = arguments
63
65
  end
64
66
 
65
67
  def to_s
@@ -83,7 +85,8 @@ module Puppet
83
85
  line,
84
86
  nil,
85
87
  nil,
86
- issue.issue_code)
88
+ issue.issue_code,
89
+ args)
87
90
  end
88
91
  end
89
92
 
@@ -181,9 +181,6 @@ module DOT
181
181
  # node element
182
182
 
183
183
  class DOTNode < DOTElement
184
-
185
- @ports
186
-
187
184
  def initialize (params = {}, option_list = NODE_OPTS)
188
185
  super(params, option_list)
189
186
  @ports = params['ports'] ? params['ports'] : []
@@ -235,10 +232,6 @@ module DOT
235
232
  # notation.
236
233
 
237
234
  class DOTSubgraph < DOTElement
238
-
239
- @nodes
240
- @dot_string
241
-
242
235
  def initialize (params = {}, option_list = GRAPH_OPTS)
243
236
  super(params, option_list)
244
237
  @nodes = params['nodes'] ? params['nodes'] : []
@@ -397,4 +397,4 @@ def _reduce_none(val, _values, result)
397
397
  end
398
398
 
399
399
  end # class Parser
400
- end # module Nagios
400
+ end # module Nagios
@@ -2,6 +2,7 @@ require 'puppet/face'
2
2
  require 'puppet/settings/ini_file'
3
3
 
4
4
  Puppet::Face.define(:config, '0.0.1') do
5
+ extend Puppet::Util::Colors
5
6
  copyright "Puppet Inc.", 2011
6
7
  license _("Apache 2 license; see COPYING")
7
8
 
@@ -11,8 +12,10 @@ Puppet::Face.define(:config, '0.0.1') do
11
12
  'puppet.conf' configuration file. For documentation about individual settings,
12
13
  see https://docs.puppetlabs.com/puppet/latest/reference/configuration.html."
13
14
 
15
+ DEFAULT_SECTION_MARKER = Object.new
16
+ DEFAULT_SECTION = "main"
14
17
  option "--section " + _("SECTION_NAME") do
15
- default_to { "main" }
18
+ default_to { DEFAULT_SECTION_MARKER } #Sentinel object for default detection during commands
16
19
  summary _("The section of the configuration file to interact with.")
17
20
  description <<-EOT
18
21
  The section of the puppet.conf configuration file to interact with.
@@ -57,7 +60,15 @@ Puppet::Face.define(:config, '0.0.1') do
57
60
  when_invoked do |*args|
58
61
  options = args.pop
59
62
 
60
- args = Puppet.settings.to_a.collect(&:first) if args.empty? || args == ['all']
63
+ @default_section = false
64
+ if options[:section] == DEFAULT_SECTION_MARKER
65
+ options[:section] = DEFAULT_SECTION
66
+ @default_section = true
67
+ end
68
+
69
+ render_all_settings = args.empty? || args == ['all']
70
+
71
+ args = Puppet.settings.to_a.collect(&:first) if render_all_settings
61
72
 
62
73
  values_from_the_selected_section =
63
74
  Puppet.settings.values(nil, options[:section].to_sym)
@@ -67,23 +78,77 @@ Puppet::Face.define(:config, '0.0.1') do
67
78
  :basemodulepath => values_from_the_selected_section.interpolate(:basemodulepath),
68
79
  }
69
80
 
81
+ to_be_rendered = nil
70
82
  Puppet.override(Puppet.base_context(loader_settings),
71
83
  _("New environment loaders generated from the requested section.")) do
72
84
  # And now we can lookup values that include those from environments configured from
73
85
  # the requested section
74
86
  values = Puppet.settings.values(Puppet[:environment].to_sym, options[:section].to_sym)
75
- if args.length == 1
76
- puts values.interpolate(args[0].to_sym)
77
- else
78
- args.sort.each do |setting_name|
79
- puts "#{setting_name} = #{values.interpolate(setting_name.to_sym)}"
80
- end
87
+
88
+ warn_default_section(options[:section]) if @default_section
89
+ report_section_and_environment(options[:section], Puppet.settings[:environment])
90
+
91
+ to_be_rendered = {}
92
+ args.sort.each do |setting_name|
93
+ to_be_rendered[setting_name] = values.print(setting_name.to_sym)
81
94
  end
82
95
  end
83
- nil
96
+
97
+ # convert symbols to strings before formatting output
98
+ if render_all_settings
99
+ to_be_rendered = stringifyhash(to_be_rendered)
100
+ end
101
+ to_be_rendered
102
+ end
103
+
104
+ when_rendering :console do |to_be_rendered|
105
+ output = ''
106
+ if to_be_rendered.keys.length > 1
107
+ to_be_rendered.keys.sort.each do |setting|
108
+ output << "#{setting} = #{to_be_rendered[setting]}\n"
109
+ end
110
+ else
111
+ output << "#{to_be_rendered.to_a[0].last}\n"
112
+ end
113
+
114
+ output
84
115
  end
85
116
  end
86
117
 
118
+ def stringifyhash(hash)
119
+ newhash = {}
120
+ hash.each do |key, val|
121
+ key = key.to_s
122
+ if val.is_a? Hash
123
+ newhash[key] = stringifyhash(val)
124
+ elsif val.is_a? Symbol
125
+ newhash[key] = val.to_s
126
+ else
127
+ newhash[key] = val
128
+ end
129
+ end
130
+ newhash
131
+ end
132
+
133
+ def warn_default_section(section_name)
134
+ messages = []
135
+ messages << _("No section specified; defaulting to '%{section_name}'.") %
136
+ { section_name: section_name }
137
+ #TRANSLATORS '--section' is a command line option and should not be translated
138
+ messages << _("Set the config section by using the `--section` flag.")
139
+ #TRANSLATORS `puppet config --section user print foo` is a command line example and should not be translated
140
+ messages << _("For example, `puppet config --section user print foo`.")
141
+ messages << _("For more information, see https://puppet.com/docs/puppet/latest/configuration.html")
142
+
143
+ Puppet.warning(messages.join("\n"))
144
+ end
145
+
146
+ def report_section_and_environment(section_name, environment_name)
147
+ $stderr.puts colorize(:hyellow,
148
+ _("Resolving settings from section '%{section_name}' in environment '%{environment_name}'") %
149
+ { section_name: section_name, environment_name: environment_name })
150
+ end
151
+
87
152
  action(:set) do
88
153
  summary _("Set Puppet's settings.")
89
154
  arguments _("[setting_name] [setting_value]")
@@ -106,6 +171,13 @@ Puppet::Face.define(:config, '0.0.1') do
106
171
  EOT
107
172
 
108
173
  when_invoked do |name, value, options|
174
+
175
+ @default_section = false
176
+ if options[:section] == DEFAULT_SECTION_MARKER
177
+ options[:section] = DEFAULT_SECTION
178
+ @default_section = true
179
+ end
180
+
109
181
  if name == 'environment' && options[:section] == 'main'
110
182
  Puppet.warning _(<<-EOM).chomp
111
183
  The environment should be set in either the `[user]`, `[agent]`, or `[master]`
@@ -119,6 +191,8 @@ https://puppet.com/docs/puppet/latest/configuration.html#environment
119
191
  EOM
120
192
  end
121
193
 
194
+ report_section_and_environment(options[:section], Puppet.settings[:environment])
195
+
122
196
  path = Puppet::FileSystem.pathname(Puppet.settings.which_configuration_file)
123
197
  Puppet::FileSystem.touch(path)
124
198
  Puppet::FileSystem.open(path, nil, 'r+:UTF-8') do |file|
@@ -151,7 +225,12 @@ https://puppet.com/docs/puppet/latest/configuration.html#environment
151
225
  EOT
152
226
 
153
227
  when_invoked do |name, options|
154
- options[:section] = options[:section].to_s # If value was left as default - set to default string
228
+
229
+ @default_section = false
230
+ if options[:section] == DEFAULT_SECTION_MARKER
231
+ options[:section] = DEFAULT_SECTION
232
+ @default_section = true
233
+ end
155
234
 
156
235
  path = Puppet::FileSystem.pathname(Puppet.settings.which_configuration_file)
157
236
  if Puppet::FileSystem.exist?(path)
@@ -159,6 +238,9 @@ https://puppet.com/docs/puppet/latest/configuration.html#environment
159
238
  Puppet::Settings::IniFile.update(file) do |config|
160
239
  setting_string = config.delete(options[:section], name)
161
240
  if setting_string
241
+
242
+ report_section_and_environment(options[:section], Puppet.settings[:environment])
243
+
162
244
  puts(_("Deleted setting from '%{section_name}': '%{setting_string}'") %
163
245
  { section_name: options[:section], name: name, setting_string: setting_string.strip })
164
246
  else
@@ -104,13 +104,19 @@ Puppet::Face.define(:epp, '0.0.1') do
104
104
 
105
105
  action (:dump) do
106
106
  summary _("Outputs a dump of the internal template parse tree for debugging")
107
- arguments "-e <source> | [<templates> ...] "
107
+ arguments "[--format <old|pn|json>] [--pretty] { -e <source> | [<templates> ...] } "
108
108
  returns _("A dump of the resulting AST model unless there are syntax or validation errors.")
109
109
  description <<-'EOT'
110
110
  The dump action parses and validates the EPP syntax and dumps the resulting AST model
111
111
  in a human readable (but not necessarily an easy to understand) format.
112
- The output format of the dumped tree is intended for epp parser debugging purposes
113
- and is not API, and may thus change between versions without deprecation warnings.
112
+
113
+ The output format can be controlled using the --format <old|pn|json> where:
114
+ * 'old' is the default, but now deprecated format which is not API.
115
+ * 'pn' is the Puppet Extended S-Expression Notation.
116
+ * 'json' outputs the same graph as 'pn' but with JSON syntax.
117
+
118
+ The output will be "pretty printed" when the option --pretty is given together with --format 'pn' or 'json'.
119
+ This option has no effect on the 'old' format.
114
120
 
115
121
  The command accepts one or more templates (.epp) files, or an -e followed by the template
116
122
  source text. The given templates can be paths to template files, or references
@@ -137,6 +143,14 @@ Puppet::Face.define(:epp, '0.0.1') do
137
143
  summary _("Whether or not to validate the parsed result, if no-validate only syntax errors are reported.")
138
144
  end
139
145
 
146
+ option('--format ' + _('<old, pn, or json>')) do
147
+ summary _("Get result in 'old' (deprecated format), 'pn' (new format), or 'json' (new format in JSON).")
148
+ end
149
+
150
+ option('--pretty') do
151
+ summary _('Pretty print output. Only applicable together with --format pn or json')
152
+ end
153
+
140
154
  option("--[no-]header") do
141
155
  summary _("Whether or not to show a file name header between files.")
142
156
  end
@@ -353,7 +367,6 @@ Puppet::Face.define(:epp, '0.0.1') do
353
367
 
354
368
  def dump_parse(source, filename, options, show_filename = true)
355
369
  output = ""
356
- dumper = Puppet::Pops::Model::ModelTreeDumper.new
357
370
  evaluating_parser = Puppet::Pops::Parser::EvaluatingParser::EvaluatingEppParser.new
358
371
  begin
359
372
  if options[:validate]
@@ -365,7 +378,19 @@ Puppet::Face.define(:epp, '0.0.1') do
365
378
  if show_filename && options[:header]
366
379
  output << "--- #{filename}\n"
367
380
  end
368
- output << dumper.dump(parse_result) << "\n"
381
+ fmt = options[:format]
382
+ if fmt.nil? || fmt == 'old'
383
+ output << Puppet::Pops::Model::ModelTreeDumper.new.dump(parse_result) << "\n"
384
+ else
385
+ require 'puppet/pops/pn'
386
+ pn = Puppet::Pops::Model::PNTransformer.transform(parse_result)
387
+ case fmt
388
+ when 'json'
389
+ options[:pretty] ? JSON.pretty_unparse(pn.to_data) : JSON.dump(pn.to_data)
390
+ else
391
+ pn.format(options[:pretty] ? Puppet::Pops::PN::Indent.new(' ') : nil, output)
392
+ end
393
+ end
369
394
  rescue Puppet::ParseError => detail
370
395
  if show_filename
371
396
  Puppet.err("--- #{filename}")
@@ -484,7 +509,7 @@ Puppet::Face.define(:epp, '0.0.1') do
484
509
  if fact_file.is_a?(Hash) # when used via the Face API
485
510
  given_facts = fact_file
486
511
  elsif fact_file.end_with?("json")
487
- given_facts = JSON.parse(Puppet::FileSystem.read(fact_file, :encoding => 'utf-8'))
512
+ given_facts = Puppet::Util::Json.load(Puppet::FileSystem.read(fact_file, :encoding => 'utf-8'))
488
513
  else
489
514
  given_facts = YAML.load(Puppet::FileSystem.read(fact_file, :encoding => 'utf-8'))
490
515
  end
@@ -35,4 +35,53 @@ Puppet::Indirector::Face.define(:facts, '0.0.1') do
35
35
 
36
36
  deactivate_action(:destroy)
37
37
  deactivate_action(:search)
38
+
39
+ action(:upload) do
40
+ summary _("Upload local facts to the puppet master.")
41
+ description <<-'EOT'
42
+ Reads facts from the local system using the `facter` terminus, then
43
+ saves the returned facts using the rest terminus.
44
+ EOT
45
+ returns "Nothing."
46
+ notes <<-'EOT'
47
+ This action requires that the puppet master's `auth.conf` file
48
+ allow `PUT` or `save` access to the `/puppet/v3/facts` API endpoint.
49
+
50
+ For details on configuring Puppet Server's `auth.conf`, see:
51
+
52
+ <https://puppet.com/docs/puppetserver/latest/config_file_auth.html>
53
+
54
+ For legacy Rack-based Puppet Masters, see:
55
+
56
+ <https://puppet.com/docs/puppet/latest/config_file_auth.html>
57
+ EOT
58
+ examples <<-'EOT'
59
+ Upload facts:
60
+
61
+ $ puppet facts upload
62
+ EOT
63
+
64
+ render_as :json
65
+
66
+ when_invoked do |options|
67
+ # Use `agent` sections settings for certificates, Puppet Server URL,
68
+ # etc. instead of `user` section settings.
69
+ Puppet.settings.preferred_run_mode = :agent
70
+ Puppet::Node::Facts.indirection.terminus_class = :facter
71
+
72
+ facts = Puppet::Node::Facts.indirection.find(Puppet[:node_name_value])
73
+ unless Puppet[:node_name_fact].empty?
74
+ Puppet[:node_name_value] = facts.values[Puppet[:node_name_fact]]
75
+ facts.name = Puppet[:node_name_value]
76
+ end
77
+
78
+ Puppet::Node::Facts.indirection.terminus_class = :rest
79
+ server = Puppet::Node::Facts::Rest.server
80
+ Puppet.notice(_("Uploading facts for '%{node}' to: '%{server}'") % {
81
+ node: Puppet[:node_name_value],
82
+ server: server})
83
+
84
+ Puppet::Node::Facts.indirection.save(facts)
85
+ end
86
+ end
38
87
  end
@@ -26,47 +26,33 @@ Puppet::Face.define(:help, '0.0.1') do
26
26
 
27
27
  default
28
28
  when_invoked do |*args|
29
- # Check our invocation, because we want varargs and can't do defaults
30
- # yet. REVISIT: when we do option defaults, and positional options, we
31
- # should rewrite this to use those. --daniel 2011-04-04
32
29
  options = args.pop
33
- if options.nil? or args.length > 2 then
34
- if args.select { |x| x == 'help' }.length > 2 then
35
- c = "\n %'(),-./=ADEFHILORSTUXY\\_`gnv|".split('')
36
- i = <<-'EOT'.gsub(/\s*/, '').to_i(36)
37
- 3he6737w1aghshs6nwrivl8mz5mu9nywg9tbtlt081uv6fq5kvxse1td3tj1wvccmte806nb
38
- cy6de2ogw0fqjymbfwi6a304vd56vlq71atwmqsvz3gpu0hj42200otlycweufh0hylu79t3
39
- gmrijm6pgn26ic575qkexyuoncbujv0vcscgzh5us2swklsp5cqnuanlrbnget7rt3956kam
40
- j8adhdrzqqt9bor0cv2fqgkloref0ygk3dekiwfj1zxrt13moyhn217yy6w4shwyywik7w0l
41
- xtuevmh0m7xp6eoswin70khm5nrggkui6z8vdjnrgdqeojq40fya5qexk97g4d8qgw0hvokr
42
- pli1biaz503grqf2ycy0ppkhz1hwhl6ifbpet7xd6jjepq4oe0ofl575lxdzjeg25217zyl4
43
- nokn6tj5pq7gcdsjre75rqylydh7iia7s3yrko4f5ud9v8hdtqhu60stcitirvfj6zphppmx
44
- 7wfm7i9641d00bhs44n6vh6qvx39pg3urifgr6ihx3e0j1ychzypunyou7iplevitkyg6gbg
45
- wm08oy1rvogcjakkqc1f7y1awdfvlb4ego8wrtgu9vzw4vmj59utwifn2ejcs569dh1oaavi
46
- sc581n7jjg1dugzdu094fdobtx6rsvk3sfctvqnr36xctold
47
- EOT
48
- 353.times{i,x=i.divmod(1184);a,b=x.divmod(37);print(c[a]*b)}
49
- end
50
- raise ArgumentError, _("Puppet help only takes two (optional) arguments: a subcommand and an action")
30
+
31
+ if default_case?(args) || help_for_help?(args)
32
+ return erb('global.erb').result(binding)
33
+ end
34
+
35
+ if args.length > 2
36
+ #TRANSLATORS 'puppet help' is a command line and should not be translated
37
+ raise ArgumentError, _("The 'puppet help' command takes two (optional) arguments: a subcommand and an action")
51
38
  end
52
39
 
53
40
  version = :current
54
- if options.has_key? :version then
55
- if options[:version].to_s !~ /^current$/i then
41
+ if options.has_key? :version
42
+ if options[:version].to_s !~ /^current$/i
56
43
  version = options[:version]
57
44
  else
58
- if args.length == 0 then
59
- raise ArgumentError, _("Version only makes sense when a Faces subcommand is given")
45
+ if args.length == 0
46
+ #TRANSLATORS '--version' is a command line option and should not be translated
47
+ raise ArgumentError, _("Supplying a '--version' only makes sense when a Faces subcommand is given")
60
48
  end
61
49
  end
62
50
  end
63
51
 
64
- return erb('global.erb').result(binding) if args.empty?
65
-
66
52
  facename, actionname = args
67
- if legacy_applications.include? facename then
68
- if actionname then
69
- raise ArgumentError, _("Legacy subcommands don't take actions")
53
+ if legacy_applications.include? facename
54
+ if actionname
55
+ raise ArgumentError, _("The legacy subcommand '%{sub_command}' does not support supplying an action") % { sub_command: facename }
70
56
  end
71
57
  return render_application_help(facename)
72
58
  else
@@ -75,6 +61,14 @@ Puppet::Face.define(:help, '0.0.1') do
75
61
  end
76
62
  end
77
63
 
64
+ def default_case?(args)
65
+ args.empty?
66
+ end
67
+
68
+ def help_for_help?(args)
69
+ args.length == 1 && args.first == 'help'
70
+ end
71
+
78
72
  def render_application_help(applicationname)
79
73
  return Puppet::Application[applicationname].help
80
74
  rescue StandardError, LoadError => detail
@@ -102,7 +96,7 @@ Puppet::Face.define(:help, '0.0.1') do
102
96
  face = Puppet::Face[facename.to_sym, version]
103
97
  if actionname
104
98
  action = face.get_action(actionname.to_sym)
105
- if not action
99
+ if ! action
106
100
  fail ArgumentError, _("Unable to load action %{actionname} from %{face}") % { actionname: actionname, face: face }
107
101
  end
108
102
  end
@@ -145,10 +139,12 @@ Puppet::Face.define(:help, '0.0.1') do
145
139
  begin
146
140
  face = Puppet::Face[appname, :current]
147
141
  # Add deprecation message to summary if the face is deprecated
148
- summary = face.deprecated? ? face.summary + _(" (Deprecated)") : face.summary
142
+ summary = face.deprecated? ? face.summary + ' ' + _("(Deprecated)") : face.summary
149
143
  result << [appname, summary]
150
144
  rescue StandardError, LoadError
151
- result << [ "! #{appname}", _("! Subcommand unavailable due to error. Check error logs.") ]
145
+ error_message = _("!%{sub_command}! Subcommand unavailable due to error.") % { sub_command: appname }
146
+ error_message += ' ' + _("Check error logs.")
147
+ result << [ error_message ]
152
148
  end
153
149
  else
154
150
  begin
@@ -158,7 +154,9 @@ Puppet::Face.define(:help, '0.0.1') do
158
154
  end
159
155
  result << [appname, summary]
160
156
  rescue StandardError, LoadError
161
- result << ["! #{appname}", _("! Subcommand unavailable due to error. Check error logs.")]
157
+ error_message = _("!%{sub_command}! Subcommand unavailable due to error.") % { sub_command: appname }
158
+ error_message += ' ' + _("Check error logs.")
159
+ result << [ error_message ]
162
160
  end
163
161
  end
164
162
  end
@@ -171,7 +169,7 @@ Puppet::Face.define(:help, '0.0.1') do
171
169
  # formatted. If we can't match the pattern we expect we return the empty
172
170
  # string to ensure we don't blow up in the summary. --daniel 2011-04-11
173
171
  while line = help.shift do
174
- if md = /^puppet-#{appname}\([^\)]+\) -- (.*)$/.match(line) then
172
+ if md = /^puppet-#{appname}\([^\)]+\) -- (.*)$/.match(line)
175
173
  return md[1]
176
174
  end
177
175
  end