puppet 3.4.3 → 3.5.0.rc1

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 (811) hide show
  1. data/CONTRIBUTING.md +6 -6
  2. data/Gemfile +22 -16
  3. data/LICENSE +1 -1
  4. data/README.md +33 -11
  5. data/Rakefile +1 -1
  6. data/conf/auth.conf +4 -0
  7. data/ext/build_defaults.yaml +1 -1
  8. data/ext/debian/control +6 -6
  9. data/ext/ips/transforms +1 -1
  10. data/ext/nagios/naggen +1 -1
  11. data/ext/project_data.yaml +21 -1
  12. data/ext/puppet-test +3 -3
  13. data/ext/redhat/puppet.spec.erb +28 -2
  14. data/ext/suse/puppet.spec +1 -1
  15. data/ext/upload_facts.rb +1 -1
  16. data/ext/windows/service/daemon.rb +99 -20
  17. data/lib/hiera_puppet.rb +2 -2
  18. data/lib/puppet.rb +68 -5
  19. data/lib/puppet/agent.rb +5 -1
  20. data/lib/puppet/application.rb +20 -11
  21. data/lib/puppet/application/agent.rb +1 -1
  22. data/lib/puppet/application/apply.rb +61 -41
  23. data/lib/puppet/application/cert.rb +3 -3
  24. data/lib/puppet/application/device.rb +7 -8
  25. data/lib/puppet/application/doc.rb +1 -1
  26. data/lib/puppet/application/filebucket.rb +3 -3
  27. data/lib/puppet/application/kick.rb +2 -2
  28. data/lib/puppet/application/master.rb +1 -1
  29. data/lib/puppet/application/queue.rb +9 -9
  30. data/lib/puppet/application/resource.rb +2 -2
  31. data/lib/puppet/bindings.rb +6 -6
  32. data/lib/puppet/configurer.rb +17 -14
  33. data/lib/puppet/configurer/fact_handler.rb +1 -1
  34. data/lib/puppet/confine/any.rb +26 -0
  35. data/lib/puppet/confine/exists.rb +1 -1
  36. data/lib/puppet/confiner.rb +1 -0
  37. data/lib/puppet/context.rb +55 -0
  38. data/lib/puppet/context/trusted_information.rb +56 -0
  39. data/lib/puppet/defaults.rb +97 -26
  40. data/lib/puppet/environments.rb +187 -0
  41. data/lib/puppet/error.rb +2 -1
  42. data/lib/puppet/external/pson/common.rb +1 -1
  43. data/lib/puppet/external/pson/pure/generator.rb +1 -1
  44. data/lib/puppet/external/pson/pure/parser.rb +1 -1
  45. data/lib/puppet/face/config.rb +73 -15
  46. data/lib/puppet/face/file/store.rb +1 -1
  47. data/lib/puppet/face/help.rb +2 -1
  48. data/lib/puppet/face/help/action.erb +1 -0
  49. data/lib/puppet/face/help/face.erb +1 -0
  50. data/lib/puppet/face/help/global.erb +1 -0
  51. data/lib/puppet/face/help/man.erb +9 -8
  52. data/lib/puppet/face/module/list.rb +13 -7
  53. data/lib/puppet/face/node/clean.rb +2 -2
  54. data/lib/puppet/face/parser.rb +11 -5
  55. data/lib/puppet/face/status.rb +1 -1
  56. data/lib/puppet/feature/external_facts.rb +2 -2
  57. data/lib/puppet/feature/libuser.rb +1 -1
  58. data/lib/puppet/feature/msgpack.rb +2 -0
  59. data/lib/puppet/feature/rails.rb +2 -2
  60. data/lib/puppet/file_bucket/dipper.rb +9 -9
  61. data/lib/puppet/file_bucket/file.rb +9 -5
  62. data/lib/puppet/file_serving/base.rb +1 -1
  63. data/lib/puppet/file_serving/configuration.rb +1 -1
  64. data/lib/puppet/file_serving/configuration/parser.rb +3 -3
  65. data/lib/puppet/file_serving/content.rb +2 -2
  66. data/lib/puppet/file_serving/fileset.rb +4 -4
  67. data/lib/puppet/file_serving/metadata.rb +69 -15
  68. data/lib/puppet/file_serving/mount/file.rb +1 -1
  69. data/lib/puppet/file_system.rb +361 -1
  70. data/lib/puppet/file_system/file18.rb +3 -3
  71. data/lib/puppet/file_system/file19.rb +3 -3
  72. data/lib/puppet/file_system/file19windows.rb +18 -23
  73. data/lib/puppet/file_system/file_impl.rb +145 -0
  74. data/lib/puppet/file_system/memory_file.rb +23 -9
  75. data/lib/puppet/file_system/memory_impl.rb +64 -0
  76. data/lib/puppet/forge.rb +4 -3
  77. data/lib/puppet/forge/repository.rb +0 -1
  78. data/lib/puppet/graph/relationship_graph.rb +7 -7
  79. data/lib/puppet/indirector.rb +1 -0
  80. data/lib/puppet/indirector/catalog/compiler.rb +3 -30
  81. data/lib/puppet/indirector/catalog/msgpack.rb +6 -0
  82. data/lib/puppet/indirector/catalog/static_compiler.rb +3 -7
  83. data/lib/puppet/indirector/data_binding/hiera.rb +1 -1
  84. data/lib/puppet/indirector/direct_file_server.rb +2 -2
  85. data/lib/puppet/indirector/exec.rb +1 -1
  86. data/lib/puppet/indirector/face.rb +3 -2
  87. data/lib/puppet/indirector/facts/facter.rb +1 -1
  88. data/lib/puppet/indirector/file_bucket_file/file.rb +25 -15
  89. data/lib/puppet/indirector/file_metadata/file.rb +1 -1
  90. data/lib/puppet/indirector/file_server.rb +1 -1
  91. data/lib/puppet/indirector/indirection.rb +1 -1
  92. data/lib/puppet/indirector/json.rb +4 -4
  93. data/lib/puppet/indirector/key/file.rb +8 -5
  94. data/lib/puppet/indirector/ldap.rb +1 -1
  95. data/lib/puppet/indirector/memory.rb +4 -0
  96. data/lib/puppet/indirector/msgpack.rb +82 -0
  97. data/lib/puppet/indirector/node/exec.rb +1 -1
  98. data/lib/puppet/indirector/node/ldap.rb +3 -3
  99. data/lib/puppet/indirector/node/msgpack.rb +7 -0
  100. data/lib/puppet/indirector/node/yaml.rb +15 -0
  101. data/lib/puppet/indirector/queue.rb +3 -2
  102. data/lib/puppet/indirector/report/msgpack.rb +11 -0
  103. data/lib/puppet/indirector/request.rb +17 -20
  104. data/lib/puppet/indirector/resource/rest.rb +1 -1
  105. data/lib/puppet/indirector/resource_type/parser.rb +3 -13
  106. data/lib/puppet/indirector/rest.rb +6 -7
  107. data/lib/puppet/indirector/ssl_file.rb +7 -7
  108. data/lib/puppet/indirector/yaml.rb +9 -13
  109. data/lib/puppet/metatype/manager.rb +12 -7
  110. data/lib/puppet/module.rb +14 -9
  111. data/lib/puppet/module_tool.rb +21 -26
  112. data/lib/puppet/module_tool/applications/application.rb +1 -1
  113. data/lib/puppet/module_tool/applications/generator.rb +2 -1
  114. data/lib/puppet/module_tool/applications/installer.rb +9 -4
  115. data/lib/puppet/module_tool/applications/uninstaller.rb +10 -7
  116. data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
  117. data/lib/puppet/module_tool/applications/upgrader.rb +11 -8
  118. data/lib/puppet/module_tool/checksums.rb +1 -1
  119. data/lib/puppet/module_tool/contents_description.rb +2 -0
  120. data/lib/puppet/module_tool/dependency.rb +4 -5
  121. data/lib/puppet/module_tool/errors.rb +2 -0
  122. data/lib/puppet/module_tool/install_directory.rb +3 -0
  123. data/lib/puppet/module_tool/metadata.rb +3 -5
  124. data/lib/puppet/module_tool/modulefile.rb +3 -0
  125. data/lib/puppet/module_tool/shared_behaviors.rb +6 -1
  126. data/lib/puppet/module_tool/skeleton.rb +3 -0
  127. data/lib/puppet/module_tool/tar.rb +3 -0
  128. data/lib/puppet/network/auth_config_parser.rb +1 -1
  129. data/lib/puppet/network/authconfig.rb +5 -2
  130. data/lib/puppet/network/authentication.rb +7 -2
  131. data/lib/puppet/network/authorization.rb +2 -2
  132. data/lib/puppet/network/format_support.rb +4 -0
  133. data/lib/puppet/network/formats.rb +9 -14
  134. data/lib/puppet/network/http.rb +11 -0
  135. data/lib/puppet/network/http/api.rb +0 -2
  136. data/lib/puppet/network/http/api/v1.rb +146 -11
  137. data/lib/puppet/network/http/api/v2.rb +32 -0
  138. data/lib/puppet/network/http/api/v2/authorization.rb +13 -0
  139. data/lib/puppet/network/http/api/v2/environments.rb +21 -0
  140. data/lib/puppet/network/http/connection.rb +94 -37
  141. data/lib/puppet/network/http/error.rb +69 -0
  142. data/lib/puppet/network/http/handler.rb +28 -196
  143. data/lib/puppet/network/http/issues.rb +9 -0
  144. data/lib/puppet/network/http/memory_response.rb +13 -0
  145. data/lib/puppet/network/http/rack/rest.rb +10 -18
  146. data/lib/puppet/network/http/request.rb +56 -0
  147. data/lib/puppet/network/http/response.rb +11 -0
  148. data/lib/puppet/network/http/route.rb +91 -0
  149. data/lib/puppet/network/http/webrick.rb +1 -1
  150. data/lib/puppet/network/http/webrick/rest.rb +7 -12
  151. data/lib/puppet/network/http_pool.rb +3 -3
  152. data/lib/puppet/network/rights.rb +4 -4
  153. data/lib/puppet/node.rb +23 -14
  154. data/lib/puppet/node/environment.rb +149 -125
  155. data/lib/puppet/node/facts.rb +6 -5
  156. data/lib/puppet/parameter.rb +1 -1
  157. data/lib/puppet/parser/ast.rb +1 -1
  158. data/lib/puppet/parser/ast/block_expression.rb +1 -6
  159. data/lib/puppet/parser/ast/collexpr.rb +54 -2
  160. data/lib/puppet/parser/ast/lambda.rb +9 -0
  161. data/lib/puppet/parser/ast/leaf.rb +15 -0
  162. data/lib/puppet/parser/ast/pops_bridge.rb +168 -0
  163. data/lib/puppet/parser/code_merger.rb +13 -0
  164. data/lib/puppet/parser/collector.rb +1 -1
  165. data/lib/puppet/parser/compiler.rb +28 -30
  166. data/lib/puppet/parser/e4_parser_adapter.rb +81 -0
  167. data/lib/puppet/parser/e_parser_adapter.rb +0 -1
  168. data/lib/puppet/parser/files.rb +12 -7
  169. data/lib/puppet/parser/functions.rb +36 -29
  170. data/lib/puppet/parser/functions/collect.rb +1 -1
  171. data/lib/puppet/parser/functions/defined.rb +40 -16
  172. data/lib/puppet/parser/functions/each.rb +55 -41
  173. data/lib/puppet/parser/functions/epp.rb +41 -0
  174. data/lib/puppet/parser/functions/extlookup.rb +2 -2
  175. data/lib/puppet/parser/functions/file.rb +1 -1
  176. data/lib/puppet/parser/functions/filter.rb +68 -16
  177. data/lib/puppet/parser/functions/generate.rb +1 -1
  178. data/lib/puppet/parser/functions/include.rb +3 -2
  179. data/lib/puppet/parser/functions/inline_epp.rb +79 -0
  180. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  181. data/lib/puppet/parser/functions/lookup.rb +127 -27
  182. data/lib/puppet/parser/functions/map.rb +64 -12
  183. data/lib/puppet/parser/functions/reduce.rb +40 -16
  184. data/lib/puppet/parser/functions/select.rb +1 -1
  185. data/lib/puppet/parser/functions/slice.rb +42 -23
  186. data/lib/puppet/parser/grammar.ra +3 -0
  187. data/lib/puppet/parser/lexer.rb +10 -9
  188. data/lib/puppet/parser/parser.rb +15 -12
  189. data/lib/puppet/parser/parser_factory.rb +26 -1
  190. data/lib/puppet/parser/parser_support.rb +13 -4
  191. data/lib/puppet/parser/resource.rb +1 -1
  192. data/lib/puppet/parser/scope.rb +246 -97
  193. data/lib/puppet/parser/templatewrapper.rb +1 -1
  194. data/lib/puppet/parser/type_loader.rb +13 -2
  195. data/lib/puppet/pops.rb +15 -1
  196. data/lib/puppet/pops/adapters.rb +64 -32
  197. data/lib/puppet/pops/binder/binder.rb +122 -150
  198. data/lib/puppet/pops/binder/binder_issues.rb +1 -21
  199. data/lib/puppet/pops/binder/bindings_checker.rb +0 -20
  200. data/lib/puppet/pops/binder/bindings_composer.rb +4 -70
  201. data/lib/puppet/pops/binder/bindings_factory.rb +16 -58
  202. data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -3
  203. data/lib/puppet/pops/binder/bindings_loader.rb +13 -4
  204. data/lib/puppet/pops/binder/bindings_model.rb +17 -31
  205. data/lib/puppet/pops/binder/bindings_model_dumper.rb +2 -20
  206. data/lib/puppet/pops/binder/config/binder_config.rb +8 -40
  207. data/lib/puppet/pops/binder/config/binder_config_checker.rb +2 -43
  208. data/lib/puppet/pops/binder/config/issues.rb +1 -21
  209. data/lib/puppet/pops/binder/injector.rb +86 -7
  210. data/lib/puppet/pops/binder/injector_entry.rb +6 -2
  211. data/lib/puppet/pops/binder/key_factory.rb +7 -1
  212. data/lib/puppet/pops/binder/lookup.rb +191 -0
  213. data/lib/puppet/pops/binder/producers.rb +5 -5
  214. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +2 -3
  215. data/lib/puppet/pops/binder/system_bindings.rb +4 -16
  216. data/lib/puppet/pops/containment.rb +72 -5
  217. data/lib/puppet/pops/evaluator/access_operator.rb +548 -0
  218. data/lib/puppet/pops/evaluator/closure.rb +57 -0
  219. data/lib/puppet/pops/evaluator/compare_operator.rb +168 -0
  220. data/lib/puppet/pops/evaluator/epp_evaluator.rb +87 -0
  221. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1069 -0
  222. data/lib/puppet/pops/evaluator/external_syntax_support.rb +49 -0
  223. data/lib/puppet/pops/evaluator/relationship_operator.rb +156 -0
  224. data/lib/puppet/pops/evaluator/runtime3_support.rb +489 -0
  225. data/lib/puppet/pops/issue_reporter.rb +8 -4
  226. data/lib/puppet/pops/issues.rb +199 -4
  227. data/lib/puppet/pops/label_provider.rb +5 -0
  228. data/lib/puppet/pops/model/ast_transformer.rb +55 -31
  229. data/lib/puppet/pops/model/ast_tree_dumper.rb +9 -1
  230. data/lib/puppet/pops/model/factory.rb +265 -111
  231. data/lib/puppet/pops/model/model.rb +179 -140
  232. data/lib/puppet/pops/model/model_label_provider.rb +38 -9
  233. data/lib/puppet/pops/model/model_tree_dumper.rb +38 -13
  234. data/lib/puppet/pops/parser/code_merger.rb +17 -0
  235. data/lib/puppet/pops/parser/egrammar.ra +110 -61
  236. data/lib/puppet/pops/parser/eparser.rb +1415 -1092
  237. data/lib/puppet/pops/parser/epp_parser.rb +51 -0
  238. data/lib/puppet/pops/parser/epp_support.rb +247 -0
  239. data/lib/puppet/pops/parser/evaluating_parser.rb +53 -15
  240. data/lib/puppet/pops/parser/heredoc_support.rb +139 -0
  241. data/lib/puppet/pops/parser/interpolation_support.rb +227 -0
  242. data/lib/puppet/pops/parser/lexer.rb +83 -192
  243. data/lib/puppet/pops/parser/lexer2.rb +684 -0
  244. data/lib/puppet/pops/parser/lexer_support.rb +107 -0
  245. data/lib/puppet/pops/parser/locatable.rb +23 -0
  246. data/lib/puppet/pops/parser/locator.rb +291 -0
  247. data/lib/puppet/pops/parser/makefile +1 -8
  248. data/lib/puppet/pops/parser/parser_support.rb +76 -48
  249. data/lib/puppet/pops/parser/slurp_support.rb +95 -0
  250. data/lib/puppet/pops/patterns.rb +13 -4
  251. data/lib/puppet/pops/types/class_loader.rb +2 -2
  252. data/lib/puppet/pops/types/enumeration.rb +34 -0
  253. data/lib/puppet/pops/types/type_calculator.rb +983 -58
  254. data/lib/puppet/pops/types/type_factory.rb +203 -15
  255. data/lib/puppet/pops/types/type_parser.rb +355 -12
  256. data/lib/puppet/pops/types/types.rb +314 -24
  257. data/lib/puppet/pops/utils.rb +23 -7
  258. data/lib/puppet/pops/validation.rb +14 -8
  259. data/lib/puppet/pops/validation/checker3_1.rb +17 -12
  260. data/lib/puppet/pops/validation/checker4_0.rb +514 -0
  261. data/lib/puppet/pops/validation/validator_factory_4_0.rb +31 -0
  262. data/lib/puppet/pops/visitor.rb +146 -4
  263. data/lib/puppet/property.rb +1 -1
  264. data/lib/puppet/property/ensure.rb +1 -1
  265. data/lib/puppet/provider.rb +47 -26
  266. data/lib/puppet/provider/aixobject.rb +3 -3
  267. data/lib/puppet/provider/augeas/augeas.rb +11 -11
  268. data/lib/puppet/provider/cron/crontab.rb +10 -1
  269. data/lib/puppet/provider/exec.rb +1 -1
  270. data/lib/puppet/provider/exec/posix.rb +1 -1
  271. data/lib/puppet/provider/exec/windows.rb +1 -1
  272. data/lib/puppet/provider/file/posix.rb +2 -2
  273. data/lib/puppet/provider/file/windows.rb +15 -9
  274. data/lib/puppet/provider/group/aix.rb +2 -2
  275. data/lib/puppet/provider/macauthorization/macauthorization.rb +3 -3
  276. data/lib/puppet/provider/mount.rb +7 -0
  277. data/lib/puppet/provider/mount/parsed.rb +0 -1
  278. data/lib/puppet/provider/naginator.rb +1 -1
  279. data/lib/puppet/provider/nameservice.rb +3 -3
  280. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
  281. data/lib/puppet/provider/package/aix.rb +1 -1
  282. data/lib/puppet/provider/package/appdmg.rb +1 -4
  283. data/lib/puppet/provider/package/apple.rb +1 -1
  284. data/lib/puppet/provider/package/apt.rb +1 -1
  285. data/lib/puppet/provider/package/blastwave.rb +1 -1
  286. data/lib/puppet/provider/package/fink.rb +1 -1
  287. data/lib/puppet/provider/package/gem.rb +3 -3
  288. data/lib/puppet/provider/package/openbsd.rb +6 -4
  289. data/lib/puppet/provider/package/pacman.rb +58 -5
  290. data/lib/puppet/provider/package/pip.rb +2 -2
  291. data/lib/puppet/provider/package/pkgdmg.rb +25 -10
  292. data/lib/puppet/provider/package/pkgin.rb +48 -23
  293. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  294. data/lib/puppet/provider/package/ports.rb +1 -1
  295. data/lib/puppet/provider/package/portupgrade.rb +7 -7
  296. data/lib/puppet/provider/package/rpm.rb +16 -8
  297. data/lib/puppet/provider/package/windows.rb +1 -1
  298. data/lib/puppet/provider/package/windows/package.rb +1 -1
  299. data/lib/puppet/provider/parsedfile.rb +1 -1
  300. data/lib/puppet/provider/selboolean/getsetsebool.rb +1 -1
  301. data/lib/puppet/provider/selmodule/semodule.rb +5 -5
  302. data/lib/puppet/provider/service/base.rb +1 -1
  303. data/lib/puppet/provider/service/bsd.rb +3 -3
  304. data/lib/puppet/provider/service/daemontools.rb +20 -20
  305. data/lib/puppet/provider/service/debian.rb +1 -1
  306. data/lib/puppet/provider/service/freebsd.rb +3 -3
  307. data/lib/puppet/provider/service/gentoo.rb +2 -2
  308. data/lib/puppet/provider/service/init.rb +5 -5
  309. data/lib/puppet/provider/service/launchd.rb +4 -4
  310. data/lib/puppet/provider/service/redhat.rb +2 -2
  311. data/lib/puppet/provider/service/runit.rb +4 -4
  312. data/lib/puppet/provider/service/service.rb +3 -4
  313. data/lib/puppet/provider/service/smf.rb +1 -1
  314. data/lib/puppet/provider/service/src.rb +3 -3
  315. data/lib/puppet/provider/service/systemd.rb +4 -4
  316. data/lib/puppet/provider/service/upstart.rb +22 -7
  317. data/lib/puppet/provider/service/windows.rb +7 -7
  318. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +3 -3
  319. data/lib/puppet/provider/user/aix.rb +5 -5
  320. data/lib/puppet/provider/user/directoryservice.rb +8 -5
  321. data/lib/puppet/provider/user/ldap.rb +1 -1
  322. data/lib/puppet/provider/user/pw.rb +1 -1
  323. data/lib/puppet/provider/user/user_role_add.rb +2 -2
  324. data/lib/puppet/provider/user/useradd.rb +19 -5
  325. data/lib/puppet/provider/yumrepo/inifile.rb +187 -0
  326. data/lib/puppet/provider/zone/solaris.rb +4 -4
  327. data/lib/puppet/rails.rb +16 -11
  328. data/lib/puppet/rails/benchmark.rb +1 -1
  329. data/lib/puppet/rails/resource.rb +5 -1
  330. data/lib/puppet/reference/configuration.rb +1 -1
  331. data/lib/puppet/reference/report.rb +1 -1
  332. data/lib/puppet/relationship.rb +10 -5
  333. data/lib/puppet/reports/http.rb +8 -2
  334. data/lib/puppet/reports/rrdgraph.rb +1 -1
  335. data/lib/puppet/reports/store.rb +3 -3
  336. data/lib/puppet/reports/tagmail.rb +4 -4
  337. data/lib/puppet/resource.rb +37 -44
  338. data/lib/puppet/resource/catalog.rb +18 -20
  339. data/lib/puppet/resource/status.rb +7 -6
  340. data/lib/puppet/resource/type.rb +6 -5
  341. data/lib/puppet/resource/type_collection.rb +2 -2
  342. data/lib/puppet/run.rb +9 -8
  343. data/lib/puppet/settings.rb +395 -244
  344. data/lib/puppet/settings/base_setting.rb +10 -4
  345. data/lib/puppet/settings/config_file.rb +81 -44
  346. data/lib/puppet/settings/directory_setting.rb +1 -2
  347. data/lib/puppet/settings/file_setting.rb +12 -5
  348. data/lib/puppet/settings/ini_file.rb +171 -0
  349. data/lib/puppet/ssl/base.rb +4 -0
  350. data/lib/puppet/ssl/certificate_authority.rb +16 -11
  351. data/lib/puppet/ssl/certificate_authority/interface.rb +3 -2
  352. data/lib/puppet/ssl/certificate_factory.rb +50 -5
  353. data/lib/puppet/ssl/certificate_request.rb +2 -2
  354. data/lib/puppet/ssl/certificate_request_attributes.rb +1 -1
  355. data/lib/puppet/ssl/certificate_revocation_list.rb +3 -1
  356. data/lib/puppet/ssl/host.rb +9 -8
  357. data/lib/puppet/ssl/inventory.rb +1 -1
  358. data/lib/puppet/ssl/key.rb +1 -1
  359. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  360. data/lib/puppet/status.rb +8 -7
  361. data/lib/puppet/test/test_helper.rb +35 -4
  362. data/lib/puppet/transaction/event.rb +6 -5
  363. data/lib/puppet/transaction/report.rb +10 -10
  364. data/lib/puppet/type.rb +1 -3
  365. data/lib/puppet/type/augeas.rb +2 -1
  366. data/lib/puppet/type/cron.rb +41 -11
  367. data/lib/puppet/type/exec.rb +5 -5
  368. data/lib/puppet/type/file.rb +42 -4
  369. data/lib/puppet/type/file/content.rb +5 -6
  370. data/lib/puppet/type/file/ensure.rb +3 -3
  371. data/lib/puppet/type/file/source.rb +12 -6
  372. data/lib/puppet/type/file/target.rb +5 -5
  373. data/lib/puppet/type/k5login.rb +4 -4
  374. data/lib/puppet/type/mount.rb +1 -1
  375. data/lib/puppet/type/package.rb +79 -3
  376. data/lib/puppet/type/resources.rb +34 -5
  377. data/lib/puppet/type/selboolean.rb +1 -1
  378. data/lib/puppet/type/selmodule.rb +1 -1
  379. data/lib/puppet/type/ssh_authorized_key.rb +2 -1
  380. data/lib/puppet/type/sshkey.rb +2 -1
  381. data/lib/puppet/type/tidy.rb +1 -1
  382. data/lib/puppet/type/user.rb +4 -1
  383. data/lib/puppet/type/yumrepo.rb +219 -344
  384. data/lib/puppet/type/zone.rb +15 -5
  385. data/lib/puppet/util.rb +14 -13
  386. data/lib/puppet/util/adsi.rb +19 -3
  387. data/lib/puppet/util/autoload.rb +27 -24
  388. data/lib/puppet/util/backups.rb +6 -6
  389. data/lib/puppet/util/checksums.rb +2 -2
  390. data/lib/puppet/util/classgen.rb +1 -1
  391. data/lib/puppet/util/colors.rb +4 -12
  392. data/lib/puppet/util/command_line.rb +2 -2
  393. data/lib/puppet/util/command_line/trollop.rb +3 -3
  394. data/lib/puppet/util/docs.rb +2 -2
  395. data/lib/puppet/util/errors.rb +8 -1
  396. data/lib/puppet/util/execution.rb +12 -5
  397. data/lib/puppet/util/filetype.rb +5 -5
  398. data/lib/puppet/util/inifile.rb +19 -4
  399. data/lib/puppet/util/instrumentation/data.rb +5 -0
  400. data/lib/puppet/util/instrumentation/indirection_probe.rb +6 -1
  401. data/lib/puppet/util/instrumentation/listener.rb +6 -1
  402. data/lib/puppet/util/json_lockfile.rb +4 -1
  403. data/lib/puppet/util/ldap/connection.rb +1 -1
  404. data/lib/puppet/util/lockfile.rb +10 -6
  405. data/lib/puppet/util/log.rb +6 -1
  406. data/lib/puppet/util/log/destinations.rb +2 -2
  407. data/lib/puppet/util/metric.rb +9 -4
  408. data/lib/puppet/util/nagios_maker.rb +26 -1
  409. data/lib/puppet/util/network_device.rb +1 -1
  410. data/lib/puppet/util/network_device/config.rb +1 -1
  411. data/lib/puppet/util/network_device/transport/ssh.rb +3 -3
  412. data/lib/puppet/util/plugins.rb +1 -1
  413. data/lib/puppet/util/profiler.rb +13 -1
  414. data/lib/puppet/util/pson.rb +1 -1
  415. data/lib/puppet/util/queue/stomp.rb +2 -2
  416. data/lib/puppet/util/rdoc.rb +1 -1
  417. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
  418. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +19 -19
  419. data/lib/puppet/util/reference.rb +1 -1
  420. data/lib/puppet/util/resource_template.rb +1 -1
  421. data/lib/puppet/util/retryaction.rb +1 -1
  422. data/lib/puppet/util/selinux.rb +2 -2
  423. data/lib/puppet/util/storage.rb +3 -3
  424. data/lib/puppet/util/symbolic_file_mode.rb +1 -1
  425. data/lib/puppet/util/tag_set.rb +15 -3
  426. data/lib/puppet/util/tagging.rb +12 -17
  427. data/lib/puppet/util/watched_file.rb +1 -1
  428. data/lib/puppet/util/watcher.rb +1 -1
  429. data/lib/puppet/util/windows/error.rb +2 -2
  430. data/lib/puppet/util/windows/file.rb +20 -4
  431. data/lib/puppet/util/windows/registry.rb +2 -2
  432. data/lib/puppet/vendor/safe_yaml/CHANGES.md +1 -1
  433. data/lib/puppet/version.rb +1 -1
  434. data/lib/puppetx.rb +1 -21
  435. data/lib/puppetx/puppet/syntax_checker.rb +1 -1
  436. data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +9 -11
  437. data/spec/fixtures/integration/node/environment/sitedir/00_a.pp +2 -0
  438. data/spec/fixtures/integration/node/environment/sitedir/01_b.pp +6 -0
  439. data/spec/fixtures/{unit/pops/binder/hiera2/yaml_backend/empty/common.yaml → integration/node/environment/sitedir/03_empty.pp} +0 -0
  440. data/spec/fixtures/integration/node/environment/sitedir/04_include.pp +2 -0
  441. data/spec/fixtures/integration/provider/cron/crontab/purged +8 -0
  442. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
  443. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +3 -12
  444. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/lib/puppet/bindings/confdirtest.rb +10 -0
  445. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet/bindings/awesome2/default.rb +20 -0
  446. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/{awesome/lib/puppetx/awesome → awesome2/lib/puppetx/awesome2}/echo_scheme_handler.rb +2 -2
  447. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/lib/puppet/bindings/bad/default.rb +5 -0
  448. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/lib/puppet/bindings/good/default.rb +6 -0
  449. data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +2 -2
  450. data/spec/fixtures/unit/provider/service/systemd/{list_units → list_units_services} +0 -1
  451. data/spec/integration/agent/logging_spec.rb +1 -1
  452. data/spec/integration/application/apply_spec.rb +78 -3
  453. data/spec/integration/application/doc_spec.rb +3 -2
  454. data/spec/integration/configurer_spec.rb +5 -3
  455. data/spec/integration/directory_environments_spec.rb +50 -0
  456. data/spec/integration/indirector/direct_file_server_spec.rb +1 -1
  457. data/spec/integration/indirector/file_content/file_server_spec.rb +4 -5
  458. data/spec/integration/network/authconfig_spec.rb +4 -4
  459. data/spec/integration/network/formats_spec.rb +1 -1
  460. data/spec/integration/node/environment_spec.rb +67 -15
  461. data/spec/integration/node/facts_spec.rb +1 -1
  462. data/spec/integration/node_spec.rb +1 -1
  463. data/spec/integration/parser/catalog_spec.rb +100 -60
  464. data/spec/integration/parser/compiler_spec.rb +102 -13
  465. data/spec/integration/parser/future_compiler_spec.rb +416 -0
  466. data/spec/integration/parser/parser_spec.rb +44 -105
  467. data/spec/integration/parser/scope_spec.rb +614 -528
  468. data/spec/integration/provider/cron/crontab_spec.rb +21 -0
  469. data/spec/integration/provider/mount_spec.rb +15 -2
  470. data/spec/integration/resource/catalog_spec.rb +1 -1
  471. data/spec/integration/resource/type_collection_spec.rb +3 -4
  472. data/spec/integration/ssl/autosign_spec.rb +1 -1
  473. data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
  474. data/spec/integration/ssl/host_spec.rb +1 -1
  475. data/spec/integration/transaction_spec.rb +13 -13
  476. data/spec/integration/type/exec_spec.rb +2 -2
  477. data/spec/integration/type/file_spec.rb +114 -41
  478. data/spec/integration/type/nagios_spec.rb +80 -0
  479. data/spec/integration/type/tidy_spec.rb +2 -2
  480. data/spec/integration/util/execution_spec.rb +17 -0
  481. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  482. data/spec/integration/util/settings_spec.rb +1 -1
  483. data/spec/integration/util/windows/security_spec.rb +27 -2
  484. data/spec/lib/matchers/include.rb +27 -0
  485. data/spec/lib/matchers/include_spec.rb +32 -0
  486. data/spec/lib/matchers/json.rb +135 -79
  487. data/spec/lib/matchers/match_tokens2.rb +74 -0
  488. data/spec/lib/matchers/resource.rb +35 -0
  489. data/spec/lib/puppet/indirector/indirector_testing/memory.rb +7 -0
  490. data/spec/lib/puppet/indirector/indirector_testing/msgpack.rb +6 -0
  491. data/spec/lib/puppet/indirector_testing.rb +12 -2
  492. data/spec/lib/puppet_spec/files.rb +1 -0
  493. data/spec/lib/puppet_spec/matchers.rb +5 -0
  494. data/spec/lib/puppet_spec/modules.rb +1 -1
  495. data/spec/lib/puppet_spec/scope.rb +14 -0
  496. data/spec/shared_behaviours/file_server_terminus.rb +2 -2
  497. data/spec/spec_helper.rb +47 -17
  498. data/spec/unit/agent_spec.rb +8 -1
  499. data/spec/unit/application/agent_spec.rb +5 -4
  500. data/spec/unit/application/apply_spec.rb +34 -15
  501. data/spec/unit/application/device_spec.rb +27 -32
  502. data/spec/unit/application/doc_spec.rb +4 -4
  503. data/spec/unit/application/filebucket_spec.rb +1 -1
  504. data/spec/unit/application/master_spec.rb +2 -2
  505. data/spec/unit/application_spec.rb +1 -1
  506. data/spec/unit/configurer/downloader_spec.rb +1 -1
  507. data/spec/unit/configurer/fact_handler_spec.rb +5 -16
  508. data/spec/unit/configurer_spec.rb +2 -2
  509. data/spec/unit/confine/exists_spec.rb +5 -5
  510. data/spec/unit/context/trusted_information_spec.rb +124 -0
  511. data/spec/unit/context_spec.rb +74 -0
  512. data/spec/unit/environments_spec.rb +126 -0
  513. data/spec/unit/face/config_spec.rb +31 -16
  514. data/spec/unit/face/module/build_spec.rb +1 -0
  515. data/spec/unit/face/module/install_spec.rb +21 -104
  516. data/spec/unit/face/module/list_spec.rb +52 -36
  517. data/spec/unit/face/module/uninstall_spec.rb +18 -25
  518. data/spec/unit/face/parser_spec.rb +39 -23
  519. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  520. data/spec/unit/file_serving/base_spec.rb +9 -13
  521. data/spec/unit/file_serving/configuration/parser_spec.rb +8 -2
  522. data/spec/unit/file_serving/configuration_spec.rb +7 -7
  523. data/spec/unit/file_serving/content_spec.rb +7 -12
  524. data/spec/unit/file_serving/fileset_spec.rb +49 -53
  525. data/spec/unit/file_serving/metadata_spec.rb +83 -32
  526. data/spec/unit/file_serving/mount/file_spec.rb +10 -10
  527. data/spec/unit/file_system/tempfile_spec.rb +3 -3
  528. data/spec/unit/file_system_spec.rb +508 -0
  529. data/spec/unit/forge/errors_spec.rb +1 -1
  530. data/spec/unit/forge/repository_spec.rb +1 -3
  531. data/spec/unit/hiera/scope_spec.rb +6 -2
  532. data/spec/unit/hiera_puppet_spec.rb +13 -6
  533. data/spec/unit/indirector/catalog/msgpack_spec.rb +12 -0
  534. data/spec/unit/indirector/catalog/static_compiler_spec.rb +42 -11
  535. data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
  536. data/spec/unit/indirector/facts/facter_spec.rb +5 -5
  537. data/spec/unit/indirector/file_bucket_file/file_spec.rb +4 -4
  538. data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
  539. data/spec/unit/indirector/file_server_spec.rb +4 -4
  540. data/spec/unit/indirector/json_spec.rb +6 -6
  541. data/spec/unit/indirector/key/file_spec.rb +8 -8
  542. data/spec/unit/indirector/msgpack_spec.rb +191 -0
  543. data/spec/unit/indirector/node/active_record_spec.rb +1 -1
  544. data/spec/unit/indirector/node/ldap_spec.rb +16 -7
  545. data/spec/unit/indirector/node/msgpack_spec.rb +24 -0
  546. data/spec/unit/indirector/node/plain_spec.rb +1 -1
  547. data/spec/unit/indirector/queue_spec.rb +1 -1
  548. data/spec/unit/indirector/report/msgpack_spec.rb +28 -0
  549. data/spec/unit/indirector/request_spec.rb +16 -8
  550. data/spec/unit/indirector/rest_spec.rb +0 -4
  551. data/spec/unit/indirector/ssl_file_spec.rb +12 -11
  552. data/spec/unit/indirector/yaml_spec.rb +4 -4
  553. data/spec/unit/man_spec.rb +32 -0
  554. data/spec/unit/module_spec.rb +60 -46
  555. data/spec/unit/module_tool/applications/checksummer_spec.rb +1 -1
  556. data/spec/unit/module_tool/applications/installer_spec.rb +53 -16
  557. data/spec/unit/module_tool/applications/uninstaller_spec.rb +26 -25
  558. data/spec/unit/module_tool/tar_spec.rb +1 -1
  559. data/spec/unit/module_tool_spec.rb +17 -90
  560. data/spec/unit/network/authconfig_spec.rb +3 -4
  561. data/spec/unit/network/authentication_spec.rb +20 -6
  562. data/spec/unit/network/authorization_spec.rb +11 -1
  563. data/spec/unit/network/formats_spec.rb +32 -9
  564. data/spec/unit/network/http/api/v1_spec.rb +365 -62
  565. data/spec/unit/network/http/api/v2/authorization_spec.rb +57 -0
  566. data/spec/unit/network/http/api/v2/environments_spec.rb +42 -0
  567. data/spec/unit/network/http/api/v2_spec.rb +14 -0
  568. data/spec/unit/network/http/connection_spec.rb +39 -5
  569. data/spec/unit/network/http/error_spec.rb +30 -0
  570. data/spec/unit/network/http/handler_spec.rb +69 -419
  571. data/spec/unit/network/http/rack/rest_spec.rb +20 -28
  572. data/spec/unit/network/http/route_spec.rb +75 -0
  573. data/spec/unit/network/http/webrick/rest_spec.rb +21 -58
  574. data/spec/unit/network/http_pool_spec.rb +3 -3
  575. data/spec/unit/network/rights_spec.rb +2 -2
  576. data/spec/unit/node/environment_spec.rb +108 -89
  577. data/spec/unit/node/facts_spec.rb +5 -12
  578. data/spec/unit/node_spec.rb +22 -22
  579. data/spec/unit/parser/ast/collection_spec.rb +1 -1
  580. data/spec/unit/parser/ast/leaf_spec.rb +2 -0
  581. data/spec/unit/parser/ast/resource_spec.rb +1 -1
  582. data/spec/unit/parser/compiler_spec.rb +5 -3
  583. data/spec/unit/parser/files_spec.rb +40 -50
  584. data/spec/unit/parser/functions/defined_spec.rb +80 -18
  585. data/spec/unit/parser/functions/epp_spec.rb +88 -0
  586. data/spec/unit/parser/functions/fqdn_rand_spec.rb +4 -1
  587. data/spec/unit/parser/functions/generate_spec.rb +6 -2
  588. data/spec/unit/parser/functions/hiera_array_spec.rb +5 -2
  589. data/spec/unit/parser/functions/hiera_hash_spec.rb +4 -1
  590. data/spec/unit/parser/functions/hiera_include_spec.rb +6 -3
  591. data/spec/unit/parser/functions/hiera_spec.rb +5 -2
  592. data/spec/unit/parser/functions/include_spec.rb +0 -1
  593. data/spec/unit/parser/functions/inline_epp_spec.rb +82 -0
  594. data/spec/unit/parser/functions/lookup_spec.rb +66 -16
  595. data/spec/unit/parser/functions_spec.rb +25 -91
  596. data/spec/unit/parser/lexer_spec.rb +1 -1
  597. data/spec/unit/parser/methods/filter_spec.rb +56 -0
  598. data/spec/unit/parser/methods/map_spec.rb +94 -5
  599. data/spec/unit/parser/methods/reduce_spec.rb +10 -0
  600. data/spec/unit/parser/methods/shared.rb +2 -18
  601. data/spec/unit/parser/methods/slice_spec.rb +39 -1
  602. data/spec/unit/parser/parser_spec.rb +14 -10
  603. data/spec/unit/parser/resource_spec.rb +3 -9
  604. data/spec/unit/parser/scope_spec.rb +81 -78
  605. data/spec/unit/parser/type_loader_spec.rb +0 -4
  606. data/spec/unit/pops/benchmark_spec.rb +142 -0
  607. data/spec/unit/pops/binder/binder_spec.rb +15 -34
  608. data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -41
  609. data/spec/unit/pops/binder/bindings_composer_spec.rb +6 -31
  610. data/spec/unit/pops/binder/config/binder_config_spec.rb +5 -18
  611. data/spec/unit/pops/binder/injector_spec.rb +76 -81
  612. data/spec/unit/pops/evaluator/access_ops_spec.rb +376 -0
  613. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +77 -0
  614. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +103 -0
  615. data/spec/unit/pops/evaluator/collections_ops_spec.rb +111 -0
  616. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +256 -0
  617. data/spec/unit/pops/evaluator/conditionals_spec.rb +190 -0
  618. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1045 -0
  619. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +75 -0
  620. data/spec/unit/pops/evaluator/logical_ops_spec.rb +90 -0
  621. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +44 -0
  622. data/spec/unit/pops/evaluator/variables_spec.rb +194 -0
  623. data/spec/unit/pops/factory_spec.rb +6 -29
  624. data/spec/unit/pops/issues_spec.rb +1 -1
  625. data/spec/unit/pops/model/ast_transformer_spec.rb +6 -9
  626. data/spec/unit/pops/model/model_spec.rb +2 -2
  627. data/spec/unit/pops/parser/epp_parser_spec.rb +86 -0
  628. data/spec/unit/pops/parser/evaluating_parser_spec.rb +4 -2
  629. data/spec/unit/pops/parser/lexer2_spec.rb +428 -0
  630. data/spec/unit/pops/parser/lexer_spec.rb +25 -86
  631. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +29 -4
  632. data/spec/unit/pops/parser/parse_calls_spec.rb +10 -6
  633. data/spec/unit/pops/parser/parse_conditionals_spec.rb +0 -9
  634. data/spec/unit/pops/parser/parse_containers_spec.rb +43 -12
  635. data/spec/unit/pops/parser/parse_heredoc_spec.rb +73 -0
  636. data/spec/unit/pops/parser/parse_resource_spec.rb +14 -0
  637. data/spec/unit/pops/parser/parser_spec.rb +3 -1
  638. data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +4 -4
  639. data/spec/unit/pops/transformer/transform_calls_spec.rb +41 -6
  640. data/spec/unit/pops/transformer/transform_conditionals_spec.rb +0 -9
  641. data/spec/unit/pops/transformer/transform_containers_spec.rb +12 -4
  642. data/spec/unit/pops/types/enumeration_spec.rb +50 -0
  643. data/spec/unit/pops/types/type_calculator_spec.rb +1171 -196
  644. data/spec/unit/pops/types/type_factory_spec.rb +108 -4
  645. data/spec/unit/pops/types/type_parser_spec.rb +114 -10
  646. data/spec/unit/pops/validator/validator_spec.rb +36 -1
  647. data/spec/unit/provider/augeas/augeas_spec.rb +39 -16
  648. data/spec/unit/provider/cron/parsed_spec.rb +27 -31
  649. data/spec/unit/provider/file/posix_spec.rb +2 -2
  650. data/spec/unit/provider/group/windows_adsi_spec.rb +1 -0
  651. data/spec/unit/provider/mount_spec.rb +12 -1
  652. data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
  653. data/spec/unit/provider/package/apt_spec.rb +1 -1
  654. data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
  655. data/spec/unit/provider/package/gem_spec.rb +12 -0
  656. data/spec/unit/provider/package/msi_spec.rb +4 -0
  657. data/spec/unit/provider/package/openbsd_spec.rb +10 -10
  658. data/spec/unit/provider/package/pacman_spec.rb +36 -7
  659. data/spec/unit/provider/package/pkgin_spec.rb +57 -55
  660. data/spec/unit/provider/package/rpm_spec.rb +51 -6
  661. data/spec/unit/provider/service/base_spec.rb +4 -4
  662. data/spec/unit/provider/service/daemontools_spec.rb +8 -13
  663. data/spec/unit/provider/service/freebsd_spec.rb +3 -3
  664. data/spec/unit/provider/service/gentoo_spec.rb +24 -24
  665. data/spec/unit/provider/service/init_spec.rb +15 -15
  666. data/spec/unit/provider/service/openbsd_spec.rb +16 -16
  667. data/spec/unit/provider/service/openrc_spec.rb +20 -20
  668. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  669. data/spec/unit/provider/service/runit_spec.rb +5 -8
  670. data/spec/unit/provider/service/src_spec.rb +4 -4
  671. data/spec/unit/provider/service/systemd_spec.rb +24 -14
  672. data/spec/unit/provider/service/upstart_spec.rb +12 -4
  673. data/spec/unit/provider/service/windows_spec.rb +1 -1
  674. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +21 -23
  675. data/spec/unit/provider/user/directoryservice_spec.rb +7 -7
  676. data/spec/unit/provider/user/useradd_spec.rb +43 -15
  677. data/spec/unit/provider/user/windows_adsi_spec.rb +1 -0
  678. data/spec/unit/provider/yumrepo/inifile_spec.rb +105 -0
  679. data/spec/unit/provider/zone/solaris_spec.rb +1 -1
  680. data/spec/unit/provider_spec.rb +120 -62
  681. data/spec/unit/rails/host_spec.rb +1 -1
  682. data/spec/unit/rails/param_value_spec.rb +4 -0
  683. data/spec/unit/relationship_spec.rb +4 -4
  684. data/spec/unit/reports/http_spec.rb +14 -3
  685. data/spec/unit/reports/rrdgraph_spec.rb +0 -1
  686. data/spec/unit/reports/store_spec.rb +2 -2
  687. data/spec/unit/resource/catalog_spec.rb +17 -29
  688. data/spec/unit/resource/status_spec.rb +1 -1
  689. data/spec/unit/resource/type_collection_spec.rb +28 -47
  690. data/spec/unit/resource/type_spec.rb +12 -23
  691. data/spec/unit/resource_spec.rb +54 -93
  692. data/spec/unit/run_spec.rb +3 -3
  693. data/spec/unit/settings/autosign_setting_spec.rb +1 -1
  694. data/spec/unit/settings/config_file_spec.rb +68 -15
  695. data/spec/unit/settings/file_setting_spec.rb +2 -2
  696. data/spec/unit/settings/ini_file_spec.rb +184 -0
  697. data/spec/unit/settings_spec.rb +137 -79
  698. data/spec/unit/ssl/certificate_authority/interface_spec.rb +3 -1
  699. data/spec/unit/ssl/certificate_authority_spec.rb +11 -9
  700. data/spec/unit/ssl/certificate_factory_spec.rb +19 -4
  701. data/spec/unit/ssl/certificate_request_attributes_spec.rb +1 -1
  702. data/spec/unit/ssl/certificate_revocation_list_spec.rb +101 -72
  703. data/spec/unit/ssl/host_spec.rb +8 -20
  704. data/spec/unit/ssl/inventory_spec.rb +2 -2
  705. data/spec/unit/ssl/key_spec.rb +4 -4
  706. data/spec/unit/status_spec.rb +6 -4
  707. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -11
  708. data/spec/unit/transaction/event_spec.rb +2 -2
  709. data/spec/unit/transaction/report_spec.rb +24 -15
  710. data/spec/unit/transaction/resource_harness_spec.rb +1 -1
  711. data/spec/unit/type/cron_spec.rb +39 -1
  712. data/spec/unit/type/file/content_spec.rb +4 -5
  713. data/spec/unit/type/file/ctime_spec.rb +1 -1
  714. data/spec/unit/type/file/mode_spec.rb +5 -4
  715. data/spec/unit/type/file/mtime_spec.rb +1 -1
  716. data/spec/unit/type/file/source_spec.rb +30 -7
  717. data/spec/unit/type/file_spec.rb +8 -8
  718. data/spec/unit/type/k5login_spec.rb +3 -3
  719. data/spec/unit/type/nagios_spec.rb +6 -0
  720. data/spec/unit/type/package/package_settings_spec.rb +135 -0
  721. data/spec/unit/type/package_spec.rb +13 -1
  722. data/spec/unit/type/resources_spec.rb +155 -0
  723. data/spec/unit/type/service_spec.rb +3 -3
  724. data/spec/unit/type/ssh_authorized_key_spec.rb +96 -93
  725. data/spec/unit/type/sshkey_spec.rb +39 -30
  726. data/spec/unit/type/tidy_spec.rb +19 -12
  727. data/spec/unit/type/user_spec.rb +47 -2
  728. data/spec/unit/type/whit_spec.rb +2 -2
  729. data/spec/unit/type/yumrepo_spec.rb +32 -177
  730. data/spec/unit/type/zone_spec.rb +2 -2
  731. data/spec/unit/type_spec.rb +11 -0
  732. data/spec/unit/util/adsi_spec.rb +48 -1
  733. data/spec/unit/util/autoload_spec.rb +24 -39
  734. data/spec/unit/util/backups_spec.rb +25 -28
  735. data/spec/unit/util/checksums_spec.rb +1 -3
  736. data/spec/unit/util/colors_spec.rb +14 -0
  737. data/spec/unit/util/docs_spec.rb +9 -0
  738. data/spec/unit/util/execution_spec.rb +1 -1
  739. data/spec/unit/util/filetype_spec.rb +7 -7
  740. data/spec/unit/util/instrumentation/data_spec.rb +3 -1
  741. data/spec/unit/util/instrumentation/indirection_probe_spec.rb +2 -0
  742. data/spec/unit/util/instrumentation/listener_spec.rb +3 -2
  743. data/spec/unit/util/json_lockfile_spec.rb +25 -4
  744. data/spec/unit/util/lockfile_spec.rb +49 -7
  745. data/spec/unit/util/log/destinations_spec.rb +1 -0
  746. data/spec/unit/util/log_spec.rb +1 -1
  747. data/spec/unit/util/metric_spec.rb +1 -1
  748. data/spec/unit/util/pidlock_spec.rb +6 -6
  749. data/spec/unit/util/pson_spec.rb +2 -2
  750. data/spec/unit/util/rdoc/parser_spec.rb +32 -29
  751. data/spec/unit/util/resource_template_spec.rb +3 -3
  752. data/spec/unit/util/selinux_spec.rb +5 -5
  753. data/spec/unit/util/storage_spec.rb +4 -4
  754. data/spec/unit/util/tag_set_spec.rb +1 -1
  755. data/spec/unit/util/watcher_spec.rb +1 -4
  756. data/spec/unit/util/yaml_spec.rb +2 -2
  757. data/spec/unit/util_spec.rb +7 -7
  758. data/tasks/benchmark.rake +0 -1
  759. data/tasks/parallel.rake +408 -0
  760. data/tasks/yard.rake +59 -0
  761. metadata +2889 -2782
  762. checksums.yaml +0 -7
  763. data/README_DEVELOPER.md +0 -809
  764. data/lib/puppet/file_system/file.rb +0 -271
  765. data/lib/puppet/network/http/rack/httphandler.rb +0 -13
  766. data/lib/puppet/pops/binder/hiera2.rb +0 -10
  767. data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +0 -148
  768. data/lib/puppet/pops/binder/hiera2/config.rb +0 -69
  769. data/lib/puppet/pops/binder/hiera2/config_checker.rb +0 -68
  770. data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +0 -36
  771. data/lib/puppet/pops/binder/hiera2/issues.rb +0 -67
  772. data/lib/puppet/pops/binder/hiera2/json_backend.rb +0 -18
  773. data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +0 -21
  774. data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +0 -67
  775. data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +0 -92
  776. data/lib/puppet/pops/parser/grammar.ra +0 -746
  777. data/lib/puppet/provider/port/parsed.rb +0 -173
  778. data/lib/puppet/type/port.rb +0 -119
  779. data/lib/puppetx/puppet/hiera2_backend.rb +0 -31
  780. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +0 -18
  781. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +0 -8
  782. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +0 -1
  783. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +0 -10
  784. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +0 -1
  785. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +0 -11
  786. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +0 -1
  787. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +0 -3
  788. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +0 -13
  789. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +0 -4
  790. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +0 -11
  791. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +0 -1
  792. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +0 -3
  793. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +0 -9
  794. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +0 -2
  795. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +0 -11
  796. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +0 -9
  797. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +0 -9
  798. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +0 -5
  799. data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +0 -10
  800. data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +0 -8
  801. data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +0 -1
  802. data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +0 -7
  803. data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +0 -4
  804. data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +0 -2
  805. data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +0 -8
  806. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +0 -1
  807. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +0 -2
  808. data/spec/unit/file_system/file_spec.rb +0 -486
  809. data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +0 -74
  810. data/spec/unit/pops/binder/hiera2/config_spec.rb +0 -61
  811. data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +0 -33
