puppet 3.1.1 → 3.2.0.rc1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (477) hide show
  1. data/CONTRIBUTING.md +2 -2
  2. data/Gemfile +32 -19
  3. data/README_DEVELOPER.md +332 -14
  4. data/Rakefile +9 -5
  5. data/ext/build_defaults.yaml +2 -3
  6. data/ext/debian/changelog.erb +6 -0
  7. data/ext/debian/control +6 -6
  8. data/ext/envpuppet +4 -4
  9. data/ext/project_data.yaml +1 -0
  10. data/ext/puppet-nm-dispatcher +13 -0
  11. data/ext/redhat/puppet.spec.erb +17 -0
  12. data/ext/suse/client.init +1 -1
  13. data/ext/systemd/puppetagent.service +2 -2
  14. data/ext/systemd/puppetmaster.service +2 -2
  15. data/lib/hiera/scope.rb +29 -11
  16. data/lib/hiera_puppet.rb +1 -3
  17. data/lib/puppet/agent.rb +3 -3
  18. data/lib/puppet/application.rb +2 -2
  19. data/lib/puppet/application/agent.rb +27 -12
  20. data/lib/puppet/application/apply.rb +11 -1
  21. data/lib/puppet/application/describe.rb +1 -1
  22. data/lib/puppet/application/doc.rb +13 -9
  23. data/lib/puppet/application/filebucket.rb +0 -1
  24. data/lib/puppet/application/kick.rb +1 -0
  25. data/lib/puppet/application/master.rb +16 -8
  26. data/lib/puppet/daemon.rb +19 -64
  27. data/lib/puppet/defaults.rb +61 -5
  28. data/lib/puppet/error.rb +15 -4
  29. data/lib/puppet/external/nagios/grammar.ry +1 -1
  30. data/lib/puppet/external/nagios/makefile +1 -1
  31. data/lib/puppet/external/nagios/parser.rb +185 -618
  32. data/lib/puppet/external/pson/pure/parser.rb +47 -1
  33. data/lib/puppet/face/certificate.rb +3 -3
  34. data/lib/puppet/face/module.rb +1 -1
  35. data/lib/puppet/face/module/changes.rb +3 -1
  36. data/lib/puppet/face/module/uninstall.rb +1 -1
  37. data/lib/puppet/face/node/clean.rb +5 -5
  38. data/lib/puppet/feature/base.rb +3 -1
  39. data/lib/puppet/feature/libuser.rb +8 -0
  40. data/lib/puppet/file_serving/fileset.rb +9 -1
  41. data/lib/puppet/forge.rb +28 -5
  42. data/lib/puppet/forge/errors.rb +34 -0
  43. data/lib/puppet/forge/repository.rb +1 -1
  44. data/lib/puppet/indirector.rb +4 -1
  45. data/lib/puppet/indirector/catalog/compiler.rb +37 -30
  46. data/lib/puppet/indirector/facts/inventory_active_record.rb +1 -0
  47. data/lib/puppet/indirector/indirection.rb +28 -15
  48. data/lib/puppet/indirector/rest.rb +18 -10
  49. data/lib/puppet/interface.rb +11 -4
  50. data/lib/puppet/interface/action.rb +1 -3
  51. data/lib/puppet/interface/action_builder.rb +0 -3
  52. data/lib/puppet/interface/action_manager.rb +0 -3
  53. data/lib/puppet/interface/face_collection.rb +0 -2
  54. data/lib/puppet/interface/option.rb +0 -2
  55. data/lib/puppet/interface/option_builder.rb +0 -2
  56. data/lib/puppet/interface/option_manager.rb +0 -2
  57. data/lib/puppet/metatype/manager.rb +1 -1
  58. data/lib/puppet/module_tool.rb +1 -0
  59. data/lib/puppet/module_tool/applications/application.rb +0 -3
  60. data/lib/puppet/module_tool/applications/builder.rb +8 -20
  61. data/lib/puppet/module_tool/applications/checksummer.rb +1 -1
  62. data/lib/puppet/module_tool/applications/installer.rb +1 -0
  63. data/lib/puppet/module_tool/applications/unpacker.rb +3 -11
  64. data/lib/puppet/module_tool/checksums.rb +1 -1
  65. data/lib/puppet/module_tool/errors/installer.rb +18 -1
  66. data/lib/puppet/module_tool/modulefile.rb +2 -2
  67. data/lib/puppet/module_tool/skeleton/templates/generator/Modulefile.erb +1 -1
  68. data/lib/puppet/module_tool/tar.rb +17 -0
  69. data/lib/puppet/module_tool/tar/gnu.rb +9 -0
  70. data/lib/puppet/module_tool/tar/mini.rb +39 -0
  71. data/lib/puppet/module_tool/tar/solaris.rb +5 -0
  72. data/lib/puppet/network/http.rb +1 -0
  73. data/lib/puppet/network/http/connection.rb +9 -23
  74. data/lib/puppet/network/http/handler.rb +38 -7
  75. data/lib/puppet/network/http/rack/rest.rb +14 -3
  76. data/lib/puppet/network/http/webrick.rb +3 -1
  77. data/lib/puppet/network/http/webrick/rest.rb +11 -2
  78. data/lib/puppet/node/environment.rb +3 -1
  79. data/lib/puppet/parameter.rb +32 -29
  80. data/lib/puppet/parameter/package_options.rb +1 -1
  81. data/lib/puppet/parameter/path.rb +1 -1
  82. data/lib/puppet/parameter/value.rb +1 -1
  83. data/lib/puppet/parameter/value_collection.rb +7 -3
  84. data/lib/puppet/parser/ast.rb +3 -1
  85. data/lib/puppet/parser/ast/arithmetic_operator.rb +56 -12
  86. data/lib/puppet/parser/ast/astarray.rb +1 -1
  87. data/lib/puppet/parser/ast/block_expression.rb +41 -0
  88. data/lib/puppet/parser/ast/function.rb +13 -2
  89. data/lib/puppet/parser/ast/lambda.rb +107 -0
  90. data/lib/puppet/parser/ast/leaf.rb +1 -2
  91. data/lib/puppet/parser/ast/method_call.rb +77 -0
  92. data/lib/puppet/parser/ast/vardef.rb +7 -0
  93. data/lib/puppet/parser/compiler.rb +27 -16
  94. data/lib/puppet/parser/e_parser_adapter.rb +120 -0
  95. data/lib/puppet/parser/files.rb +7 -6
  96. data/lib/puppet/parser/functions.rb +10 -8
  97. data/lib/puppet/parser/functions/collect.rb +43 -0
  98. data/lib/puppet/parser/functions/each.rb +96 -0
  99. data/lib/puppet/parser/functions/foreach.rb +96 -0
  100. data/lib/puppet/parser/functions/fqdn_rand.rb +2 -2
  101. data/lib/puppet/parser/functions/hiera.rb +20 -2
  102. data/lib/puppet/parser/functions/hiera_array.rb +21 -2
  103. data/lib/puppet/parser/functions/hiera_hash.rb +23 -2
  104. data/lib/puppet/parser/functions/hiera_include.rb +33 -2
  105. data/lib/puppet/parser/functions/inline_template.rb +4 -4
  106. data/lib/puppet/parser/functions/reduce.rb +74 -0
  107. data/lib/puppet/parser/functions/reject.rb +46 -0
  108. data/lib/puppet/parser/functions/select.rb +46 -0
  109. data/lib/puppet/parser/functions/slice.rb +96 -0
  110. data/lib/puppet/parser/functions/template.rb +2 -2
  111. data/lib/puppet/parser/grammar.ra +7 -4
  112. data/lib/puppet/parser/lexer.rb +10 -0
  113. data/lib/puppet/parser/methods.rb +69 -0
  114. data/lib/puppet/parser/parser.rb +855 -808
  115. data/lib/puppet/parser/parser_factory.rb +62 -0
  116. data/lib/puppet/parser/parser_support.rb +8 -2
  117. data/lib/puppet/parser/scope.rb +153 -47
  118. data/lib/puppet/parser/templatewrapper.rb +28 -21
  119. data/lib/puppet/parser/type_loader.rb +3 -1
  120. data/lib/puppet/pops.rb +40 -0
  121. data/lib/puppet/pops/adaptable.rb +190 -0
  122. data/lib/puppet/pops/adapters.rb +65 -0
  123. data/lib/puppet/pops/containment.rb +37 -0
  124. data/lib/puppet/pops/issues.rb +258 -0
  125. data/lib/puppet/pops/label_provider.rb +71 -0
  126. data/lib/puppet/pops/model/ast_transformer.rb +636 -0
  127. data/lib/puppet/pops/model/ast_tree_dumper.rb +378 -0
  128. data/lib/puppet/pops/model/factory.rb +804 -0
  129. data/lib/puppet/pops/model/model.rb +567 -0
  130. data/lib/puppet/pops/model/model_label_provider.rb +75 -0
  131. data/lib/puppet/pops/model/model_tree_dumper.rb +352 -0
  132. data/lib/puppet/pops/model/tree_dumper.rb +59 -0
  133. data/lib/puppet/pops/parser/egrammar.ra +723 -0
  134. data/lib/puppet/pops/parser/eparser.rb +2300 -0
  135. data/lib/puppet/pops/parser/grammar.ra +746 -0
  136. data/lib/puppet/pops/parser/lexer.rb +842 -0
  137. data/lib/puppet/pops/parser/makefile +13 -0
  138. data/lib/puppet/pops/parser/parser_support.rb +203 -0
  139. data/lib/puppet/pops/patterns.rb +35 -0
  140. data/lib/puppet/pops/utils.rb +104 -0
  141. data/lib/puppet/pops/validation.rb +297 -0
  142. data/lib/puppet/pops/validation/checker3_1.rb +551 -0
  143. data/lib/puppet/pops/validation/validator_factory_3_1.rb +41 -0
  144. data/lib/puppet/pops/visitable.rb +6 -0
  145. data/lib/puppet/pops/visitor.rb +50 -0
  146. data/lib/puppet/property.rb +37 -28
  147. data/lib/puppet/property/ensure.rb +2 -2
  148. data/lib/puppet/property/ordered_list.rb +1 -1
  149. data/lib/puppet/provider.rb +26 -30
  150. data/lib/puppet/provider/aixobject.rb +45 -44
  151. data/lib/puppet/provider/augeas/augeas.rb +0 -1
  152. data/lib/puppet/provider/confiner.rb +1 -1
  153. data/lib/puppet/provider/cron/crontab.rb +107 -67
  154. data/lib/puppet/provider/group/groupadd.rb +59 -3
  155. data/lib/puppet/provider/interface/cisco.rb +4 -4
  156. data/lib/puppet/provider/mount/parsed.rb +1 -1
  157. data/lib/puppet/provider/nameservice.rb +22 -6
  158. data/lib/puppet/provider/nameservice/pw.rb +1 -1
  159. data/lib/puppet/provider/package/aix.rb +28 -4
  160. data/lib/puppet/provider/package/gem.rb +0 -2
  161. data/lib/puppet/provider/package/macports.rb +1 -1
  162. data/lib/puppet/provider/package/nim.rb +249 -4
  163. data/lib/puppet/provider/package/opkg.rb +77 -0
  164. data/lib/puppet/provider/package/pacman.rb +2 -2
  165. data/lib/puppet/provider/package/rpm.rb +30 -16
  166. data/lib/puppet/provider/package/yum.rb +3 -3
  167. data/lib/puppet/provider/parsedfile.rb +80 -3
  168. data/lib/puppet/provider/selmodule/semodule.rb +2 -2
  169. data/lib/puppet/provider/service/debian.rb +0 -4
  170. data/lib/puppet/provider/service/freebsd.rb +2 -2
  171. data/lib/puppet/provider/service/gentoo.rb +0 -9
  172. data/lib/puppet/provider/service/init.rb +27 -2
  173. data/lib/puppet/provider/service/launchd.rb +1 -1
  174. data/lib/puppet/provider/service/openwrt.rb +36 -0
  175. data/lib/puppet/provider/service/redhat.rb +0 -9
  176. data/lib/puppet/provider/service/src.rb +38 -4
  177. data/lib/puppet/provider/service/systemd.rb +2 -2
  178. data/lib/puppet/provider/service/upstart.rb +1 -8
  179. data/lib/puppet/provider/user/aix.rb +4 -10
  180. data/lib/puppet/provider/user/pw.rb +6 -10
  181. data/lib/puppet/provider/user/useradd.rb +129 -31
  182. data/lib/puppet/provider/vlan/cisco.rb +4 -4
  183. data/lib/puppet/reference/function.rb +2 -2
  184. data/lib/puppet/reference/indirection.rb +46 -5
  185. data/lib/puppet/reference/metaparameter.rb +2 -2
  186. data/lib/puppet/reports.rb +5 -5
  187. data/lib/puppet/reports/rrdgraph.rb +4 -4
  188. data/lib/puppet/reports/tagmail.rb +1 -1
  189. data/lib/puppet/resource.rb +1 -1
  190. data/lib/puppet/resource/type.rb +13 -11
  191. data/lib/puppet/scheduler.rb +16 -0
  192. data/lib/puppet/scheduler/job.rb +53 -0
  193. data/lib/puppet/scheduler/scheduler.rb +45 -0
  194. data/lib/puppet/scheduler/splay_job.rb +32 -0
  195. data/lib/puppet/scheduler/timer.rb +13 -0
  196. data/lib/puppet/settings/base_setting.rb +1 -1
  197. data/lib/puppet/simple_graph.rb +4 -4
  198. data/lib/puppet/ssl/base.rb +12 -2
  199. data/lib/puppet/ssl/certificate.rb +4 -1
  200. data/lib/puppet/ssl/certificate_request.rb +4 -1
  201. data/lib/puppet/ssl/certificate_revocation_list.rb +4 -1
  202. data/lib/puppet/ssl/configuration.rb +32 -0
  203. data/lib/puppet/ssl/host.rb +18 -21
  204. data/lib/puppet/ssl/key.rb +4 -1
  205. data/lib/puppet/ssl/validator.rb +116 -0
  206. data/lib/puppet/transaction.rb +1 -1
  207. data/lib/puppet/transaction/event.rb +3 -10
  208. data/lib/puppet/transaction/event_manager.rb +8 -1
  209. data/lib/puppet/transaction/report.rb +17 -16
  210. data/lib/puppet/type.rb +77 -69
  211. data/lib/puppet/type/cron.rb +20 -8
  212. data/lib/puppet/type/exec.rb +9 -3
  213. data/lib/puppet/type/file.rb +95 -21
  214. data/lib/puppet/type/file/content.rb +1 -1
  215. data/lib/puppet/type/file/mode.rb +7 -1
  216. data/lib/puppet/type/file/source.rb +2 -2
  217. data/lib/puppet/type/group.rb +11 -0
  218. data/lib/puppet/type/scheduled_task.rb +5 -1
  219. data/lib/puppet/type/service.rb +1 -1
  220. data/lib/puppet/type/ssh_authorized_key.rb +2 -2
  221. data/lib/puppet/type/user.rb +24 -6
  222. data/lib/puppet/util.rb +12 -2
  223. data/lib/puppet/util/classgen.rb +4 -4
  224. data/lib/puppet/util/colors.rb +55 -0
  225. data/lib/puppet/util/command_line/trollop.rb +4 -4
  226. data/lib/puppet/util/errors.rb +39 -3
  227. data/lib/puppet/util/fileparsing.rb +5 -0
  228. data/lib/puppet/util/filetype.rb +11 -9
  229. data/lib/puppet/util/instrumentation/instrumentable.rb +2 -2
  230. data/lib/puppet/util/libuser.conf +15 -0
  231. data/lib/puppet/util/libuser.rb +12 -0
  232. data/lib/puppet/util/monkey_patches.rb +48 -0
  233. data/lib/puppet/util/network_device.rb +1 -1
  234. data/lib/puppet/util/network_device/base.rb +2 -2
  235. data/lib/puppet/util/network_device/cisco/device.rb +29 -19
  236. data/lib/puppet/util/network_device/config.rb +5 -2
  237. data/lib/puppet/util/network_device/ipcalc.rb +1 -1
  238. data/lib/puppet/util/network_device/transport/ssh.rb +4 -3
  239. data/lib/puppet/util/network_device/transport/telnet.rb +4 -2
  240. data/lib/puppet/util/plugins.rb +4 -4
  241. data/lib/puppet/util/posix.rb +1 -1
  242. data/lib/puppet/util/profiler.rb +28 -0
  243. data/lib/puppet/util/profiler/logging.rb +47 -0
  244. data/lib/puppet/util/profiler/none.rb +8 -0
  245. data/lib/puppet/util/profiler/object_counts.rb +17 -0
  246. data/lib/puppet/util/profiler/wall_clock.rb +34 -0
  247. data/lib/puppet/util/provider_features.rb +1 -1
  248. data/lib/puppet/util/rdoc/parser.rb +5 -5
  249. data/lib/puppet/util/ssl.rb +38 -0
  250. data/lib/puppet/util/subclass_loader.rb +1 -5
  251. data/lib/puppet/util/windows.rb +1 -0
  252. data/lib/puppet/util/windows/process.rb +3 -0
  253. data/lib/puppet/util/windows/root_certs.rb +86 -0
  254. data/lib/puppet/util/windows/security.rb +1 -0
  255. data/lib/puppet/version.rb +1 -1
  256. data/spec/fixtures/integration/provider/cron/crontab/create_normal_entry +19 -0
  257. data/spec/fixtures/integration/provider/cron/crontab/create_special_entry +18 -0
  258. data/spec/fixtures/integration/provider/cron/crontab/crontab_user1 +15 -0
  259. data/spec/fixtures/integration/provider/cron/crontab/crontab_user2 +4 -0
  260. data/spec/fixtures/integration/provider/cron/crontab/modify_entry +13 -0
  261. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input1 +15 -0
  262. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input2 +6 -0
  263. data/spec/fixtures/integration/provider/cron/crontab/remove_named_resource +12 -0
  264. data/spec/fixtures/integration/provider/cron/crontab/remove_unnamed_resource +14 -0
  265. data/spec/fixtures/unit/pops/parser/lexer/aliastest.pp +16 -0
  266. data/spec/fixtures/unit/pops/parser/lexer/append.pp +11 -0
  267. data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +14 -0
  268. data/spec/fixtures/unit/pops/parser/lexer/arithmetic_expression.pp +8 -0
  269. data/spec/fixtures/unit/pops/parser/lexer/arraytrailingcomma.pp +3 -0
  270. data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +65 -0
  271. data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +15 -0
  272. data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +17 -0
  273. data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +11 -0
  274. data/spec/fixtures/unit/pops/parser/lexer/collection.pp +10 -0
  275. data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +8 -0
  276. data/spec/fixtures/unit/pops/parser/lexer/collection_within_virtual_definitions.pp +20 -0
  277. data/spec/fixtures/unit/pops/parser/lexer/componentmetaparams.pp +11 -0
  278. data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +8 -0
  279. data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +23 -0
  280. data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +17 -0
  281. data/spec/fixtures/unit/pops/parser/lexer/emptyclass.pp +9 -0
  282. data/spec/fixtures/unit/pops/parser/lexer/emptyexec.pp +3 -0
  283. data/spec/fixtures/unit/pops/parser/lexer/emptyifelse.pp +9 -0
  284. data/spec/fixtures/unit/pops/parser/lexer/falsevalues.pp +3 -0
  285. data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +11 -0
  286. data/spec/fixtures/unit/pops/parser/lexer/fqdefinition.pp +5 -0
  287. data/spec/fixtures/unit/pops/parser/lexer/fqparents.pp +11 -0
  288. data/spec/fixtures/unit/pops/parser/lexer/funccomma.pp +5 -0
  289. data/spec/fixtures/unit/pops/parser/lexer/hash.pp +33 -0
  290. data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +12 -0
  291. data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +15 -0
  292. data/spec/fixtures/unit/pops/parser/lexer/multilinecomments.pp +10 -0
  293. data/spec/fixtures/unit/pops/parser/lexer/multipleclass.pp +9 -0
  294. data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +7 -0
  295. data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +13 -0
  296. data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +9 -0
  297. data/spec/fixtures/unit/pops/parser/lexer/scopetest.pp +13 -0
  298. data/spec/fixtures/unit/pops/parser/lexer/selectorvalues.pp +49 -0
  299. data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +5 -0
  300. data/spec/fixtures/unit/pops/parser/lexer/simpleselector.pp +38 -0
  301. data/spec/fixtures/unit/pops/parser/lexer/singleary.pp +19 -0
  302. data/spec/fixtures/unit/pops/parser/lexer/singlequote.pp +11 -0
  303. data/spec/fixtures/unit/pops/parser/lexer/singleselector.pp +22 -0
  304. data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +11 -0
  305. data/spec/fixtures/unit/pops/parser/lexer/tag.pp +9 -0
  306. data/spec/fixtures/unit/pops/parser/lexer/tagged.pp +35 -0
  307. data/spec/fixtures/unit/pops/parser/lexer/virtualresources.pp +14 -0
  308. data/spec/fixtures/unit/provider/cron/crontab/single_line.yaml +4 -4
  309. data/spec/fixtures/unit/provider/cron/crontab/vixie_header.txt +3 -0
  310. data/spec/fixtures/unit/provider/cron/parsed/managed +6 -0
  311. data/spec/fixtures/unit/provider/cron/parsed/simple +9 -0
  312. data/spec/fixtures/unit/provider/parsedfile/simple.txt +4 -0
  313. data/spec/fixtures/unit/provider/service/systemd/list_units +18 -0
  314. data/spec/integration/parser/collector_spec.rb +1 -1
  315. data/spec/integration/parser/compiler_spec.rb +252 -227
  316. data/spec/integration/parser/parser_spec.rb +171 -53
  317. data/spec/integration/parser/scope_spec.rb +1 -1
  318. data/spec/integration/provider/cron/crontab_spec.rb +187 -0
  319. data/spec/integration/provider/service/systemd_spec.rb +20 -0
  320. data/spec/integration/type/file_spec.rb +21 -21
  321. data/spec/integration/type/package_spec.rb +1 -1
  322. data/spec/lib/puppet_spec/database.rb +2 -5
  323. data/spec/spec_helper.rb +6 -1
  324. data/spec/unit/application/apply_spec.rb +16 -1
  325. data/spec/unit/application/describe_spec.rb +1 -1
  326. data/spec/unit/application/doc_spec.rb +55 -32
  327. data/spec/unit/application/kick_spec.rb +8 -6
  328. data/spec/unit/application/master_spec.rb +4 -4
  329. data/spec/unit/daemon_spec.rb +1 -1
  330. data/spec/unit/forge/errors_spec.rb +40 -0
  331. data/spec/unit/forge/repository_spec.rb +11 -1
  332. data/spec/unit/forge_spec.rb +13 -3
  333. data/spec/unit/hiera/backend/puppet_backend_spec.rb +1 -0
  334. data/spec/unit/hiera/scope_spec.rb +48 -25
  335. data/spec/unit/indirector/catalog/active_record_spec.rb +6 -3
  336. data/spec/unit/indirector/catalog/compiler_spec.rb +3 -28
  337. data/spec/unit/indirector/catalog/static_compiler_spec.rb +1 -1
  338. data/spec/unit/indirector/facts/inventory_active_record_spec.rb +154 -150
  339. data/spec/unit/indirector/indirection_spec.rb +5 -0
  340. data/spec/unit/indirector/resource/active_record_spec.rb +5 -22
  341. data/spec/unit/indirector_spec.rb +7 -1
  342. data/spec/unit/interface/action_builder_spec.rb +1 -1
  343. data/spec/unit/interface/action_manager_spec.rb +0 -2
  344. data/spec/unit/interface/action_spec.rb +1 -1
  345. data/spec/unit/interface/documentation_spec.rb +0 -2
  346. data/spec/unit/interface/face_collection_spec.rb +1 -1
  347. data/spec/unit/interface/option_builder_spec.rb +1 -1
  348. data/spec/unit/interface/option_spec.rb +0 -1
  349. data/spec/unit/module_spec.rb +17 -19
  350. data/spec/unit/module_tool/application_spec.rb +1 -3
  351. data/spec/unit/module_tool/applications/builder_spec.rb +38 -0
  352. data/spec/unit/module_tool/applications/checksummer_spec.rb +134 -0
  353. data/spec/unit/module_tool/applications/installer_spec.rb +71 -91
  354. data/spec/unit/module_tool/applications/searcher_spec.rb +1 -3
  355. data/spec/unit/module_tool/applications/uninstaller_spec.rb +18 -26
  356. data/spec/unit/module_tool/applications/unpacker_spec.rb +19 -52
  357. data/spec/unit/module_tool/tar/gnu_spec.rb +19 -0
  358. data/spec/unit/module_tool/tar/mini_spec.rb +59 -0
  359. data/spec/unit/module_tool/tar/solaris_spec.rb +19 -0
  360. data/spec/unit/network/http/connection_spec.rb +17 -2
  361. data/spec/unit/network/http/handler_spec.rb +195 -167
  362. data/spec/unit/network/http/rack/rest_spec.rb +26 -4
  363. data/spec/unit/network/http/webrick/rest_spec.rb +28 -1
  364. data/spec/unit/network/http/webrick_spec.rb +12 -3
  365. data/spec/unit/node/environment_spec.rb +421 -404
  366. data/spec/unit/parser/ast/arithmetic_operator_spec.rb +98 -2
  367. data/spec/unit/parser/collector_spec.rb +4 -4
  368. data/spec/unit/parser/compiler_spec.rb +13 -13
  369. data/spec/unit/parser/eparser_adapter_spec.rb +407 -0
  370. data/spec/unit/parser/functions/extlookup_spec.rb +20 -17
  371. data/spec/unit/parser/functions/fqdn_rand_spec.rb +5 -0
  372. data/spec/unit/parser/functions/hiera_include_spec.rb +0 -2
  373. data/spec/unit/parser/functions/hiera_spec.rb +0 -2
  374. data/spec/unit/parser/functions_spec.rb +27 -15
  375. data/spec/unit/parser/methods/collect_spec.rb +110 -0
  376. data/spec/unit/parser/methods/each_spec.rb +91 -0
  377. data/spec/unit/parser/methods/foreach_spec.rb +91 -0
  378. data/spec/unit/parser/methods/reduce_spec.rb +67 -0
  379. data/spec/unit/parser/methods/reject_spec.rb +73 -0
  380. data/spec/unit/parser/methods/select_spec.rb +79 -0
  381. data/spec/unit/parser/methods/shared.rb +61 -0
  382. data/spec/unit/parser/methods/slice_spec.rb +97 -0
  383. data/spec/unit/parser/parser_spec.rb +2 -2
  384. data/spec/unit/parser/scope_spec.rb +39 -16
  385. data/spec/unit/parser/templatewrapper_spec.rb +6 -5
  386. data/spec/unit/parser/type_loader_spec.rb +191 -165
  387. data/spec/unit/pops/adaptable_spec.rb +143 -0
  388. data/spec/unit/pops/containment_spec.rb +25 -0
  389. data/spec/unit/pops/factory_rspec_helper.rb +77 -0
  390. data/spec/unit/pops/factory_spec.rb +329 -0
  391. data/spec/unit/pops/issues_spec.rb +26 -0
  392. data/spec/unit/pops/label_provider_spec.rb +42 -0
  393. data/spec/unit/pops/model/ast_transformer_spec.rb +65 -0
  394. data/spec/unit/pops/model/model_spec.rb +37 -0
  395. data/spec/unit/pops/parser/lexer_spec.rb +884 -0
  396. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +248 -0
  397. data/spec/unit/pops/parser/parse_calls_spec.rb +93 -0
  398. data/spec/unit/pops/parser/parse_conditionals_spec.rb +159 -0
  399. data/spec/unit/pops/parser/parse_containers_spec.rb +175 -0
  400. data/spec/unit/pops/parser/parse_resource_spec.rb +228 -0
  401. data/spec/unit/pops/parser/parser_rspec_helper.rb +11 -0
  402. data/spec/unit/pops/parser/parser_spec.rb +15 -0
  403. data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +16 -0
  404. data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +243 -0
  405. data/spec/unit/pops/transformer/transform_calls_spec.rb +80 -0
  406. data/spec/unit/pops/transformer/transform_conditionals_spec.rb +132 -0
  407. data/spec/unit/pops/transformer/transform_containers_spec.rb +182 -0
  408. data/spec/unit/pops/transformer/transform_resource_spec.rb +185 -0
  409. data/spec/unit/pops/transformer/transformer_rspec_helper.rb +27 -0
  410. data/spec/unit/pops/visitor_spec.rb +94 -0
  411. data/spec/unit/property_spec.rb +11 -0
  412. data/spec/unit/provider/augeas/augeas_spec.rb +3 -0
  413. data/spec/unit/provider/cron/crontab_spec.rb +97 -7
  414. data/spec/unit/provider/cron/parsed_spec.rb +325 -0
  415. data/spec/unit/provider/exec/posix_spec.rb +1 -1
  416. data/spec/unit/provider/group/groupadd_spec.rb +33 -3
  417. data/spec/unit/provider/group/pw_spec.rb +5 -5
  418. data/spec/unit/provider/nameservice_spec.rb +304 -0
  419. data/spec/unit/provider/package/aix_spec.rb +53 -11
  420. data/spec/unit/provider/package/aptrpm_spec.rb +6 -0
  421. data/spec/unit/provider/package/gem_spec.rb +6 -11
  422. data/spec/unit/provider/package/nim_spec.rb +216 -7
  423. data/spec/unit/provider/package/opkg_spec.rb +180 -0
  424. data/spec/unit/provider/package/rpm_spec.rb +149 -3
  425. data/spec/unit/provider/package/yum_spec.rb +6 -5
  426. data/spec/unit/provider/parsedfile_spec.rb +122 -28
  427. data/spec/unit/provider/service/freebsd_spec.rb +18 -0
  428. data/spec/unit/provider/service/init_spec.rb +108 -87
  429. data/spec/unit/provider/service/launchd_spec.rb +2 -2
  430. data/spec/unit/provider/service/openwrt_spec.rb +109 -0
  431. data/spec/unit/provider/service/src_spec.rb +117 -41
  432. data/spec/unit/provider/service/systemd_spec.rb +125 -17
  433. data/spec/unit/provider/service/upstart_spec.rb +1 -1
  434. data/spec/unit/provider/user/aix_spec.rb +42 -0
  435. data/spec/unit/provider/user/directoryservice_spec.rb +1 -0
  436. data/spec/unit/provider/user/pw_spec.rb +24 -12
  437. data/spec/unit/provider/user/user_role_add_spec.rb +1 -1
  438. data/spec/unit/provider/user/useradd_spec.rb +179 -15
  439. data/spec/unit/resource/type_spec.rb +3 -3
  440. data/spec/unit/scheduler/job_spec.rb +79 -0
  441. data/spec/unit/scheduler/scheduler_spec.rb +129 -0
  442. data/spec/unit/scheduler/splay_job_spec.rb +35 -0
  443. data/spec/unit/ssl/base_spec.rb +3 -9
  444. data/spec/unit/ssl/certificate_authority_spec.rb +1 -0
  445. data/spec/unit/ssl/certificate_request_spec.rb +3 -1
  446. data/spec/unit/ssl/certificate_spec.rb +3 -1
  447. data/spec/unit/ssl/configuration_spec.rb +74 -0
  448. data/spec/unit/ssl/host_spec.rb +28 -7
  449. data/spec/unit/ssl/validator_spec.rb +311 -0
  450. data/spec/unit/transaction/event_manager_spec.rb +49 -0
  451. data/spec/unit/transaction/event_spec.rb +20 -5
  452. data/spec/unit/transaction/report_spec.rb +8 -0
  453. data/spec/unit/type/cron_spec.rb +9 -0
  454. data/spec/unit/type/exec_spec.rb +11 -0
  455. data/spec/unit/type/file/content_spec.rb +20 -20
  456. data/spec/unit/type/file/mode_spec.rb +6 -0
  457. data/spec/unit/type/file/source_spec.rb +9 -7
  458. data/spec/unit/type/file_spec.rb +22 -3
  459. data/spec/unit/type/service_spec.rb +34 -21
  460. data/spec/unit/type_spec.rb +46 -1
  461. data/spec/unit/util/backups_spec.rb +2 -2
  462. data/spec/unit/util/execution_spec.rb +4 -1
  463. data/spec/unit/util/filetype_spec.rb +6 -0
  464. data/spec/unit/util/monkey_patches_spec.rb +18 -0
  465. data/spec/unit/util/network_device/cisco/device_spec.rb +37 -0
  466. data/spec/unit/util/network_device/config_spec.rb +14 -0
  467. data/spec/unit/util/network_device_spec.rb +3 -3
  468. data/spec/unit/util/profiler/logging_spec.rb +81 -0
  469. data/spec/unit/util/profiler/none_spec.rb +12 -0
  470. data/spec/unit/util/profiler/object_counts_spec.rb +14 -0
  471. data/spec/unit/util/profiler/wall_clock_spec.rb +13 -0
  472. data/spec/unit/util/pson_spec.rb +5 -0
  473. data/spec/unit/util/ssl_spec.rb +51 -0
  474. data/spec/unit/util/windows/root_certs_spec.rb +15 -0
  475. data/spec/unit/util_spec.rb +28 -0
  476. metadata +2593 -2307
  477. data/spec/unit/module_tool/applications/application_spec.rb +0 -19
@@ -0,0 +1,39 @@
1
+ class Puppet::ModuleTool::Tar::Mini
2
+ def initialize(module_name)
3
+ @module_name = module_name
4
+ end
5
+
6
+ def unpack(sourcefile, destdir)
7
+ Zlib::GzipReader.open(sourcefile) do |reader|
8
+ Archive::Tar::Minitar.unpack(reader, destdir) do |action, name, stats|
9
+ case action
10
+ when :dir, :file_start
11
+ validate_entry(destdir, name)
12
+ Puppet.debug("extracting #{destdir}/#{name}")
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ def pack(sourcedir, destfile)
19
+ Zlib::GzipWriter.open(destfile) do |writer|
20
+ Archive::Tar::Minitar.pack(sourcedir, writer)
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def validate_entry(destdir, path)
27
+ if Pathname.new(path).absolute?
28
+ raise Puppet::ModuleTool::Errors::InvalidPathInPackageError,
29
+ :requested_package => @module_name, :entry_path => path, :directory => destdir
30
+ end
31
+
32
+ path = File.expand_path File.join(destdir, path)
33
+
34
+ if path !~ /\A#{Regexp.escape destdir}/
35
+ raise Puppet::ModuleTool::Errors::InvalidPathInPackageError,
36
+ :requested_package => @module_name, :entry_path => path, :directory => destdir
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,5 @@
1
+ class Puppet::ModuleTool::Tar::Solaris < Puppet::ModuleTool::Tar::Gnu
2
+ def unpack(sourcefile, destdir)
3
+ Puppet::Util::Execution.execute("gtar xzf #{sourcefile} -C #{destdir}")
4
+ end
5
+ end
@@ -1,2 +1,3 @@
1
1
  module Puppet::Network::HTTP
2
+ HEADER_ENABLE_PROFILING = "X-Puppet-Profiling"
2
3
  end
@@ -1,6 +1,7 @@
1
1
  require 'net/https'
2
2
  require 'puppet/ssl/host'
3
3
  require 'puppet/ssl/configuration'
4
+ require 'puppet/ssl/validator'
4
5
  require 'puppet/network/authentication'
5
6
 
6
7
  module Puppet::Network::HTTP
@@ -44,38 +45,23 @@ module Puppet::Network::HTTP
44
45
  end
45
46
 
46
47
  def request(method, *args)
47
- peer_certs = []
48
- verify_errors = []
49
-
50
- connection.verify_callback = proc do |preverify_ok, ssl_context|
51
- # We use the callback to collect the certificates for use in
52
- # constructing the error message if the verification failed.
53
- # This is necessary since we don't have direct access to the
54
- # cert that we expected the connection to use otherwise.
55
- peer_certs << Puppet::SSL::Certificate.from_instance(ssl_context.current_cert)
56
- # And also keep the detailed verification error if such an error occurs
57
- if ssl_context.error_string and not preverify_ok
58
- verify_errors << "#{ssl_context.error_string} for #{ssl_context.current_cert.subject}"
59
- end
60
- preverify_ok
61
- end
62
-
48
+ ssl_validator = Puppet::SSL::Validator.new(:ssl_configuration => ssl_configuration)
49
+ # Perform our own validation of the SSL connection in addition to OpenSSL
50
+ ssl_validator.register_verify_callback(connection)
63
51
  response = connection.send(method, *args)
