puppet 3.1.1 → 3.2.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -10,15 +10,6 @@ Puppet::Type.type(:service).provide :redhat, :parent => :init, :source => :init
10
10
 
11
11
  defaultfor :osfamily => [:redhat, :suse]
12
12
 
13
- def self.instances
14
- # this exclude list is all from /sbin/service (5.x), but I did not exclude kudzu
15
- self.get_services(['/etc/init.d'], ['functions', 'halt', 'killall', 'single', 'linuxconf', 'reboot', 'boot'])
16
- end
17
-
18
- def self.defpath
19
- superclass.defpath
20
- end
21
-
22
13
  # Remove the symlinks
23
14
  def disable
24
15
  # The off method operates on run levels 2,3,4 and 5 by default We ensure
@@ -14,13 +14,26 @@ Puppet::Type.type(:service).provide :src, :parent => :base do
14
14
  defaultfor :operatingsystem => :aix
15
15
  confine :operatingsystem => :aix
16
16
 
17
- commands :stopsrc => "/usr/bin/stopsrc"
18
- commands :startsrc => "/usr/bin/startsrc"
19
- commands :refresh => "/usr/bin/refresh"
20
- commands :lssrc => "/usr/bin/lssrc"
17
+ optional_commands :stopsrc => "/usr/bin/stopsrc",
18
+ :startsrc => "/usr/bin/startsrc",
19
+ :refresh => "/usr/bin/refresh",
20
+ :lssrc => "/usr/bin/lssrc",
21
+ :lsitab => "/usr/sbin/lsitab",
22
+ :mkitab => "/usr/sbin/mkitab",
23
+ :rmitab => "/usr/sbin/rmitab",
24
+ :chitab => "/usr/sbin/chitab"
21
25
 
22
26
  has_feature :refreshable
23
27
 
28
+ def self.instances
29
+ services = lssrc('-S')
30
+ services.split("\n").reject { |x| x.strip.start_with? '#' }.collect do |line|
31
+ data = line.split(':')
32
+ service_name = data[0]
33
+ new(:name => service_name)
34
+ end
35
+ end
36
+
24
37
  def startcmd
25
38
  [command(:startsrc), "-s", @resource[:name]]
26
39
  end
@@ -29,6 +42,27 @@ Puppet::Type.type(:service).provide :src, :parent => :base do
29
42
  [command(:stopsrc), "-s", @resource[:name]]
30
43
  end
31
44
 
45
+ def default_runlevel
46
+ "2"
47
+ end
48
+
49
+ def default_action
50
+ "once"
51
+ end
52
+
53
+ def enabled?
54
+ execute([command(:lsitab), @resource[:name]], {:failonfail => false, :combine => true})
55
+ $CHILD_STATUS.exitstatus == 0 ? :true : :false
56
+ end
57
+
58
+ def enable
59
+ mkitab("%s:%s:%s:%s" % [@resource[:name], default_runlevel, default_action, startcmd.join(" ")])
60
+ end
61
+
62
+ def disable
63
+ rmitab(@resource[:name])
64
+ end
65
+
32
66
  def restart
33
67
  execute([command(:lssrc), "-Ss", @resource[:name]]).each_line do |line|
34
68
  args = line.split(":")
@@ -1,9 +1,9 @@
1
1
  # Manage systemd services using /bin/systemctl
2
2
 
3
3
  Puppet::Type.type(:service).provide :systemd, :parent => :base do
4
- desc "Manages `systemd` services using `/bin/systemctl`."
4
+ desc "Manages `systemd` services using `systemctl`."
5
5
 
6
- commands :systemctl => "/bin/systemctl"
6
+ commands :systemctl => "systemctl"
7
7
 
8
8
  #defaultfor :osfamily => [:redhat, :suse]
9
9
 
@@ -25,15 +25,8 @@ Puppet::Type.type(:service).provide :upstart, :parent => :debian do
25
25
  # http://www.linuxplanet.com/linuxplanet/tutorials/7033/2/
26
26
  has_feature :enableable
27
27
 
28
- # 'wait-for-state' is excluded from instances here because it takes
29
- # parameters that have unclear meaning. It looks like 'wait-for-state' is
30
- # mainly used internally for other upstart services as a 'sleep until something happens'
31
- # (http://lists.debian.org/debian-devel/2012/02/msg01139.html). There is an open launchpad bug
32
- # (https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/962047) that may
33
- # eventually explain how to use this service or perhaps why it should remain
34
- # excluded. When that bug is adddressed this should be reexamined.
35
28
  def self.instances
36
- self.get_services(['wait-for-state'])
29
+ self.get_services(self.excludes) # Take exclude list from init provider
37
30
  end
38
31
 
39
32
  def self.get_services(exclude=[])
@@ -72,6 +72,7 @@ Puppet::Type.type(:user).provide :aix, :parent => Puppet::Provider::AixObject do
72
72
  {:aix_attr => :maxage, :puppet_prop => :password_max_age},
73
73
  {:aix_attr => :minage, :puppet_prop => :password_min_age},
74
74
  {:aix_attr => :attributes, :puppet_prop => :attributes},
75
+ {:aix_attr => :gecos, :puppet_prop => :comment},
75
76
  ]
76
77
 
77
78
  #--------------
@@ -94,7 +95,7 @@ Puppet::Type.type(:user).provide :aix, :parent => Puppet::Provider::AixObject do
94
95
  end
95
96
 
96
97
  def lscmd(value=@resource[:name])
97
- [self.class.command(:list)] + self.get_ia_module_args + [ value]
98
+ [self.class.command(:list), "-c"] + self.get_ia_module_args + [ value]
98
99
  end
99
100
 
100
101
  def lsallcmd()
@@ -146,7 +147,7 @@ Puppet::Type.type(:user).provide :aix, :parent => Puppet::Provider::AixObject do
146
147
  end
147
148
 
148
149
  # Get the groupname from its id
149
- def self.groupname_by_id(gid)
150
+ def groupname_by_id(gid)
150
151
  groupname=nil
151
152
  execute(lsgroupscmd("ALL")).each_line { |entry|
152
153
  attrs = self.parse_attr_list(entry, nil)
@@ -166,7 +167,7 @@ Puppet::Type.type(:user).provide :aix, :parent => Puppet::Provider::AixObject do
166
167
  # Check that a group exists and is valid
167
168
  def verify_group(value)
168
169
  if value.is_a? Integer or value.is_a? Fixnum
169
- groupname = self.groupname_by_id(value)
170
+ groupname = groupname_by_id(value)
170
171
  raise ArgumentError, "AIX group must be a valid existing group" unless groupname
171
172
  else
172
173
  raise ArgumentError, "AIX group must be a valid existing group" unless groupid_by_name(value)
@@ -297,13 +298,6 @@ Puppet::Type.type(:user).provide :aix, :parent => Puppet::Provider::AixObject do
297
298
  end
298
299
  end
299
300
 
300
- #- **comment**
301
- # A description of the user. Generally is a user's full name.
302
- #def comment=(value)
303
- #end
304
- #
305
- #def comment
306
- #end
307
301
  # UNSUPPORTED
308
302
  #- **profile_membership**
309
303
  # Whether specified roles should be treated as the only roles
@@ -12,7 +12,11 @@ Puppet::Type.type(:user).provide :pw, :parent => Puppet::Provider::NameService::
12
12
  options :home, :flag => "-d", :method => :dir
13
13
  options :comment, :method => :gecos
14
14
  options :groups, :flag => "-G"
15
- options :expiry, :method => :expire
15
+ options :expiry, :method => :expire, :munge => proc { |value|
16
+ value = '0000-00-00' if value == :absent
17
+ value.split("-").reverse.join("-")
18
+ }
19
+
16
20
 
17
21
  verify :gid, "GID must be an integer" do |value|
18
22
  value.is_a? Integer
@@ -26,21 +30,13 @@ Puppet::Type.type(:user).provide :pw, :parent => Puppet::Provider::NameService::
26
30
  cmd = [command(:pw), "useradd", @resource[:name]]
27
31
  @resource.class.validproperties.each do |property|
28
32
  next if property == :ensure or property == :password
29
- # the value needs to be quoted, mostly because -c might
30
- # have spaces in it
31
33
  if value = @resource.should(property) and value != ""
32
- if property == :expiry
33
- # FreeBSD uses DD-MM-YYYY rather than YYYY-MM-DD
34
- value = value.split("-").reverse.join("-")
35
- end
36
- cmd << flag(property) << value
34
+ cmd << flag(property) << munge(property,value)
37
35
  end
38
36
  end
39
37
 
40
38
  cmd << "-o" if @resource.allowdupe?
41
-
42
39
  cmd << "-m" if @resource.managehome?
43
-
44
40
  cmd
45
41
  end
46
42
 
@@ -1,4 +1,8 @@
1
1
  require 'puppet/provider/nameservice/objectadd'
2
+ require 'date'
3
+ require 'puppet/util/libuser'
4
+ require 'time'
5
+ require 'puppet/error'
2
6
 
3
7
  Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameService::ObjectAdd do
4
8
  desc "User management via `useradd` and its ilk. Note that you will need to
@@ -10,8 +14,71 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
10
14
  options :home, :flag => "-d", :method => :dir
11
15
  options :comment, :method => :gecos
12
16
  options :groups, :flag => "-G"
13
- options :password_min_age, :flag => "-m"
14
- options :password_max_age, :flag => "-M"
17
+ options :password_min_age, :flag => "-m", :method => :sp_min
18
+ options :password_max_age, :flag => "-M", :method => :sp_max
19
+ options :password, :method => :sp_pwdp
20
+ options :expiry, :method => :sp_expire,
21
+ :munge => proc { |value|
22
+ if value == :absent
23
+ ''
24
+ else
25
+ case Facter.value(:operatingsystem)
26
+ when 'Solaris'
27
+ # Solaris uses %m/%d/%Y for useradd/usermod
28
+ expiry_year, expiry_month, expiry_day = value.split('-')
29
+ [expiry_month, expiry_day, expiry_year].join('/')
30
+ else
31
+ value
32
+ end
33
+ end
34
+ },
35
+ :unmunge => proc { |value|
36
+ if value == -1
37
+ :absent
38
+ else
39
+ # Expiry is days after 1970-01-01
40
+ (Date.new(1970,1,1) + value).strftime('%Y-%m-%d')
41
+ end
42
+ }
43
+
44
+ optional_commands :localadd => "luseradd"
45
+ has_feature :libuser if Puppet.features.libuser?
46
+
47
+ def exists?
48
+ return !!localuid if @resource.forcelocal?
49
+ super
50
+ end
51
+
52
+ def uid
53
+ return localuid if @resource.forcelocal?
54
+ get(:uid)
55
+ end
56
+
57
+ def finduser(key, value)
58
+ passwd_file = "/etc/passwd"
59
+ passwd_keys = ['account', 'password', 'uid', 'gid', 'gecos', 'directory', 'shell']
60
+ index = passwd_keys.index(key)
61
+ File.open(passwd_file) do |f|
62
+ f.each_line do |line|
63
+ user = line.split(":")
64
+ if user[index] == value
65
+ f.close
66
+ return user
67
+ end
68
+ end
69
+ end
70
+ false
71
+ end
72
+
73
+ def local_username
74
+ user = finduser('uid', @resource.uid)
75
+ end
76
+
77
+ def localuid
78
+ user = finduser('account', resource[:name])
79
+ return user[2] if user
80
+ false
81
+ end
15
82
 
16
83
  verify :gid, "GID must be an integer" do |value|
17
84
  value.is_a? Integer
@@ -27,14 +94,25 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
27
94
  has_features :manages_passwords, :manages_password_age if Puppet.features.libshadow?
28
95
 
29
96
  def check_allow_dup
30
- @resource.allowdupe? ? ["-o"] : []
97
+ # We have to manually check for duplicates when using libuser
98
+ # because by default duplicates are allowed. This check is
99
+ # to ensure consistent behaviour of the useradd provider when
100
+ # using both useradd and luseradd
101
+ if not @resource.allowdupe? and @resource.forcelocal?
102
+ if @resource.should(:uid) and finduser('uid', @resource.should(:uid).to_s)
103
+ raise(Puppet::Error, "UID #{@resource.should(:uid).to_s} already exists, use allowdupe to force user creation")
104
+ end
105
+ elsif @resource.allowdupe? and not @resource.forcelocal?
106
+ return ["-o"]
107
+ end
108
+ []
31
109
  end
32
110
 
33
111
  def check_manage_home
34
112
  cmd = []
35
- if @resource.managehome?
113
+ if @resource.managehome? and not @resource.forcelocal?
36
114
  cmd << "-m"
37
- elsif Facter.value(:osfamily) == 'RedHat'
115
+ elsif not @resource.managehome? and Facter.value(:osfamily) == 'RedHat'
38
116
  cmd << "-M"
39
117
  end
40
118
  cmd
@@ -42,7 +120,7 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
42
120
 
43
121
  def check_manage_expiry
44
122
  cmd = []
45
- if @resource[:expiry]
123
+ if @resource[:expiry] and not @resource.forcelocal?
46
124
  cmd << "-e #{@resource[:expiry]}"
47
125
  end
48
126
 
@@ -59,30 +137,52 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
59
137
 
60
138
  def add_properties
61
139
  cmd = []
62
- Puppet::Type.type(:user).validproperties.each do |property|
140
+ # validproperties is a list of properties in undefined order
141
+ # sort them to have a predictable command line in tests
142
+ Puppet::Type.type(:user).validproperties.sort.each do |property|
63
143
  next if property == :ensure
64
144
  next if property.to_s =~ /password_.+_age/
145
+ next if property == :groups and @resource.forcelocal?
146
+ next if property == :expiry and @resource.forcelocal?
65
147
  # the value needs to be quoted, mostly because -c might
66
148
  # have spaces in it
67
149
  if value = @resource.should(property) and value != ""
68
- cmd << flag(property) << value
150
+ cmd << flag(property) << munge(property, value)
69
151
  end
70
152
  end
71
153
  cmd
72
154
  end
73
155
 
74
156
  def addcmd
75
- cmd = [command(:add)]
157
+ if @resource.forcelocal?
158
+ cmd = [command(:localadd)]
159
+ @custom_environment = Puppet::Util::Libuser.getenv
160
+ else
161
+ cmd = [command(:add)]
162
+ end
163
+ if not @resource.should(gid) and Puppet::Util.gid(@resource[:name])
164
+ cmd += ["-g", @resource[:name]]
165
+ end
76
166
  cmd += add_properties
77
167
  cmd += check_allow_dup
78
168
  cmd += check_manage_home
79
- cmd += check_manage_expiry
80
169
  cmd += check_system_users
81
170
  cmd << @resource[:name]
82
171
  end
83
172
 
173
+ def modifycmd(param, value)
174
+ cmd = super(param, value)
175
+ cmd += check_manage_home if param == :home
176
+
177
+ cmd
178
+ end
179
+
84
180
  def deletecmd
85
- cmd = [command(:delete)]
181
+ if @resource.forcelocal?
182
+ cmd = [command(:localdelete)]
183
+ else
184
+ cmd = [command(:delete)]
185
+ end
86
186
  cmd += @resource.managehome? ? ['-r'] : []
87
187
  cmd << @resource[:name]
88
188
  end
@@ -96,31 +196,29 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
96
196
  end
97
197
  end
98
198
 
99
- def password_min_age
100
- if Puppet.features.libshadow?
101
- if ent = Shadow::Passwd.getspnam(@resource.name)
102
- return ent.sp_min
199
+ [:expiry, :password_min_age, :password_max_age, :password].each do |shadow_property|
200
+ define_method(shadow_property) do
201
+ if Puppet.features.libshadow?
202
+ if ent = Shadow::Passwd.getspnam(@resource.name)
203
+ method = self.class.option(shadow_property, :method)
204
+ return unmunge(shadow_property, ent.send(method))
205
+ end
103
206
  end
207
+ :absent
104
208
  end
105
- :absent
106
209
  end
107
210
 
108
- def password_max_age
109
- if Puppet.features.libshadow?
110
- if ent = Shadow::Passwd.getspnam(@resource.name)
111
- return ent.sp_max
112
- end
113
- end
114
- :absent
211
+ def create
212
+ super
213
+ if @resource.forcelocal? and self.groups?
214
+ set(:groups, @resource[:groups])
215
+ end
216
+ if @resource.forcelocal? and @resource[:expiry]
217
+ set(:expiry, @resource[:expiry])
218
+ end
115
219
  end
116
220
 
117
- # Retrieve the password using the Shadow Password library
118
- def password
119
- if Puppet.features.libshadow?
120
- if ent = Shadow::Passwd.getspnam(@resource.name)
121
- return ent.sp_pwdp
122
- end
123
- end
124
- :absent
221
+ def groups?
222
+ !!@resource[:groups]
125
223
  end
126
224
  end
@@ -8,8 +8,8 @@ Puppet::Type.type(:vlan).provide :cisco, :parent => Puppet::Provider::Cisco do
8
8
 
9
9
  def self.lookup(device, id)
10
10
  vlans = {}
11
- device.command do |d|
12
- vlans = d.parse_vlans || {}
11
+ device.command do |dev|
12
+ vlans = dev.parse_vlans || {}
13
13
  end
14
14
  vlans[id]
15
15
  end
@@ -20,8 +20,8 @@ Puppet::Type.type(:vlan).provide :cisco, :parent => Puppet::Provider::Cisco do
20
20
 
21
21
  # Clear out the cached values.
22
22
  def flush
23
- device.command do |device|
24
- device.update_vlan(resource[:name], former_properties, properties)
23
+ device.command do |dev|
24
+ dev.update_vlan(resource[:name], former_properties, properties)
25
25
  end
26
26
  super
27
27
  end
@@ -8,8 +8,8 @@ performing stand-alone work like importing. Rvalues return values and can
8
8
  only be used in a statement requiring a value, such as an assignment or a case
9
9
  statement.
10
10
 
11
- Functions execute on the Puppet master. They do not execute on the Puppet agent.
12
- Hence they only have access to the commands and data available on the Puppet master
11
+ Functions execute on the Puppet master. They do not execute on the Puppet agent.
12
+ Hence they only have access to the commands and data available on the Puppet master
13
13
  host.
14
14
 
15
15
  Here are the functions available in Puppet: