puppet 3.2.4 → 3.3.0.rc2

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 (562) hide show
  1. data/COMMITTERS.md +101 -42
  2. data/Gemfile +15 -4
  3. data/README.md +5 -1
  4. data/README_DEVELOPER.md +117 -54
  5. data/Rakefile +4 -0
  6. data/ext/build_defaults.yaml +3 -2
  7. data/ext/debian/puppet-common.manpages +33 -1
  8. data/ext/gentoo/init.d/puppet +1 -1
  9. data/ext/gentoo/init.d/puppetmaster +1 -1
  10. data/ext/redhat/puppet.spec.erb +0 -1
  11. data/install.rb +2 -1
  12. data/lib/hiera/backend/puppet_backend.rb +1 -1
  13. data/lib/puppet/application.rb +10 -9
  14. data/lib/puppet/application/agent.rb +87 -93
  15. data/lib/puppet/application/apply.rb +0 -2
  16. data/lib/puppet/application/device.rb +3 -3
  17. data/lib/puppet/application/kick.rb +2 -2
  18. data/lib/puppet/application/master.rb +41 -19
  19. data/lib/puppet/application/queue.rb +5 -3
  20. data/lib/puppet/bindings.rb +147 -0
  21. data/lib/puppet/configurer.rb +25 -15
  22. data/lib/puppet/configurer/fact_handler.rb +2 -9
  23. data/lib/puppet/daemon.rb +44 -33
  24. data/lib/puppet/defaults.rb +57 -26
  25. data/lib/puppet/error.rb +1 -1
  26. data/lib/puppet/external/dot.rb +2 -2
  27. data/lib/puppet/external/nagios/base.rb +1 -6
  28. data/lib/puppet/external/pson/common.rb +2 -2
  29. data/lib/puppet/external/pson/pure/generator.rb +2 -2
  30. data/lib/puppet/external/pson/pure/parser.rb +1 -1
  31. data/lib/puppet/face/ca.rb +1 -1
  32. data/lib/puppet/face/config.rb +1 -1
  33. data/lib/puppet/face/help.rb +2 -2
  34. data/lib/puppet/face/module/list.rb +2 -2
  35. data/lib/puppet/feature/rails.rb +1 -1
  36. data/lib/puppet/file_bucket/dipper.rb +0 -1
  37. data/lib/puppet/file_serving/base.rb +1 -1
  38. data/lib/puppet/file_serving/configuration/parser.rb +20 -14
  39. data/lib/puppet/forge.rb +0 -32
  40. data/lib/puppet/forge/cache.rb +1 -1
  41. data/lib/puppet/forge/errors.rb +3 -3
  42. data/lib/puppet/forge/repository.rb +7 -42
  43. data/lib/puppet/graph.rb +11 -0
  44. data/lib/puppet/graph/key.rb +26 -0
  45. data/lib/puppet/graph/prioritizer.rb +29 -0
  46. data/lib/puppet/graph/random_prioritizer.rb +16 -0
  47. data/lib/puppet/{rb_tree_map.rb → graph/rb_tree_map.rb} +3 -3
  48. data/lib/puppet/graph/relationship_graph.rb +246 -0
  49. data/lib/puppet/graph/sequential_prioritizer.rb +31 -0
  50. data/lib/puppet/{simple_graph.rb → graph/simple_graph.rb} +22 -3
  51. data/lib/puppet/graph/title_hash_prioritizer.rb +16 -0
  52. data/lib/puppet/indirector.rb +2 -2
  53. data/lib/puppet/indirector/catalog/compiler.rb +10 -7
  54. data/lib/puppet/indirector/catalog/static_compiler.rb +50 -0
  55. data/lib/puppet/indirector/certificate/rest.rb +1 -1
  56. data/lib/puppet/indirector/exec.rb +1 -1
  57. data/lib/puppet/indirector/facts/facter.rb +2 -2
  58. data/lib/puppet/indirector/facts/inventory_active_record.rb +0 -1
  59. data/lib/puppet/indirector/facts/network_device.rb +1 -1
  60. data/lib/puppet/indirector/file_bucket_file/file.rb +0 -1
  61. data/lib/puppet/indirector/indirection.rb +2 -2
  62. data/lib/puppet/indirector/memory.rb +9 -0
  63. data/lib/puppet/indirector/node/ldap.rb +2 -4
  64. data/lib/puppet/indirector/report/processor.rb +1 -2
  65. data/lib/puppet/indirector/report/rest.rb +1 -1
  66. data/lib/puppet/indirector/request.rb +32 -10
  67. data/lib/puppet/indirector/resource/rest.rb +1 -1
  68. data/lib/puppet/indirector/resource_type/parser.rb +31 -12
  69. data/lib/puppet/interface.rb +1 -1
  70. data/lib/puppet/interface/documentation.rb +7 -11
  71. data/lib/puppet/interface/option.rb +1 -1
  72. data/lib/puppet/interface/option_builder.rb +1 -1
  73. data/lib/puppet/metatype/manager.rb +2 -2
  74. data/lib/puppet/module.rb +7 -1
  75. data/lib/puppet/module_tool.rb +1 -1
  76. data/lib/puppet/module_tool/applications/application.rb +10 -0
  77. data/lib/puppet/module_tool/applications/installer.rb +6 -3
  78. data/lib/puppet/module_tool/dependency.rb +2 -0
  79. data/lib/puppet/module_tool/errors/upgrader.rb +1 -1
  80. data/lib/puppet/module_tool/metadata.rb +25 -13
  81. data/lib/puppet/module_tool/modulefile.rb +7 -7
  82. data/lib/puppet/module_tool/shared_behaviors.rb +4 -2
  83. data/lib/puppet/module_tool/skeleton.rb +1 -1
  84. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +5 -5
  85. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +5 -4
  86. data/lib/puppet/network/auth_config_parser.rb +3 -0
  87. data/lib/puppet/network/authconfig.rb +0 -1
  88. data/lib/puppet/network/authorization.rb +1 -1
  89. data/lib/puppet/network/authstore.rb +2 -2
  90. data/lib/puppet/network/format_handler.rb +25 -114
  91. data/lib/puppet/network/format_support.rb +106 -0
  92. data/lib/puppet/network/formats.rb +10 -4
  93. data/lib/puppet/network/http/compression.rb +1 -1
  94. data/lib/puppet/network/http/connection.rb +76 -32
  95. data/lib/puppet/network/http/handler.rb +122 -61
  96. data/lib/puppet/network/http/rack/rest.rb +1 -1
  97. data/lib/puppet/network/http/webrick/rest.rb +9 -3
  98. data/lib/puppet/network/http_pool.rb +2 -2
  99. data/lib/puppet/network/resolver.rb +1 -0
  100. data/lib/puppet/network/server.rb +5 -81
  101. data/lib/puppet/node/environment.rb +256 -13
  102. data/lib/puppet/node/facts.rb +28 -2
  103. data/lib/puppet/parameter.rb +27 -18
  104. data/lib/puppet/parameter/boolean.rb +20 -0
  105. data/lib/puppet/parameter/path.rb +1 -1
  106. data/lib/puppet/parameter/value.rb +1 -1
  107. data/lib/puppet/parameter/value_collection.rb +1 -1
  108. data/lib/puppet/parser/ast/arithmetic_operator.rb +8 -0
  109. data/lib/puppet/parser/ast/casestatement.rb +0 -3
  110. data/lib/puppet/parser/ast/lambda.rb +25 -6
  111. data/lib/puppet/parser/ast/leaf.rb +10 -3
  112. data/lib/puppet/parser/ast/nop.rb +1 -1
  113. data/lib/puppet/parser/ast/resource_override.rb +0 -2
  114. data/lib/puppet/parser/compiler.rb +92 -34
  115. data/lib/puppet/parser/files.rb +0 -5
  116. data/lib/puppet/parser/functions/create_resources.rb +23 -46
  117. data/lib/puppet/parser/functions/each.rb +0 -2
  118. data/lib/puppet/parser/functions/extlookup.rb +2 -2
  119. data/lib/puppet/parser/functions/foreach.rb +0 -2
  120. data/lib/puppet/parser/functions/hiera_include.rb +1 -1
  121. data/lib/puppet/parser/functions/lookup.rb +44 -0
  122. data/lib/puppet/parser/functions/slice.rb +1 -1
  123. data/lib/puppet/parser/grammar.ra +0 -1
  124. data/lib/puppet/parser/lexer.rb +0 -1
  125. data/lib/puppet/parser/parser.rb +0 -1
  126. data/lib/puppet/parser/parser_factory.rb +3 -2
  127. data/lib/puppet/parser/parser_support.rb +1 -1
  128. data/lib/puppet/parser/relationship.rb +1 -1
  129. data/lib/puppet/parser/scope.rb +49 -24
  130. data/lib/puppet/parser/type_loader.rb +13 -18
  131. data/lib/puppet/pops.rb +45 -0
  132. data/lib/puppet/pops/adaptable.rb +2 -2
  133. data/lib/puppet/pops/adapters.rb +4 -0
  134. data/lib/puppet/pops/binder/binder.rb +421 -0
  135. data/lib/puppet/pops/binder/binder_issues.rb +142 -0
  136. data/lib/puppet/pops/binder/bindings_checker.rb +217 -0
  137. data/lib/puppet/pops/binder/bindings_composer.rb +241 -0
  138. data/lib/puppet/pops/binder/bindings_factory.rb +847 -0
  139. data/lib/puppet/pops/binder/bindings_label_provider.rb +46 -0
  140. data/lib/puppet/pops/binder/bindings_loader.rb +79 -0
  141. data/lib/puppet/pops/binder/bindings_model.rb +215 -0
  142. data/lib/puppet/pops/binder/bindings_model_dumper.rb +205 -0
  143. data/lib/puppet/pops/binder/bindings_validator_factory.rb +28 -0
  144. data/lib/puppet/pops/binder/config/binder_config.rb +139 -0
  145. data/lib/puppet/pops/binder/config/binder_config_checker.rb +183 -0
  146. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +32 -0
  147. data/lib/puppet/pops/binder/config/issues.rb +106 -0
  148. data/lib/puppet/pops/binder/hiera2.rb +10 -0
  149. data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +148 -0
  150. data/lib/puppet/pops/binder/hiera2/config.rb +69 -0
  151. data/lib/puppet/pops/binder/hiera2/config_checker.rb +68 -0
  152. data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +36 -0
  153. data/lib/puppet/pops/binder/hiera2/issues.rb +67 -0
  154. data/lib/puppet/pops/binder/hiera2/json_backend.rb +18 -0
  155. data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +21 -0
  156. data/lib/puppet/pops/binder/injector.rb +688 -0
  157. data/lib/puppet/pops/binder/injector_entry.rb +53 -0
  158. data/lib/puppet/pops/binder/key_factory.rb +61 -0
  159. data/lib/puppet/pops/binder/producers.rb +829 -0
  160. data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +67 -0
  161. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +34 -0
  162. data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +92 -0
  163. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +84 -0
  164. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +54 -0
  165. data/lib/puppet/pops/binder/system_bindings.rb +72 -0
  166. data/lib/puppet/pops/issue_reporter.rb +75 -0
  167. data/lib/puppet/pops/issues.rb +9 -5
  168. data/lib/puppet/pops/model/ast_transformer.rb +4 -4
  169. data/lib/puppet/pops/model/ast_tree_dumper.rb +1 -1
  170. data/lib/puppet/pops/model/factory.rb +25 -13
  171. data/lib/puppet/pops/model/model.rb +1 -1
  172. data/lib/puppet/pops/model/tree_dumper.rb +2 -2
  173. data/lib/puppet/pops/parser/egrammar.ra +0 -1
  174. data/lib/puppet/pops/parser/eparser.rb +1 -2
  175. data/lib/puppet/pops/parser/evaluating_parser.rb +162 -0
  176. data/lib/puppet/pops/parser/lexer.rb +8 -6
  177. data/lib/puppet/pops/types/class_loader.rb +118 -0
  178. data/lib/puppet/pops/types/type_calculator.rb +557 -0
  179. data/lib/puppet/pops/types/type_factory.rb +147 -0
  180. data/lib/puppet/pops/types/type_parser.rb +117 -0
  181. data/lib/puppet/pops/types/types.rb +132 -0
  182. data/lib/puppet/pops/validation.rb +146 -17
  183. data/lib/puppet/pops/validation/checker3_1.rb +1 -1
  184. data/lib/puppet/pops/validation/validator_factory_3_1.rb +6 -16
  185. data/lib/puppet/property.rb +3 -3
  186. data/lib/puppet/property/keyvalue.rb +1 -1
  187. data/lib/puppet/provider.rb +2 -2
  188. data/lib/puppet/provider/aixobject.rb +19 -21
  189. data/lib/puppet/provider/augeas/augeas.rb +3 -1
  190. data/lib/puppet/provider/command.rb +2 -2
  191. data/lib/puppet/provider/group/aix.rb +1 -1
  192. data/lib/puppet/provider/group/ldap.rb +1 -1
  193. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  194. data/lib/puppet/provider/mailalias/aliases.rb +3 -8
  195. data/lib/puppet/provider/mcx/mcxcontent.rb +7 -1
  196. data/lib/puppet/provider/mount.rb +8 -3
  197. data/lib/puppet/provider/nameservice.rb +1 -1
  198. data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
  199. data/lib/puppet/provider/package/appdmg.rb +1 -1
  200. data/lib/puppet/provider/package/apt.rb +0 -1
  201. data/lib/puppet/provider/package/dpkg.rb +86 -32
  202. data/lib/puppet/provider/package/fink.rb +0 -2
  203. data/lib/puppet/provider/package/freebsd.rb +0 -2
  204. data/lib/puppet/provider/package/openbsd.rb +57 -10
  205. data/lib/puppet/provider/package/opkg.rb +0 -1
  206. data/lib/puppet/provider/package/pacman.rb +0 -1
  207. data/lib/puppet/provider/package/pip.rb +1 -1
  208. data/lib/puppet/provider/package/pkgdmg.rb +17 -6
  209. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  210. data/lib/puppet/provider/package/portage.rb +9 -1
  211. data/lib/puppet/provider/package/ports.rb +2 -2
  212. data/lib/puppet/provider/package/rpm.rb +29 -12
  213. data/lib/puppet/provider/package/rug.rb +1 -1
  214. data/lib/puppet/provider/package/urpmi.rb +11 -15
  215. data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
  216. data/lib/puppet/provider/package/windows/package.rb +1 -26
  217. data/lib/puppet/provider/package/yum.rb +1 -1
  218. data/lib/puppet/provider/package/zypper.rb +22 -3
  219. data/lib/puppet/provider/parsedfile.rb +1 -12
  220. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +1 -1
  221. data/lib/puppet/provider/service/base.rb +1 -1
  222. data/lib/puppet/provider/service/daemontools.rb +3 -3
  223. data/lib/puppet/provider/service/debian.rb +1 -1
  224. data/lib/puppet/provider/service/init.rb +14 -20
  225. data/lib/puppet/provider/service/openrc.rb +3 -1
  226. data/lib/puppet/provider/service/redhat.rb +5 -8
  227. data/lib/puppet/provider/service/runit.rb +3 -2
  228. data/lib/puppet/provider/service/systemd.rb +1 -1
  229. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  230. data/lib/puppet/provider/sshkey/parsed.rb +0 -2
  231. data/lib/puppet/provider/user/aix.rb +25 -12
  232. data/lib/puppet/provider/user/directoryservice.rb +4 -7
  233. data/lib/puppet/provider/user/ldap.rb +0 -1
  234. data/lib/puppet/provider/user/user_role_add.rb +2 -0
  235. data/lib/puppet/provider/user/useradd.rb +1 -1
  236. data/lib/puppet/provider/zone/solaris.rb +1 -2
  237. data/lib/puppet/reference/metaparameter.rb +1 -1
  238. data/lib/puppet/reference/type.rb +1 -1
  239. data/lib/puppet/reports/rrdgraph.rb +1 -1
  240. data/lib/puppet/reports/tagmail.rb +1 -1
  241. data/lib/puppet/resource.rb +16 -4
  242. data/lib/puppet/resource/catalog.rb +111 -173
  243. data/lib/puppet/resource/status.rb +42 -3
  244. data/lib/puppet/resource/type.rb +33 -46
  245. data/lib/puppet/resource/type_collection.rb +19 -15
  246. data/lib/puppet/run.rb +5 -1
  247. data/lib/puppet/scheduler/scheduler.rb +14 -15
  248. data/lib/puppet/settings.rb +78 -41
  249. data/lib/puppet/settings/boolean_setting.rb +0 -2
  250. data/lib/puppet/settings/config_file.rb +0 -2
  251. data/lib/puppet/settings/directory_setting.rb +0 -2
  252. data/lib/puppet/settings/duration_setting.rb +0 -2
  253. data/lib/puppet/settings/enum_setting.rb +16 -0
  254. data/lib/puppet/settings/file_setting.rb +0 -2
  255. data/lib/puppet/settings/path_setting.rb +0 -2
  256. data/lib/puppet/settings/string_setting.rb +0 -3
  257. data/lib/puppet/settings/terminus_setting.rb +0 -2
  258. data/lib/puppet/ssl/certificate_authority.rb +102 -9
  259. data/lib/puppet/test/test_helper.rb +1 -0
  260. data/lib/puppet/transaction.rb +130 -292
  261. data/lib/puppet/transaction/additional_resource_generator.rb +126 -0
  262. data/lib/puppet/transaction/event.rb +16 -1
  263. data/lib/puppet/transaction/report.rb +34 -14
  264. data/lib/puppet/transaction/resource_harness.rb +16 -19
  265. data/lib/puppet/type.rb +59 -53
  266. data/lib/puppet/type/component.rb +0 -2
  267. data/lib/puppet/type/cron.rb +13 -2
  268. data/lib/puppet/type/exec.rb +5 -7
  269. data/lib/puppet/type/file.rb +9 -32
  270. data/lib/puppet/type/file/content.rb +4 -1
  271. data/lib/puppet/type/file/ctime.rb +3 -1
  272. data/lib/puppet/type/file/ensure.rb +1 -1
  273. data/lib/puppet/type/file/mode.rb +0 -1
  274. data/lib/puppet/type/file/mtime.rb +2 -1
  275. data/lib/puppet/type/group.rb +7 -9
  276. data/lib/puppet/type/host.rb +1 -2
  277. data/lib/puppet/type/mcx.rb +0 -1
  278. data/lib/puppet/type/mount.rb +38 -6
  279. data/lib/puppet/type/package.rb +2 -2
  280. data/lib/puppet/type/resources.rb +5 -4
  281. data/lib/puppet/type/schedule.rb +1 -4
  282. data/lib/puppet/type/selmodule.rb +1 -1
  283. data/lib/puppet/type/service.rb +1 -3
  284. data/lib/puppet/type/tidy.rb +3 -3
  285. data/lib/puppet/type/user.rb +9 -13
  286. data/lib/puppet/type/yumrepo.rb +11 -7
  287. data/lib/puppet/util.rb +14 -7
  288. data/lib/puppet/util/autoload.rb +0 -1
  289. data/lib/puppet/util/backups.rb +1 -3
  290. data/lib/puppet/util/classgen.rb +1 -1
  291. data/lib/puppet/util/command_line/puppet_option_parser.rb +1 -3
  292. data/lib/puppet/util/command_line/trollop.rb +1 -1
  293. data/lib/puppet/util/constant_inflector.rb +1 -2
  294. data/lib/puppet/util/errors.rb +1 -0
  295. data/lib/puppet/util/file_watcher.rb +28 -0
  296. data/lib/puppet/util/fileparsing.rb +1 -3
  297. data/lib/puppet/util/filetype.rb +0 -1
  298. data/lib/puppet/util/http_proxy.rb +38 -0
  299. data/lib/puppet/util/ldap/manager.rb +1 -2
  300. data/lib/puppet/util/log.rb +31 -10
  301. data/lib/puppet/util/log/destinations.rb +0 -50
  302. data/lib/puppet/util/metric.rb +8 -1
  303. data/lib/puppet/util/monkey_patches.rb +14 -148
  304. data/lib/puppet/util/network_device/cisco/facts.rb +1 -1
  305. data/lib/puppet/util/network_device/config.rb +6 -9
  306. data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
  307. data/lib/puppet/util/pidlock.rb +3 -0
  308. data/lib/puppet/util/posix.rb +1 -1
  309. data/lib/puppet/util/profiler.rb +1 -1
  310. data/lib/puppet/util/rdoc.rb +1 -1
  311. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +0 -1
  312. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +50 -42
  313. data/lib/puppet/util/retryaction.rb +0 -1
  314. data/lib/puppet/util/symbolic_file_mode.rb +5 -1
  315. data/lib/puppet/util/tagging.rb +0 -2
  316. data/lib/puppet/util/warnings.rb +3 -0
  317. data/lib/puppet/util/watched_file.rb +37 -0
  318. data/lib/puppet/util/watcher.rb +17 -0
  319. data/lib/puppet/util/watcher/change_watcher.rb +33 -0
  320. data/lib/puppet/util/watcher/periodic_watcher.rb +37 -0
  321. data/lib/puppet/util/watcher/timer.rb +19 -0
  322. data/lib/puppet/util/windows/user.rb +1 -1
  323. data/lib/puppet/version.rb +1 -1
  324. data/lib/puppetx.rb +109 -0
  325. data/lib/puppetx/puppet/bindings_scheme_handler.rb +130 -0
  326. data/lib/puppetx/puppet/hiera2_backend.rb +31 -0
  327. data/lib/puppetx/puppet/syntax_checker.rb +91 -0
  328. data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +39 -0
  329. data/lib/semver.rb +1 -1
  330. data/man/man8/puppet-kick.8 +1 -1
  331. data/spec/fixtures/integration/provider/cron/crontab/unspecialized +15 -0
  332. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +18 -0
  333. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +8 -0
  334. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +1 -0
  335. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +10 -0
  336. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +19 -0
  337. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +1 -0
  338. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +11 -0
  339. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +1 -0
  340. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +3 -0
  341. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +13 -0
  342. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +4 -0
  343. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +11 -0
  344. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_scheme_handler.rb +18 -0
  345. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +1 -0
  346. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +3 -0
  347. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +9 -0
  348. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +2 -0
  349. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +11 -0
  350. data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +9 -0
  351. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +9 -0
  352. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +9 -0
  353. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +5 -0
  354. data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +10 -0
  355. data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +8 -0
  356. data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +1 -0
  357. data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +7 -0
  358. data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +4 -0
  359. data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +2 -0
  360. data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +8 -0
  361. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/empty/common.yaml +0 -0
  362. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +1 -0
  363. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +2 -0
  364. data/spec/fixtures/unit/provider/package/openbsd/pkginfo_flavors.list +2 -0
  365. data/spec/integration/agent/logging_spec.rb +178 -0
  366. data/spec/integration/configurer_spec.rb +1 -1
  367. data/spec/integration/defaults_spec.rb +0 -6
  368. data/spec/integration/network/authconfig_spec.rb +19 -0
  369. data/spec/integration/network/server/webrick_spec.rb +10 -11
  370. data/spec/integration/parser/catalog_spec.rb +85 -0
  371. data/spec/integration/provider/cron/crontab_spec.rb +11 -0
  372. data/spec/integration/provider/mount_spec.rb +1 -0
  373. data/spec/integration/transaction_spec.rb +8 -8
  374. data/spec/integration/type/file_spec.rb +1 -1
  375. data/spec/integration/util/settings_spec.rb +58 -11
  376. data/spec/lib/matchers/include_in_order.rb +21 -0
  377. data/spec/lib/matchers/include_in_order_spec.rb +30 -0
  378. data/spec/lib/matchers/relationship_graph_matchers.rb +48 -0
  379. data/spec/lib/puppet_spec/compiler.rb +24 -0
  380. data/spec/lib/puppet_spec/pops.rb +16 -0
  381. data/spec/spec_helper.rb +0 -1
  382. data/spec/unit/application/agent_spec.rb +145 -145
  383. data/spec/unit/application/apply_spec.rb +1 -1
  384. data/spec/unit/application/doc_spec.rb +1 -1
  385. data/spec/unit/application/face_base_spec.rb +3 -3
  386. data/spec/unit/application/facts_spec.rb +1 -0
  387. data/spec/unit/application/master_spec.rb +0 -15
  388. data/spec/unit/application/queue_spec.rb +6 -12
  389. data/spec/unit/application/resource_spec.rb +1 -1
  390. data/spec/unit/configurer/fact_handler_spec.rb +19 -50
  391. data/spec/unit/configurer_spec.rb +23 -7
  392. data/spec/unit/daemon_spec.rb +97 -121
  393. data/spec/unit/defaults_spec.rb +44 -0
  394. data/spec/unit/face/node_spec.rb +2 -2
  395. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -33
  396. data/spec/unit/file_serving/configuration_spec.rb +2 -2
  397. data/spec/unit/file_serving/mount/file_spec.rb +4 -4
  398. data/spec/unit/forge/repository_spec.rb +9 -29
  399. data/spec/unit/graph/key_spec.rb +41 -0
  400. data/spec/unit/{rb_tree_map_spec.rb → graph/rb_tree_map_spec.rb} +7 -7
  401. data/spec/unit/graph/relationship_graph_spec.rb +393 -0
  402. data/spec/unit/graph/sequential_prioritizer_spec.rb +32 -0
  403. data/spec/unit/{simple_graph_spec.rb → graph/simple_graph.rb} +42 -254
  404. data/spec/unit/graph/title_hash_prioritizer_spec.rb +49 -0
  405. data/spec/unit/hiera_puppet_spec.rb +1 -1
  406. data/spec/unit/indirector/catalog/active_record_spec.rb +4 -2
  407. data/spec/unit/indirector/catalog/compiler_spec.rb +20 -26
  408. data/spec/unit/indirector/face_spec.rb +1 -1
  409. data/spec/unit/indirector/facts/facter_spec.rb +11 -1
  410. data/spec/unit/indirector/facts/network_device_spec.rb +11 -1
  411. data/spec/unit/indirector/hiera_spec.rb +1 -1
  412. data/spec/unit/indirector/instrumentation_data/local_spec.rb +1 -1
  413. data/spec/unit/indirector/instrumentation_listener/local_spec.rb +1 -1
  414. data/spec/unit/indirector/request_spec.rb +92 -39
  415. data/spec/unit/indirector/rest_spec.rb +1 -0
  416. data/spec/unit/indirector_spec.rb +2 -2
  417. data/spec/unit/interface/option_builder_spec.rb +1 -0
  418. data/spec/unit/interface/option_spec.rb +1 -0
  419. data/spec/unit/interface_spec.rb +2 -2
  420. data/spec/unit/module_tool/applications/installer_spec.rb +49 -2
  421. data/spec/unit/module_tool/metadata_spec.rb +13 -0
  422. data/spec/unit/network/authstore_spec.rb +1 -1
  423. data/spec/unit/network/format_handler_spec.rb +33 -282
  424. data/spec/unit/network/format_support_spec.rb +199 -0
  425. data/spec/unit/network/formats_spec.rb +2 -2
  426. data/spec/unit/network/http/connection_spec.rb +88 -7
  427. data/spec/unit/network/http/handler_spec.rb +271 -249
  428. data/spec/unit/network/http/rack/rest_spec.rb +1 -1
  429. data/spec/unit/network/http/webrick/rest_spec.rb +73 -22
  430. data/spec/unit/network/http_pool_spec.rb +40 -0
  431. data/spec/unit/network/server_spec.rb +18 -207
  432. data/spec/unit/node/facts_spec.rb +68 -17
  433. data/spec/unit/other/selinux_spec.rb +24 -20
  434. data/spec/unit/parameter/boolean_spec.rb +25 -0
  435. data/spec/unit/parameter/value_collection_spec.rb +7 -7
  436. data/spec/unit/parameter_spec.rb +10 -13
  437. data/spec/unit/parser/ast/function_spec.rb +4 -4
  438. data/spec/unit/parser/ast/leaf_spec.rb +45 -6
  439. data/spec/unit/parser/collector_spec.rb +3 -3
  440. data/spec/unit/parser/compiler_spec.rb +4 -3
  441. data/spec/unit/parser/functions/create_resources_spec.rb +9 -25
  442. data/spec/unit/parser/functions/extlookup_spec.rb +2 -2
  443. data/spec/unit/parser/functions/hiera_include_spec.rb +12 -0
  444. data/spec/unit/parser/functions/lookup_spec.rb +96 -0
  445. data/spec/unit/parser/functions/regsubst_spec.rb +2 -2
  446. data/spec/unit/parser/functions/split_spec.rb +2 -2
  447. data/spec/unit/parser/functions/sprintf_spec.rb +1 -1
  448. data/spec/unit/parser/functions/versioncmp_spec.rb +2 -2
  449. data/spec/unit/parser/functions_spec.rb +7 -7
  450. data/spec/unit/parser/lexer_spec.rb +1 -1
  451. data/spec/unit/parser/methods/collect_spec.rb +43 -0
  452. data/spec/unit/parser/resource_spec.rb +9 -9
  453. data/spec/unit/parser/scope_spec.rb +45 -2
  454. data/spec/unit/parser/type_loader_spec.rb +159 -175
  455. data/spec/unit/pops/binder/binder_spec.rb +62 -0
  456. data/spec/unit/pops/binder/bindings_checker_spec.rb +196 -0
  457. data/spec/unit/pops/binder/bindings_composer_spec.rb +89 -0
  458. data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +18 -0
  459. data/spec/unit/pops/binder/config/binder_config_spec.rb +48 -0
  460. data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +74 -0
  461. data/spec/unit/pops/binder/hiera2/config_spec.rb +61 -0
  462. data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +33 -0
  463. data/spec/unit/pops/binder/injector_spec.rb +789 -0
  464. data/spec/unit/pops/containment_spec.rb +1 -0
  465. data/spec/unit/pops/issues_spec.rb +1 -1
  466. data/spec/unit/pops/parser/evaluating_parser_spec.rb +88 -0
  467. data/spec/unit/pops/parser/lexer_spec.rb +1 -1
  468. data/spec/unit/pops/parser/parse_calls_spec.rb +4 -0
  469. data/spec/unit/pops/parser/parser_spec.rb +1 -1
  470. data/spec/unit/pops/types/type_calculator_spec.rb +484 -0
  471. data/spec/unit/pops/types/type_factory_spec.rb +65 -0
  472. data/spec/unit/pops/types/type_parser_spec.rb +93 -0
  473. data/spec/unit/property/list_spec.rb +1 -1
  474. data/spec/unit/property/ordered_list_spec.rb +1 -1
  475. data/spec/unit/provider/aixobject_spec.rb +101 -0
  476. data/spec/unit/provider/augeas/augeas_spec.rb +14 -3
  477. data/spec/unit/provider/mcx/mcxcontent_spec.rb +52 -16
  478. data/spec/unit/provider/mount/parsed_spec.rb +44 -56
  479. data/spec/unit/provider/mount_spec.rb +11 -2
  480. data/spec/unit/provider/naginator_spec.rb +8 -0
  481. data/spec/unit/provider/package/apt_spec.rb +5 -1
  482. data/spec/unit/provider/package/aptitude_spec.rb +9 -5
  483. data/spec/unit/provider/package/aptrpm_spec.rb +2 -2
  484. data/spec/unit/provider/package/dpkg_spec.rb +274 -99
  485. data/spec/unit/provider/package/openbsd_spec.rb +84 -1
  486. data/spec/unit/provider/package/opkg_spec.rb +3 -3
  487. data/spec/unit/provider/package/pip_spec.rb +16 -0
  488. data/spec/unit/provider/package/pkgdmg_spec.rb +62 -7
  489. data/spec/unit/provider/package/rpm_spec.rb +112 -21
  490. data/spec/unit/provider/package/urpmi.rb +80 -0
  491. data/spec/unit/provider/package/windows/exe_package_spec.rb +1 -1
  492. data/spec/unit/provider/package/yum_spec.rb +85 -0
  493. data/spec/unit/provider/package/zypper_spec.rb +25 -6
  494. data/spec/unit/provider/parsedfile_spec.rb +3 -2
  495. data/spec/unit/provider/service/init_spec.rb +10 -10
  496. data/spec/unit/provider/service/openrc_spec.rb +16 -0
  497. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  498. data/spec/unit/provider/service/redhat_spec.rb +7 -0
  499. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +2 -2
  500. data/spec/unit/provider/user/aix_spec.rb +89 -0
  501. data/spec/unit/provider/user/directoryservice_spec.rb +11 -4
  502. data/spec/unit/provider/user/user_role_add_spec.rb +18 -0
  503. data/spec/unit/provider_spec.rb +2 -13
  504. data/spec/unit/reports/http_spec.rb +1 -1
  505. data/spec/unit/resource/catalog_spec.rb +23 -97
  506. data/spec/unit/resource/resource_type.json +34 -0
  507. data/spec/unit/resource/status_spec.rb +56 -0
  508. data/spec/unit/resource/type_collection_spec.rb +6 -6
  509. data/spec/unit/resource/type_spec.rb +25 -5
  510. data/spec/unit/resource_spec.rb +68 -24
  511. data/spec/unit/run_spec.rb +16 -0
  512. data/spec/unit/scheduler/scheduler_spec.rb +14 -27
  513. data/spec/unit/semver_spec.rb +5 -0
  514. data/spec/unit/settings/enum_setting_spec.rb +27 -0
  515. data/spec/unit/settings_spec.rb +53 -44
  516. data/spec/unit/ssl/certificate_authority_spec.rb +155 -19
  517. data/spec/unit/transaction/additional_resource_generator_spec.rb +419 -0
  518. data/spec/unit/transaction/event_manager_spec.rb +2 -2
  519. data/spec/unit/transaction/event_spec.rb +57 -0
  520. data/spec/unit/transaction/report_spec.rb +66 -0
  521. data/spec/unit/transaction/resource_harness_spec.rb +27 -20
  522. data/spec/unit/transaction_spec.rb +182 -390
  523. data/spec/unit/type/augeas_spec.rb +3 -3
  524. data/spec/unit/type/component_spec.rb +0 -9
  525. data/spec/unit/type/computer_spec.rb +1 -1
  526. data/spec/unit/type/cron_spec.rb +2 -2
  527. data/spec/unit/type/exec_spec.rb +4 -2
  528. data/spec/unit/type/file/content_spec.rb +11 -0
  529. data/spec/unit/type/file/group_spec.rb +1 -1
  530. data/spec/unit/type/file_spec.rb +16 -8
  531. data/spec/unit/type/mount_spec.rb +445 -259
  532. data/spec/unit/type/package_spec.rb +4 -4
  533. data/spec/unit/type/resources_spec.rb +30 -1
  534. data/spec/unit/type/user_spec.rb +26 -3
  535. data/spec/unit/type/yumrepo_spec.rb +7 -27
  536. data/spec/unit/type/zone_spec.rb +4 -1
  537. data/spec/unit/type_spec.rb +66 -33
  538. data/spec/unit/util/backups_spec.rb +3 -3
  539. data/spec/unit/util/http_proxy_spec.rb +83 -0
  540. data/spec/unit/util/log_spec.rb +79 -8
  541. data/spec/unit/util/metric_spec.rb +12 -0
  542. data/spec/unit/util/monkey_patches_spec.rb +6 -0
  543. data/spec/unit/util/network_device/config_spec.rb +26 -64
  544. data/spec/unit/util/pidlock_spec.rb +4 -1
  545. data/spec/unit/util/tagging_spec.rb +5 -9
  546. data/spec/unit/util/warnings_spec.rb +1 -1
  547. data/spec/unit/util/watched_file_spec.rb +52 -0
  548. data/spec/unit/util/watcher/periodic_watcher_spec.rb +52 -0
  549. data/spec/unit/util/watcher_spec.rb +56 -0
  550. data/spec/unit/util_spec.rb +16 -0
  551. metadata +2767 -2576
  552. data/ext/debian/puppet.manpages +0 -32
  553. data/ext/osx/PackageInfo.plist +0 -36
  554. data/ext/osx/createpackage.sh +0 -187
  555. data/ext/redhat/rundir-perms.patch +0 -28
  556. data/lib/puppet/external/base64.rb +0 -19
  557. data/lib/puppet/util/graph.rb +0 -27
  558. data/lib/puppet/util/loadedfile.rb +0 -61
  559. data/lib/puppet/util/log_paths.rb +0 -22
  560. data/lib/puppet/util/subclass_loader.rb +0 -78
  561. data/spec/monkey_patches/publicize_methods.rb +0 -11
  562. data/spec/unit/util/loadedfile_spec.rb +0 -71