64
-
65
- # Now that the request completed successfully, lets check the involved
66
- # certificates for approaching expiration dates
67
- warn_if_near_expiration(*peer_certs)
52
+ # Check the peer certs and warn if they're nearing expiration.
53
+ warn_if_near_expiration(*ssl_validator.peer_certs)
68
54
 
69
55
  response
70
56
  rescue OpenSSL::SSL::SSLError => error
71
57
  if error.message.include? "certificate verify failed"
72
58
  msg = error.message
73
- msg << ": [" + verify_errors.join('; ') + "]"
59
+ msg << ": [" + ssl_validator.verify_errors.join('; ') + "]"
74
60
  raise Puppet::Error, msg
75
61
  elsif error.message =~ /hostname (was )?not match/
76
- raise unless cert = peer_certs.find { |c| c.name !~ /^puppet ca/i }
62
+ leaf_ssl_cert = ssl_validator.peer_certs.last
77
63
 
78
- valid_certnames = [cert.name, *cert.subject_alt_names].uniq
64
+ valid_certnames = [leaf_ssl_cert.name, *leaf_ssl_cert.subject_alt_names].uniq
79
65
  msg = valid_certnames.length > 1 ? "one of #{valid_certnames.join(', ')}" : valid_certnames.first
80
66
 
81
67
  raise Puppet::Error, "Server hostname '#{connection.address}' did not match server certificate; expected #{msg}"
@@ -1,10 +1,12 @@
1
1
  module Puppet::Network::HTTP
2
2
  end
3
3
 
4
+ require 'puppet/network/http'
4
5
  require 'puppet/network/http/api/v1'
5
6
  require 'puppet/network/authorization'
6
7
  require 'puppet/network/authentication'
7
8
  require 'puppet/network/rights'
9
+ require 'puppet/util/profiler'
8
10
  require 'resolv'
9
11
 
10
12
  module Puppet::Network::HTTP::Handler
@@ -14,6 +16,13 @@ module Puppet::Network::HTTP::Handler
14
16
 
15
17
  attr_reader :server, :handler
16
18
 
19
+
20
+ # Retrieve all headers from the http request, as a hash with the header names
21
+ # (lower-cased) as the keys
22
+ def headers(request)
23
+ raise NotImplementedError
24
+ end
25
+
17
26
  # Retrieve the accept header from the http request.
18
27
  def accept_header(request)
19
28
  raise NotImplementedError
@@ -63,12 +72,21 @@ module Puppet::Network::HTTP::Handler
63
72
 
64
73
  # handle an HTTP request
65
74
  def process(request, response)
66
- indirection, method, key, params = uri2indirection(http_method(request), path(request), params(request))
75
+ request_headers = headers(request)
76
+ request_params = params(request)
77
+ request_method = http_method(request)
78
+ request_path = path(request)
67
79
 
68
- check_authorization(indirection, method, key, params)
69
- warn_if_near_expiration(client_cert(request))
80
+ configure_profiler(request_headers, request_params)
70
81
 
71
- send("do_#{method}", indirection, key, params, request, response)
82
+ Puppet::Util::Profiler.profile("Processed request #{request_method} #{request_path}") do
83
+ indirection, method, key, params = uri2indirection(request_method, request_path, request_params)
84
+
85
+ check_authorization(indirection, method, key, params)
86
+ warn_if_near_expiration(client_cert(request))
87
+
88
+ send("do_#{method}", indirection, key, params, request, response)
89
+ end
72
90
  rescue SystemExit,NoMemoryError
73
91
  raise
74
92
  rescue Exception => e
@@ -118,10 +136,15 @@ module Puppet::Network::HTTP::Handler
118
136
  format = format_to_use(request)
119
137
  set_content_type(response, format)
120
138
 
139
+ rendered_result = result
121
140
  if result.respond_to?(:render)
122
- set_response(response, result.render(format))
123
- else
124
- set_response(response, result)
141
+ Puppet::Util::Profiler.profile("Rendered result in #{format}") do
142
+ rendered_result = result.render(format)
143
+ end
144
+ end
145
+
146
+ Puppet::Util::Profiler.profile("Sent response") do
147
+ set_response(response, rendered_result)
125
148
  end
126
149
  end
127
150
 
@@ -253,4 +276,12 @@ module Puppet::Network::HTTP::Handler
253
276
  result
254
277
  end
255
278
  end
279
+
280
+ def configure_profiler(request_headers, request_params)
281
+ if (request_headers.has_key?(Puppet::Network::HTTP::HEADER_ENABLE_PROFILING.downcase) or Puppet[:profile])
282
+ Puppet::Util::Profiler.current = Puppet::Util::Profiler::WallClock.new(Puppet.method(:debug), request_params.object_id)
283
+ else
284
+ Puppet::Util::Profiler.current = Puppet::Util::Profiler::NONE
285
+ end
286
+ end
256
287
  end
@@ -1,5 +1,7 @@
1
+ require 'openssl'
1
2
  require 'puppet/network/http/handler'
2
3
  require 'puppet/network/http/rack/httphandler'
4
+ require 'puppet/util/ssl'
3
5
 
4
6
  class Puppet::Network::HTTP::RackREST < Puppet::Network::HTTP::RackHttpHandler
5
7
 
@@ -46,6 +48,14 @@ class Puppet::Network::HTTP::RackREST < Puppet::Network::HTTP::RackHttpHandler
46
48
  end
47
49
  end
48
50
 
51
+ # Retrieve all headers from the http request, as a map.
52
+ def headers(request)
53
+ request.env.select {|k,v| k.start_with? 'HTTP_'}.inject({}) do |m, (k,v)|
54
+ m[k.sub(/^HTTP_/, '').downcase] = v
55
+ m
56
+ end
57
+ end
58
+
49
59
  # Retrieve the accept header from the http request.
50
60
  def accept_header(request)
51
61
  request.env[HEADER_ACCEPT]
@@ -98,11 +108,12 @@ class Puppet::Network::HTTP::RackREST < Puppet::Network::HTTP::RackHttpHandler
98
108
  result = {}
99
109
  result[:ip] = request.ip
100
110
 
101
- # if we find SSL info in the headers, use them to get a hostname.
111
+ # if we find SSL info in the headers, use them to get a hostname from the CN.
102
112
  # try this with :ssl_client_header, which defaults should work for
103
113
  # Apache with StdEnvVars.
104
- if dn = request.env[Puppet[:ssl_client_header]] and dn_matchdata = dn.match(/^.*?CN\s*=\s*(.*)/)
105
- result[:node] = dn_matchdata[1].to_str
114
+ if subj_str = request.env[Puppet[:ssl_client_header]]
115
+ subject = Puppet::Util::SSL.subject_from_dn(subj_str)
116
+ result[:node] = Puppet::Util::SSL.cn_from_subject(subject)
106
117
  result[:authenticated] = (request.env[Puppet[:ssl_client_verify_header]] == 'SUCCESS')
107
118
  else
108
119
  result[:node] = resolve_node(result)
@@ -14,10 +14,12 @@ class Puppet::Network::HTTP::WEBrick
14
14
  end
15
15
 
16
16
  def listen(address, port)
17
- arguments = {:BindAddress => address, :Port => port}
17
+ arguments = {:BindAddress => address, :Port => port, :DoNotReverseLookup => true}
18
18
  arguments.merge!(setup_logger)
19
19
  arguments.merge!(setup_ssl)
20
20
 
21
+ BasicSocket.do_not_reverse_lookup = true
22
+
21
23
  @server = WEBrick::HTTPServer.new(arguments)
22
24
  @server.listeners.each { |l| l.start_immediately = false }
23
25
 
@@ -1,6 +1,7 @@
1
1
  require 'puppet/network/http/handler'
2
2
  require 'resolv'
3
3
  require 'webrick'
4
+ require 'puppet/util/ssl'
4
5
 
5
6
  class Puppet::Network::HTTP::WEBrickREST < WEBrick::HTTPServlet::AbstractServlet
6
7
 
@@ -24,6 +25,14 @@ class Puppet::Network::HTTP::WEBrickREST < WEBrick::HTTPServlet::AbstractServlet
24
25
  process(request, response)
25
26
  end
26
27
 
28
+ def headers(request)
29
+ result = {}
30
+ request.each do |k, v|
31
+ result[k.downcase] = v
32
+ end
33
+ result
34
+ end
35
+
27
36
  def accept_header(request)
28
37
  request["accept"]
29
38
  end
@@ -73,8 +82,8 @@ class Puppet::Network::HTTP::WEBrickREST < WEBrick::HTTPServlet::AbstractServlet
73
82
  # then we get the hostname from the cert, instead of via IP
74
83
  # info
75
84
  result[:authenticated] = false
76
- if cert = request.client_cert and nameary = cert.subject.to_a.find { |ary| ary[0] == "CN" }
77
- result[:node] = nameary[1]
85
+ if cert = request.client_cert and cn = Puppet::Util::SSL.cn_from_subject(cert.subject)
86
+ result[:node] = cn
78
87
  result[:authenticated] = true
79
88
  else
80
89
  result[:node] = resolve_node(result)
@@ -1,6 +1,7 @@
1
1
  require 'puppet/util'
2
2
  require 'puppet/util/cacher'
3
3
  require 'monitor'
4
+ require 'puppet/parser/parser_factory'
4
5
 
5
6
  # Just define it, so this class has fewer load dependencies.
6
7
  class Puppet::Node
@@ -217,7 +218,8 @@ class Puppet::Node::Environment
217
218
 
218
219
  def perform_initial_import
219
220
  return empty_parse_result if Puppet.settings[:ignoreimport]
220
- parser = Puppet::Parser::Parser.new(self)
221
+ # parser = Puppet::Parser::Parser.new(self)
222
+ parser = Puppet::Parser::ParserFactory.parser(self)
221
223
  if code = Puppet.settings.uninterpolated_value(:code, name.to_s) and code != ""
222
224
  parser.string = code
223
225
  else
@@ -18,7 +18,7 @@ require 'puppet/util/docs'
18
18
  # @see Puppet::Type
19
19
  # @see Puppet::Property
20
20
  # @api public
21
- #
21
+ #
22
22
  class Puppet::Parameter
23
23
  include Puppet::Util
24
24
  include Puppet::Util::Errors
@@ -36,7 +36,7 @@ class Puppet::Parameter
36
36
  # which seems to works fine without this attribute declaration.
37
37
  # @api private
38
38
  #
39
- attr_reader :validater
39
+ attr_reader :validater
40
40
 
41
41
  # Unused?
42
42
  # @todo The term "munger" only appears in this location in the Puppet code base. There is munge and unmunge
@@ -44,14 +44,14 @@ class Puppet::Parameter
44
44
  # @api private
45
45
  #
46
46
  attr_reader :munger
47
-
47
+
48
48
  # @return [Symbol] The parameter name as given when it was created.
49
49
  attr_reader :name
50
-
50
+
51
51
  # @return [Object] The default value of the parameter as determined by the {defaultto} method, or nil if no
52
52
  # default has been set.
53
53
  attr_reader :default
54
-
54
+
55
55
  # @comment This somewhat odd documentation construct is because the getter and setter are not
56
56
  # orthogonal; the setter uses varargs and this confuses yard. To overcome the problem both the
57
57
  # getter and the setter are documented here. If this issues is fixed, a todo will be displayed
@@ -65,24 +65,24 @@ class Puppet::Parameter
65
65
  # @overload required_features
66
66
  # Returns the required _provider features_ as an array of lower case symbols
67
67
  # @overload required_features=(*args)
68
- # @param *args [Symbol] one or more names of required provider features
68
+ # @param *args [Symbol] one or more names of required provider features
69
69
  # Sets the required_provider_features_ from one or more values, or array. The given arguments
70
70
  # are flattened, and internalized.
71
71
  # @api public
72
72
  # @dsl type
73
73
  #
74
74
  attr_reader :required_features
75
-
75
+
76
76
  # @return [Puppet::Parameter::ValueCollection] The set of valid values (or an empty set that accepts any value).
77
77
  # @api private
78
78
  #
79
79
  attr_reader :value_collection
80
-
80
+
81
81
  # @return [Boolean] Flag indicating whether this parameter is a meta-parameter or not.
82
82
  attr_accessor :metaparam
83
83
 
84
84
  # Defines how the `default` value of a parameter is computed.
85
- # The computation of the parameter's default value is defined by providing a value or a block.
85
+ # The computation of the parameter's default value is defined by providing a value or a block.
86
86
  # A default of `nil` can not be used.
87
87
  # @overload defaultto(value)
88
88
  # Defines the default value with a literal value
@@ -95,7 +95,7 @@ class Puppet::Parameter
95
95
  # @see Parameter.default
96
96
  # @dsl type
97
97
  # @api public
98
- #
98
+ #
99
99
  def defaultto(value = nil, &block)
100
100
  if block
101
101
  define_method(:default, &block)
@@ -108,7 +108,7 @@ class Puppet::Parameter
108
108
  end
109
109
  end
110
110
 
111
- # Produces a documentation string.
111
+ # Produces a documentation string.
112
112
  # If an enumeration of _valid values_ has been defined, it is appended to the documentation
113
113
  # for this parameter specified with the {desc} method.
114
114
  # @return [String] Returns a documentation string.
@@ -243,6 +243,9 @@ class Puppet::Parameter
243
243
  # @overload validate {|| ... }
244
244
  # Defines an optional method that is used to validate the parameter's value.
245
245
  # Validation should raise appropriate exceptions, the return value of the given block is ignored.
246
+ # The easiest way to raise an appropriate exception is to call the method {Puppet::Util::Errors.fail} with
247
+ # the message as an argument.
248
+ #
246
249
  # @return [void]
247
250
  # @dsl type
248
251
  # @api public
@@ -256,7 +259,7 @@ class Puppet::Parameter
256
259
  # regular expression patterns.
257
260
  # @note Each call to this method adds to the set of valid values
258
261
  # @param names [Symbol, Regexp] The set of valid literal values and/or patterns for the parameter.
259
- # @return [void]
262
+ # @return [void]
260
263
  # @dsl type
261
264
  # @api public
262
265
  #
@@ -318,14 +321,14 @@ class Puppet::Parameter
318
321
 
319
322
  # Initializes the parameter with a required resource reference and optional attribute settings.
320
323
  # The option `:resource` must be specified or an exception is raised. Any additional options passed
321
- # are used to initialize the attributes of this parameter by treating each key in the `options` hash as
324
+ # are used to initialize the attributes of this parameter by treating each key in the `options` hash as
322
325
  # the name of the attribute to set, and the value as the value to set.
323
326
  # @param options [Hash{Symbol => Object]] Options, where `resource` is required
324
327
  # @option options [Puppet::Resource] :resource The resource this parameter holds a value for. Required.
325
328
  # @raise [Puppet::DevError] If resource is not specified in the options hash.
326
329
  # @api public
327
330
  # @note A parameter should be created via the DSL method {Puppet::Type::newparam}
328
- #
331
+ #
329
332
  def initialize(options = {})
330
333
  options = symbolize_options(options)
331
334
  if resource = options[:resource]
@@ -338,7 +341,7 @@ class Puppet::Parameter
338
341
  set_options(options)
339
342
  end
340
343
 
341
- # Writes the given `msg` to the log with the loglevel indicated by the associated resource's
344
+ # Writes the given `msg` to the log with the loglevel indicated by the associated resource's
342
345
  # `loglevel` parameter.
343
346
  # @todo is loglevel a metaparameter? it is looked up with `resource[:loglevel]`
344
347
  # @return [void]
@@ -354,7 +357,7 @@ class Puppet::Parameter
354
357
 
355
358
  # @!attribute [r] name
356
359
  # @return [Symbol] The parameter's name as given when it was created.
357
- # @note Since a Parameter defines the name at the class level, each Parameter class must be
360
+ # @note Since a Parameter defines the name at the class level, each Parameter class must be
358
361
  # unique within a type's inheritance chain.
359
362
  # @comment each parameter class must define the name method, and parameter
360
363
  # instances do not change that name this implicitly means that a given
@@ -366,7 +369,7 @@ class Puppet::Parameter
366
369
 
367
370
  # @return [Boolean] Returns true if this parameter, the associated resource, or overall puppet mode is `noop`.
368
371
  # @todo How is noop mode set for a parameter? Is this of value in DSL to inhibit a parameter?
369
- #
372
+ #
370
373
  def noop
371
374
  @noop ||= false
372
375
  tmp = @noop || self.resource.noop || Puppet[:noop] || false
@@ -377,7 +380,7 @@ class Puppet::Parameter
377
380
  # @todo Original comment = _return the full path to us, for logging and rollback; not currently
378
381
  # used_ This is difficult to figure out (if it is used or not as calls are certainly made to "pathbuilder"
379
382
  # method is several places, not just sure if it is this implementation or not.
380
- #
383
+ #
381
384
  # @api private
382
385
  def pathbuilder
383
386
  if @resource
@@ -424,7 +427,7 @@ class Puppet::Parameter
424
427
  ret
425
428
  end
426
429
 
427
- # This is the default implementation of `validate` that may be overridden by the DSL method {validate}.
430
+ # This is the default implementation of `validate` that may be overridden by the DSL method {validate}.
428
431
  # If no valid values have been defined, the given value is accepted, else it is validated against
429
432
  # the literal values (enumerator) and/or patterns defined by calling {newvalues}.
430
433
  #
@@ -432,7 +435,7 @@ class Puppet::Parameter
432
435
  # @raise [ArgumentError] if the value is not valid
433
436
  # @return [void]
434
437
  # @api private
435
- #
438
+ #
436
439
  def unsafe_validate(value)
437
440
  self.class.value_collection.validate(value)
438
441
  end
@@ -441,7 +444,7 @@ class Puppet::Parameter
441
444
  # @return [void]
442
445
  # @todo Better description of when the various exceptions are raised.ArgumentError is rescued and
443
446
  # changed into Puppet::Error.
444
- # @raise [ArgumentError, TypeError, Puppet::DevError, Puppet::Error] under various conditions
447
+ # @raise [ArgumentError, TypeError, Puppet::DevError, Puppet::Error] under various conditions
445
448
  # A protected validation method that only ever raises useful exceptions.
446
449
  # @api public
447
450
  #
@@ -475,7 +478,7 @@ class Puppet::Parameter
475
478
  # late-binding (e.g., users might not exist when the value is assigned
476
479
  # but might when it is asked for)."_ does not seem to be correct, the implementation
477
480
  # calls both validate an munge on the given value, so no late binding.
478
- #
481
+ #
479
482
  # The given value is validated and then munged (if munging has been specified). The result is store
480
483
  # as the value of this arameter.
481
484
  # @return [Object] The given `value` after munging.
@@ -492,7 +495,7 @@ class Puppet::Parameter
492
495
  # Some types don't have providers, in which case we return the resource object itself."_
493
496
  # This does not seem to be true, the default implementation that sets this value may be
494
497
  # {Puppet::Type.provider=} which always gets either the name of a provider or an instance of one.
495
- #
498
+ #
496
499
  def provider
497
500
  @resource.provider
498
501
  end
@@ -504,7 +507,7 @@ class Puppet::Parameter
504
507
  # @todo The original comment says = _"The properties need to return tags so that logs correctly
505
508
  # collect them."_ what if anything of that is of interest to document. Should tags and their relationship
506
509
  # to logs be described. This is a more general concept.
507
- #
510
+ #
508
511
  def tags
509
512
  unless defined?(@tags)
510
513
  @tags = []
@@ -522,20 +525,20 @@ class Puppet::Parameter
522
525
 
523
526
  # Produces a String with the value formatted for display to a human.
524
527
  # When the parameter value is a:
525
- #
528
+ #
526
529
  # * **single valued parameter value** the result is produced on the
527
- # form `'value'` where _value_ is the string form of the parameter's value.
530
+ # form `'value'` where _value_ is the string form of the parameter's value.
528
531
  #
529
- # * **Array** the list of values is enclosed in `[]`, and
532
+ # * **Array** the list of values is enclosed in `[]`, and
530
533
  # each produced value is separated by a comma.
531
- #
534
+ #
532
535
  # * **Hash** value is output with keys in sorted order enclosed in `{}` with each entry formatted
533
536
  # on the form `'k' => v` where
534
537
  # `k` is the key in string form and _v_ is the value of the key. Entries are comma separated.
535
538
  #
536
539
  # For both Array and Hash this method is called recursively to format contained values.
537
540
  # @note this method does not protect against infinite structures.
538
- #
541
+ #
539
542
  # @return [String] The formatted value in string form.
540
543
  #
541
544
  def self.format_value_for_display(value)