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
@@ -1,10 +1,5 @@
1
1
  require 'puppet/module'
2
- #require 'puppet/parser/parser'
3
2
 
4
- # This is a silly central module for finding
5
- # different kinds of files while parsing. This code
6
- # doesn't really belong in the Puppet::Module class,
7
- # but it doesn't really belong anywhere else, either.
8
3
  module Puppet; module Parser; module Files
9
4
 
10
5
  module_function
@@ -45,52 +45,29 @@ Puppet::Parser::Functions::newfunction(:create_resources, :arity => -3, :doc =>
45
45
  ENDHEREDOC
46
46
  raise ArgumentError, ("create_resources(): wrong number of arguments (#{args.length}; must be 2 or 3)") if args.length > 3
47
47
 
48
- # figure out what kind of resource we are
49
- type_of_resource = nil
50
- type_name = args[0].downcase
51
- type_exported, type_virtual = false
52
- if type_name.start_with? '@@'
53
- type_name = type_name[2..-1]
54
- type_exported = true
55
- elsif type_name.start_with? '@'
56
- type_name = type_name[1..-1]
57
- type_virtual = true
58
- end
59
- if type_name == 'class'
60
- type_of_resource = :class
61
- else
62
- if resource = Puppet::Type.type(type_name.to_sym)
63
- type_of_resource = :type
64
- elsif resource = find_definition(type_name.downcase)
65
- type_of_resource = :define
66
- else
67
- raise ArgumentError, "could not create resource of unknown type #{type_name}"
68
- end
48
+ type, instances, defaults = args
49
+ defaults ||= {}
50
+
51
+ resource = Puppet::Parser::AST::Resource.new(:type => type.sub(/^@{1,2}/, '').downcase, :instances =>
52
+ instances.collect do |title, params|
53
+ Puppet::Parser::AST::ResourceInstance.new(
54
+ :title => Puppet::Parser::AST::Leaf.new(:value => title),
55
+ :parameters => defaults.merge(params).collect do |name, value|
56
+ Puppet::Parser::AST::ResourceParam.new(
57
+ :param => name,
58
+ :value => Puppet::Parser::AST::Leaf.new(:value => value))
59
+ end)
60
+ end)
61
+
62
+ if type.start_with? '@@'
63
+ resource.exported = true
64
+ elsif type.start_with? '@'
65
+ resource.virtual = true
69
66
  end
70
- # iterate through the resources to create
71
- defaults = args[2] || {}
72
- args[1].each do |title, params|
73
- params = Puppet::Util.symbolizehash(defaults.merge(params))
74
- raise ArgumentError, 'params should not contain title' if(params[:title])
75
- case type_of_resource
76
- # JJM The only difference between a type and a define is the call to instantiate_resource
77
- # for a defined type.
78
- when :type, :define
79
- p_resource = Puppet::Parser::Resource.new(type_name, title, :scope => self, :source => resource)
80
- p_resource.virtual = type_virtual
81
- p_resource.exported = type_exported
82
- {:name => title}.merge(params).each do |k,v|
83
- p_resource.set_parameter(k,v)
84
- end
85
- if type_of_resource == :define then
86
- resource.instantiate_resource(self, p_resource)
87
- end
88
- compiler.add_resource(self, p_resource)
89
- when :class
90
- klass = find_hostclass(title)
91
- raise ArgumentError, "could not find hostclass #{title}" unless klass
92
- klass.ensure_in_catalog(self, params)
93
- compiler.catalog.add_class(title)
94
- end
67
+
68
+ begin
69
+ resource.safeevaluate(self)
70
+ rescue Puppet::ParseError => internal_error
71
+ raise internal_error.original
95
72
  end
96
73
  end
@@ -42,7 +42,6 @@ Puppet::Parser::Functions::newfunction(
42
42
  end
43
43
  enumerator = o.each
44
44
  index = 0
45
- result = nil
46
45
  if serving_size == 1
47
46
  (o.size).times do
48
47
  pblock.call(scope, enumerator.next)
@@ -68,7 +67,6 @@ Puppet::Parser::Functions::newfunction(
68
67
  raise ArgumentError, "Block must define at most two parameters (for hash entry key and value)."
69
68
  end
70
69
  enumerator = o.each_pair
71
- result = nil
72
70
  if serving_size == 1
73
71
  (o.size).times do
74
72
  pblock.call(scope, enumerator.next)
@@ -9,7 +9,7 @@ uses CSV files but the concept can easily be adjust for databases, yaml
9
9
  or any other queryable data source.
10
10
 
11
11
  The object of this is to make it obvious when it's being used, rather than
12
- magically loading data in when an module is loaded I prefer to look at the code
12
+ magically loading data in when a module is loaded I prefer to look at the code
13
13
  and see statements like:
14
14
 
15
15
  $snmp_contact = extlookup(\"snmp_contact\")
@@ -26,7 +26,7 @@ Over time there will be a lot of this kind of thing spread all over your manifes
26
26
  and adding an additional client involves grepping through manifests to find all the
27
27
  places where you have constructs like this.
28
28
 
29
- This is a data problem and shouldn't be handled in code, a using this function you
29
+ This is a data problem and shouldn't be handled in code, and using this function you
30
30
  can do just that.
31
31
 
32
32
  First you configure it in site.pp:
@@ -42,7 +42,6 @@ Puppet::Parser::Functions::newfunction(
42
42
  end
43
43
  enumerator = o.each
44
44
  index = 0
45
- result = nil
46
45
  if serving_size == 1
47
46
  (o.size).times do
48
47
  pblock.call(scope, enumerator.next)
@@ -68,7 +67,6 @@ Puppet::Parser::Functions::newfunction(
68
67
  raise ArgumentError, "Block must define at most two parameters (for hash entry key and value)."
69
68
  end
70
69
  enumerator = o.each_pair
71
- result = nil
72
70
  if serving_size == 1
73
71
  (o.size).times do
74
72
  pblock.call(scope, enumerator.next)
@@ -35,7 +35,7 @@ module Puppet::Parser::Functions
35
35
  key, default, override = HieraPuppet.parse_args(args)
36
36
  if answer = HieraPuppet.lookup(key, default, self, override, :array)
37
37
  method = Puppet::Parser::Functions.function(:include)
38
- send(method, answer)
38
+ send(method, [answer])
39
39
  else
40
40
  raise Puppet::ParseError, "Could not find data item #{key}"
41
41
  end
@@ -0,0 +1,44 @@
1
+ Puppet::Parser::Functions.newfunction(:lookup, :type => :rvalue, :arity => -2, :doc => <<-'ENDHEREDOC') do |args|
2
+ Looks up data defined using Puppet Bindings.
3
+ The function is callable with one or two arguments and optionally with a lambda to process the result.
4
+ The second argument can be a type specification; a String that describes the type of the produced result.
5
+ If a value is found, an assert is made that the value is compliant with the specified type.
6
+
7
+ When called with one argument; the name:
8
+
9
+ lookup('the_name')
10
+
11
+ When called with two arguments; the name, and the expected type:
12
+
13
+ lookup('the_name', 'String')
14
+
15
+ Using a lambda to process the looked up result.
16
+
17
+ lookup('the_name') |$result| { if $result == undef { 'Jane Doe' } else { $result }}
18
+
19
+ The type specification is one of:
20
+
21
+ * the basic types; 'Integer', 'String', 'Float', 'Boolean', or 'Pattern' (regular expression)
22
+ * an Array with an optional element type given in '[]', that when not given defaults to '[Data]'
23
+ * a Hash with optional key and value types given in '[]', where key type defaults to 'Literal' and value to 'Data', if
24
+ only one type is given, the key defaults to 'Literal'
25
+ * the abstract type 'Literal' which is one of the basic types
26
+ * the abstract type 'Data' which is 'Literal', or type compatible with Array[Data], or Hash[Literal, Data]
27
+ * the abstract type 'Collection' which is Array or Hash of any element type.
28
+ * the abstract type 'Object' which is any kind of type
29
+
30
+ ENDHEREDOC
31
+
32
+ unless Puppet[:binder] || Puppet[:parser] == 'future'
33
+ raise Puppet::ParseError, "The lookup function is only available with settings --binder true, or --parser future"
34
+ end
35
+ type_parser = Puppet::Pops::Types::TypeParser.new
36
+ pblock = args[-1] if args[-1].is_a?(Puppet::Parser::AST::Lambda)
37
+ type_name = args[1] unless args[1].is_a?(Puppet::Parser::AST::Lambda)
38
+ type = type_parser.parse( type_name || "Data")
39
+ result = compiler.injector.lookup(self, type, args[0])
40
+ if pblock
41
+ result = pblock.call(self, result.nil? ? :undef : result)
42
+ end
43
+ result.nil? ? :undef : result
44
+ end
@@ -79,7 +79,7 @@ Puppet::Parser::Functions::newfunction(
79
79
  end
80
80
  end
81
81
  raise ArgumentError, ("slice(): wrong argument type (#{args[1]}; must be number.") unless slice_size
82
- raise ArgumentError, ("slice(): wrong argument value: #{slice_size}; is not an positive integer number > 0") unless slice_size.is_a?(Fixnum) && slice_size > 0
82
+ raise ArgumentError, ("slice(): wrong argument value: #{slice_size}; is not a positive integer number > 0") unless slice_size.is_a?(Fixnum) && slice_size > 0
83
83
  receiver = args[0]
84
84
 
85
85
  # the block is optional, ok if nil, function then produces an array
@@ -783,7 +783,6 @@ hasharrayaccesses: hasharrayaccess
783
783
  end
784
784
  ---- header ----
785
785
  require 'puppet'
786
- require 'puppet/util/loadedfile'
787
786
  require 'puppet/parser/lexer'
788
787
  require 'puppet/parser/ast'
789
788
 
@@ -460,7 +460,6 @@ class Puppet::Parser::Lexer
460
460
  skip
461
461
 
462
462
  until token_queue.empty? and @scanner.eos? do
463
- yielded = false
464
463
  matched_token, value = find_token
465
464
 
466
465
  # error out if we didn't match anything at all
@@ -7,7 +7,6 @@
7
7
  require 'racc/parser.rb'
8
8
 
9
9
  require 'puppet'
10
- require 'puppet/util/loadedfile'
11
10
  require 'puppet/parser/lexer'
12
11
  require 'puppet/parser/ast'
13
12
 
@@ -29,7 +29,8 @@ module Puppet::Parser
29
29
  def self.eparser(environment)
30
30
  # Since RGen is optional, test that it is installed
31
31
  @@asserted ||= false
32
- assert_rgen_installed() unless @asserted
32
+ assert_rgen_installed() unless @@asserted
33
+ @@asserted = true
33
34
  require 'puppet/parser'
34
35
  require 'puppet/parser/e_parser_adapter'
35
36
  EParserAdapter.new(Puppet::Parser::Parser.new(environment))
@@ -53,7 +54,7 @@ module Puppet::Parser
53
54
  container.left_expr = litstring
54
55
  raise "no eContainer" if litstring.eContainer() != container
55
56
  raise "no eContainingFeature" if litstring.eContainingFeature() != :left_expr
56
- rescue =>e
57
+ rescue
57
58
  raise Puppet::DevError.new("The gem 'rgen' version >= 0.6.1 is required when using '--parser future'. An older version is installed, please update.")
58
59
  end
59
60
  end
@@ -69,7 +69,7 @@ class Puppet::Parser::Parser
69
69
 
70
70
  # Raise a Parse error.
71
71
  def error(message, options = {})
72
- if brace = @lexer.expected
72
+ if @lexer.expected
73
73
  message += "; expected '%s'"
74
74
  end
75
75
  except = Puppet::ParseError.new(message)
@@ -50,7 +50,7 @@ class Puppet::Parser::Relationship
50
50
  unless source_resource = catalog.resource(source)
51
51
  raise ArgumentError, "Could not find resource '#{source}' for relationship on '#{target}'"
52
52
  end
53
- unless target_resource = catalog.resource(target)
53
+ unless catalog.resource(target)
54
54
  raise ArgumentError, "Could not find resource '#{target}' for relationship from '#{source}'"
55
55
  end
56
56
  Puppet.debug "Adding relationship from #{source} to #{target} with '#{param_name}'"
@@ -74,6 +74,22 @@ class Puppet::Parser::Scope
74
74
  def parent
75
75
  @parent
76
76
  end
77
+
78
+ def add_entries_to(target = {})
79
+ @parent.add_entries_to(target) unless @parent.nil?
80
+ # do not return pure ephemeral ($0-$n)
81
+ if is_local_scope?
82
+ @symbols.each do |k, v|
83
+ if v == :undef
84
+ target.delete(k)
85
+ else
86
+ target[ k ] = v
87
+ end
88
+ end
89
+ end
90
+ target
91
+ end
92
+
77
93
  end
78
94
 
79
95
  # Initialize a new scope suitable for parser function testing. This method
@@ -182,7 +198,7 @@ class Puppet::Parser::Scope
182
198
  @tags = []
183
199
 
184
200
  # The symbol table for this scope. This is where we store variables.
185
- @symtable = Ephemeral.new
201
+ @symtable = Ephemeral.new(nil, true)
186
202
 
187
203
  @ephemeral = [ Ephemeral.new(@symtable) ]
188
204
 
@@ -267,7 +283,7 @@ class Puppet::Parser::Scope
267
283
  # @api public
268
284
  def lookupvar(name, options = {})
269
285
  unless name.is_a? String
270
- raise Puppet::DevError, "Scope variable name is a #{name.class}, not a string"
286
+ raise Puppet::ParseError, "Scope variable name #{name.inspect} is a #{name.class}, not a string"
271
287
  end
272
288
 
273
289
  table = @ephemeral.last
@@ -305,7 +321,7 @@ class Puppet::Parser::Scope
305
321
  # The scope of the inherited thing of this scope's resource. This could
306
322
  # either be a node that was inherited or the class.
307
323
  #
308
- # @returns [Puppet::Parser::Scope] The scope or nil if there is not an inherited scope
324
+ # @return [Puppet::Parser::Scope] The scope or nil if there is not an inherited scope
309
325
  def inherited_scope
310
326
  if has_inherited_class?
311
327
  qualified_scope(resource.resource_type.parent)
@@ -320,7 +336,7 @@ class Puppet::Parser::Scope
320
336
  # scope in which it was included. The chain of parent scopes is followed
321
337
  # until a node scope or the topscope is found
322
338
  #
323
- # @returns [Puppet::Parser::Scope] The scope or nil if there is no enclosing scope
339
+ # @return [Puppet::Parser::Scope] The scope or nil if there is no enclosing scope
324
340
  def enclosing_scope
325
341
  if has_enclosing_scope?
326
342
  if parent.is_topscope? or parent.is_nodescope?
@@ -347,7 +363,11 @@ class Puppet::Parser::Scope
347
363
 
348
364
  def lookup_qualified_variable(class_name, variable_name, position)
349
365
  begin
350
- qualified_scope(class_name).lookupvar(variable_name, position)
366
+ if lookup_as_local_name?(class_name, variable_name)
367
+ self[variable_name]
368
+ else
369
+ qualified_scope(class_name).lookupvar(variable_name, position)
370
+ end
351
371
  rescue RuntimeError => e
352
372
  location = if position[:lineproc]
353
373
  " at #{position[:lineproc].call}"
@@ -361,6 +381,21 @@ class Puppet::Parser::Scope
361
381
  end
362
382
  end
363
383
 
384
+ # Handles the special case of looking up fully qualified variable in not yet evaluated top scope
385
+ # This is ok if the lookup request originated in topscope (this happens when evaluating
386
+ # bindings; using the top scope to provide the values for facts.
387
+ # @param class_name [String] the classname part of a variable name, may be special ""
388
+ # @param variable_name [String] the variable name without the absolute leading '::'
389
+ # @return [Boolean] true if the given variable name should be looked up directly in this scope
390
+ #
391
+ def lookup_as_local_name?(class_name, variable_name)
392
+ # not a local if name has more than one segment
393
+ return nil if variable_name =~ /::/
394
+ # partial only if the class for "" cannot be found
395
+ return nil unless class_name == "" && klass = find_hostclass(class_name) && class_scope(klass).nil?
396
+ is_topscope?
397
+ end
398
+
364
399
  def has_inherited_class?
365
400
  is_classscope? and resource.resource_type.parent
366
401
  end
@@ -378,9 +413,10 @@ class Puppet::Parser::Scope
378
413
  end
379
414
  private :qualified_scope
380
415
 
381
- # Return a hash containing our variables and their values, optionally (and
382
- # by default) including the values defined in our parent. Local values
383
- # shadow parent values.
416
+ # Returns a Hash containing all variables and their values, optionally (and
417
+ # by default) including the values defined in parent. Local values
418
+ # shadow parent values. Ephemeral scopes for match results ($0 - $n) are not included.
419
+ #
384
420
  def to_hash(recursive = true)
385
421
  if recursive and parent
386
422
  target = parent.to_hash(recursive)
@@ -388,14 +424,8 @@ class Puppet::Parser::Scope
388
424
  target = Hash.new
389
425
  end
390
426
 
391
- @symtable.each do |name, value|
392
- if value == :undef
393
- target.delete(name)
394
- else
395
- target[name] = value
396
- end
397
- end
398
-
427
+ # add all local scopes
428
+ @ephemeral.last.add_entries_to(target)
399
429
  target
400
430
  end
401
431
 
@@ -441,7 +471,7 @@ class Puppet::Parser::Scope
441
471
  raise Puppet::ParseError.new("Cannot assign to a numeric match result variable '$#{name}'") unless options[:ephemeral]
442
472
  end
443
473
  unless name.is_a? String
444
- raise Puppet::DevError, "Scope variable name is a #{name.class}, not a string"
474
+ raise Puppet::ParseError, "Scope variable name #{name.inspect} is a #{name.class}, not a string"
445
475
  end
446
476
 
447
477
  table = effective_symtable options[:ephemeral]
@@ -469,7 +499,7 @@ class Puppet::Parser::Scope
469
499
  # scope's symtable. If the parameter `use_ephemeral` is true, the "top most" ephemeral "table"
470
500
  # will be returned (irrespective of it being a match scope or a local scope).
471
501
  #
472
- # @param [Boolean] whether the top most ephemeral (of any kind) should be used or not
502
+ # @param use_ephemeral [Boolean] whether the top most ephemeral (of any kind) should be used or not
473
503
  def effective_symtable use_ephemeral
474
504
  s = @ephemeral.last
475
505
  return s if use_ephemeral
@@ -523,12 +553,7 @@ class Puppet::Parser::Scope
523
553
  if level == :all
524
554
  @ephemeral = [ Ephemeral.new(@symtable)]
525
555
  else
526
- # If we ever drop 1.8.6 and lower, this should be replaced by a single
527
- # pop-with-a-count - or if someone more ambitious wants to monkey-patch
528
- # that feature into older rubies. --daniel 2012-07-16
529
- (@ephemeral.size - level).times do
530
- @ephemeral.pop
531
- end
556
+ @ephemeral.pop(@ephemeral.size - level)
532
557
  end
533
558
  end
534
559
 
@@ -95,15 +95,7 @@ class Puppet::Parser::TypeLoader
95
95
  # behavior) only load files from the first module of a given name. E.g.,
96
96
  # given first/foo and second/foo, only files from first/foo will be loaded.
97
97
  environment.modules.each do |mod|
98
- manifest_files = []
99
- if File.exists?(mod.manifests)
100
- Find.find(mod.manifests) do |path|
101
- if path.end_with?(".pp") || path.end_with?(".rb")
102
- manifest_files << path
103
- end
104
- end
105
- end
106
- load_files(mod.name, manifest_files)
98
+ load_files(mod.name, mod.all_manifests)
107
99
  end
108
100
  end
109
101
 
@@ -117,7 +109,7 @@ class Puppet::Parser::TypeLoader
117
109
  # Try to load the object with the given fully qualified name.
118
110
  def try_load_fqname(type, fqname)
119
111
  return nil if fqname == "" # special-case main.
120
- name2files(fqname).each do |filename|
112
+ files_to_try_for(fqname).each do |filename|
121
113
  begin
122
114
  imported_types = import_from_modules(filename)
123
115
  if result = imported_types.find { |t| t.type == type and t.name == fqname }
@@ -125,7 +117,6 @@ class Puppet::Parser::TypeLoader
125
117
  return result
126
118
  end
127
119
  rescue Puppet::ImportError => detail
128
- # We couldn't load the item
129
120
  # I'm not convienced we should just drop these errors, but this
130
121
  # preserves existing behaviours.
131
122
  end
@@ -171,13 +162,17 @@ class Puppet::Parser::TypeLoader
171
162
 
172
163
  # Return a list of all file basenames that should be tried in order
173
164
  # to load the object with the given fully qualified name.
174
- def name2files(fqname)
175
- result = []
176
- ary = fqname.split("::")
177
- while ary.length > 0
178
- result << ary.join(File::SEPARATOR)
179
- ary.pop
165
+ def files_to_try_for(qualified_name)
166
+ qualified_name.split('::').inject([]) do |paths, name|
167
+ add_path_for_name(paths, name)
168
+ end
169
+ end
170
+
171
+ def add_path_for_name(paths, name)
172
+ if paths.empty?
173
+ [name]
174
+ else
175
+ paths.unshift(File.join(paths.first, name))
180
176
  end
181
- return result
182
177
  end
183
178
  end