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,31 @@
1
+ # This implements a priority in which keys are given values that will keep them
2
+ # in the same priority in which they priorities are requested. Nested
3
+ # structures (those in which a key is contained within another key) are
4
+ # preserved in such a way that child keys are after the parent and before the
5
+ # key after the parent.
6
+ #
7
+ # @api private
8
+ class Puppet::Graph::SequentialPrioritizer < Puppet::Graph::Prioritizer
9
+ def initialize
10
+ super
11
+ @container = {}
12
+ @count = Puppet::Graph::Key.new
13
+ end
14
+
15
+ def generate_priority_for(key)
16
+ if priority_of(key).nil?
17
+ @count = @count.next
18
+ record_priority_for(key, @count)
19
+ else
20
+ priority_of(key)
21
+ end
22
+ end
23
+
24
+ def generate_priority_contained_in(container, key)
25
+ @container[container] ||= priority_of(container).down
26
+ priority = @container[container].next
27
+ record_priority_for(key, priority)
28
+ @container[container] = priority
29
+ priority
30
+ end
31
+ end
@@ -3,7 +3,7 @@ require 'puppet/relationship'
3
3
  require 'set'
4
4
 
5
5
  # A hopefully-faster graph class to replace the use of GRATR.
6
- class Puppet::SimpleGraph
6
+ class Puppet::Graph::SimpleGraph
7
7
  #
8
8
  # All public methods of this class must maintain (assume ^ ensure) the following invariants, where "=~=" means
9
9
  # equiv. up to order:
@@ -178,7 +178,11 @@ class Puppet::SimpleGraph
178
178
  # Given we are in a failure state here, any extra cost is more or less
179
179
  # irrelevant compared to the cost of a fix - which is on a human
180
180
  # time-scale.
181
- state[:scc].select { |c| c.length > 1 }.map {|x| x.sort }.sort
181
+ state[:scc].select do |component|
182
+ multi_vertex_component?(component) || single_vertex_referring_to_self?(component)
183
+ end.map do |component|
184
+ component.sort
185
+ end.sort
182
186
  end
183
187
 
184
188
  # Perform a BFS on the sub graph representing the cycle, with a view to
@@ -516,7 +520,7 @@ class Puppet::SimpleGraph
516
520
  (adjacencies[direction][other_vertex] ||= Set.new).add(edge)
517
521
  end
518
522
  end
519
- result[vertex] = Puppet::SimpleGraph::VertexWrapper.new(vertex, adjacencies)
523
+ result[vertex] = Puppet::Graph::SimpleGraph::VertexWrapper.new(vertex, adjacencies)
520
524
  end
521
525
  result
522
526
  end
@@ -544,4 +548,19 @@ class Puppet::SimpleGraph
544
548
  instance_variable_set("@#{varname}", value)
545
549
  end
546
550
  end
551
+
552
+ def multi_vertex_component?(component)
553
+ component.length > 1
554
+ end
555
+ private :multi_vertex_component?
556
+
557
+ def single_vertex_referring_to_self?(component)
558
+ if component.length == 1
559
+ vertex = component[0]
560
+ adjacent(vertex).include?(vertex)
561
+ else
562
+ false
563
+ end
564
+ end
565
+ private :single_vertex_referring_to_self?
547
566
  end
@@ -0,0 +1,16 @@
1
+ # Prioritize keys, which must be Puppet::Resources, based on a static hash of
2
+ # the key's ref. This prioritizer does not take containment into account.
3
+ #
4
+ # @api private
5
+ require 'digest/sha1'
6
+
7
+ class Puppet::Graph::TitleHashPrioritizer < Puppet::Graph::Prioritizer
8
+ def generate_priority_for(resource)
9
+ record_priority_for(resource,
10
+ Digest::SHA1.hexdigest("NaCl, MgSO4 (salts) and then #{resource.ref}"))
11
+ end
12
+
13
+ def generate_priority_contained_in(container, resource)
14
+ generate_priority_for(resource)
15
+ end
16
+ end
@@ -10,7 +10,7 @@ module Puppet::Indirector
10
10
  require 'puppet/indirector/indirection'
11
11
  require 'puppet/indirector/terminus'
12
12
  require 'puppet/indirector/envelope'
13
- require 'puppet/network/format_handler'
13
+ require 'puppet/network/format_support'
14
14
 
15
15
  def self.configure_routes(application_routes)
16
16
  application_routes.each do |indirection_name, termini|
@@ -38,7 +38,7 @@ module Puppet::Indirector
38
38
  # populate this class with the various new methods
39
39
  extend ClassMethods
40
40
  include Puppet::Indirector::Envelope
41
- extend Puppet::Network::FormatHandler
41
+ include Puppet::Network::FormatSupport
42
42
 
43
43
  # record the indirected class name for documentation purposes
44
44
  options[:indirected_class] = name
@@ -23,7 +23,8 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
23
23
  if text_facts.is_a?(Puppet::Node::Facts)
24
24
  facts = text_facts
25
25
  else
26
- facts = Puppet::Node::Facts.convert_from(format, text_facts)
26
+ # We unescape here because the corrosponding code in Puppet::Configurer::FactHandler escapes
27
+ facts = Puppet::Node::Facts.convert_from(format, CGI.unescape(text_facts))
27
28
  end
28
29
 
29
30
  unless facts.name == request.key
@@ -81,12 +82,14 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
81
82
  str += " in environment #{node.environment}" if node.environment
82
83
  config = nil
83
84
 
84
- Puppet::Util::Profiler.profile(str) do
85
- begin
86
- config = Puppet::Parser::Compiler.compile(node)
87
- rescue Puppet::Error => detail
88
- Puppet.err(detail.to_s) if networked?
89
- raise
85
+ benchmark(:notice, str) do
86
+ Puppet::Util::Profiler.profile(str) do
87
+ begin
88
+ config = Puppet::Parser::Compiler.compile(node)
89
+ rescue Puppet::Error => detail
90
+ Puppet.err(detail.to_s) if networked?
91
+ raise
92
+ end
90
93
  end
91
94
  end
92
95
 
@@ -49,6 +49,7 @@ class Puppet::Resource::Catalog::StaticCompiler < Puppet::Indirector::Code
49
49
  next unless source =~ /^puppet:/
50
50
 
51
51
  file = resource.to_ral
52
+
52
53
  if file.recurse?
53
54
  add_children(request.key, catalog, resource, file)
54
55
  else
@@ -59,6 +60,18 @@ class Puppet::Resource::Catalog::StaticCompiler < Puppet::Indirector::Code
59
60
  catalog
60
61
  end
61
62
 
63
+ # Take a resource with a fileserver based file source remove the source
64
+ # parameter, and insert the file metadata into the resource.
65
+ #
66
+ # This method acts to do the fileserver metadata retrieval in advance, while
67
+ # the file source is local and doesn't require an HTTP request. It retrieves
68
+ # the file metadata for a given file resource, removes the source parameter
69
+ # from the resource, inserts the metadata into the file resource, and uploads
70
+ # the file contents of the source to the file bucket.
71
+ #
72
+ # @param host [String] The host name of the node requesting this catalog
73
+ # @param resource [Puppet::Resource] The resource to replace the metadata in
74
+ # @param file [Puppet::Type::File] The file RAL associated with the resource
62
75
  def find_and_replace_metadata(host, resource, file)
63
76
  # We remove URL info from it, so it forces a local copy
64
77
  # rather than routing through the network.
@@ -71,6 +84,14 @@ class Puppet::Resource::Catalog::StaticCompiler < Puppet::Indirector::Code
71
84
  replace_metadata(host, resource, metadata)
72
85
  end
73
86
 
87
+ # Rewrite a given file resource with the metadata from a fileserver based file
88
+ #
89
+ # This performs the actual metadata rewrite for the given file resource and
90
+ # uploads the content of the source file to the filebucket.
91
+ #
92
+ # @param host [String] The host name of the node requesting this catalog
93
+ # @param resource [Puppet::Resource] The resource to add the metadata to
94
+ # @param metadata [Puppet::FileServing::Metadata] The metadata of the given fileserver based file
74
95
  def replace_metadata(host, resource, metadata)
75
96
  [:mode, :owner, :group].each do |param|
76
97
  resource[param] ||= metadata.send(param)
@@ -89,6 +110,12 @@ class Puppet::Resource::Catalog::StaticCompiler < Puppet::Indirector::Code
89
110
  Puppet.info "Metadata for #{resource} in catalog for '#{host}' added from '#{old_source}'"
90
111
  end
91
112
 
113
+ # Generate children resources for a recursive file and add them to the catalog.
114
+ #
115
+ # @param host [String] The host name of the node requesting this catalog
116
+ # @param catalog [Puppet::Resource::Catalog]
117
+ # @param resource [Puppet::Resource]
118
+ # @param file [Puppet::Type::File] The file RAL associated with the resource
92
119
  def add_children(host, catalog, resource, file)
93
120
  file = resource.to_ral
94
121
 
@@ -102,6 +129,14 @@ class Puppet::Resource::Catalog::StaticCompiler < Puppet::Indirector::Code
102
129
  end
103
130
  end
104
131
 
132
+ # Given a recursive file resource, recursively generate its children resources
133
+ #
134
+ # @param host [String] The host name of the node requesting this catalog
135
+ # @param catalog [Puppet::Resource::Catalog]
136
+ # @param resource [Puppet::Resource]
137
+ # @param file [Puppet::Type::File] The file RAL associated with the resource
138
+ #
139
+ # @return [Array<Puppet::Resource>] The recursively generated File resources for the given resource
105
140
  def get_child_resources(host, catalog, resource, file)
106
141
  sourceselect = file[:sourceselect]
107
142
  children = {}
@@ -137,18 +172,33 @@ class Puppet::Resource::Catalog::StaticCompiler < Puppet::Indirector::Code
137
172
 
138
173
  # I think this is safe since it's a URL, not an actual file
139
174
  children[meta.relative_path][:source] = source + "/" + meta.relative_path
175
+ resource.each do |param, value|
176
+ # These should never be passed to our children.
177
+ unless [:parent, :ensure, :recurse, :recurselimit, :target, :alias, :source].include? param
178
+ children[meta.relative_path][param] = value
179
+ end
180
+ end
140
181
  replace_metadata(host, children[meta.relative_path], meta)
141
182
  end
142
183
 
143
184
  children
144
185
  end
145
186
 
187
+ # Remove any file resources in the catalog that will be duplicated by the
188
+ # given file resources.
189
+ #
190
+ # @param children [Array<Puppet::Resource>]
191
+ # @param catalog [Puppet::Resource::Catalog]
146
192
  def remove_existing_resources(children, catalog)
147
193
  existing_names = catalog.resources.collect { |r| r.to_s }
148
194
  both = (existing_names & children.keys).inject({}) { |hash, name| hash[name] = true; hash }
149
195
  both.each { |name| children.delete(name) }
150
196
  end
151
197
 
198
+ # Retrieve the source of a file resource using a fileserver based source and
199
+ # upload it to the filebucket.
200
+ #
201
+ # @param resource [Puppet::Resource]
152
202
  def store_content(resource)
153
203
  @summer ||= Object.new
154
204
  @summer.extend(Puppet::Util::Checksums)
@@ -2,7 +2,7 @@ require 'puppet/ssl/certificate'
2
2
  require 'puppet/indirector/rest'
3
3
 
4
4
  class Puppet::SSL::Certificate::Rest < Puppet::Indirector::REST
5
- desc "Find and save certificates over HTTP via REST."
5
+ desc "Find certificates over HTTP via REST."
6
6
 
7
7
  use_server_setting(:ca_server)
8
8
  use_port_setting(:ca_port)
@@ -7,7 +7,7 @@ class Puppet::Indirector::Exec < Puppet::Indirector::Terminus
7
7
  name = request.key
8
8
  external_command = command
9
9
 
10
- # Make sure it's an arry
10
+ # Make sure it's an array
11
11
  raise Puppet::DevError, "Exec commands must be an array" unless external_command.is_a?(Array)
12
12
 
13
13
  # Make sure it's fully qualified.
@@ -19,7 +19,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
19
19
  end
20
20
  end.flatten
21
21
  dirs = module_fact_dirs + Puppet[:factpath].split(File::PATH_SEPARATOR)
22
- x = dirs.uniq.each do |dir|
22
+ dirs.uniq.each do |dir|
23
23
  load_facts_in_dir(dir)
24
24
  end
25
25
  end
@@ -55,7 +55,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
55
55
  result = Puppet::Node::Facts.new(request.key, Facter.to_hash)
56
56
 
57
57
  result.add_local_facts
58
- result.stringify
58
+ Puppet[:stringify_facts] ? result.stringify : result.sanitize
59
59
 
60
60
  result
61
61
  end
@@ -46,7 +46,6 @@ class Puppet::Node::Facts::InventoryActiveRecord < Puppet::Indirector::ActiveRec
46
46
  def search(request)
47
47
  return [] unless request.options
48
48
  matching_nodes = []
49
- fact_names = []
50
49
  fact_filters = Hash.new {|h,k| h[k] = []}
51
50
  meta_filters = Hash.new {|h,k| h[k] = []}
52
51
  request.options.each do |key,value|
@@ -9,7 +9,7 @@ class Puppet::Node::Facts::NetworkDevice < Puppet::Indirector::Code
9
9
  result = Puppet::Node::Facts.new(request.key, Puppet::Util::NetworkDevice.current.facts)
10
10
 
11
11
  result.add_local_facts
12
- result.stringify
12
+ Puppet[:stringify_facts] ? result.stringify : result.sanitize
13
13
 
14
14
  result
15
15
  end
@@ -22,7 +22,6 @@ module Puppet::FileBucketFile
22
22
  return nil unless path_match(dir_path, files_original_path)
23
23
 
24
24
  if request.options[:diff_with]
25
- hash_protocol = sumtype(checksum)
26
25
  file2_path = path_for(request.options[:bucket_path], request.options[:diff_with], 'contents')
27
26
  raise "could not find diff_with #{request.options[:diff_with]}" unless ::File.exists?(file2_path)
28
27
  return `diff #{file_path.inspect} #{file2_path.inspect}`
@@ -88,7 +88,7 @@ class Puppet::Indirector::Indirection
88
88
  text += scrub(@doc) + "\n\n" if @doc
89
89
 
90
90
  text << "* **Indirected Class**: `#{@indirected_class}`\n";
91
- if s = terminus_setting
91
+ if terminus_setting
92
92
  text << "* **Terminus Setting**: #{terminus_setting}\n"
93
93
  end
94
94
 
@@ -247,7 +247,7 @@ class Puppet::Indirector::Indirection
247
247
 
248
248
  result = terminus.destroy(request)
249
249
 
250
- if cache? and cached = cache.find(request(:find, key, nil, options))
250
+ if cache? and cache.find(request(:find, key, nil, options))
251
251
  # Reuse the existing request, since it's equivalent.
252
252
  cache.destroy(request)
253
253
  end
@@ -15,6 +15,15 @@ class Puppet::Indirector::Memory < Puppet::Indirector::Terminus
15
15
  @instances[request.key]
16
16
  end
17
17
 
18
+ def search(request)
19
+ found_keys = @instances.keys.find_all { |key| key.include?(request.key) }
20
+ found_keys.collect { |key| @instances[key] }
21
+ end
22
+
23
+ def head(request)
24
+ not find(request).nil?
25
+ end
26
+
18
27
  def save(request)
19
28
  @instances[request.key] = request.instance
20
29
  end
@@ -9,15 +9,14 @@ class Puppet::Node::Ldap < Puppet::Indirector::Ldap
9
9
 
10
10
  # The attributes that Puppet class information is stored in.
11
11
  def class_attributes
12
- # LAK:NOTE See http://snurl.com/21zf8 [groups_google_com]
13
- x = Puppet[:ldapclassattrs].split(/\s*,\s*/)
12
+ Puppet[:ldapclassattrs].split(/\s*,\s*/)
14
13
  end
15
14
 
16
15
  # Separate this out so it's relatively atomic. It's tempting to call
17
16
  # process instead of name2hash() here, but it ends up being
18
17
  # difficult to test because all exceptions get caught by ldapsearch.
19
18
  # LAK:NOTE Unfortunately, the ldap support is too stupid to throw anything
20
- # but LDAP::ResultError, even on bad connections, so we are rough handed
19
+ # but LDAP::ResultError, even on bad connections, so we are rough-handed
21
20
  # with our error handling.
22
21
  def name2hash(name)
23
22
  info = nil
@@ -198,7 +197,6 @@ class Puppet::Node::Ldap < Puppet::Indirector::Ldap
198
197
  end
199
198
 
200
199
  def merge_parent(info)
201
- parent_info = nil
202
200
  parent = info[:parent]
203
201
 
204
202
  # Preload the parent array with the node name.
@@ -43,8 +43,7 @@ class Puppet::Transaction::Report::Processor < Puppet::Indirector::Code
43
43
 
44
44
  # Handle the parsing of the reports attribute.
45
45
  def reports
46
- # LAK:NOTE See http://snurl.com/21zf8 [groups_google_com]
47
- x = Puppet[:reports].gsub(/(^\s+)|(\s+$)/, '').split(/\s*,\s*/)
46
+ Puppet[:reports].gsub(/(^\s+)|(\s+$)/, '').split(/\s*,\s*/)
48
47
  end
49
48
 
50
49
  def processors(&blk)
@@ -9,7 +9,7 @@ class Puppet::Transaction::Report::Rest < Puppet::Indirector::REST
9
9
  private
10
10
 
11
11
  def deserialize_save(content_type, body)
12
- format = Puppet::Network::FormatHandler.protected_format(content_type)
12
+ format = Puppet::Network::FormatHandler.format_for(content_type)
13
13
  format.intern(Array, body)
14
14
  end
15
15
  end
@@ -5,7 +5,7 @@ require 'puppet/util/pson'
5
5
  require 'puppet/network/resolver'
6
6
 
7
7
  # This class encapsulates all of the information you need to make an
8
- # Indirection call, and as a a result also handles REST calls. It's somewhat
8
+ # Indirection call, and as a result also handles REST calls. It's somewhat
9
9
  # analogous to an HTTP Request object, except tuned for our Indirector.
10
10
  class Puppet::Indirector::Request
11
11
  attr_accessor :key, :method, :options, :instance, :node, :ip, :authenticated, :ignore_cache, :ignore_terminus
@@ -158,20 +158,42 @@ class Puppet::Indirector::Request
158
158
 
159
159
  # Create the query string, if options are present.
160
160
  def query_string
161
- return "" unless options and ! options.empty?
162
- "?" + options.collect do |key, value|
161
+ return "" if options.nil? || options.empty?
162
+ "?" + encode_params(expand_into_parameters(options.to_a))
163
+ end
164
+
165
+ def expand_into_parameters(data)
166
+ data.inject([]) do |params, key_value|
167
+ key, value = key_value
168
+
169
+ expanded_value = case value
170
+ when Array
171
+ value.collect { |val| [key, val] }
172
+ else
173
+ [key_value]
174
+ end
175
+
176
+ params.concat(expand_primitive_types_into_parameters(expanded_value))
177
+ end
178
+ end
179
+
180
+ def expand_primitive_types_into_parameters(data)
181
+ data.inject([]) do |params, key_value|
182
+ key, value = key_value
163
183
  case value
164
- when nil; next
165
- when true, false; value = value.to_s
166
- when Fixnum, Bignum, Float; value = value # nothing
167
- when String; value = CGI.escape(value)
168
- when Symbol; value = CGI.escape(value.to_s)
169
- when Array; value = CGI.escape(YAML.dump(value))
184
+ when nil
185
+ params
186
+ when true, false, String, Symbol, Fixnum, Bignum, Float
187
+ params << [key, value]
170
188
  else
171
189
  raise ArgumentError, "HTTP REST queries cannot handle values of type '#{value.class}'"
172
190
  end
191
+ end
192
+ end
173
193
 
174
- "#{key}=#{value}"
194
+ def encode_params(params)
195
+ params.collect do |key, value|
196
+ "#{key}=#{CGI.escape(value.to_s)}"
175
197
  end.join("&")
176
198
  end
177
199