@@ -1,68 +0,0 @@
1
- module Puppet::Pops::Binder::Hiera2
2
-
3
- # Validates the consistency of a Hiera2::Config
4
- class ConfigChecker
5
-
6
- # Create an instance with a diagnostic producer that will receive the result during validation
7
- # @param diangostics [DiagnosticProducer] The producer that will receive the diagnostic
8
- def initialize(diagnostics)
9
- @diagnostics = diagnostics
10
- end
11
-
12
- # Validate the consistency of the given data. Diagnostics will be emitted to the DiagnosticProducer
13
- # that was set when this checker was created
14
- #
15
- # @param data [Object] The data read from the config file
16
- # @param config_file [String] The full path of the file. Used in error messages
17
- def validate(data, config_file)
18
- if data.is_a?(Hash)
19
- # If the version is missing, it is not meaningful to continue
20
- return unless check_version(data['version'], config_file)
21
- check_hierarchy(data['hierarchy'], config_file)
22
- check_backends(data['backends'], config_file)
23
- else
24
- @diagnostics.accept(Issues::CONFIG_IS_NOT_HASH, config_file)
25
- end
26
- end
27
-
28
- private
29
-
30
- # Version is required and must be >= 2. A warning is issued if version > 2 as this checker is
31
- # for version 2 only.
32
- # @return [Boolean] false if it is meaningless to continue checking
33
- def check_version(version, config_file)
34
- if version.nil?
35
- # This is not hiera2 compatible
36
- @diagnostics.accept(Issues::MISSING_VERSION, config_file)
37
- return false
38
- end
39
- unless version >= 2
40
- @diagnostics.accept(Issues::WRONG_VERSION, config_file, :expected => 2, :actual => version)
41
- return false
42
- end
43
- unless version == 2
44
- # it may have a sane subset, hence a different error (configured as warning)
45
- @diagnostics.accept(Issues::LATER_VERSION, config_file, :expected => 2, :actual => version)
46
- end
47
- return true
48
- end
49
-
50
- def check_hierarchy(hierarchy, config_file)
51
- if !hierarchy.is_a?(Array) || hierarchy.empty?
52
- @diagnostics.accept(Issues::MISSING_HIERARCHY, config_file)
53
- else
54
- hierarchy.each do |value|
55
- unless value.is_a?(Array) && value.length() == 3
56
- @diagnostics.accept(Issues::CATEGORY_MUST_BE_THREE_ELEMENT_ARRAY, config_file)
57
- end
58
- end
59
- end
60
- end
61
-
62
- def check_backends(backends, config_file)
63
- if !backends.is_a?(Array) || backends.empty?
64
- @diagnostics.accept(Issues::MISSING_BACKENDS, config_file)
65
- end
66
- end
67
- end
68
- end
@@ -1,36 +0,0 @@
1
- module Puppet::Pops::Binder::Hiera2
2
- # Generates validation diagnostics
3
- class Puppet::Pops::Binder::Hiera2::DiagnosticProducer
4
- attr_reader :acceptor
5
- def initialize(an_acceptor)
6
- raise ArgumentError, "Not an acceptor" unless an_acceptor.is_a?(Puppet::Pops::Validation::Acceptor)
7
- @acceptor = an_acceptor
8
- @severity_producer = Puppet::Pops::Validation::SeverityProducer.new
9
- end
10
-
11
- def accept(issue, semantic, arguments={})
12
- arguments[:semantic] ||= semantic
13
- severity = severity_producer.severity(issue)
14
- acceptor.accept(Puppet::Pops::Validation::Diagnostic.new(severity, issue, nil, nil, arguments))
15
- end
16
-
17
- def errors?()
18
- acceptor.errors?
19
- end
20
-
21
- def severity_producer
22
- p = @severity_producer
23
- p[Issues::UNRESOLVED_STRING_VARIABLE] = :warning
24
-
25
- # Warning since if it does not blow up on anything else, a sane subset of later version was used
26
- p[Issues::LATER_VERSION] = :warning
27
-
28
- # Ignore MISSING_BACKENDS because a default will be provided
29
- p[Issues::MISSING_BACKENDS] = :ignore
30
-
31
- # Ignore MISSING_HIERARCHY because a default will be provided
32
- p[Issues::MISSING_HIERARCHY] = :ignore
33
- p
34
- end
35
- end
36
- end
@@ -1,67 +0,0 @@
1
- module Puppet::Pops::Binder::Hiera2::Issues
2
- # (see Puppet::Pops::Issues#issue)
3
- def self.issue (issue_code, *args, &block)
4
- Puppet::Pops::Issues.issue(issue_code, *args, &block)
5
- end
6
-
7
- CONFIG_IS_NOT_HASH = issue :CONFIG_IS_NOT_HASH do
8
- "The configuration file '#{semantic}' has no hash at the top level"
9
- end
10
-
11
- MISSING_HIERARCHY = issue :MISSING_HIERARCHY do
12
- "The configuration file '#{semantic}' contains no hierarchy"
13
- end
14
-
15
- MISSING_BACKENDS = issue :MISSING_BACKENDS do
16
- "The configuration file '#{semantic}' contains no backends"
17
- end
18
-
19
- CATEGORY_MUST_BE_THREE_ELEMENT_ARRAY = issue :CATEGORY_MUST_BE_THREE_ELEMENT_ARRAY do
20
- "The configuration file '#{semantic}' has a malformed hierarchy (should consist of arrays with three string entries)"
21
- end
22
-
23
- CONFIG_FILE_NOT_FOUND = issue :CONFIG_FILE_NOT_FOUND do
24
- "The configuration file '#{semantic}' does not exist"
25
- end
26
-
27
- CONFIG_FILE_SYNTAX_ERROR = issue :CONFIG_FILE_SYNTAX_ERROR do
28
- "Unable to parse: #{semantic}"
29
- end
30
-
31
- CANNOT_LOAD_BACKEND = issue :CANNOT_LOAD_BACKEND, :key, :error do
32
- "Backend '#{key}' in configuration file '#{semantic}' cannot be loaded: #{error}"
33
- end
34
-
35
- BACKEND_FILE_DOES_NOT_DEFINE_CLASS = issue :BACKEND_FILE_DOES_NOT_DEFINE_CLASS, :class_name do
36
- "The file '#{semantic}' does not define class #{class_name}"
37
- end
38
-
39
- NOT_A_BACKEND_CLASS = issue :NOT_A_BACKEND_CLASS, :key, :class_name do
40
- "Class #{class_name}, loaded using key #{key} in file '#{semantic}' is not a subclass of Backend"
41
- end
42
-
43
- METADATA_JSON_NOT_FOUND = issue :METADATA_JSON_NOT_FOUND do
44
- "The metadata file '#{semantic}' does not exist"
45
- end
46
-
47
- UNSUPPORTED_STRING_EXPRESSION = issue :UNSUPPORTED_STRING_EXPRESSION, :expr do
48
- "String '#{semantic}' contains an unsupported expression (type was #{expr.class.name})"
49
- end
50
-
51
- UNRESOLVED_STRING_VARIABLE = issue :UNRESOLVED_STRING_VARIABLE, :key do
52
- "Variable '#{key}' found in string '#{semantic}' cannot be resolved"
53
- end
54
-
55
- MISSING_VERSION = issue :MISSING_VERSION do
56
- "The configuration file '#{semantic}' does not have a version."
57
- end
58
-
59
- WRONG_VERSION = issue :WRONG_VERSION do
60
- "The configuration file '#{semantic}' has the wrong version, expected: #{expected}, actual: #{actual}"
61
- end
62
-
63
- LATER_VERSION = issue :LATER_VERSION do
64
- "The configuration file '#{semantic}' has a version that is newer (features may not work), expected: #{expected}, actual: #{actual}"
65
- end
66
-
67
- end
@@ -1,18 +0,0 @@
1
- require 'json'
2
-
3
- # A Backend implementation capable of reading JSON syntax
4
- class Puppet::Pops::Binder::Hiera2::JsonBackend < Puppetx::Puppet::Hiera2Backend
5
- def read_data(module_dir, source)
6
- begin
7
- source_file = File.join(module_dir, "#{source}.json")
8
- JSON.parse(File.read(source_file))
9
- rescue Errno::ENOTDIR
10
- # This is OK, the file doesn't need to be present. Return an empty hash
11
- {}
12
- rescue Errno::ENOENT
13
- # This is OK, the file doesn't need to be present. Return an empty hash
14
- {}
15
- end
16
- end
17
- end
18
-
@@ -1,21 +0,0 @@
1
- # A Backend implementation capable of reading YAML syntax
2
- class Puppet::Pops::Binder::Hiera2::YamlBackend < Puppetx::Puppet::Hiera2Backend
3
- def read_data(module_dir, source)
4
- begin
5
- source_file = File.join(module_dir, "#{source}.yaml")
6
- # if file is present but empty or has only "---", YAML.load_file returns false,
7
- # in which case fall back to returning an empty hash
8
- YAML.load_file(source_file) || {}
9
- rescue TypeError => e
10
- # SafeYaml chokes when trying to load using utf-8 and the file is empty
11
- raise e if File.size?(source_file)
12
- {}
13
- rescue Errno::ENOTDIR
14
- # This is OK, the file doesn't need to be present. Return an empty hash
15
- {}
16
- rescue Errno::ENOENT
17
- # This is OK, the file doesn't need to be present. Return an empty hash
18
- {}
19
- end
20
- end
21
- end
@@ -1,67 +0,0 @@
1
- # Similar to {Puppet::Pops::Binder::SchemeHandler::ModuleHieraScheme ModuleHieraScheme} but path is
2
- # relative to the `$confdir` instead of relative to a module root.
3
- #
4
- # Does not handle wild-cards.
5
- # @api public
6
- class Puppet::Pops::Binder::SchemeHandler::ConfdirHieraScheme < Puppetx::Puppet::BindingsSchemeHandler
7
-
8
- # (Puppetx::Puppet::BindingsSchemeHandler.contributed_bindings)
9
- #
10
- def contributed_bindings(uri, scope, composer)
11
- split_path = uri.path.split('/')
12
- name = split_path[1]
13
- confdir = composer.confdir
14
- provider = Puppet::Pops::Binder::Hiera2::BindingsProvider.new(uri.to_s, File.join(confdir, uri.path), composer.acceptor)
15
- provider.load_bindings(scope)
16
- end
17
-
18
- # This handler does not support wildcards.
19
- # The given uri is simply returned in an array.
20
- # @param uri [URI] the uri to expand
21
- # @return [Array<URI>] the uri wrapped in an array
22
- # @todo Handle optional and possibly hiera-1 hiera.yaml config file in the expected location (the same as missing)
23
- # @api public
24
- #
25
- def expand_included(uri, composer)
26
- result = []
27
- if config_exist?(uri, composer)
28
- result << uri unless is_ignored_hiera_version?(uri, composer)
29
- else
30
- result << uri unless is_optional?(uri)
31
- end
32
- result
33
- end
34
-
35
- # This handler does not support wildcards.
36
- # The given uri is simply returned in an array.
37
- # @param uri [URI] the uri to expand
38
- # @return [Array<URI>] the uri wrapped in an array
39
- # @api public
40
- #
41
- def expand_excluded(uri, composer)
42
- [uri]
43
- end
44
-
45
- def config_exist?(uri, composer)
46
- Puppet::FileSystem::File.exist?(File.join(composer.confdir, uri.path, 'hiera.yaml'))
47
- end
48
-
49
- # A hiera.yaml that exists, is readable, can be loaded, and does not have version >= 2 set is ignored.
50
- # All other conditions are reported as 'not ignored' even if there are errors; these will be handled later
51
- # as if the hiera.yaml is a hiera-2 file.
52
- # @api private
53
- def is_ignored_hiera_version?(uri, composer)
54
- config_file = File.join(composer.confdir, uri.path, 'hiera.yaml')
55
- begin
56
- data = YAML.load_file(config_file)
57
- if data.is_a?(Hash)
58
- ver = data[:version] || data['version']
59
- return ver.nil? || ver < 2
60
- end
61
- rescue Errno::ENOENT
62
- rescue Errno::ENOTDIR
63
- rescue ::SyntaxError => e
64
- end
65
- return false
66
- end
67
- end
@@ -1,92 +0,0 @@
1
- # The `module-hiera:` scheme uses the path to denote a directory relative to a module root
2
- # The path starts with the name of the module, or '*' to denote *any module*.
3
- #
4
- # @example All root hiera.yaml from all modules.
5
- # module-hiera:/*
6
- #
7
- # @example The hiera.yaml from the module `foo`'s relative path `<foo root>/bar`.
8
- # module-hiera:/foo/bar
9
- #
10
- class Puppet::Pops::Binder::SchemeHandler::ModuleHieraScheme < Puppetx::Puppet::BindingsSchemeHandler
11
- # (Puppetx::Puppet::BindingsSchemeHandler.contributed_bindings)
12
- # @api public
13
- def contributed_bindings(uri, scope, composer)
14
- split_path = uri.path.split('/')
15
- name = split_path[1]
16
- mod = composer.name_to_module[name]
17
- provider = Puppet::Pops::Binder::Hiera2::BindingsProvider.new(uri.to_s, File.join(mod.path, split_path[ 2..-1 ]), composer.acceptor)
18
- provider.load_bindings(scope)
19
- end
20
-
21
- # Expands URIs with wildcards and checks optionality.
22
- # @param uri [URI] the uri to possibly expand
23
- # @return [Array<URI>] the URIs to include
24
- # @api public
25
- #
26
- def expand_included(uri, composer)
27
- result = []
28
- split_path = uri.path.split('/')
29
- if split_path.size > 1 && split_path[-1].empty?
30
- split_path.delete_at(-1)
31
- end
32
-
33
- # 0 = "", since a URI with a path must start with '/'
34
- # 1 = '*' or the module name
35
- case split_path[ 1 ]
36
- when '*'
37
- # create new URIs, one per module name that has a hiera.yaml file relative to its root
38
- composer.name_to_module.each_pair do | name, mod |
39
- if Puppet::FileSystem::File.exist?(File.join(mod.path, split_path[ 2..-1 ], 'hiera.yaml' ))
40
- path_parts =["", name] + split_path[2..-1]
41
- result << URI.parse('module-hiera:'+File.join(path_parts))
42
- end
43
- end
44
- when nil
45
- raise ArgumentError, "Bad bindings uri, the #{uri} has neither module name or wildcard '*' in its first path position"
46
- else
47
- # If uri has query that is empty, or the text 'optional' skip this uri if it does not exist
48
- if query = uri.query()
49
- if query == '' || query == 'optional'
50
- if Puppet::FileSystem::File.exist?(File.join(mod.path, split_path[ 2..-1 ], 'hiera.yaml' ))
51
- result << URI.parse('module-hiera:' + uri.path)
52
- end
53
- end
54
- else
55
- # assume it exists (do not give error since it may be excluded later)
56
- result << URI.parse('module-hiera:' + File.join(split_path))
57
- end
58
- end
59
- result
60
- end
61
-
62
- # Expands URIs with wildcards and checks optionality.
63
- # @param uri [URI] the uri to possibly expand
64
- # @return [Array<URI>] the URIs to exclude
65
- # @api public
66
- #
67
- def expand_excluded(uri, composer)
68
- result = []
69
- split_path = uri.path.split('/')
70
- if split_path.size > 1 && split_path[-1].empty?
71
- split_path.delete_at(-1)
72
- end
73
-
74
- # 0 = "", since a URI with a path must start with '/'
75
- # 1 = '*' or the module name
76
- case split_path[ 1 ]
77
- when '*'
78
- # create new URIs, one per module name that has a hiera.yaml file relative to its root
79
- composer.name_to_module.each_pair do | name, mod |
80
- path_parts =["", mod.name] + split_path[2..-1]
81
- result << URI.parse('module-hiera:'+File.join(path_parts))
82
- end
83
-
84
- when nil
85
- raise ArgumentError, "Bad bindings uri, the #{uri} has neither module name or wildcard '*' in its first path position"
86
- else
87
- # create a clean copy (get rid of optional, fragments etc. and a trailing "/")
88
- result << URI.parse('module-hiera:' + File.join(split_path))
89
- end
90
- result
91
- end
92
- end
@@ -1,746 +0,0 @@
1
- # vim: syntax=ruby
2
-
3
- # Parser using the Pops model
4
- # This grammar is a half step between the current 3.1. grammar and egrammar.
5
- # FIXME! Keep as reference until egrammar is proven to work.
6
-
7
- class Puppet::Pops::Impl::Parser::Parser
8
-
9
- token STRING DQPRE DQMID DQPOST
10
- token LBRACK RBRACK LBRACE RBRACE SYMBOL FARROW COMMA TRUE
11
- token FALSE EQUALS APPENDS LESSEQUAL NOTEQUAL DOT COLON LLCOLLECT RRCOLLECT
12
- token QMARK LPAREN RPAREN ISEQUAL GREATEREQUAL GREATERTHAN LESSTHAN
13
- token IF ELSE IMPORT DEFINE ELSIF VARIABLE CLASS INHERITS NODE BOOLEAN
14
- token NAME SEMIC CASE DEFAULT AT LCOLLECT RCOLLECT CLASSREF
15
- token NOT OR AND UNDEF PARROW PLUS MINUS TIMES DIV LSHIFT RSHIFT UMINUS
16
- token MATCH NOMATCH REGEX IN_EDGE OUT_EDGE IN_EDGE_SUB OUT_EDGE_SUB
17
- token IN UNLESS PIPE
18
- token LAMBDA
19
-
20
- prechigh
21
- left DOT
22
- # left LBRACE
23
- # left LCOLLECT LLCOLLECT
24
- right NOT
25
- nonassoc UMINUS
26
- left IN MATCH NOMATCH
27
- left TIMES DIV
28
- left MINUS PLUS
29
- left LSHIFT RSHIFT
30
- left NOTEQUAL ISEQUAL
31
- left GREATEREQUAL GREATERTHAN LESSTHAN LESSEQUAL
32
- left AND
33
- left OR
34
- # left IN_EDGE OUT_EDGE IN_EDGE_SUB OUT_EDGE_SUB
35
- preclow
36
-
37
- rule
38
- # Produces [Model::BlockExpression, Model::Expression, nil] depending on multiple statements, single statement or empty
39
- program
40
- : statements { result = Factory.block_or_expression(*val[0]) }
41
- | nil
42
-
43
- # Change may have issues with nil; i.e. program is a sequence of nils/nops
44
- # Simplified from original which had validation for top level constructs - see statement rule
45
- # Produces Array<Model::Expression>
46
- statements
47
- : statement { result = [val[0]]}
48
- | statements statement { result = val[0].push val[1] }
49
-
50
- # Removed validation construct regarding "top level statements" as it did not seem to catch all problems
51
- # and relied on a "top-level-ness" encoded in the abstract syntax tree objects
52
- #
53
- # The main list of valid statements
54
- # Produces Model::Expression
55
- #
56
- statement
57
- : resource
58
- | virtual_resource
59
- | collection
60
- | assignment
61
- | casestatement
62
- | if_expression
63
- | unless_expression
64
- | import
65
- | call_named_function
66
- | definition
67
- | hostclass
68
- | nodedef
69
- | resource_override
70
- | append
71
- | relationship
72
- | call_method_with_lambda
73
-
74
- keyword
75
- : AND
76
- | CASE
77
- | CLASS
78
- | DEFAULT
79
- | DEFINE
80
- | ELSE
81
- | ELSIF
82
- | IF
83
- | IN
84
- | IMPORT
85
- | INHERITS
86
- | NODE
87
- | OR
88
- | UNDEF
89
- | UNLESS
90
-
91
- # Produces Model::RelationshipExpression
92
- relationship
93
- : relationship_side edge relationship_side { result = val[0].relop(val[1][:value], val[2]); loc result, val[1] }
94
- | relationship edge relationship_side { result = val[0].relop(val[1][:value], val[2]); loc result, val[1] }
95
-
96
- # Produces Model::Expression
97
- relationship_side
98
- : resource
99
- | resourceref
100
- | collection
101
- | variable
102
- | quotedtext
103
- | selector
104
- | casestatement
105
- | hasharrayaccesses
106
-
107
- # Produces String
108
- edge
109
- : IN_EDGE
110
- | OUT_EDGE
111
- | IN_EDGE_SUB
112
- | OUT_EDGE_SUB
113
-
114
- # Produces Model::CallNamedFunctionExpression
115
- call_named_function
116
- : NAME LPAREN expressions RPAREN { result = Factory.CALL_NAMED(val[0][:value], false, val[2]) ; loc result, val[0], val[3] }
117
- | NAME LPAREN expressions COMMA RPAREN { result = Factory.CALL_NAMED(val[0][:value], false, val[2]) ; loc result, val[0], val[4] }
118
- | NAME LPAREN RPAREN { result = Factory.CALL_NAMED(val[0][:value], false, []) ; loc result, val[0], val[2] }
119
- | NAME func_call_args { result = Factory.CALL_NAMED(val[0][:value], false, val[1]) ; loc result, val[0] }
120
-
121
- call_method_with_lambda
122
- : call_method { result = val[0] }
123
- | call_method lambda { result = val[0]; val[0].lambda = val[1] }
124
-
125
- call_method
126
- : named_access LPAREN expressions RPAREN { result = Factory.CALL_METHOD(val[0], val[2]); loc result, val[1], val[3] }
127
- | named_access LPAREN RPAREN { result = Factory.CALL_METHOD(val[0], []); loc result, val[1], val[3] }
128
- | named_access { result = Factory.CALL_METHOD(val[0], []); loc result, val[0] }
129
-
130
- named_access
131
- : named_access_lval DOT NAME {
132
- result = val[0].dot(Factory.fqn(val[2][:value]))
133
- loc result, val[1], val[2]
134
- }
135
-
136
- # Obviously not ideal, it is not possible to use literal array or hash as lhs
137
- # These must be assigned to a variable - this is also an issue in other places
138
- #
139
- named_access_lval
140
- : variable
141
- | hasharrayaccesses
142
- | selector
143
- | quotedtext
144
- | call_named_rval_function
145
-
146
- lambda
147
- : LAMBDA lambda_parameter_list statements RBRACE {
148
- result = Factory.LAMBDA(val[1], val[2])
149
- loc result, val[0], val[3]
150
- }
151
- | LAMBDA lambda_parameter_list RBRACE {
152
- result = Factory.LAMBDA(val[1], nil)
153
- loc result, val[0], val[2]
154
- }
155
- # Produces Array<Model::Parameter>
156
- lambda_parameter_list
157
- : PIPE PIPE { result = [] }
158
- | PIPE parameters endcomma PIPE { result = val[1] }
159
-
160
- # Produces Array<Model::Expression>
161
- func_call_args
162
- : rvalue { result = [val[0]] }
163
- | func_call_args COMMA rvalue { result = val[0].push(val[2]) }
164
-
165
- # Produces Array<Model::Expression>
166
- expressions
167
- : expression { result = [val[0]] }
168
- | expressions comma expression { result = val[0].push(val[2]) }
169
-
170
-
171
- # Produces [Model::ResourceExpression, Model::ResourceDefaultsExpression]
172
- resource
173
- : classname LBRACE resourceinstances endsemi RBRACE {
174
- result = Factory.RESOURCE(Factory.fqn(token_text(val[0])), val[2])
175
- loc result, val[0], val[4]
176
- }
177
- | classname LBRACE attribute_operations endcomma RBRACE {
178
- # This is a deprecated syntax.
179
- # It also fails hard - TODO: create model and validate this case
180
- error "All resource specifications require names"
181
- }
182
- | type LBRACE attribute_operations endcomma RBRACE {
183
- # a defaults setting for a type
184
- result = Factory.RESOURCE_DEFAULTS(val[0], val[2])
185
- loc result, val[0], val[4]
186
- }
187
-
188
- # Override a value set elsewhere in the configuration.
189
- # Produces Model::ResourceOverrideExpression
190
- resource_override
191
- : resourceref LBRACE attribute_operations endcomma RBRACE {
192
- @lexer.commentpop
193
- result = Factory.RESOURCE_OVERRIDE(val[0], val[2])
194
- loc result, val[0], val[4]
195
- }
196
-
197
- # Exported and virtual resources; these don't get sent to the client
198
- # unless they get collected elsewhere in the db.
199
- # The original had validation here; checking if storeconfigs is on; this is moved to a validation step
200
- # Also, validation was performed if an attempt was made to virtualize or export a resource defaults
201
- # this is also now deferred to validation
202
- # Produces [Model::ResourceExpression, Model::ResourceDefaultsExpression]
203
- virtual_resource
204
- : at resource {
205
- val[1].form = val[0] # :virtual, :exported, (or :regular)
206
- result = val[1]
207
- }
208
-
209
- # Produces Symbol corresponding to resource form
210
- at
211
- : AT { result = :virtual }
212
- | AT AT { result = :exported }
213
-
214
- # A collection statement. Currently supports no arguments at all, but eventually
215
- # will, I assume.
216
- #
217
- # Produces Model::CollectExpression
218
- #
219
- collection
220
- : type collect_query LBRACE attribute_operations endcomma RBRACE {
221
- @lexer.commentpop
222
- result = Factory.COLLECT(val[0].value.downcase, val[1], val[3])
223
- loc result, val[0], val[5]
224
- }
225
- | type collect_query {
226
- result = Factory.COLLECT(val[0].value.downcase, val[1], [])
227
- loc result, val[0], val[1]
228
- }
229
-
230
- collect_query
231
- : LCOLLECT optional_query RCOLLECT { result = Factory.VIRTUAL_QUERY(val[1]) ; loc result, val[0], val[2] }
232
- | LLCOLLECT optional_query RRCOLLECT { result = Factory.EXPORTED_QUERY(val[1]) ; loc result, val[0], val[2] }
233
-
234
- # ORIGINAL COMMENT: A mini-language for handling collection comparisons. This is organized
235
- # to avoid the need for precedence indications.
236
- # (New implementation is slightly different; and when finished, it may be possible to streamline the
237
- # grammar - the difference is mostly in evaluation, not in grammar)
238
- #
239
- optional_query
240
- : nil
241
- | query
242
-
243
- # ORIGINAL: Had a weird list structure where AND and OR where at the same level, and hence, there was the
244
- # need to keep track of where parenthesis were (to get order correct).
245
- #
246
- # This is now not needed as AND has higher precedence than OR, and parenthesis are low in precedence
247
-
248
- query
249
- : predicate_lval ISEQUAL expression { result = (val[0] == val[2]) ; loc result, val[1] }
250
- | predicate_lval NOTEQUAL expression { result = (val[0].ne(val[2])) ; loc result, val[1] }
251
- | LPAREN query RPAREN { result = val[1] }
252
- | query AND query { result = val[0].and(val[2]) ; loc result, val[1] }
253
- | query OR query { result = val[0].or(val[2]) ; loc result, val[1] }
254
-
255
-
256
- # Produces Model::VariableExpression, or Model::QualifiedName
257
- predicate_lval
258
- : variable
259
- | name
260
-
261
- resourceinst
262
- : resourcename COLON attribute_operations endcomma { result = Factory.RESOURCE_BODY(val[0], val[2]) }
263
-
264
- resourceinstances
265
- : resourceinst { result = [val[0]] }
266
- | resourceinstances SEMIC resourceinst { result = val[0].push val[2] }
267
-
268
-
269
- resourcename
270
- : quotedtext
271
- | name
272
- | type
273
- | selector
274
- | variable
275
- | array
276
- | hasharrayaccesses
277
-
278
- # Assignment, only assignment to variable is legal, but parser builds expression for [] = anyway to
279
- # enable a better error message
280
- assignment
281
- : VARIABLE EQUALS expression { result = Factory.var(Factory.fqn(val[0][:value])).set(val[2]) ; loc result, val[1] }
282
- | hasharrayaccess EQUALS expression { result val[0].set(val[2]); loc result, val[1] }
283
-
284
- append
285
- : VARIABLE APPENDS expression { result = Factory.var(val[0][:value]).plus_set(val[1]) ; loc result, val[1] }
286
-
287
- # Produces Array<Model::AttributeOperation>
288
- attribute_operations
289
- : { result = [] }
290
- | attribute_operation { result = [val[0]] }
291
- | attribute_operations COMMA attribute_operation { result = val[0].push(val[2]) }
292
-
293
- # Produces String
294
- attribute_name
295
- : NAME
296
- | keyword
297
- | BOOLEAN
298
-
299
- # Several grammar issues here: the addparam did not allow keyword and booleans as names.
300
- # In this version, the wrong combinations are validated instead of producing syntax errors
301
- # (Can give nicer error message +> is not applicable to...)
302
- # WAT - Boolean as attribute name?
303
- # Produces Model::AttributeOperation
304
- #
305
- attribute_operation
306
- : attribute_name FARROW expression {
307
- result = Factory.ATTRIBUTE_OP(val[0][:value], :'=>', val[2])
308
- loc result, val[0], val[2]
309
- }
310
- | attribute_name PARROW expression {
311
- result = Factory.ATTRIBUTE_OP(val[0][:value], :'+>', val[2])
312
- loc result, val[0], val[2]
313
- }
314
-
315
- # Produces Model::CallNamedFunction
316
- call_named_rval_function
317
- : NAME LPAREN expressions RPAREN { result = Factory.CALL_NAMED(val[0][:value], true, val[2]) ; loc result, val[0], val[3] }
318
- | NAME LPAREN RPAREN { result = Factory.CALL_NAMED(val[0][:value], true, []) ; loc result, val[0], val[2] }
319
-
320
- quotedtext
321
- : STRING { result = Factory.literal(val[0][:value]) ; loc result, val[0] }
322
- | dqpre dqrval { result = Factory.string(val[0], *val[1]) ; loc result, val[0], val[1][-1] }
323
-
324
- dqpre : DQPRE { result = Factory.literal(val[0][:value]); loc result, val[0] }
325
- dqpost : DQPOST { result = Factory.literal(val[0][:value]); loc result, val[0] }
326
- dqmid : DQMID { result = Factory.literal(val[0][:value]); loc result, val[0] }
327
- text_expression : expression { result = Factory.TEXT(val[0]) }
328
-
329
- dqrval
330
- : text_expression dqtail { result = [val[0]] + val[1] }
331
-
332
- dqtail
333
- : dqpost { result = [val[0]] }
334
- | dqmid dqrval { result = [val[0]] + val[1] }
335
-
336
-
337
- # Reference to Resource (future also reference to other instances of other types than Resources).
338
- # First form (lower case name) is deprecated (deprecation message handled in validation). Note that
339
- # this requires use of token NAME since a rule call to name causes shift reduce conflict with
340
- # a function call NAME NAME (calling function with NAME as argument e.g. foo bar).
341
- #
342
- # Produces InstanceReference
343
- resourceref
344
- : NAME LBRACK expressions RBRACK {
345
- # Would want to use rule name here, but can't (need a NAME with higher precedence), so must
346
- # create a QualifiedName instance here for NAME
347
- result = Factory.INSTANCE(Factory.QNAME_OR_NUMBER(val[0][:value]), val[2]);
348
- loc result, val[0], val[2][-1]
349
- }
350
- | type LBRACK expressions RBRACK {
351
- result = Factory.INSTANCE(val[0], val[2]);
352
- loc result, val[0], val[2][-1]
353
- }
354
-
355
- # Changed from Puppet 3x where there is no else part on unless
356
- #
357
- unless_expression
358
- : UNLESS expression LBRACE statements RBRACE unless_else {
359
- @lexer.commentpop
360
- result = Factory.UNLESS(val[1], Factory.block_or_expression(*val[3]), val[5])
361
- loc result, val[0], val[4]
362
- }
363
- | UNLESS expression LBRACE RBRACE unless_else {
364
- @lexer.commentpop
365
- result = Factory.UNLESS(val[1], nil, nil)
366
- loc result, val[0], val[4]
367
- }
368
-
369
- # Different from else part of if, since "elsif" is not supported, but else is
370
- #
371
- # Produces [Model::Expression, nil] - nil if there is no else or elsif part
372
- unless_else
373
- : # nothing
374
- | ELSE LBRACE statements RBRACE {
375
- @lexer.commentpop
376
- result = Factory.block_or_expression(*val[2])
377
- loc result, val[0], val[3]
378
- }
379
- | ELSE LBRACE RBRACE {
380
- @lexer.commentpop
381
- result = nil # don't think a nop is needed here either
382
- }
383
-
384
- # Produces Model::IfExpression
385
- if_expression
386
- : IF if_expression_part {
387
- result = val[1]
388
- }
389
-
390
- # Produces Model::IfExpression
391
- if_expression_part
392
- : expression LBRACE statements RBRACE else {
393
- @lexer.commentpop
394
- result = Factory.IF(val[0], Factory.block_or_expression(*val[2]), val[4])
395
- loc(result, val[0], (val[4] ? val[4] : val[3]))
396
- }
397
- | expression LBRACE RBRACE else {
398
- result = Factory.IF(val[0], nil, val[3])
399
- loc(result, val[0], (val[3] ? val[3] : val[2]))
400
- }
401
-
402
- # Produces [Model::Expression, nil] - nil if there is no else or elsif part
403
- else
404
- : # nothing
405
- | ELSIF if_expression_part { result = val[1] }
406
- | ELSE LBRACE statements RBRACE {
407
- @lexer.commentpop
408
- result = Factory.block_or_expression(*val[2])
409
- loc result, val[0], val[3]
410
- }
411
- | ELSE LBRACE RBRACE {
412
- @lexer.commentpop
413
- result = nil # don't think a nop is needed here either
414
- }
415
-
416
- # Produces Model::Expression
417
- expression
418
- : rvalue
419
- | hash
420
- | expression IN expression { result = val[0].in val[2] ; loc result, val[1] }
421
- | expression MATCH match_rvalue { result = val[0] =~ val[2] ; loc result, val[1] }
422
- | expression NOMATCH match_rvalue { result = val[0].mne val[2] ; loc result, val[1] }
423
- | expression PLUS expression { result = val[0] + val[2] ; loc result, val[1] }
424
- | expression MINUS expression { result = val[0] - val[2] ; loc result, val[1] }
425
- | expression DIV expression { result = val[0] / val[2] ; loc result, val[1] }
426
- | expression TIMES expression { result = val[0] * val[2] ; loc result, val[1] }
427
- | expression LSHIFT expression { result = val[0] << val[2] ; loc result, val[1] }
428
- | expression RSHIFT expression { result = val[0] >> val[2] ; loc result, val[1] }
429
- | MINUS expression =UMINUS { result = val[1].minus() ; loc result, val[0] }
430
- | expression NOTEQUAL expression { result = val[0].ne val[2] ; loc result, val[1] }
431
- | expression ISEQUAL expression { result = val[0] == val[2] ; loc result, val[1] }
432
- | expression GREATERTHAN expression { result = val[0] > val[2] ; loc result, val[1] }
433
- | expression GREATEREQUAL expression { result = val[0] >= val[2] ; loc result, val[1] }
434
- | expression LESSTHAN expression { result = val[0] < val[2] ; loc result, val[1] }
435
- | expression LESSEQUAL expression { result = val[0] <= val[2] ; loc result, val[1] }
436
- | NOT expression { result = val[1].not ; loc result, val[0] }
437
- | expression AND expression { result = val[0].and val[2] ; loc result, val[1] }
438
- | expression OR expression { result = val[0].or val[2] ; loc result, val[1] }
439
- | LPAREN expression RPAREN { result = val[1] ; }
440
- | call_method_with_lambda
441
-
442
- match_rvalue
443
- : regex
444
- | quotedtext
445
-
446
- # Produces Model::CaseExpression
447
- casestatement
448
- : CASE expression LBRACE case_options RBRACE {
449
- @lexer.commentpop
450
- result = Factory.CASE(val[1], *val[3])
451
- loc result, val[0], val[4]
452
- }
453
-
454
- # Produces Array<Model::CaseOption>
455
- case_options
456
- : case_option { result = [val[0]] }
457
- | case_options case_option { result = val[0].push val[1] }
458
-
459
- # Produced Model::CaseOption (aka When)
460
- case_option
461
- : case_values COLON LBRACE statements RBRACE {
462
- @lexer.commentpop
463
- result = Factory.WHEN(val[0], val[3])
464
- loc result, val[1], val[4]
465
- }
466
- | case_values COLON LBRACE RBRACE {
467
- @lexer.commentpop
468
- result = Factory.WHEN(val[0], nil)
469
- loc result, val[1], val[3]
470
- }
471
-
472
- # Produces Array<Expression> mostly literals
473
- case_values
474
- : selectable { result = [val[0]] }
475
- | case_values COMMA selectable { result = val[0].push val[2] }
476
-
477
- # Produces Model::SelectorExpression
478
- selector
479
- : selectable QMARK selector_entries { result = val[0].select(*val[2]) ; loc result, val[1] }
480
-
481
- # Produces Array<Model::SelectorEntry>
482
- selector_entries
483
- : selector_entry { result = [val[0]] }
484
- | LBRACE selector_entry_list endcomma RBRACE {
485
- @lexer.commentpop
486
- result = val[1]
487
- }
488
-
489
- # Produces Array<Model::SelectorEntry>
490
- selector_entry_list
491
- : selector_entry { result = [val[0]] }
492
- | selector_entry_list COMMA selector_entry { result = val[0].push val[2] }
493
-
494
- # Produces a Model::SelectorEntry
495
- selector_entry
496
- : selectable FARROW rvalue { result = Factory.MAP(val[0], val[2]) ; loc result, val[1] }
497
-
498
- # Produces Model::Expression (most of the literals)
499
- selectable
500
- : name
501
- | type
502
- | quotedtext
503
- | variable
504
- | call_named_rval_function
505
- | boolean
506
- | undef
507
- | hasharrayaccess
508
- | default
509
- | regex
510
-
511
-
512
-
513
- # Produces nil (noop)
514
- import
515
- : IMPORT strings {
516
- error "Import not supported in this version of the parser", \
517
- :line => stmt.context[:line], :file => stmt.context[:file]
518
- result = nil
519
- }
520
-
521
- # IMPORT (T.B DEPRECATED IN PUPPET WHEN IT HAS BEEN FIGURED OUT HOW TO SUPPORT
522
- # THE THINGS IMPORTS ARE USED FOR.
523
- # BOLDLY DECIDED TO SKIP THIS COMPLETELY IN THIS IMPLEMENTATION - will trigger an error
524
- #
525
- # These are only used for importing, no interpolation
526
- string
527
- : STRING { result = [val[0][:value]] }
528
-
529
- strings
530
- : string
531
- | strings COMMA string { result = val[0].push val[2] }
532
-
533
- # Produces Model::Definition
534
- definition
535
- : DEFINE classname parameter_list LBRACE statements RBRACE {
536
- @lexer.commentpop
537
- result = Factory.DEFINITION(classname(val[1][:value]), val[2], val[4])
538
- loc result, val[0], val[5]
539
- @lexer.indefine = false
540
- }
541
- | DEFINE classname parameter_list LBRACE RBRACE {
542
- @lexer.commentpop
543
- result = Factory.DEFINITION(classname(val[1][:value]), val[2], nil)
544
- loc result, val[0], val[4]
545
- @lexer.indefine = false
546
- }
547
-
548
- # ORIGINAL COMMENT: Our class gets defined in the parent namespace, not our own.
549
- # WAT ??! This is way odd; should get its complete name, classnames do not nest
550
- # Seems like the call to classname makes use of the name scope
551
- # (This is uneccesary, since the parent name is known when evaluating)
552
- #
553
- # Produces Model::HostClassDefinition
554
- #
555
- hostclass
556
- : CLASS classname parameter_list classparent LBRACE statements RBRACE {
557
- @lexer.commentpop
558
- @lexer.namepop
559
- result = Factory.HOSTCLASS(classname(val[1][:value]), val[2], token_text(val[3]), val[5])
560
- loc result, val[0], val[6]
561
- }
562
- | CLASS classname parameter_list classparent LBRACE RBRACE {
563
- @lexer.commentpop
564
- @lexer.namepop
565
- result = Factory.HOSTCLASS(classname(val[1][:value]), val[2], token_text(val[3]), nil)
566
- loc result, val[0], val[5]
567
- }
568
-
569
- # Produces Model::NodeDefinition
570
- nodedef
571
- : NODE hostnames nodeparent LBRACE statements RBRACE {
572
- @lexer.commentpop
573
- result = Factory.NODE(val[1], val[2], val[4])
574
- loc result, val[0], val[5]
575
- }
576
- | NODE hostnames nodeparent LBRACE RBRACE {
577
- @lexer.commentpop
578
- result = Factory.NODE(val[1], val[2], nil)
579
- loc result, val[0], val[4]
580
- }
581
-
582
- # String result
583
- classname
584
- : NAME { result = val[0] }
585
- | CLASS { result = val[0] }
586
-
587
- # Hostnames is not a list of names, it is a list of name matchers (including a Regexp).
588
- # (The old implementation had a special "Hostname" object with some minimal validation)
589
- #
590
- # Produces Array<Model::LiteralExpression>
591
- #
592
- hostnames
593
- : nodename { result = [result] }
594
- | hostnames COMMA nodename { result = val[0].push(val[2]) }
595
-
596
- # Produces Model::LiteralExpression
597
- #
598
- nodename
599
- : hostname
600
-
601
- # Produces a LiteralExpression (string, :default, or regexp)
602
- hostname
603
- : NAME { result = Factory.fqn(val[0][:value]); loc result, val[0] }
604
- | STRING { result = Factory.literal(val[0][:value]); loc result, val[0] }
605
- | DEFAULT { result = Factory.literal(:default); loc result, val[0] }
606
- | regex
607
-
608
-
609
- # Produces Array<Model::Parameter>
610
- parameter_list
611
- : nil { result = [] }
612
- | LPAREN RPAREN { result = [] }
613
- | LPAREN parameters endcomma RPAREN { result = val[1] }
614
-
615
- # Produces Array<Model::Parameter>
616
- parameters
617
- : parameter { result = [val[0]] }
618
- | parameters COMMA parameter { result = val[0].push(val[2]) }
619
-
620
- # Produces Model::Parameter
621
- parameter
622
- : VARIABLE EQUALS expression { result = Factory.PARAM(val[0][:value], val[2]) ; loc result, val[0] }
623
- | VARIABLE { result = Factory.PARAM(val[0][:value]); loc result, val[0] }
624
-
625
- # Produces Expression, since hostname is an Expression
626
- nodeparent
627
- : nil
628
- | INHERITS hostname { result = val[1] }
629
-
630
- # Produces String, name or nil result
631
- classparent
632
- : nil
633
- | INHERITS classnameordefault { result = val[1] }
634
-
635
- # Produces String (this construct allows a class to be named "default" and to be referenced as
636
- # the parent class.
637
- # TODO: Investigate the validity
638
- # Produces a String (classname), or a token (DEFAULT).
639
- #
640
- classnameordefault
641
- : classname
642
- | DEFAULT
643
-
644
- rvalue
645
- : quotedtext
646
- | name
647
- | type
648
- | boolean
649
- | selector
650
- | variable
651
- | array
652
- | hasharrayaccesses
653
- | resourceref
654
- | call_named_rval_function
655
- | undef
656
-
657
- array
658
- : LBRACK expressions RBRACK { result = Factory.LIST(val[1]); loc result, val[0], val[2] }
659
- | LBRACK expressions COMMA RBRACK { result = Factory.LIST(val[1]); loc result, val[0], val[3] }
660
- | LBRACK RBRACK { result = Factory.literal([]) ; loc result, val[0] }
661
-
662
-
663
- hash
664
- : LBRACE hashpairs RBRACE { result = Factory.HASH(val[1]); loc result, val[0], val[2] }
665
- | LBRACE hashpairs COMMA RBRACE { result = Factory.HASH(val[1]); loc result, val[0], val[3] }
666
- | LBRACE RBRACE { result = Factory.literal({}) ; loc result, val[0], val[3] }
667
-
668
- hashpairs
669
- : hashpair { result = [val[0]] }
670
- | hashpairs COMMA hashpair { result = val[0].push val[2] }
671
-
672
- hashpair
673
- : key FARROW expression { result = Factory.KEY_ENTRY(val[0], val[2]); loc result, val[1] }
674
-
675
- key
676
- : NAME { result = Factory.literal(val[0][:value]) ; loc result, val[0] }
677
- | quotedtext { result = val[0] }
678
-
679
- # NOTE: Limitation that LHS is a variable, means that it is not possible to do foo(10)[2] without
680
- # using an intermediate variable
681
- #
682
- hasharrayaccess
683
- : variable LBRACK expression RBRACK { result = val[0][val[2]]; loc result, val[0], val[3] }
684
-
685
- hasharrayaccesses
686
- : hasharrayaccess
687
- | hasharrayaccesses LBRACK expression RBRACK { result = val[0][val[2]] ; loc result, val[1], val[3] }
688
-
689
- # Produces Model::VariableExpression
690
- variable : VARIABLE { result = Factory.fqn(val[0][:value]).var ; loc result, val[0] }
691
- undef : UNDEF { result = Factory.literal(:undef); loc result, val[0] }
692
- name : NAME { result = Factory.QNAME_OR_NUMBER(val[0][:value]) ; loc result, val[0] }
693
- type : CLASSREF { result = Factory.QREF(val[0][:value]) ; loc result, val[0] }
694
-
695
- default
696
- : DEFAULT { result = Factory.literal(:default); loc result, val[0] }
697
-
698
- boolean
699
- # Assumes lexer produces a Boolean value for booleans, or this will go wrong (e.g. produce. LiteralString)
700
- : BOOLEAN { result = Factory.literal(val[0][:value]) ; loc result, val[0] }
701
-
702
- regex
703
- : REGEX { result = Factory.literal(val[0][:value]); loc result, val[0] }
704
-
705
- # ---Special markers & syntactic sugar
706
-
707
- # WAT !!!! this means array can be [1=>2=>3], func (1=>2=>3), and other retarded constructs
708
- # TODO: Remove the FARROW (investigate if there is any validity)
709
- comma
710
- : FARROW
711
- | COMMA
712
-
713
- endcomma
714
- : #
715
- | COMMA { result = nil }
716
-
717
- endsemi
718
- : #
719
- | SEMIC
720
-
721
- nil
722
- : { result = nil}
723
-
724
- ## Empty list - not really needed? TODO: Check if this can be removed
725
- #empty_list
726
- # : { result = [] }
727
-
728
- end
729
-
730
- ---- header ----
731
- require 'puppet'
732
- require 'puppet/util/loadedfile'
733
- require 'puppet/pops'
734
-
735
- module Puppet
736
- class ParseError < Puppet::Error; end
737
- class ImportError < Racc::ParseError; end
738
- class AlreadyImportedError < ImportError; end
739
- end
740
-
741
- ---- inner ----
742
-
743
- # Make emacs happy
744
- # Local Variables:
745
- # mode: ruby
746
- # End: