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
@@ -66,7 +66,8 @@ module PSON
66
66
  # * *object_class*: Defaults to Hash
67
67
  # * *array_class*: Defaults to Array
68
68
  def initialize(source, opts = {})
69
- super
69
+ source = convert_encoding source
70
+ super source
70
71
  if !opts.key?(:max_nesting) # defaults to 19
71
72
  @max_nesting = 19
72
73
  elsif opts[:max_nesting]
@@ -111,6 +112,51 @@ module PSON
111
112
 
112
113
  private
113
114
 
115
+ def convert_encoding(source)
116
+ if source.respond_to?(:to_str)
117
+ source = source.to_str
118
+ else
119
+ raise TypeError, "#{source.inspect} is not like a string"
120
+ end
121
+ if defined?(::Encoding)
122
+ if source.encoding == ::Encoding::ASCII_8BIT
123
+ b = source[0, 4].bytes.to_a
124
+ source =
125
+ case
126
+ when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
127
+ source.dup.force_encoding(::Encoding::UTF_32BE).encode!(::Encoding::UTF_8)
128
+ when b.size >= 4 && b[0] == 0 && b[2] == 0
129
+ source.dup.force_encoding(::Encoding::UTF_16BE).encode!(::Encoding::UTF_8)
130
+ when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
131
+ source.dup.force_encoding(::Encoding::UTF_32LE).encode!(::Encoding::UTF_8)
132
+ when b.size >= 4 && b[1] == 0 && b[3] == 0
133
+ source.dup.force_encoding(::Encoding::UTF_16LE).encode!(::Encoding::UTF_8)
134
+ else
135
+ source.dup
136
+ end
137
+ else
138
+ source = source.encode(::Encoding::UTF_8)
139
+ end
140
+ source.force_encoding(::Encoding::ASCII_8BIT)
141
+ else
142
+ b = source
143
+ source =
144
+ case
145
+ when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
146
+ PSON.encode('utf-8', 'utf-32be', b)
147
+ when b.size >= 4 && b[0] == 0 && b[2] == 0
148
+ PSON.encode('utf-8', 'utf-16be', b)
149
+ when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
150
+ PSON.encode('utf-8', 'utf-32le', b)
151
+ when b.size >= 4 && b[1] == 0 && b[3] == 0
152
+ PSON.encode('utf-8', 'utf-16le', b)
153
+ else
154
+ b
155
+ end
156
+ end
157
+ source
158
+ end
159
+
114
160
  # Unescape characters in strings.
115
161
  UNESCAPE_MAP = Hash.new { |h, k| h[k] = k.chr }
116
162
 
@@ -60,15 +60,15 @@ Puppet::Indirector::Face.define(:certificate, '0.0.1') do
60
60
 
61
61
  when_invoked do |name, options|
62
62
  host = Puppet::SSL::Host.new(name)
63
-
63
+
64
64
  # We have a weird case where we have --dns_alt_names from Puppet, but
65
65
  # this option is --dns-alt-names. Until we can get rid of --dns-alt-names
66
66
  # or do a global tr('-', '_'), we have to support both.
67
- # In supporting both, we'll use Puppet[:dns_alt_names] if specified on
67
+ # In supporting both, we'll use Puppet[:dns_alt_names] if specified on
68
68
  # command line. We'll use options[:dns_alt_names] if specified on
69
69
  # command line. If both specified, we'll fail.
70
70
  # jeffweiss 17 april 2012
71
-
71
+
72
72
  global_setting_from_cli = Puppet.settings.set_by_cli?(:dns_alt_names) == true
73
73
  raise ArgumentError, "Can't specify both --dns_alt_names and --dns-alt-names" if options[:dns_alt_names] and global_setting_from_cli
74
74
  options[:dns_alt_names] = Puppet[:dns_alt_names] if global_setting_from_cli
@@ -14,6 +14,6 @@ Puppet::Face.define(:module, '1.0.0') do
14
14
  a repository of user-contributed Puppet code. It can also generate empty
15
15
  modules, and prepare locally developed modules for release on the Forge.
16
16
  EOT
17
-
17
+
18
18
  display_global_options "environment", "modulepath"
19
19
  end
@@ -21,7 +21,9 @@ Puppet::Face.define(:module, '1.0.0') do
21
21
 
22
22
  when_invoked do |path, options|
23
23
  Puppet::ModuleTool.set_option_defaults options
24
- root_path = Puppet::ModuleTool.find_module_root(path)
24
+ unless root_path = Puppet::ModuleTool.find_module_root(path)
25
+ raise ArgumentError, "Could not find a valid module at #{path.inspect}"
26
+ end
25
27
  Puppet::ModuleTool::Applications::Checksummer.run(root_path, options)
26
28
  end
27
29
 
@@ -50,7 +50,7 @@ Puppet::Face.define(:module, '1.0.0') do
50
50
 
51
51
  when_invoked do |name, options|
52
52
  name = name.gsub('/', '-')
53
-
53
+
54
54
  Puppet::ModuleTool.set_option_defaults options
55
55
  Puppet.notice "Preparing to uninstall '#{name}'" << (options[:version] ? " (#{colorize(:cyan, options[:version].sub(/^(?=\d)/, 'v'))})" : '') << " ..."
56
56
  Puppet::ModuleTool::Applications::Uninstaller.run(name, options)
@@ -9,17 +9,17 @@ Puppet::Face.define(:node, '0.0.1') do
9
9
  description <<-'EOT'
10
10
  Clean up everything a puppet master knows about a node, including certificates
11
11
  and storeconfigs data.
12
-
12
+
13
13
  The full list of info cleaned by this action is:
14
14
 
15
15
  <Signed certificates> - ($vardir/ssl/ca/signed/node.domain.pem)
16
-
16
+
17
17
  <Cached facts> - ($vardir/yaml/facts/node.domain.yaml)
18
-
18
+
19
19
  <Cached node objects> - ($vardir/yaml/node/node.domain.yaml)
20
-
20
+
21
21
  <Reports> - ($vardir/reports/node.domain)
22
-
22
+
23
23
  <Stored configs> - (in database) The clean action can either remove all
24
24
  data from a host in your storeconfigs database, or, with the
25
25
  <--unexport> option, turn every exported resource supporting ensure to
@@ -10,7 +10,7 @@ Puppet.features.add(:syslog, :libs => ["syslog"])
10
10
  # We can use POSIX user functions
11
11
  Puppet.features.add(:posix) do
12
12
  require 'etc'
13
- Etc.getpwuid(0) != nil && Puppet.features.syslog?
13
+ !Etc.getpwuid(0).nil? && Puppet.features.syslog?
14
14
  end
15
15
 
16
16
  # We can use Microsoft Windows functions
@@ -68,3 +68,5 @@ Puppet.features.add(:sqlite, :libs => ["sqlite3"])
68
68
 
69
69
  # We have Hiera
70
70
  Puppet.features.add(:hiera, :libs => ["hiera"])
71
+
72
+ Puppet.features.add(:minitar, :libs => ["archive/tar/minitar"])
@@ -0,0 +1,8 @@
1
+ require 'puppet/util/feature'
2
+ require 'puppet/util/libuser'
3
+
4
+ Puppet.features.add(:libuser) {
5
+ File.executable?("/usr/sbin/lgroupadd") and
6
+ File.executable?("/usr/sbin/luseradd") and
7
+ File.exists?(Puppet::Util::Libuser.getconf)
8
+ }
@@ -136,7 +136,7 @@ class Puppet::FileServing::Fileset
136
136
  result = []
137
137
  return result unless recurse?(depth)
138
138
 
139
- while dir_path = current_dirs.shift or ((depth += 1) and recurse?(depth) and current_dirs = next_dirs and next_dirs = [] and dir_path = current_dirs.shift)
139
+ while dir_path = current_dirs.shift
140
140
  next unless stat = stat(dir_path)
141
141
  next unless stat.directory?
142
142
 
@@ -153,6 +153,14 @@ class Puppet::FileServing::Fileset
153
153
  # And to our list of files/directories to iterate over.
154
154
  next_dirs << File.join(dir_path, file_path)
155
155
  end
156
+
157
+ # Move to the next recusion level
158
+ if current_dirs.empty?
159
+ depth += 1
160
+ break unless recurse?(depth)
161
+ current_dirs = next_dirs
162
+ next_dirs = []
163
+ end
156
164
  end
157
165
 
158
166
  result
data/lib/puppet/forge.rb CHANGED
@@ -7,6 +7,8 @@ require 'puppet/forge/repository'
7
7
  require 'puppet/forge/errors'
8
8
 
9
9
  class Puppet::Forge
10
+ include Puppet::Forge::Errors
11
+
10
12
  # +consumer_name+ is a name to be used for identifying the consumer of the
11
13
  # forge and +consumer_semver+ is a SemVer object to identify the version of
12
14
  # the consumer
@@ -34,6 +36,14 @@ class Puppet::Forge
34
36
  # }
35
37
  # ]
36
38
  #
39
+ # @param term [String] search term
40
+ # @return [Array] modules found
41
+ # @raise [Puppet::Forge::Errors::CommunicationError] if there is a network
42
+ # related error
43
+ # @raise [Puppet::Forge::Errors::SSLVerifyError] if there is a problem
44
+ # verifying the remote SSL certificate
45
+ # @raise [Puppet::Forge::Errors::ResponseError] if the repository returns a
46
+ # bad HTTP response
37
47
  def search(term)
38
48
  server = Puppet.settings[:module_repository]
39
49
  Puppet.notice "Searching #{server} ..."
@@ -43,12 +53,25 @@ class Puppet::Forge
43
53
  when "200"
44
54
  matches = PSON.parse(response.body)
45
55
  else
46
- raise RuntimeError, "Could not execute search (HTTP #{response.code})"
56
+ raise ResponseError.new(:uri => uri.to_s, :input => term, :response => response)
47
57
  end
48
58
 
49
59
  matches
50
60
  end
51
61
 
62
+ # Return a list of module metadata hashes for the module requested and all
63
+ # of its dependencies.
64
+ #
65
+ # @param author [String] module's author name
66
+ # @param mod_name [String] module name
67
+ # @param version [String] optional module version number
68
+ # @return [Array] module and dependency metadata
69
+ # @raise [Puppet::Forge::Errors::CommunicationError] if there is a network
70
+ # related error
71
+ # @raise [Puppet::Forge::Errors::SSLVerifyError] if there is a problem
72
+ # verifying the remote SSL certificate
73
+ # @raise [Puppet::Forge::Errors::ResponseError] if the repository returns
74
+ # an error in its API response or a bad HTTP response
52
75
  def remote_dependency_info(author, mod_name, version)
53
76
  version_string = version ? "&version=#{version}" : ''
54
77
  response = repository.make_http_request("/api/v1/releases.json?module=#{author}/#{mod_name}#{version_string}")
@@ -57,11 +80,11 @@ class Puppet::Forge
57
80
  when "200"
58
81
  return json
59
82
  else
60
- error = json['error'] || ''
61
- if error =~ /^Module #{author}\/#{mod_name} has no release/
83
+ error = json['error']
84
+ if error && error =~ /^Module #{author}\/#{mod_name} has no release/
62
85
  return []
63
86
  else
64
- raise RuntimeError, "Could not find release information for this module (#{author}/#{mod_name}) (HTTP #{response.code})"
87
+ raise ResponseError.new(:uri => uri.to_s, :input => "#{author}/#{mod_name}", :message => error, :response => response)
65
88
  end
66
89
  end
67
90
  end
@@ -74,7 +97,7 @@ class Puppet::Forge
74
97
  begin
75
98
  cache_path = repository.retrieve(file)
76
99
  rescue OpenURI::HTTPError => e
77
- raise RuntimeError, "Could not download module: #{e.message}"
100
+ raise HttpResponseError.new(:uri => uri.to_s, :input => modname, :message => e.message)
78
101
  end
79
102
  else
80
103
  raise RuntimeError, "Malformed response from module repository."
@@ -66,4 +66,38 @@ Could not connect to #{@uri}
66
66
  end
67
67
  end
68
68
 
69
+ # This exception is raised when there is a bad HTTP response from the forge
70
+ # and optionally a message in the response.
71
+ class ResponseError < ForgeError
72
+ # @option options [String] :uri The URI that failed
73
+ # @option options [String] :input The user's input (e.g. module name)
74
+ # @option options [String] :message Error from the API response (optional)
75
+ # @option options [Net::HTTPResponse] :response The original HTTP response
76
+ def initialize(options)
77
+ @uri = options[:uri]
78
+ @input = options[:input]
79
+ @message = options[:message]
80
+ response = options[:response]
81
+ @response = "#{response.code} #{response.message}"
82
+
83
+ message = "Could not execute operation for '#{@input}'. Detail: "
84
+ message << @message << " / " if @message
85
+ message << @response << "."
86
+ super(message, original)
87
+ end
88
+
89
+ # Return a multiline version of the error message
90
+ #
91
+ # @return [String] the multiline version of the error message
92
+ def multiline
93
+ message = <<-EOS
94
+ Could not execute operation for '#{@input}'
95
+ The server being queried was #{@uri}
96
+ The HTTP response we received was '#{@response}'
97
+ EOS
98
+ message << " The message we received said '#{@message}'\n" if @message
99
+ message << " Check the author and module names are correct."
100
+ end
101
+ end
102
+
69
103
  end
@@ -75,7 +75,7 @@ class Puppet::Forge
75
75
 
76
76
  # Return a Net::HTTPResponse read for this +request_path+.
77
77
  def make_http_request(request_path)
78
- request = Net::HTTP::Get.new(request_path, { "User-Agent" => user_agent })
78
+ request = Net::HTTP::Get.new(URI.escape(request_path), { "User-Agent" => user_agent })
79
79
  if ! @uri.user.nil? && ! @uri.password.nil?
80
80
  request.basic_auth(@uri.user, @uri.password)
81
81
  end
@@ -40,9 +40,12 @@ module Puppet::Indirector
40
40
  include Puppet::Indirector::Envelope
41
41
  extend Puppet::Network::FormatHandler
42
42
 
43
+ # record the indirected class name for documentation purposes
44
+ options[:indirected_class] = name
45
+
43
46
  # instantiate the actual Terminus for that type and this name (:ldap, w/ args :node)
44
47
  # & hook the instantiated Terminus into this class (Node: @indirection = terminus)
45
- @indirection = Puppet::Indirector::Indirection.new(self, indirection, options)
48
+ @indirection = Puppet::Indirector::Indirection.new(self, indirection, options)
46
49
  end
47
50
 
48
51
  module ClassMethods
@@ -1,6 +1,7 @@
1
1
  require 'puppet/node'
2
2
  require 'puppet/resource/catalog'
3
3
  require 'puppet/indirector/code'
4
+ require 'puppet/util/profiler'
4
5
  require 'yaml'
5
6
 
6
7
  class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
@@ -16,20 +17,22 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
16
17
  raise ArgumentError, "Facts but no fact format provided for #{request.key}"
17
18
  end
18
19
 
19
- # If the facts were encoded as yaml, then the param reconstitution system
20
- # in Network::HTTP::Handler will automagically deserialize the value.
21
- if text_facts.is_a?(Puppet::Node::Facts)
22
- facts = text_facts
23
- else
24
- facts = Puppet::Node::Facts.convert_from(format, text_facts)
25
- end
20
+ Puppet::Util::Profiler.profile("Found facts") do
21
+ # If the facts were encoded as yaml, then the param reconstitution system
22
+ # in Network::HTTP::Handler will automagically deserialize the value.
23
+ if text_facts.is_a?(Puppet::Node::Facts)
24
+ facts = text_facts
25
+ else
26
+ facts = Puppet::Node::Facts.convert_from(format, text_facts)
27
+ end
26
28
 
27
- unless facts.name == request.key
28
- raise Puppet::Error, "Catalog for #{request.key.inspect} was requested with fact definition for the wrong node (#{facts.name.inspect})."
29
- end
29
+ unless facts.name == request.key
30
+ raise Puppet::Error, "Catalog for #{request.key.inspect} was requested with fact definition for the wrong node (#{facts.name.inspect})."
31
+ end
30
32
 
31
- facts.add_timestamp
32
- Puppet::Node::Facts.indirection.save(facts)
33
+ facts.add_timestamp
34
+ Puppet::Node::Facts.indirection.save(facts)
35
+ end
33
36
  end
34
37
 
35
38
  # Compile a node's catalog.
@@ -54,7 +57,9 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
54
57
  end
55
58
 
56
59
  def initialize
57
- set_server_facts
60
+ Puppet::Util::Profiler.profile("Setup server facts for compiling") do
61
+ set_server_facts
62
+ end
58
63
  end
59
64
 
60
65
  # Is our compiler part of a network, or are we just local?
@@ -76,9 +81,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
76
81
  str += " in environment #{node.environment}" if node.environment
77
82
  config = nil
78
83
 
79
- loglevel = networked? ? :notice : :none
80
-
81
- benchmark(loglevel, str) do
84
+ Puppet::Util::Profiler.profile(str) do
82
85
  begin
83
86
  config = Puppet::Parser::Compiler.compile(node)
84
87
  rescue Puppet::Error => detail
@@ -91,20 +94,24 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
91
94
  end
92
95
 
93
96
  # Turn our host name into a node object.
94
- def find_node(name, *args)
95
- begin
96
- return nil unless node = Puppet::Node.indirection.find(name, *args)
97
- rescue => detail
98
- message = "Failed when searching for node #{name}: #{detail}"
99
- Puppet.log_exception(detail, message)
100
- raise Puppet::Error, message
101
- end
102
-
97
+ def find_node(name, environment)
98
+ Puppet::Util::Profiler.profile("Found node information") do
99
+ node = nil
100
+ begin
101
+ node = Puppet::Node.indirection.find(name, :environment => environment)
102
+ rescue => detail
103
+ message = "Failed when searching for node #{name}: #{detail}"
104
+ Puppet.log_exception(detail, message)
105
+ raise Puppet::Error, message
106
+ end
103
107
 
104
- # Add any external data to the node.
105
- add_node_data(node)
106
108
 
107
- node
109
+ # Add any external data to the node.
110
+ if node
111
+ add_node_data(node)
112
+ end
113
+ node
114
+ end
108
115
  end
109
116
 
110
117
  # Extract the node from the request, or use the request
@@ -123,10 +130,10 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
123
130
  # By default the REST authorization system makes sure only the connected node
124
131
  # can compile his catalog.
125
132
  # This allows for instance monitoring systems or puppet-load to check several
126
- # node's catalog with only one certificate and a modification to auth.conf
133
+ # node's catalog with only one certificate and a modification to auth.conf
127
134
  # If no key is provided we can only compile the currently connected node.
128
135
  name = request.key || request.node
129
- if node = find_node(name, :environment => request.environment)
136
+ if node = find_node(name, request.environment)
130
137
  return node
131
138
  end
132
139
 
@@ -11,6 +11,7 @@ class Puppet::Node::Facts::InventoryActiveRecord < Puppet::Indirector::ActiveRec
11
11
  and inventory are deprecated. See http://links.puppetlabs.com/activerecord-deprecation"
12
12
 
13
13
  def initialize
14
+ raise Puppet::Error, "ActiveRecords-based inventory is unsupported with Ruby 2 and Rails 3.0" if RUBY_VERSION[0] == '2'
14
15
  Puppet.deprecation_warning "ActiveRecord-based storeconfigs and inventory are deprecated. See http://links.puppetlabs.com/activerecord-deprecation"
15
16
  super
16
17
  end