puppet 5.4.0 → 5.5.0

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 +71 -11
  441. checksums.yaml +0 -7
@@ -179,7 +179,8 @@ class Factory
179
179
  end
180
180
 
181
181
  def build_ConcatenatedString(o, args)
182
- @init_hash['segments'] = args
182
+ # Strip empty segments
183
+ @init_hash['segments'] = args.reject { |arg| arg.model_class == LiteralString && arg['value'].empty? }
183
184
  end
184
185
 
185
186
  def build_HeredocExpression(o, name, expr)
@@ -452,10 +453,12 @@ class Factory
452
453
  #
453
454
  parent = type_expr['key']
454
455
  hash = type_expr['value']
455
- unless parent['cased_value'] == 'Object'
456
+ pn = parent['cased_value']
457
+ unless pn == 'Object' || pn == 'TypeSet'
456
458
  hash['entries'] << Factory.KEY_ENTRY(Factory.QNAME('parent'), parent)
459
+ parent = Factory.QREF('Object')
457
460
  end
458
- type_expr = Factory.QREF('Object').access([hash])
461
+ type_expr = parent.access([hash])
459
462
  elsif type_expr.model_class <= LiteralHash
460
463
  # LiteralHash is used for the form:
461
464
  #
@@ -28,6 +28,10 @@ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
28
28
  o.value.to_s
29
29
  end
30
30
 
31
+ def dump_QualifiedReference o
32
+ o.cased_value.to_s
33
+ end
34
+
31
35
  def dump_Factory o
32
36
  o['locator'] ||= Puppet::Pops::Parser::Locator.locator("<not from source>", nil)
33
37
  do_dump(o.model)
@@ -0,0 +1,400 @@
1
+ module Puppet::Pops
2
+ module Model
3
+
4
+
5
+ class PNTransformer
6
+ def self.visitor
7
+ @visitor ||= Visitor.new(nil, 'transform', 0, 0)
8
+ end
9
+
10
+ def self.singleton
11
+ @singleton ||= new(visitor)
12
+ end
13
+
14
+ def self.transform(ast)
15
+ singleton.transform(ast)
16
+ end
17
+
18
+ def initialize(visitor)
19
+ @visitor = visitor
20
+ end
21
+
22
+ def transform(ast)
23
+ @visitor.visit_this_0(self, ast)
24
+ end
25
+
26
+ def transform_AccessExpression(e)
27
+ PN::List.new([transform(e.left_expr)] + pn_array(e.keys)).as_call('access')
28
+ end
29
+
30
+ def transform_AndExpression(e)
31
+ binary_op(e, 'and')
32
+ end
33
+
34
+ def transform_Application(e)
35
+ definition_to_pn(e, 'application')
36
+ end
37
+
38
+ def transform_ArithmeticExpression(e)
39
+ binary_op(e, e.operator)
40
+ end
41
+
42
+ def transform_Array(a)
43
+ PN::List.new(pn_array(a))
44
+ end
45
+
46
+ def transform_AssignmentExpression(e)
47
+ binary_op(e, e.operator)
48
+ end
49
+
50
+ def transform_AttributeOperation(e)
51
+ PN::Call.new(e.operator, PN::Literal.new(e.attribute_name), transform(e.value_expr))
52
+ end
53
+
54
+ def transform_AttributesOperation(e)
55
+ PN::Call.new('splat-hash', transform(e.expr))
56
+ end
57
+
58
+ def transform_BlockExpression(e)
59
+ transform(e.statements).as_call('block')
60
+ end
61
+
62
+ def transform_CallFunctionExpression(e)
63
+ call_to_pn(e, 'call-lambda', 'invoke-lambda')
64
+ end
65
+
66
+ def transform_CallMethodExpression(e)
67
+ call_to_pn(e, 'call-method', 'invoke-method')
68
+ end
69
+
70
+ def transform_CallNamedFunctionExpression(e)
71
+ call_to_pn(e, 'call', 'invoke')
72
+ end
73
+
74
+ def transform_CapabilityMapping(e)
75
+ PN::Call.new(e.kind, transform(e.component), PN::List.new([PN::Literal.new(e.capability)] + pn_array(e.mappings)))
76
+ end
77
+
78
+ def transform_CaseExpression(e)
79
+ PN::Call.new('case', transform(e.test), transform(e.options))
80
+ end
81
+
82
+ def transform_CaseOption(e)
83
+ PN::Map.new([transform(e.values).with_name('when'), block_as_entry('then', e.then_expr)])
84
+ end
85
+
86
+ def transform_CollectExpression(e)
87
+ entries = [transform(e.type_expr).with_name('type'), transform(e.query).with_name('query')]
88
+ entries << transform(e.operations).with_name('ops') unless e.operations.empty?
89
+ PN::Map.new(entries).as_call('collect')
90
+ end
91
+
92
+ def transform_ComparisonExpression(e)
93
+ binary_op(e, e.operator)
94
+ end
95
+
96
+ def transform_ConcatenatedString(e)
97
+ transform(e.segments).as_call('concat')
98
+ end
99
+
100
+ def transform_EppExpression(e)
101
+ e.body.nil? ? PN::Call.new('epp') : transform(e.body).as_call('epp')
102
+ end
103
+
104
+ def transform_ExportedQuery(e)
105
+ is_nop?(e.expr) ? PN::Call.new('exported-query') : PN::Call.new('exported-query', transform(e.expr))
106
+ end
107
+
108
+ def transform_Factory(e)
109
+ transform(e.model)
110
+ end
111
+
112
+ def transform_FunctionDefinition(e)
113
+ definition_to_pn(e, 'function', nil, e.return_type)
114
+ end
115
+
116
+ def transform_HeredocExpression(e)
117
+ entries = []
118
+ entries << PN::Literal.new(e.syntax).with_name('syntax') unless e.syntax == ''
119
+ entries << transform(e.text_expr).with_name('text')
120
+ PN::Map.new(entries).as_call('heredoc')
121
+ end
122
+
123
+ def transform_HostClassDefinition(e)
124
+ definition_to_pn(e, 'class', e.parent_class)
125
+ end
126
+
127
+ def transform_IfExpression(e)
128
+ if_to_pn(e, 'if')
129
+ end
130
+
131
+ def transform_InExpression(e)
132
+ binary_op(e, 'in')
133
+ end
134
+
135
+ def transform_KeyedEntry(e)
136
+ PN::Call.new('=>', transform(e.key), transform(e.value))
137
+ end
138
+
139
+ def transform_LambdaExpression(e)
140
+ entries = []
141
+ entries << parameters_entry(e.parameters) unless e.parameters.empty?
142
+ entries << transform(e.return_type).with_name('returns') unless e.return_type.nil?
143
+ entries << block_as_entry('body', e.body) unless e.body.nil?
144
+ PN::Map.new(entries).as_call('lambda')
145
+ end
146
+
147
+ def transform_LiteralBoolean(e)
148
+ PN::Literal.new(e.value)
149
+ end
150
+
151
+ def transform_LiteralDefault(_)
152
+ PN::Call.new('default')
153
+ end
154
+
155
+ def transform_LiteralFloat(e)
156
+ PN::Literal.new(e.value)
157
+ end
158
+
159
+ def transform_LiteralHash(e)
160
+ transform(e.entries).as_call('hash')
161
+ end
162
+
163
+ def transform_LiteralInteger(e)
164
+ vl = PN::Literal.new(e.value)
165
+ e.radix == 10 ? vl : PN::Map.new([PN::Literal.new(e.radix).with_name('radix'), vl.with_name('value')]).as_call('int')
166
+ end
167
+
168
+ def transform_LiteralList(e)
169
+ transform(e.values).as_call('array')
170
+ end
171
+
172
+ def transform_LiteralRegularExpression(e)
173
+ PN::Literal.new(Types::PRegexpType.regexp_to_s(e.value)).as_call('regexp')
174
+ end
175
+
176
+ def transform_LiteralString(e)
177
+ PN::Literal.new(e.value)
178
+ end
179
+
180
+ def transform_LiteralUndef(_)
181
+ PN::Literal.new(nil)
182
+ end
183
+
184
+ def transform_MatchExpression(e)
185
+ binary_op(e, e.operator)
186
+ end
187
+
188
+ def transform_NamedAccessExpression(e)
189
+ binary_op(e, '.')
190
+ end
191
+
192
+ def transform_NodeDefinition(e)
193
+ entries = [transform(e.host_matches).with_name('matches')]
194
+ entries << transform(e.parent).with_name('parent') unless e.parent.nil?
195
+ entries << block_as_entry('body', e.body) unless e.body.nil?
196
+ PN::Map.new(entries).as_call('node')
197
+ end
198
+
199
+ def transform_Nop(_)
200
+ PN::Call.new('nop')
201
+ end
202
+
203
+ def transform_NotExpression(e)
204
+ PN::Call.new('!', transform(e.expr))
205
+ end
206
+
207
+ def transform_OrExpression(e)
208
+ binary_op(e, 'or')
209
+ end
210
+
211
+ def transform_Parameter(e)
212
+ entries = [PN::Literal.new(e.name).with_name('name')]
213
+ entries << transform(e.type_expr).with_name('type') unless e.type_expr.nil?
214
+ entries << PN::Literal.new(true).with_name('splat') if e.captures_rest
215
+ entries << transform(e.value).with_name('value') unless e.value.nil?
216
+ PN::Map.new(entries).with_name('param')
217
+ end
218
+
219
+ def transform_ParenthesizedExpression(e)
220
+ PN::Call.new('paren', transform(e.expr))
221
+ end
222
+
223
+ def transform_PlanDefinition(e)
224
+ definition_to_pn(e, 'plan', nil, e.return_type)
225
+ end
226
+
227
+ def transform_Program(e)
228
+ transform(e.body)
229
+ end
230
+
231
+ def transform_QualifiedName(e)
232
+ PN::Call.new('qn', PN::Literal.new(e.value))
233
+ end
234
+
235
+ def transform_QualifiedReference(e)
236
+ PN::Call.new('qr', PN::Literal.new(e.cased_value))
237
+ end
238
+
239
+ def transform_RelationshipExpression(e)
240
+ binary_op(e, e.operator)
241
+ end
242
+
243
+ def transform_RenderExpression(e)
244
+ PN::Call.new('render', transform(e.expr))
245
+ end
246
+
247
+ def transform_RenderStringExpression(e)
248
+ PN::Literal.new(e.value).as_call('render-s')
249
+ end
250
+
251
+ def transform_ReservedWord(e)
252
+ PN::Literal.new(e.word).as_call('reserved')
253
+ end
254
+
255
+ def transform_ResourceBody(e)
256
+ PN::Map.new([
257
+ transform(e.title).with_name('title'),
258
+ transform(e.operations).with_name('ops')
259
+ ]).as_call('resource_body')
260
+ end
261
+
262
+ def transform_ResourceDefaultsExpression(e)
263
+ entries = [transform(e.type_ref).with_name('type'), transform(e.operations).with_name('ops')]
264
+ entries << PN::Literal.new(e.form).with_name('form') unless e.form == 'regular'
265
+ PN::Map.new(entries).as_call('resource-defaults')
266
+ end
267
+
268
+ def transform_ResourceExpression(e)
269
+ entries = [
270
+ transform(e.type_name).with_name('type'),
271
+ PN::List.new(pn_array(e.bodies).map { |body| body[0] }).with_name('bodies')
272
+ ]
273
+ entries << PN::Literal.new(e.form).with_name('form') unless e.form == 'regular'
274
+ PN::Map.new(entries).as_call('resource')
275
+ end
276
+
277
+ def transform_ResourceOverrideExpression(e)
278
+ entries = [transform(e.resources).with_name('resources'), transform(e.operations).with_name('ops')]
279
+ entries << PN::Literal.new(e.form).with_name('form') unless e.form == 'regular'
280
+ PN::Map.new(entries).as_call('resource-override')
281
+ end
282
+
283
+ def transform_ResourceTypeDefinition(e)
284
+ definition_to_pn(e, 'define')
285
+ end
286
+
287
+ def transform_SelectorEntry(e)
288
+ PN::Call.new('=>', transform(e.matching_expr), transform(e.value_expr))
289
+ end
290
+
291
+ def transform_SelectorExpression(e)
292
+ PN::Call.new('?', transform(e.left_expr), transform(e.selectors))
293
+ end
294
+
295
+ def transform_SiteDefinition(e)
296
+ transform(e.body).as_call('site')
297
+ end
298
+
299
+ def transform_SubLocatedExpression(e)
300
+ transform(e.expr)
301
+ end
302
+
303
+ def transform_TextExpression(e)
304
+ PN::Call.new('str', transform(e.expr))
305
+ end
306
+
307
+ def transform_TypeAlias(e)
308
+ PN::Call.new('type-alias', PN::Literal.new(e.name), transform(e.type_expr))
309
+ end
310
+
311
+ def transform_TypeDefinition(e)
312
+ PN::Call.new('type-definition', PN::Literal.new(e.name), PN::Literal.new(e.parent), transform(e.body))
313
+ end
314
+
315
+ def transform_TypeMapping(e)
316
+ PN::Call.new('type-mapping', transform(e.type_expr), transform(e.mapping_expr))
317
+ end
318
+
319
+ def transform_UnaryMinusExpression(e)
320
+ if e.expr.is_a?(LiteralValue)
321
+ v = e.expr.value
322
+ if v.is_a?(Numeric)
323
+ return PN::Literal.new(-v)
324
+ end
325
+ end
326
+ PN::Call.new('-', transform(e.expr))
327
+ end
328
+
329
+ def transform_UnfoldExpression(e)
330
+ PN::Call.new('unfold', transform(e.expr))
331
+ end
332
+
333
+ def transform_UnlessExpression(e)
334
+ if_to_pn(e, 'unless')
335
+ end
336
+
337
+ def transform_VariableExpression(e)
338
+ ne = e.expr
339
+ PN::Call.new('var', ne.is_a?(Model::QualifiedName) ? PN::Literal.new(ne.value) : transform(ne))
340
+ end
341
+
342
+ def transform_VirtualQuery(e)
343
+ is_nop?(e.expr) ? PN::Call.new('virtual-query') : PN::Call.new('virtual-query', transform(e.expr))
344
+ end
345
+
346
+ def is_nop?(e)
347
+ e.nil? || e.is_a?(Nop)
348
+ end
349
+
350
+ def binary_op(e, op)
351
+ PN::Call.new(op, transform(e.left_expr), transform(e.right_expr))
352
+ end
353
+
354
+ def definition_to_pn(e, type_name, parent = nil, return_type = nil)
355
+ entries = [PN::Literal.new(e.name).with_name('name')]
356
+ entries << PN::Literal.new(parent).with_name('parent') unless parent.nil?
357
+ entries << parameters_entry(e.parameters) unless e.parameters.empty?
358
+ entries << block_as_entry('body', e.body) unless e.body.nil?
359
+ entries << transform(return_type).with_name('returns') unless return_type.nil?
360
+ PN::Map.new(entries).as_call(type_name)
361
+ end
362
+
363
+ def parameters_entry(parameters)
364
+ PN::Map.new(parameters.map do |p|
365
+ entries = []
366
+ entries << transform(p.type_expr).with_name('type') unless p.type_expr.nil?
367
+ entries << PN::Literal(true).with_name('splat') if p.captures_rest
368
+ entries << transform(p.value).with_name('value') unless p.value.nil?
369
+ PN::Map.new(entries).with_name(p.name)
370
+ end).with_name('params')
371
+ end
372
+
373
+ def block_as_entry(name, expr)
374
+ if expr.is_a?(BlockExpression)
375
+ transform(expr.statements).with_name(name)
376
+ else
377
+ transform([expr]).with_name(name)
378
+ end
379
+ end
380
+
381
+ def pn_array(a)
382
+ a.map { |e| transform(e) }
383
+ end
384
+
385
+ def call_to_pn(e, r, nr)
386
+ entries = [transform(e.functor_expr).with_name('functor'), transform(e.arguments).with_name('args')]
387
+ entries << transform(e.lambda).with_name('block') unless e.lambda.nil?
388
+ PN::Map.new(entries).as_call(e.rval_required ? r : nr)
389
+ end
390
+
391
+ def if_to_pn(e, name)
392
+ entries = [transform(e.test).with_name('test')]
393
+ entries << block_as_entry('then', e.then_expr) unless is_nop?(e.then_expr)
394
+ entries << block_as_entry('else', e.else_expr) unless is_nop?(e.else_expr)
395
+ PN::Map.new(entries).as_call(name)
396
+ end
397
+ end
398
+
399
+ end
400
+ end
@@ -530,7 +530,7 @@ application_expression
530
530
  capability_mapping
531
531
  : classname capability_kw classname LBRACE attribute_operations endcomma RBRACE {
532
532
  result = Factory.CAPABILITY_MAPPING(val[1][:value],
533
- Factory.QNAME(classname(val[0][:value])),
533
+ Factory.QREF(classname(val[0][:value])),
534
534
  classname(val[2][:value]), val[4])
535
535
  loc result, val[0], val[6]
536
536
  add_mapping(result)
@@ -2543,7 +2543,7 @@ module_eval(<<'.,.,', 'egrammar.ra', 524)
2543
2543
  module_eval(<<'.,.,', 'egrammar.ra', 531)
2544
2544
  def _reduce_154(val, _values, result)
2545
2545
  result = Factory.CAPABILITY_MAPPING(val[1][:value],
2546
- Factory.QNAME(classname(val[0][:value])),
2546
+ Factory.QREF(classname(val[0][:value])),
2547
2547
  classname(val[2][:value]), val[4])
2548
2548
  loc result, val[0], val[6]
2549
2549
  add_mapping(result)