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,77 @@
1
+ require 'puppet/provider/package'
2
+
3
+ Puppet::Type.type(:package).provide :opkg, :source => :opkg, :parent => Puppet::Provider::Package do
4
+ desc "Opkg packaging support. Common on OpenWrt and OpenEmbedded platforms"
5
+
6
+ commands :opkg => "opkg"
7
+
8
+ confine :operatingsystem => :openwrt
9
+ defaultfor :operatingsystem => :openwrt
10
+
11
+ def self.instances
12
+ packages = []
13
+ execpipe("#{command(:opkg)} list-installed") do |process|
14
+ regex = %r{^(\S+) - (\S+)}
15
+ fields = [:name, :ensure]
16
+ hash = {}
17
+
18
+ process.each_line { |line|
19
+ if match = regex.match(line)
20
+ fields.zip(match.captures) { |field,value| hash[field] = value }
21
+ name = hash[:name]
22
+ hash[:provider] = self.name
23
+ packages << new(hash)
24
+ hash = {}
25
+ else
26
+ warning("Failed to match line %s" % line)
27
+ end
28
+ }
29
+ end
30
+ packages
31
+ rescue Puppet::ExecutionFailure
32
+ return nil
33
+ end
34
+
35
+ def latest
36
+ output = opkg( "list", @resource[:name])
37
+ matches = /^(\S+) - (\S+)/.match(output).captures
38
+ matches[1]
39
+ end
40
+
41
+ def install
42
+ # OpenWrt package lists are ephemeral, make sure we have at least
43
+ # some entries in the list directory for opkg to use
44
+ opkg('update') if Dir.entries('/var/opkg-lists/').size <= 2
45
+
46
+ if @resource[:source]
47
+ opkg( '--force-overwrite', 'install', @resource[:source] )
48
+ else
49
+ opkg( '--force-overwrite', 'install', @resource[:name] )
50
+ end
51
+ end
52
+
53
+ def uninstall
54
+ opkg( 'remove', @resource[:name] )
55
+ end
56
+
57
+ def update
58
+ self.install
59
+ end
60
+
61
+ def query
62
+ # list out our specific package
63
+ output = opkg( 'list-installed', @resource[:name] )
64
+ if output =~ /^(\S+) - (\S+)/
65
+ return { :ensure => $2 }
66
+ end
67
+ nil
68
+ rescue Puppet::ExecutionFailure
69
+ return {
70
+ :ensure => :purged,
71
+ :status => 'missing',
72
+ :name => @resource[:name],
73
+ :error => 'ok',
74
+ }
75
+ end
76
+
77
+ end
@@ -115,11 +115,11 @@ Puppet::Type.type(:package).provide :pacman, :parent => Puppet::Provider::Packag
115
115
  if pacman_check
116
116
  output = pacman "-Sp", "--print-format", "%v", @resource[:name]
117
117
  return output.chomp
118
- else
118
+ else
119
119
  output = yaourt "-Qma", @resource[:name]
120
120
  output.split("\n").each do |line|
121
121
  return line.split[1].chomp if line =~ /^aur/
122
- end
122
+ end
123
123
  end
124
124
  rescue Puppet::ExecutionFailure
125
125
  if pacman_check and self.yaourt?
@@ -23,19 +23,28 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
23
23
  end
24
24
  end
25
25
 
26
+ def self.current_version
27
+ return @current_version unless @current_version.nil?
28
+ output = rpm "--version"
29
+ @current_version = output.gsub('RPM version ', '').strip
30
+ end
31
+
32
+ # rpm < 4.1 don't support --nosignature
33
+ def self.nosignature
34
+ '--nosignature' unless Puppet::Util::Package.versioncmp(current_version, '4.1') < 0
35
+ end
36
+
37
+ # rpm < 4.0.2 don't support --nodigest
38
+ def self.nodigest
39
+ '--nodigest' unless Puppet::Util::Package.versioncmp(current_version, '4.0.2') < 0
40
+ end
41
+
26
42
  def self.instances
27
43
  packages = []
28
44
 
29
- # rpm < 4.1 don't support --nosignature
30
- output = rpm "--version"
31
- sig = "--nosignature"
32
- if output =~ /RPM version (([123].*)|(4\.0.*))/
33
- sig = ""
34
- end
35
-
36
45
  # list out all of the packages
37
46
  begin
38
- execpipe("#{command(:rpm)} -qa #{sig} --nodigest --qf '#{NEVRAFORMAT}\n'") { |process|
47
+ execpipe("#{command(:rpm)} -qa #{nosignature} #{nodigest} --qf '#{NEVRAFORMAT}\n'") { |process|
39
48
  # now turn each returned line into a package object
40
49
  process.each_line { |line|
41
50
  hash = nevra_to_hash(line)
@@ -56,7 +65,7 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
56
65
  #NOTE: Prior to a fix for issue 1243, this method potentially returned a cached value
57
66
  #IF YOU CALL THIS METHOD, IT WILL CALL RPM
58
67
  #Use get(:property) to check if cached values are available
59
- cmd = ["-q", @resource[:name], "--nosignature", "--nodigest", "--qf", "#{NEVRAFORMAT}\n"]
68
+ cmd = ["-q", @resource[:name], "#{self.class.nosignature}", "#{self.class.nodigest}", "--qf", "#{NEVRAFORMAT}\n"]
60
69
 
61
70
  begin
62
71
  output = rpm(*cmd)
@@ -95,13 +104,13 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
95
104
  end
96
105
 
97
106
  flag = "-i"
98
- flag = "-U" if @property_hash[:ensure] and @property_hash[:ensure] != :absent
107
+ flag = ["-U", "--oldpackage"] if @property_hash[:ensure] and @property_hash[:ensure] != :absent
99
108
 
100
- rpm flag, "--oldpackage", source
109
+ rpm flag, source
101
110
  end
102
111
 
103
112
  def uninstall
104
- query unless get(:arch)
113
+ query if get(:arch) == :absent
105
114
  nvr = "#{get(:name)}-#{get(:version)}-#{get(:release)}"
106
115
  arch = ".#{get(:arch)}"
107
116
  # If they specified an arch in the manifest, erase that Otherwise,
@@ -109,10 +118,15 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
109
118
  # installed and only the package name is specified (without the
110
119
  # arch), this will uninstall all of them on successive runs of the
111
120
  # client, one after the other
112
- if @resource[:name][-arch.size, arch.size] == arch
113
- nvr += arch
114
- else
115
- nvr += ".#{get(:arch)}"
121
+
122
+ # version of RPM prior to 4.2.1 can't accept the architecture as
123
+ # part of the package name.
124
+ unless Puppet::Util::Package.versioncmp(self.class.current_version, '4.2.1') < 0
125
+ if @resource[:name][-arch.size, arch.size] == arch
126
+ nvr += arch
127
+ else
128
+ nvr += ".#{get(:arch)}"
129
+ end
116
130
  end
117
131
  rpm "-e", nvr
118
132
  end
@@ -2,9 +2,9 @@ require 'puppet/util/package'
2
2
 
3
3
  Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
4
4
  desc "Support via `yum`.
5
-
6
- Using this provider's `uninstallable` feature will not remove dependent packages. To
7
- remove dependent packages with this provider use the `purgeable` feature, but note this
5
+
6
+ Using this provider's `uninstallable` feature will not remove dependent packages. To
7
+ remove dependent packages with this provider use the `purgeable` feature, but note this
8
8
  feature is destructive and should be used with the utmost care."
9
9
 
10
10
  has_feature :versionable
@@ -103,6 +103,37 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
103
103
  # HEADER: is definitely not recommended.\n}
104
104
  end
105
105
 
106
+ # An optional regular expression matched by third party headers.
107
+ #
108
+ # For example, this can be used to filter the vixie cron headers as
109
+ # erronously exported by older cron versions.
110
+ #
111
+ # @api private
112
+ # @abstract Providers based on ParsedFile may implement this to make it
113
+ # possible to identify a header maintained by a third party tool.
114
+ # The provider can then allow that header to remain near the top of the
115
+ # written file, or remove it after composing the file content.
116
+ # If implemented, the function must return a Regexp object.
117
+ # The expression must be tailored to match exactly one third party header.
118
+ # @see drop_native_header
119
+ # @note When specifying regular expressions in multiline mode, avoid
120
+ # greedy repititions such as '.*' (use .*? instead). Otherwise, the
121
+ # provider may drop file content between sparse headers.
122
+ def self.native_header_regex
123
+ nil
124
+ end
125
+
126
+ # How to handle third party headers.
127
+ # @api private
128
+ # @abstract Providers based on ParsedFile that make use of the support for
129
+ # third party headers may override this method to return +true+.
130
+ # When this is done, headers that are matched by the native_header_regex
131
+ # are not written back to disk.
132
+ # @see native_header_regex
133
+ def self.drop_native_header
134
+ false
135
+ end
136
+
106
137
  # Add another type var.
107
138
  def self.initvars
108
139
  @records = []
@@ -186,6 +217,11 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
186
217
  match_providers_with_resources(resources)
187
218
  end
188
219
 
220
+ # Match a list of catalog resources with provider instances
221
+ #
222
+ # @api private
223
+ #
224
+ # @param [Array<Puppet::Resource>] resources A list of resources using this class as a provider
189
225
  def self.match_providers_with_resources(resources)
190
226
  return unless resources
191
227
  matchers = resources.dup
@@ -193,11 +229,10 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
193
229
  # Skip things like comments and blank lines
194
230
  next if skip_record?(record)
195
231
 
196
- if name = record[:name] and resource = resources[name]
232
+ if (resource = resource_for_record(record, resources))
197
233
  resource.provider = new(record)
198
234
  elsif respond_to?(:match)
199
235
  if resource = match(record, matchers)
200
- # Remove this resource from circulation so we don't unnecessarily try to match
201
236
  matchers.delete(resource.title)
202
237
  record[:name] = resource[:name]
203
238
  resource.provider = new(record)
@@ -206,6 +241,21 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
206
241
  end
207
242
  end
208
243
 
244
+ # Look up a resource based on a parsed file record
245
+ #
246
+ # @api private
247
+ #
248
+ # @param [Hash<Symbol, Object>] record
249
+ # @param [Array<Puppet::Resource>] resources
250
+ #
251
+ # @return [Puppet::Resource, nil] The resource if found, else nil
252
+ def self.resource_for_record(record, resources)
253
+ name = record[:name]
254
+ if name
255
+ resources[name]
256
+ end
257
+ end
258
+
209
259
  def self.prefetch_all_targets(resources)
210
260
  records = []
211
261
  targets(resources).each do |target|
@@ -216,7 +266,16 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
216
266
 
217
267
  # Prefetch an individual target.
218
268
  def self.prefetch_target(target)
219
- target_records = retrieve(target).each do |r|
269
+
270
+ begin
271
+ target_records = retrieve(target)
272
+ rescue Puppet::Util::FileType::FileReadError => detail
273
+ puts detail.backtrace if Puppet[:trace]
274
+ Puppet.err "Could not prefetch #{self.resource_type.name} provider '#{self.name}' target '#{target}': #{detail}. Treating as empty"
275
+ target_records = []
276
+ end
277
+
278
+ target_records.each do |r|
220
279
  r[:on_disk] = true
221
280
  r[:target] = target
222
281
  r[:ensure] = :present
@@ -299,8 +358,26 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
299
358
  targets.uniq.compact
300
359
  end
301
360
 
361
+ # Compose file contents from the set of records.
362
+ #
363
+ # If self.native_header_regex is not nil, possible vendor headers are
364
+ # identified by matching the return value against the expression.
365
+ # If one (or several consecutive) such headers, are found, they are
366
+ # either moved in front of the self.header if self.drop_native_header
367
+ # is false (this is the default), or removed from the return value otherwise.
368
+ #
369
+ # @api private
302
370
  def self.to_file(records)
303
371
  text = super
372
+ if native_header_regex and (match = text.match(native_header_regex))
373
+ if drop_native_header
374
+ # concatenate the text in front of and after the native header
375
+ text = match.pre_match + match.post_match
376
+ else
377
+ native_header = match[0]
378
+ return native_header + header + match.pre_match + match.post_match
379
+ end
380
+ end
304
381
  header + text
305
382
  end
306
383
 
@@ -73,7 +73,7 @@ Puppet::Type.type(:selmodule).provide(:semodule) do
73
73
  end
74
74
 
75
75
  def selmod_readnext (handle)
76
- len = handle.read(4).unpack('L')[0]
76
+ len = handle.read(4).unpack('V')[0]
77
77
  handle.read(len)
78
78
  end
79
79
 
@@ -83,7 +83,7 @@ Puppet::Type.type(:selmodule).provide(:semodule) do
83
83
  filename = selmod_name_to_filename
84
84
  mod = File.new(filename, "r")
85
85
 
86
- (hdr, ver, numsec) = mod.read(12).unpack('LLL')
86
+ (hdr, ver, numsec) = mod.read(12).unpack('VVV')
87
87
 
88
88
  raise Puppet::Error, "Found #{hdr} instead of magic #{magic} in #{filename}" if hdr != magic
89
89
 
@@ -18,10 +18,6 @@ Puppet::Type.type(:service).provide :debian, :parent => :init do
18
18
 
19
19
  defaultfor :operatingsystem => [:debian, :ubuntu]
20
20
 
21
- def self.defpath
22
- superclass.defpath
23
- end
24
-
25
21
  # Remove the symlinks
26
22
  def disable
27
23
  if `dpkg --compare-versions $(dpkg-query -W --showformat '${Version}' sysv-rc) ge 2.88 ; echo $?`.to_i == 0
@@ -41,7 +41,7 @@ Puppet::Type.type(:service).provide :freebsd, :parent => :init do
41
41
  def rcvar_name
42
42
  name = self.rcvar[1]
43
43
  self.error("No rcvar name found in rcvar") if name.nil?
44
- name = name.gsub!(/(.*)(_enable)?=(.*)/, '\1')
44
+ name = name.gsub!(/(.*?)(_enable)?=(.*)/, '\1')
45
45
  self.error("rcvar name is empty") if name.nil?
46
46
  self.debug("rcvar name is #{name}")
47
47
  name
@@ -73,7 +73,7 @@ Puppet::Type.type(:service).provide :freebsd, :parent => :init do
73
73
  [rcconf, rcconf_local, rcconf_dir + "/#{service}"].each do |filename|
74
74
  if File.exists?(filename)
75
75
  s = File.read(filename)
76
- if s.gsub!(/(#{rcvar}(_enable)?)=\"?(YES|NO)\"?/, "\\1=\"#{yesno}\"")
76
+ if s.gsub!(/^(#{rcvar}(_enable)?)=\"?(YES|NO)\"?/, "\\1=\"#{yesno}\"")
77
77
  File.open(filename, File::WRONLY) { |f| f << s }
78
78
  self.debug("Replaced in #{filename}")
79
79
  success = true
@@ -12,15 +12,6 @@ Puppet::Type.type(:service).provide :gentoo, :parent => :init do
12
12
 
13
13
  confine :operatingsystem => :gentoo
14
14
 
15
- def self.defpath
16
- superclass.defpath
17
- end
18
-
19
- def self.instances
20
- # this exclude list was found with grep -L '\/sbin\/runscript' /etc/init.d/*
21
- self.get_services(self.defpath, ['functions.sh', 'reboot.sh', 'shutdown.sh'])
22
- end
23
-
24
15
  def disable
25
16
  output = update :del, @resource[:name], :default
26
17
  rescue Puppet::ExecutionFailure
@@ -19,12 +19,37 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
19
19
  # We can't confine this here, because the init path can be overridden.
20
20
  #confine :exists => defpath
21
21
 
22
+ # some init scripts are not safe to execute, e.g. we do not want
23
+ # to suddently run /etc/init.d/reboot.sh status and reboot our system. The
24
+ # exclude list could be platform agnostic but I assume an invalid init script
25
+ # on system A will never be a valid init script on system B
26
+ def self.excludes
27
+ excludes = []
28
+ # these exclude list was found with grep -L '\/sbin\/runscript' /etc/init.d/* on gentoo
29
+ excludes += %w{functions.sh reboot.sh shutdown.sh}
30
+ # this exclude list is all from /sbin/service (5.x), but I did not exclude kudzu
31
+ excludes += %w{functions halt killall single linuxconf reboot boot}
32
+ # 'wait-for-state' and 'portmap-wait' are excluded from instances here
33
+ # because they take parameters that have unclear meaning. It looks like
34
+ # 'wait-for-state' is a generic waiter mainly used internally for other
35
+ # upstart services as a 'sleep until something happens'
36
+ # (http://lists.debian.org/debian-devel/2012/02/msg01139.html), while
37
+ # 'portmap-wait' is a specific instance of a waiter. There is an open
38
+ # launchpad bug
39
+ # (https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/962047) that may
40
+ # eventually explain how to use the wait-for-state service or perhaps why
41
+ # it should remain excluded. When that bug is adddressed this should be
42
+ # reexamined.
43
+ excludes += %w{wait-for-state portmap-wait}
44
+ excludes
45
+ end
46
+
22
47
  # List all services of this type.
23
48
  def self.instances
24
49
  get_services(self.defpath)
25
50
  end
26
51
 
27
- def self.get_services(defpath, exclude=[])
52
+ def self.get_services(defpath, exclude = self.excludes)
28
53
  defpath = [defpath] unless defpath.is_a? Array
29
54
  instances = []
30
55
  defpath.each do |path|
@@ -69,7 +94,7 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
69
94
  if File.directory?(path)
70
95
  true
71
96
  else
72
- if File.exist?(path) and ! File.directory?(path)
97
+ if File.exist?(path)
73
98
  self.debug "Search path #{path} is not a directory"
74
99
  else
75
100
  self.debug "Search path #{path} does not exist"
@@ -166,7 +166,7 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
166
166
  end
167
167
 
168
168
  # Launchd implemented plist overrides in version 10.6.
169
- # This method checks the major_version of OS X and returns true if
169
+ # This method checks the major_version of OS X and returns true if
170
170
  # it is 10.6 or greater. This allows us to implement different plist
171
171
  # behavior for versions >= 10.6
172
172
  def has_macosx_plist_overrides?
@@ -0,0 +1,36 @@
1
+ Puppet::Type.type(:service).provide :openwrt, :parent => :init, :source => :init do
2
+ desc <<-EOT
3
+ Support for OpenWrt flavored init scripts.
4
+
5
+ Uses /etc/init.d/service_name enable, disable, and enabled.
6
+
7
+ EOT
8
+
9
+ defaultfor :operatingsystem => :openwrt
10
+ confine :operatingsystem => :openwrt
11
+
12
+ has_feature :enableable
13
+
14
+ def self.defpath
15
+ ["/etc/init.d"]
16
+ end
17
+
18
+ def enable
19
+ system(self.initscript, 'enable')
20
+ end
21
+
22
+ def disable
23
+ system(self.initscript, 'disable')
24
+ end
25
+
26
+ def enabled?
27
+ # We can't define the "command" for the init script, so we call system?
28
+ if system(self.initscript, 'enabled') then return :true else return :false end
29
+ end
30
+
31
+ # Purposely leave blank so we fail back to ps based status detection
32
+ # As OpenWrt init script do not have status commands
33
+ def statuscmd
34
+ end
35
+
36
+ end