@@ -0,0 +1,46 @@
1
+ # A provider of labels for bindings model object, producing a human name for the model object.
2
+ # @api private
3
+ #
4
+ class Puppet::Pops::Binder::BindingsLabelProvider < Puppet::Pops::LabelProvider
5
+ def initialize
6
+ @@label_visitor ||= Puppet::Pops::Visitor.new(self,"label",0,0)
7
+ end
8
+
9
+ # Produces a label for the given object without article.
10
+ # @return [String] a human readable label
11
+ #
12
+ def label o
13
+ @@label_visitor.visit(o)
14
+ end
15
+
16
+ def label_PObjectType o ; "#{Puppet::Pops::Types::TypeFactory.label(o)}" end
17
+ def label_ProducerDescriptor o ; "Producer" end
18
+ def label_NonCachingProducerDescriptor o ; "Non Caching Producer" end
19
+ def label_ConstantProducerDescriptor o ; "Producer['#{o.value}']" end
20
+ def label_EvaluatingProducerDescriptor o ; "Evaluating Producer" end
21
+ def label_InstanceProducerDescriptor o ; "Producer[#{o.class_name}]" end
22
+ def label_LookupProducerDescriptor o ; "Lookup Producer[#{o.name}]" end
23
+ def label_HashLookupProducerDescriptor o ; "Hash Lookup Producer[#{o.name}][#{o.key}]" end
24
+ def label_FirstFoundProducerDescriptor o ; "First Found Producer" end
25
+ def label_ProducerProducerDescriptor o ; "Producer[Producer]" end
26
+ def label_MultibindProducerDescriptor o ; "Multibind Producer" end
27
+ def label_ArrayMultibindProducerDescriptor o ; "Array Multibind Producer" end
28
+ def label_HashMultibindProducerDescriptor o ; "Hash Multibind Producer" end
29
+ def label_Bindings o ; "Bindings" end
30
+ def label_NamedBindings o ; "Named Bindings" end
31
+ def label_Category o ; "Category '#{o.categorization}/#{o.value}'" end
32
+ def label_CategorizedBindings o ; "Categorized Bindings" end
33
+ def label_LayeredBindings o ; "Layered Bindings" end
34
+ def label_NamedLayer o ; "Layer '#{o.name}'" end
35
+ def label_EffectiveCategories o ; "Effective Categories" end
36
+ def label_ContributedBindings o ; "Contributed Bindings" end
37
+ def label_NamedArgument o ; "Named Argument" end
38
+
39
+ def label_Binding(o)
40
+ 'Binding' + (o.multibind_id.nil? ? '' : ' In Multibind')
41
+ end
42
+ def label_Multibinding(o)
43
+ 'Multibinding' + (o.multibind_id.nil? ? '' : ' In Multibind')
44
+ end
45
+
46
+ end
@@ -0,0 +1,79 @@
1
+ require 'rgen/metamodel_builder'
2
+
3
+ # The ClassLoader provides a Class instance given a class name or a meta-type.
4
+ # If the class is not already loaded, it is loaded using the Puppet Autoloader.
5
+ # This means it can load a class from a gem, or from puppet modules.
6
+ #
7
+ class Puppet::Pops::Binder::BindingsLoader
8
+ @autoloader = Puppet::Util::Autoload.new("BindingsLoader", "puppet/bindings", :wrap => false)
9
+
10
+ # Returns a XXXXX given a fully qualified class name.
11
+ # Lookup of class is never relative to the calling namespace.
12
+ # @param name [String, Array<String>, Array<Symbol>, Puppet::Pops::Types::PObjectType] A fully qualified
13
+ # class name String (e.g. '::Foo::Bar', 'Foo::Bar'), a PObjectType, or a fully qualified name in Array form where each part
14
+ # is either a String or a Symbol, e.g. `%w{Puppetx Puppetlabs SomeExtension}`.
15
+ # @return [Class, nil] the looked up class or nil if no such class is loaded
16
+ # @raise ArgumentError If the given argument has the wrong type
17
+ # @api public
18
+ #
19
+ def self.provide(scope, name)
20
+ case name
21
+ when String
22
+ provide_from_string(scope, name)
23
+
24
+ when Array
25
+ provide_from_name_path(scope, name.join('::'), name)
26
+
27
+ else
28
+ raise ArgumentError, "Cannot provide a bindings from a '#{name.class.name}'"
29
+ end
30
+ end
31
+
32
+ # If loadable name exists relative to a a basedir or not. Returns the loadable path as a side effect.
33
+ # @return [String, nil] a loadable path for the given name, or nil
34
+ #
35
+ def self.loadable?(basedir, name)
36
+ # note, "lib" is added by the autoloader
37
+ #
38
+ paths_for_name(name).find {|p| File.exists?(File.join(basedir, "lib/puppet/bindings", p)+'.rb') }
39
+ end
40
+
41
+ private
42
+
43
+ def self.provide_from_string(scope, name)
44
+ name_path = name.split('::')
45
+ # always from the root, so remove an empty first segment
46
+ if name_path[0].empty?
47
+ name_path = name_path[1..-1]
48
+ end
49
+ provide_from_name_path(scope, name, name_path)
50
+ end
51
+
52
+ def self.provide_from_name_path(scope, name, name_path)
53
+ # If bindings is already loaded, try this first
54
+ result = Puppet::Bindings.resolve(scope, name)
55
+
56
+ unless result
57
+ # Attempt to load it using the auto loader
58
+ paths_for_name(name).find {|path| @autoloader.load(path) }
59
+ result = Puppet::Bindings.resolve(scope, name)
60
+ end
61
+ result
62
+ end
63
+
64
+ def self.paths_for_name(fq_name)
65
+ [de_camel(fq_name), downcased_path(fq_name)]
66
+ end
67
+
68
+ def self.downcased_path(fq_name)
69
+ fq_name.to_s.gsub(/::/, '/').downcase
70
+ end
71
+
72
+ def self.de_camel(fq_name)
73
+ fq_name.to_s.gsub(/::/, '/').
74
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
75
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
76
+ tr("-", "_").
77
+ downcase
78
+ end
79
+ end
@@ -0,0 +1,215 @@
1
+ require 'rgen/metamodel_builder'
2
+
3
+ # The Bindings model is a model of Key to Producer mappings (bindings).
4
+ # The central concept is that a Bindings is a nested structure of bindings.
5
+ # A top level Bindings should be a NamedBindings (the name is used primarily
6
+ # in error messages). A Key is a Type/Name combination.
7
+ #
8
+ # TODO: In this version, references to "any object" uses the class Object,
9
+ # but this is only temporary. The intent is to use specific Puppet Objects
10
+ # that are typed using the Puppet Type System (to enable serialization).
11
+ #
12
+ # @see Puppet::Pops::Binder::BindingsFactory The BindingsFactory for more details on how to create model instances.
13
+ # @api public
14
+ module Puppet::Pops::Binder::Bindings
15
+
16
+ # @abstract
17
+ # @api public
18
+ #
19
+ class AbstractBinding < Puppet::Pops::Model::PopsObject
20
+ abstract
21
+ end
22
+
23
+ # An abstract producer
24
+ # @abstract
25
+ # @api public
26
+ #
27
+ class ProducerDescriptor < Puppet::Pops::Model::PopsObject
28
+ abstract
29
+ contains_one_uni 'transformer', Puppet::Pops::Model::LambdaExpression
30
+ end
31
+
32
+ # All producers are singleton producers unless wrapped in a non caching producer
33
+ # where each lookup produces a new instance. It is an error to have a nesting level > 1
34
+ # and to nest a NonCachingProducerDescriptor.
35
+ #
36
+ # @api public
37
+ #
38
+ class NonCachingProducerDescriptor < ProducerDescriptor
39
+ contains_one_uni 'producer', ProducerDescriptor
40
+ end
41
+
42
+ # Produces a constant value (i.e. something of {Puppet::Pops::Types::PDataType PDataType})
43
+ # @api public
44
+ #
45
+ class ConstantProducerDescriptor < ProducerDescriptor
46
+ # TODO: This should be a typed Puppet Object
47
+ has_attr 'value', Object
48
+ end
49
+
50
+ # Produces a value by evaluating a Puppet DSL expression
51
+ # @api public
52
+ #
53
+ class EvaluatingProducerDescriptor < ProducerDescriptor
54
+ contains_one_uni 'expression', Puppet::Pops::Model::Expression
55
+ end
56
+
57
+ # An InstanceProducer creates an instance of the given class
58
+ # Arguments are passed to the class' `new` operator in the order they are given.
59
+ # @api public
60
+ #
61
+ class InstanceProducerDescriptor < ProducerDescriptor
62
+ # TODO: This should be a typed Puppet Object ??
63
+ has_many_attr 'arguments', Object, :upperBound => -1
64
+ has_attr 'class_name', String
65
+ end
66
+
67
+ # A ProducerProducerDescriptor, describes that the produced instance is itself a Producer
68
+ # that should be used to produce the value.
69
+ # @api public
70
+ #
71
+ class ProducerProducerDescriptor < ProducerDescriptor
72
+ contains_one_uni 'producer', ProducerDescriptor, :lowerBound => 1
73
+ end
74
+
75
+ # Produces a value by looking up another key (type/name)
76
+ # @api public
77
+ #
78
+ class LookupProducerDescriptor < ProducerDescriptor
79
+ contains_one_uni 'type', Puppet::Pops::Types::PObjectType
80
+ has_attr 'name', String
81
+ end
82
+
83
+ # Produces a value by looking up another multibound key, and then looking up
84
+ # the detail using a detail_key.
85
+ # This is used to produce a specific service of a given type (such as a SyntaxChecker for the syntax "json").
86
+ # @api public
87
+ #
88
+ class HashLookupProducerDescriptor < LookupProducerDescriptor
89
+ has_attr 'key', String
90
+ end
91
+
92
+ # Produces a value by looking up each producer in turn. The first existing producer wins.
93
+ # @api public
94
+ #
95
+ class FirstFoundProducerDescriptor < ProducerDescriptor
96
+ contains_many_uni 'producers', LookupProducerDescriptor
97
+ end
98
+
99
+ # @api public
100
+ # @abstract
101
+ class MultibindProducerDescriptor < ProducerDescriptor
102
+ abstract
103
+ end
104
+
105
+ # Used in a Multibind of Array type unless it has a producer. May explicitly be used as well.
106
+ # @api public
107
+ #
108
+ class ArrayMultibindProducerDescriptor < MultibindProducerDescriptor
109
+ end
110
+
111
+ # Used in a Multibind of Hash type unless it has a producer. May explicitly be used as well.
112
+ # @api public
113
+ #
114
+ class HashMultibindProducerDescriptor < MultibindProducerDescriptor
115
+ end
116
+
117
+ # Plays the role of "Hash[String, Object] entry" but with keys in defined order.
118
+ #
119
+ # @api public
120
+ #
121
+ class NamedArgument < Puppet::Pops::Model::PopsObject
122
+ has_attr 'name', String, :lowerBound => 1
123
+ has_attr 'value', Object, :lowerBound => 1
124
+ end
125
+
126
+ # Binds a type/name combination to a producer. Optionally marking the bindidng as being abstract, or being an
127
+ # override of another binding. Optionally, the binding defines producer arguments passed to the producer when
128
+ # it is created.
129
+ #
130
+ # @api public
131
+ class Binding < AbstractBinding
132
+ contains_one_uni 'type', Puppet::Pops::Types::PObjectType
133
+ has_attr 'name', String
134
+ has_attr 'override', Boolean
135
+ has_attr 'abstract', Boolean
136
+ # If set is a contribution in a multibind
137
+ has_attr 'multibind_id', String, :lowerBound => 0
138
+ # Invariant: Only multibinds may have lowerBound 0, all regular Binding must have a producer.
139
+ contains_one_uni 'producer', ProducerDescriptor, :lowerBound => 0
140
+ contains_many_uni 'producer_args', NamedArgument, :lowerBound => 0
141
+ end
142
+
143
+
144
+ # A multibinding is a binding other bindings can contribute to.
145
+ #
146
+ # @api public
147
+ class Multibinding < Binding
148
+ has_attr 'id', String
149
+ end
150
+
151
+ # A container of Binding instances
152
+ # @api public
153
+ #
154
+ class Bindings < AbstractBinding
155
+ contains_many_uni 'bindings', AbstractBinding
156
+ end
157
+
158
+ # The top level container of bindings can have a name (for error messages, logging, tracing).
159
+ # May be nested.
160
+ # @api public
161
+ #
162
+ class NamedBindings < Bindings
163
+ has_attr 'name', String
164
+ end
165
+
166
+ # A category predicate (the request has to be in this category).
167
+ # @api public
168
+ #
169
+ class Category < Puppet::Pops::Model::PopsObject
170
+ has_attr 'categorization', String, :lowerBound => 1
171
+ has_attr 'value', String, :lowerBound => 1
172
+ end
173
+
174
+ # A container of Binding instances that are in effect when the
175
+ # predicates (min one) evaluates to true. Multiple predicates are handles as an 'and'.
176
+ # Note that 'or' semantics are handled by repeating the same rules.
177
+ # @api public
178
+ #
179
+ class CategorizedBindings < Bindings
180
+ contains_many_uni 'predicates', Category, :lowerBound => 1
181
+ end
182
+
183
+ # A named layer of bindings having the same priority.
184
+ # @api public
185
+ class NamedLayer < Puppet::Pops::Model::PopsObject
186
+ has_attr 'name', String, :lowerBound => 1
187
+ contains_many_uni 'bindings', NamedBindings
188
+ end
189
+
190
+ # A list of layers with bindings in descending priority order.
191
+ # @api public
192
+ #
193
+ class LayeredBindings < Puppet::Pops::Model::PopsObject
194
+ contains_many_uni 'layers', NamedLayer
195
+ end
196
+
197
+ # A list of categories consisting of categroization name and category value (i.e. the *state of the request*)
198
+ # @api public
199
+ #
200
+ class EffectiveCategories < Puppet::Pops::Model::PopsObject
201
+ # The order is from highest precedence to lowest
202
+ contains_many_uni 'categories', Category
203
+ end
204
+
205
+ # ContributedBindings is a named container of one or more NamedBindings.
206
+ # The intent is that a bindings producer returns a ContributedBindings which in addition to the bindings
207
+ # may optionally contain provider's opinion about the precedence of categories, and their category values.
208
+ # This enables merging of bindings, and validation of consistency.
209
+ #
210
+ # @api public
211
+ #
212
+ class ContributedBindings < NamedLayer
213
+ contains_one_uni 'effective_categories', EffectiveCategories
214
+ end
215
+ end
@@ -0,0 +1,205 @@
1
+
2
+ # Dumps a Pops::Binder::Bindings model in reverse polish notation; i.e. LISP style
3
+ # The intention is to use this for debugging output
4
+ # TODO: BAD NAME - A DUMP is a Ruby Serialization
5
+ # NOTE: use :break, :indent, :dedent in lists to do just that
6
+ #
7
+ class Puppet::Pops::Binder::BindingsModelDumper < Puppet::Pops::Model::TreeDumper
8
+ Bindings = Puppet::Pops::Binder::Bindings
9
+
10
+ attr_reader :type_calculator
11
+ attr_reader :expression_dumper
12
+
13
+ def initialize
14
+ super
15
+ @type_calculator = Puppet::Pops::Types::TypeCalculator.new()
16
+ @expression_dumper = Puppet::Pops::Model::ModelTreeDumper.new()
17
+ end
18
+
19
+ def dump_BindingsFactory o
20
+ do_dump(o.model)
21
+ end
22
+
23
+ def dump_BindingsBuilder o
24
+ do_dump(o.model)
25
+ end
26
+
27
+ def dump_BindingsContainerBuilder o
28
+ do_dump(o.model)
29
+ end
30
+
31
+ def dump_NamedLayer o
32
+ result = ['named-layer', (o.name.nil? ? '<no-name>': o.name), :indent]
33
+ if o.bindings
34
+ o.bindings.each do |b|
35
+ result << :break
36
+ result << do_dump(b)
37
+ end
38
+ end
39
+ result << :dedent
40
+ result
41
+ end
42
+
43
+
44
+ def dump_Array o
45
+ o.collect {|e| do_dump(e) }
46
+ end
47
+
48
+ def dump_ASTArray o
49
+ ["[]"] + o.children.collect {|x| do_dump(x)}
50
+ end
51
+
52
+ def dump_ASTHash o
53
+ ["{}"] + o.value.sort_by{|k,v| k.to_s}.collect {|x| [do_dump(x[0]), do_dump(x[1])]}
54
+ end
55
+
56
+ def dump_Integer o
57
+ o.to_s
58
+ end
59
+
60
+ # Dump a Ruby String in single quotes unless it is a number.
61
+ def dump_String o
62
+ "'#{o}'"
63
+ end
64
+
65
+ def dump_NilClass o
66
+ "()"
67
+ end
68
+
69
+ def dump_Object o
70
+ ['dev-error-no-polymorph-dump-for:', o.class.to_s, o.to_s]
71
+ end
72
+
73
+ def is_nop? o
74
+ o.nil? || o.is_a?(Model::Nop) || o.is_a?(AST::Nop)
75
+ end
76
+
77
+ def dump_ProducerDescriptor o
78
+ result = [o.class.name]
79
+ result << expression_dumper.dump(o.transformer) if o.transformer
80
+ result
81
+ end
82
+
83
+ def dump_NonCachingProducerDescriptor o
84
+ dump_ProducerDescriptor(o) + do_dump(o.producer)
85
+ end
86
+
87
+ def dump_ConstantProducerDescriptor o
88
+ ['constant', do_dump(o.value)]
89
+ end
90
+
91
+ def dump_EvaluatingProducerDescriptor o
92
+ result = dump_ProducerDescriptor(o)
93
+ result << expression_dumper.dump(o.expression)
94
+ end
95
+
96
+ def dump_InstanceProducerDescriptor
97
+ # TODO: o.arguments, o. transformer
98
+ ['instance', o.class_name]
99
+ end
100
+
101
+ def dump_ProducerProducerDescriptor o
102
+ # skip the transformer lambda...
103
+ result = ['producer-producer', do_dump(o.producer)]
104
+ result << expression_dumper.dump(o.transformer) if o.transformer
105
+ result
106
+ end
107
+
108
+ def dump_LookupProducerDescriptor o
109
+ ['lookup', do_dump(o.type), o.name]
110
+ end
111
+
112
+ def dump_PObjectType o
113
+ type_calculator.string(o)
114
+ end
115
+
116
+ def dump_HashLookupProducerDescriptor o
117
+ # TODO: transformer lambda
118
+ result = ['hash-lookup', do_dump(o.type), o.name, "[#{do_dump(o.key)}]"]
119
+ result << expression_dumper.dump(o.transformer) if o.transformer
120
+ result
121
+ end
122
+
123
+ def dump_FirstFoundProducerDescriptor o
124
+ # TODO: transformer lambda
125
+ ['first-found', do_dump(o.producers)]
126
+ end
127
+
128
+ def dump_ArrayMultibindProducerDescriptor o
129
+ ['multibind-array']
130
+ end
131
+
132
+ def dump_HashMultibindProducerDescriptor o
133
+ ['multibind-hash']
134
+ end
135
+
136
+ def dump_NamedArgument o
137
+ "#{o.name} => #{do_dump(o.value)}"
138
+ end
139
+
140
+ def dump_Binding o
141
+ result = ['bind']
142
+ result << 'override' if o.override
143
+ result << 'abstract' if o.abstract
144
+ result.concat([do_dump(o.type), o.name])
145
+ result << "(in #{o.multibind_id})" if o.multibind_id
146
+ result << ['to', do_dump(o.producer)] + do_dump(o.producer_args)
147
+ result
148
+ end
149
+
150
+ def dump_Multibinding o
151
+ result = ['multibind', o.id]
152
+ result << 'override' if o.override
153
+ result << 'abstract' if o.abstract
154
+ result.concat([do_dump(o.type), o.name])
155
+ result << "(in #{o.multibind_id})" if o.multibind_id
156
+ result << ['to', do_dump(o.producer)] + do_dump(o.producer_args)
157
+ result
158
+ end
159
+
160
+ def dump_Bindings o
161
+ do_dump(o.bindings)
162
+ end
163
+
164
+ def dump_NamedBindings o
165
+ result = ['named-bindings', o.name, :indent]
166
+ o.bindings.each do |b|
167
+ result << :break
168
+ result << do_dump(b)
169
+ end
170
+ result << :dedent
171
+ result
172
+ end
173
+
174
+ def dump_Category o
175
+ ['category', o.categorization, do_dump(o.value)]
176
+ end
177
+
178
+ def dump_CategorizedBindings o
179
+ result = ['when', do_dump(o.predicates), :indent]
180
+ o.bindings.each do |b|
181
+ result << :break
182
+ result << do_dump(b)
183
+ end
184
+ result << :dedent
185
+ result
186
+ end
187
+
188
+ def dump_LayeredBindings o
189
+ result = ['layers', :indent]
190
+ o.layers.each do |layer|
191
+ result << :break
192
+ result << do_dump(layer)
193
+ end
194
+ result << :dedent
195
+ result
196
+ end
197
+
198
+ def dump_EffectiveCategories o
199
+ ['categories', do_dump(o.categories)]
200
+ end
201
+
202
+ def dump_ContributedBindings o
203
+ ['contributed', o.name, do_dump(o.effective_categories), do_dump(o.bindings)]
204
+ end
205
+ end