puppet 0.24.5 → 0.24.6

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.

Potentially problematic release.


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

Files changed (354) hide show
  1. data/CHANGELOG +206 -0
  2. data/Rakefile +53 -0
  3. data/bin/filebucket +0 -0
  4. data/bin/puppet +32 -11
  5. data/bin/puppetca +1 -0
  6. data/bin/puppetd +0 -0
  7. data/bin/puppetdoc +0 -0
  8. data/bin/puppetmasterd +0 -0
  9. data/bin/puppetrun +16 -8
  10. data/bin/ralsh +0 -0
  11. data/conf/debian/rules +0 -0
  12. data/conf/gentoo/init.d/puppetmaster +0 -0
  13. data/conf/osx/PackageInfo.plist +36 -0
  14. data/conf/osx/createpackage.sh +167 -0
  15. data/conf/osx/preflight +12 -0
  16. data/conf/redhat/client.init +1 -1
  17. data/conf/redhat/puppet.spec +34 -6
  18. data/conf/redhat/server.init +42 -7
  19. data/conf/redhat/server.sysconfig +22 -0
  20. data/conf/solaris/smf/svc-puppetd +0 -0
  21. data/conf/solaris/smf/svc-puppetmasterd +0 -0
  22. data/examples/etc/init.d/sleeper +0 -0
  23. data/examples/mac_dscl.pp +0 -0
  24. data/examples/mac_dscl_revert.pp +0 -0
  25. data/examples/mac_netinfo.pp +0 -0
  26. data/examples/mac_pkgdmg.pp +0 -0
  27. data/ext/bin/sleeper +0 -0
  28. data/ext/module_puppet +0 -0
  29. data/ext/nagios/check_puppet.rb +0 -0
  30. data/ext/passenger/README +63 -0
  31. data/ext/passenger/apache2.conf +29 -0
  32. data/ext/passenger/config.ru +40 -0
  33. data/ext/puppet-test +0 -0
  34. data/ext/puppetlast +6 -31
  35. data/ext/puppetstoredconfigclean.rb +87 -0
  36. data/install.rb +75 -20
  37. data/lib/puppet.rb +1 -1
  38. data/lib/puppet/daemon.rb +0 -0
  39. data/lib/puppet/defaults.rb +3 -7
  40. data/lib/puppet/external/base64.rb +0 -0
  41. data/lib/puppet/external/nagios.rb +0 -0
  42. data/lib/puppet/external/nagios/base.rb +0 -0
  43. data/lib/puppet/file_serving/fileset.rb +2 -2
  44. data/lib/puppet/file_serving/metadata.rb +3 -3
  45. data/lib/puppet/indirector/facts/facter.rb +3 -2
  46. data/lib/puppet/indirector/yaml.rb +10 -1
  47. data/lib/puppet/module.rb +36 -12
  48. data/lib/puppet/network/authstore.rb +0 -0
  49. data/lib/puppet/network/client/master.rb +12 -11
  50. data/lib/puppet/network/handler/filebucket.rb +0 -0
  51. data/lib/puppet/network/handler/fileserver.rb +38 -46
  52. data/lib/puppet/network/handler/master.rb +1 -1
  53. data/lib/puppet/network/handler/report.rb +0 -0
  54. data/lib/puppet/network/handler/resource.rb +0 -0
  55. data/lib/puppet/network/handler/runner.rb +0 -0
  56. data/lib/puppet/network/http_server/rack.rb +148 -0
  57. data/lib/puppet/network/rights.rb +0 -0
  58. data/lib/puppet/network/xmlrpc/client.rb +5 -5
  59. data/lib/puppet/node.rb +5 -9
  60. data/lib/puppet/node/environment.rb +1 -17
  61. data/lib/puppet/node/facts.rb +0 -0
  62. data/lib/puppet/parameter.rb +1 -28
  63. data/lib/puppet/parser/ast.rb +6 -0
  64. data/lib/puppet/parser/ast/arithmetic_operator.rb +41 -0
  65. data/lib/puppet/parser/ast/boolean_operator.rb +48 -0
  66. data/lib/puppet/parser/ast/collexpr.rb +6 -1
  67. data/lib/puppet/parser/ast/comparison_operator.rb +37 -0
  68. data/lib/puppet/parser/ast/minus.rb +23 -0
  69. data/lib/puppet/parser/ast/nop.rb +11 -0
  70. data/lib/puppet/parser/ast/not.rb +19 -0
  71. data/lib/puppet/parser/ast/resource_override.rb +23 -16
  72. data/lib/puppet/parser/ast/resource_reference.rb +10 -6
  73. data/lib/puppet/parser/ast/vardef.rb +2 -2
  74. data/lib/puppet/parser/collector.rb +2 -1
  75. data/lib/puppet/parser/functions.rb +7 -217
  76. data/lib/puppet/parser/functions/defined.rb +27 -0
  77. data/lib/puppet/parser/functions/fail.rb +4 -0
  78. data/lib/puppet/parser/functions/file.rb +21 -0
  79. data/lib/puppet/parser/functions/fqdn_rand.rb +15 -0
  80. data/lib/puppet/parser/functions/generate.rb +35 -0
  81. data/lib/puppet/parser/functions/include.rb +26 -0
  82. data/lib/puppet/parser/functions/realize.rb +14 -0
  83. data/lib/puppet/parser/functions/search.rb +7 -0
  84. data/lib/puppet/parser/functions/sha1.rb +6 -0
  85. data/lib/puppet/parser/functions/tag.rb +6 -0
  86. data/lib/puppet/parser/functions/tagged.rb +18 -0
  87. data/lib/puppet/parser/functions/template.rb +22 -0
  88. data/lib/puppet/parser/lexer.rb +15 -5
  89. data/lib/puppet/parser/parser.rb +1073 -715
  90. data/lib/puppet/parser/parser_support.rb +18 -13
  91. data/lib/puppet/parser/resource.rb +1 -1
  92. data/lib/puppet/parser/resource/param.rb +10 -2
  93. data/lib/puppet/parser/scope.rb +63 -5
  94. data/lib/puppet/parser/templatewrapper.rb +61 -15
  95. data/lib/puppet/property.rb +7 -1
  96. data/lib/puppet/property/keyvalue.rb +96 -0
  97. data/lib/puppet/property/list.rb +78 -0
  98. data/lib/puppet/provider/confine.rb +1 -1
  99. data/lib/puppet/provider/confine/variable.rb +10 -1
  100. data/lib/puppet/provider/cron/crontab.rb +0 -0
  101. data/lib/puppet/provider/mailalias/aliases.rb +0 -0
  102. data/lib/puppet/provider/maillist/mailman.rb +0 -0
  103. data/lib/puppet/provider/mount/parsed.rb +0 -0
  104. data/lib/puppet/provider/nameservice.rb +24 -39
  105. data/lib/puppet/provider/nameservice/directoryservice.rb +12 -3
  106. data/lib/puppet/provider/nameservice/netinfo.rb +12 -2
  107. data/lib/puppet/provider/nameservice/objectadd.rb +1 -10
  108. data/lib/puppet/provider/package/appdmg.rb +1 -1
  109. data/lib/puppet/provider/package/apple.rb +0 -0
  110. data/lib/puppet/provider/package/apt.rb +14 -21
  111. data/lib/puppet/provider/package/aptitude.rb +0 -0
  112. data/lib/puppet/provider/package/blastwave.rb +2 -0
  113. data/lib/puppet/provider/package/darwinport.rb +0 -0
  114. data/lib/puppet/provider/package/dpkg.rb +33 -51
  115. data/lib/puppet/provider/package/fink.rb +1 -1
  116. data/lib/puppet/provider/package/freebsd.rb +0 -0
  117. data/lib/puppet/provider/package/gem.rb +0 -0
  118. data/lib/puppet/provider/package/hpux.rb +46 -0
  119. data/lib/puppet/provider/package/openbsd.rb +0 -0
  120. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  121. data/lib/puppet/provider/package/portage.rb +3 -1
  122. data/lib/puppet/provider/package/ports.rb +3 -3
  123. data/lib/puppet/provider/package/rpm.rb +8 -1
  124. data/lib/puppet/provider/package/rug.rb +2 -2
  125. data/lib/puppet/provider/package/sun.rb +2 -0
  126. data/lib/puppet/provider/package/sunfreeware.rb +3 -0
  127. data/lib/puppet/provider/package/yum.rb +24 -17
  128. data/lib/puppet/provider/package/yumhelper.py +92 -11
  129. data/lib/puppet/provider/parsedfile.rb +0 -0
  130. data/lib/puppet/provider/port/parsed.rb +0 -0
  131. data/lib/puppet/provider/selboolean/getsetsebool.rb +47 -0
  132. data/lib/puppet/provider/selmodule/semodule.rb +143 -0
  133. data/lib/puppet/provider/service/base.rb +0 -0
  134. data/lib/puppet/provider/service/daemontools.rb +154 -0
  135. data/lib/puppet/provider/service/debian.rb +1 -1
  136. data/lib/puppet/provider/service/freebsd.rb +2 -0
  137. data/lib/puppet/provider/service/gentoo.rb +2 -0
  138. data/lib/puppet/provider/service/init.rb +0 -0
  139. data/lib/puppet/provider/service/redhat.rb +1 -1
  140. data/lib/puppet/provider/service/runit.rb +93 -0
  141. data/lib/puppet/provider/service/smf.rb +2 -0
  142. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +7 -1
  143. data/lib/puppet/provider/sshkey/parsed.rb +0 -0
  144. data/lib/puppet/provider/user/hpux.rb +30 -0
  145. data/lib/puppet/provider/user/user_role_add.rb +156 -0
  146. data/lib/puppet/provider/user/useradd.rb +23 -14
  147. data/lib/puppet/rails/database/002_remove_duplicated_index_on_all_tables.rb +17 -0
  148. data/lib/puppet/rails/database/schema.rb +0 -8
  149. data/lib/puppet/rails/resource.rb +6 -6
  150. data/lib/puppet/reference/configuration.rb +0 -7
  151. data/lib/puppet/reports.rb +0 -0
  152. data/lib/puppet/reports/rrdgraph.rb +3 -2
  153. data/lib/puppet/sslcertificates.rb +0 -0
  154. data/lib/puppet/sslcertificates/inventory.rb +3 -2
  155. data/lib/puppet/sslcertificates/support.rb +3 -0
  156. data/lib/puppet/transaction/report.rb +1 -7
  157. data/lib/puppet/transportable.rb +10 -7
  158. data/lib/puppet/type.rb +2110 -14
  159. data/lib/puppet/type/cron.rb +0 -0
  160. data/lib/puppet/type/exec.rb +0 -0
  161. data/lib/puppet/type/file.rb +12 -2
  162. data/lib/puppet/type/file/checksum.rb +4 -0
  163. data/lib/puppet/type/file/content.rb +0 -0
  164. data/lib/puppet/type/file/ensure.rb +0 -0
  165. data/lib/puppet/type/file/group.rb +30 -43
  166. data/lib/puppet/type/file/mode.rb +0 -0
  167. data/lib/puppet/type/file/owner.rb +0 -0
  168. data/lib/puppet/type/file/selcontext.rb +104 -0
  169. data/lib/puppet/type/file/source.rb +0 -0
  170. data/lib/puppet/type/file/type.rb +0 -0
  171. data/lib/puppet/type/filebucket.rb +0 -0
  172. data/lib/puppet/type/group.rb +0 -8
  173. data/lib/puppet/type/host.rb +0 -0
  174. data/lib/puppet/type/mailalias.rb +0 -0
  175. data/lib/puppet/type/maillist.rb +0 -0
  176. data/lib/puppet/type/mount.rb +0 -0
  177. data/lib/puppet/type/package.rb +2 -2
  178. data/lib/puppet/type/port.rb +0 -0
  179. data/lib/puppet/type/schedule.rb +0 -0
  180. data/lib/puppet/type/selboolean.rb +31 -0
  181. data/lib/puppet/type/selmodule.rb +54 -0
  182. data/lib/puppet/type/ssh_authorized_key.rb +3 -3
  183. data/lib/puppet/type/sshkey.rb +0 -0
  184. data/lib/puppet/type/tidy.rb +0 -0
  185. data/lib/puppet/type/user.rb +153 -137
  186. data/lib/puppet/type/yumrepo.rb +18 -2
  187. data/lib/puppet/type/zone.rb +5 -1
  188. data/lib/puppet/util.rb +7 -7
  189. data/lib/puppet/util/filetype.rb +7 -0
  190. data/lib/puppet/util/instance_loader.rb +0 -0
  191. data/lib/puppet/util/ldap/connection.rb +11 -1
  192. data/lib/puppet/util/ldap/manager.rb +1 -1
  193. data/lib/puppet/util/loadedfile.rb +0 -0
  194. data/lib/puppet/util/log.rb +42 -43
  195. data/lib/puppet/util/metric.rb +23 -9
  196. data/lib/puppet/util/posix.rb +69 -18
  197. data/lib/puppet/util/selinux.rb +139 -0
  198. data/lib/puppet/util/settings.rb +5 -7
  199. data/lib/puppet/util/user_attr.rb +21 -0
  200. data/test/certmgr/ca.rb +0 -0
  201. data/test/certmgr/certmgr.rb +0 -0
  202. data/test/certmgr/inventory.rb +0 -0
  203. data/test/certmgr/support.rb +0 -0
  204. data/test/data/providers/ssh_authorized_key/parsed/authorized_keys1 +3 -0
  205. data/test/data/snippets/append.pp +11 -0
  206. data/test/data/snippets/arithmetic_expression.pp +8 -0
  207. data/test/data/snippets/arraytrailingcomma.pp +3 -0
  208. data/test/data/snippets/emptyifelse.pp +9 -0
  209. data/test/data/snippets/funccomma.pp +5 -0
  210. data/test/data/snippets/ifexpression.rb +6 -0
  211. data/test/data/snippets/subclass_name_duplication.pp +0 -0
  212. data/test/executables/filebucket.rb +0 -0
  213. data/test/executables/puppetbin.rb +0 -0
  214. data/test/executables/puppetca.rb +0 -0
  215. data/test/executables/puppetd.rb +0 -0
  216. data/test/executables/puppetmasterd.rb +0 -0
  217. data/test/executables/puppetmodule.rb +0 -0
  218. data/test/language/ast.rb +0 -0
  219. data/test/language/ast/casestatement.rb +0 -0
  220. data/test/language/ast/resource.rb +0 -0
  221. data/test/language/ast/resource_reference.rb +0 -28
  222. data/test/language/ast/selector.rb +0 -0
  223. data/test/language/ast/variable.rb +0 -0
  224. data/test/language/functions.rb +91 -12
  225. data/test/language/parser.rb +21 -0
  226. data/test/language/resource.rb +0 -0
  227. data/test/language/scope.rb +28 -0
  228. data/test/language/snippets.rb +14 -0
  229. data/test/language/transportable.rb +0 -0
  230. data/test/lib/puppettest.rb +0 -0
  231. data/test/lib/puppettest/reporttesting.rb +0 -2
  232. data/test/lib/puppettest/runnable_test.rb +2 -0
  233. data/test/lib/puppettest/support/resources.rb +0 -0
  234. data/test/network/authconfig.rb +0 -0
  235. data/test/network/authorization.rb +0 -0
  236. data/test/network/authstore.rb +0 -0
  237. data/test/network/client/ca.rb +0 -0
  238. data/test/network/client/client.rb +0 -0
  239. data/test/network/client/dipper.rb +0 -0
  240. data/test/network/client/master.rb +2 -6
  241. data/test/network/client/resource.rb +0 -0
  242. data/test/network/client_request.rb +0 -0
  243. data/test/network/daemon.rb +0 -0
  244. data/test/network/handler/bucket.rb +0 -0
  245. data/test/network/handler/ca.rb +0 -0
  246. data/test/network/handler/fileserver.rb +8 -0
  247. data/test/network/handler/handler.rb +0 -0
  248. data/test/network/handler/master.rb +3 -1
  249. data/test/network/handler/report.rb +0 -0
  250. data/test/network/handler/resource.rb +0 -0
  251. data/test/network/handler/runner.rb +0 -0
  252. data/test/network/rights.rb +0 -0
  253. data/test/network/server/mongrel_test.rb +0 -0
  254. data/test/network/server/webrick.rb +0 -0
  255. data/test/network/xmlrpc/client.rb +0 -0
  256. data/test/network/xmlrpc/processor.rb +0 -0
  257. data/test/network/xmlrpc/server.rb +0 -0
  258. data/test/network/xmlrpc/webrick_servlet.rb +0 -0
  259. data/test/other/dsl.rb +0 -0
  260. data/test/other/events.rb +0 -0
  261. data/test/other/overrides.rb +0 -0
  262. data/test/other/provider.rb +0 -0
  263. data/test/other/puppet.rb +0 -0
  264. data/test/other/relationships.rb +0 -0
  265. data/test/other/report.rb +2 -4
  266. data/test/other/transactions.rb +1 -1
  267. data/test/puppet/conffiles.rb +0 -0
  268. data/test/puppet/defaults.rb +0 -0
  269. data/test/puppet/errortest.rb +0 -0
  270. data/test/puppet/tc_suidmanager.rb +0 -0
  271. data/test/rails/ast.rb +0 -0
  272. data/test/rails/configuration.rb +0 -0
  273. data/test/rails/host.rb +0 -0
  274. data/test/rails/rails.rb +0 -0
  275. data/test/rails/railsparameter.rb +0 -0
  276. data/test/rails/railsresource.rb +0 -0
  277. data/test/ral/manager/attributes.rb +0 -0
  278. data/test/ral/manager/instances.rb +0 -0
  279. data/test/ral/manager/manager.rb +0 -0
  280. data/test/ral/manager/provider.rb +0 -0
  281. data/test/ral/manager/type.rb +0 -0
  282. data/test/ral/providers/cron/crontab.rb +0 -0
  283. data/test/ral/providers/group.rb +14 -13
  284. data/test/ral/providers/host/netinfo.rb +0 -0
  285. data/test/ral/providers/host/parsed.rb +0 -0
  286. data/test/ral/providers/mailalias/aliases.rb +0 -0
  287. data/test/ral/providers/mount/netinfo.rb +0 -0
  288. data/test/ral/providers/nameservice.rb +0 -0
  289. data/test/ral/providers/package.rb +0 -31
  290. data/test/ral/providers/package/aptitude.rb +1 -2
  291. data/test/ral/providers/package/aptrpm.rb +2 -2
  292. data/test/ral/providers/parsedfile.rb +0 -0
  293. data/test/ral/providers/port/parsed.rb +0 -0
  294. data/test/ral/providers/provider.rb +0 -0
  295. data/test/ral/providers/service/base.rb +0 -0
  296. data/test/ral/providers/service/debian.rb +0 -0
  297. data/test/ral/providers/sshkey/parsed.rb +0 -0
  298. data/test/ral/providers/user.rb +8 -8
  299. data/test/ral/providers/user/useradd.rb +0 -0
  300. data/test/ral/type/basic.rb +0 -0
  301. data/test/ral/type/cron.rb +0 -0
  302. data/test/ral/type/exec.rb +0 -0
  303. data/test/ral/type/file.rb +0 -0
  304. data/test/ral/type/file/target.rb +0 -0
  305. data/test/ral/type/filebucket.rb +0 -0
  306. data/test/ral/type/fileignoresource.rb +0 -0
  307. data/test/ral/type/filesources.rb +1 -3
  308. data/test/ral/type/group.rb +0 -0
  309. data/test/ral/type/host.rb +0 -0
  310. data/test/ral/type/mailalias.rb +1 -2
  311. data/test/ral/type/parameter.rb +0 -0
  312. data/test/ral/type/port.rb +0 -0
  313. data/test/ral/type/property.rb +0 -0
  314. data/test/ral/type/resources.rb +0 -0
  315. data/test/ral/type/service.rb +0 -0
  316. data/test/ral/type/sshkey.rb +0 -0
  317. data/test/ral/type/tidy.rb +0 -0
  318. data/test/ral/type/user.rb +0 -50
  319. data/test/ral/type/yumrepo.rb +7 -1
  320. data/test/ral/type/zone.rb +0 -0
  321. data/test/test +0 -0
  322. data/test/util/autoload.rb +0 -0
  323. data/test/util/classgen.rb +0 -0
  324. data/test/util/execution.rb +0 -0
  325. data/test/util/features.rb +0 -0
  326. data/test/util/fileparsing.rb +0 -0
  327. data/test/util/filetype.rb +0 -0
  328. data/test/util/inifile.rb +0 -0
  329. data/test/util/instance_loader.rb +0 -0
  330. data/test/util/log.rb +0 -59
  331. data/test/util/metrics.rb +0 -0
  332. data/test/util/package.rb +0 -0
  333. data/test/util/pidlock.rb +0 -0
  334. data/test/util/settings.rb +0 -0
  335. data/test/util/storage.rb +0 -0
  336. data/test/util/subclass_loader.rb +0 -0
  337. data/test/util/utiltest.rb +0 -0
  338. metadata +54 -19
  339. data/lib/puppet/metatype/attributes.rb +0 -685
  340. data/lib/puppet/metatype/closure.rb +0 -49
  341. data/lib/puppet/metatype/container.rb +0 -50
  342. data/lib/puppet/metatype/evaluation.rb +0 -163
  343. data/lib/puppet/metatype/instances.rb +0 -305
  344. data/lib/puppet/metatype/metaparams.rb +0 -423
  345. data/lib/puppet/metatype/providers.rb +0 -247
  346. data/lib/puppet/metatype/relationships.rb +0 -115
  347. data/lib/puppet/metatype/schedules.rb +0 -33
  348. data/lib/puppet/metatype/tags.rb +0 -38
  349. data/lib/puppet/util/plist.rb +0 -23
  350. data/lib/puppet/util/plist/generator.rb +0 -225
  351. data/lib/puppet/util/plist/parser.rb +0 -226
  352. data/test/ral/providers/package/apt.rb +0 -169
  353. data/test/ral/providers/package/dpkg.rb +0 -64
  354. data/test/util/posixtest.rb +0 -169
File without changes
@@ -0,0 +1,154 @@
1
+ # Daemontools service management
2
+ #
3
+ # author Brice Figureau <brice-puppet@daysofwonder.com>
4
+ Puppet::Type.type(:service).provide :daemontools, :parent => :base do
5
+ desc "Daemontools service management.
6
+ This provider manages daemons running supervised by D.J.Bernstein daemontools.
7
+ It tries to detect the service directory, with by order of preference:
8
+ * /service
9
+ * /etc/service
10
+ * /var/lib/svscan
11
+ The daemon directory should be placed in a directory that can be
12
+ by default in:
13
+ * /var/lib/service
14
+ * /etc
15
+ or this can be overriden in the service resource parameters:
16
+ service {
17
+ \"myservice\":
18
+ provider => \"daemontools\", path => \"/path/to/daemons\";
19
+ }
20
+
21
+ This provider supports out of the box:
22
+ * start/stop (mapped to enable/disable)
23
+ * enable/disable
24
+ * restart
25
+ * status"
26
+
27
+ commands :svc => "/usr/bin/svc"
28
+ commands :svstat => "/usr/bin/svstat"
29
+
30
+ class << self
31
+ attr_writer :defpath
32
+
33
+ # this is necessary to autodetect a valid resource
34
+ # default path, since there is no standard for such directory.
35
+ def defpath
36
+ unless defined?(@defpath) and @defpath
37
+ ["/var/lib/service", "/etc"].each do |path|
38
+ if FileTest.exist?(path)
39
+ @defpath = path
40
+ break
41
+ end
42
+ end
43
+ raise "Could not find the daemon directory (tested [/var/lib/service,/etc])" unless @defpath
44
+ end
45
+ @defpath
46
+ end
47
+ end
48
+
49
+ attr_writer :servicedir
50
+
51
+ # returns all providers for all existing services in @defpath
52
+ # ie enabled or not
53
+ def self.instances
54
+ path = self.defpath
55
+ unless FileTest.directory?(path)
56
+ Puppet.notice "Service path %s does not exist" % path
57
+ next
58
+ end
59
+
60
+ # reject entries that aren't either a directory
61
+ # or don't contain a run file
62
+ Dir.entries(path).reject { |e|
63
+ fullpath = File.join(path, e)
64
+ e =~ /^\./ or ! FileTest.directory?(fullpath) or ! FileTest.exist?(File.join(fullpath,"run"))
65
+ }.collect do |name|
66
+ new(:name => name, :path => path)
67
+ end
68
+ end
69
+
70
+ # returns the daemon dir on this node
71
+ def self.daemondir
72
+ self.defpath
73
+ end
74
+
75
+ # find the service dir on this node
76
+ def servicedir
77
+ unless defined?(@servicedir) and @servicedir
78
+ ["/service", "/etc/service","/var/lib/svscan"].each do |path|
79
+ if FileTest.exist?(path)
80
+ @servicedir = path
81
+ break
82
+ end
83
+ end
84
+ raise "Could not find service directory" unless @servicedir
85
+ end
86
+ @servicedir
87
+ end
88
+
89
+ # returns the full path of this service when enabled
90
+ # (ie in the service directory)
91
+ def service
92
+ File.join(self.servicedir, resource[:name])
93
+ end
94
+
95
+ # returns the full path to the current daemon directory
96
+ # note that this path can be overriden in the resource
97
+ # definition
98
+ def daemon
99
+ File.join(resource[:path], resource[:name])
100
+ end
101
+
102
+ def restartcmd
103
+ [ command(:svc), "-t", self.service]
104
+ end
105
+
106
+ # The start command does nothing, service are automatically started
107
+ # when enabled by svscan. But, forces an enable if necessary
108
+ def start
109
+ # to start make sure the sevice is enabled
110
+ self.enable
111
+ # start is then automatic
112
+ end
113
+
114
+ def status
115
+ begin
116
+ output = svstat self.service
117
+ return :running if output =~ /\bup\b/
118
+ rescue Puppet::ExecutionFailure => detail
119
+ raise Puppet::Error.new( "Could not get status for service %s: %s" % [ resource.ref, detail] )
120
+ end
121
+ return :stopped
122
+ end
123
+
124
+ # unfortunately it is not possible
125
+ # to stop without disabling the service
126
+ def stop
127
+ self.disable
128
+ end
129
+
130
+ # disable by stopping the service
131
+ # and removing the symlink so that svscan
132
+ # doesn't restart our service behind our back
133
+ def disable
134
+ # should stop the service
135
+ # stop the log subservice if any
136
+ log = File.join(self.service, "log")
137
+ texecute("stop log", [ command(:svc) , '-dx', log] ) if FileTest.directory?(log)
138
+
139
+ # stop the main resource
140
+ texecute("stop", [command(:svc), '-dx', self.service] )
141
+
142
+ # unlink the daemon symlink to disable it
143
+ File.unlink(self.service) if FileTest.symlink?(self.service)
144
+ end
145
+
146
+ def enabled?
147
+ FileTest.symlink?(self.service)
148
+ end
149
+
150
+ def enable
151
+ File.symlink(self.daemon, self.service) if ! FileTest.symlink?(self.service)
152
+ end
153
+ end
154
+
@@ -5,7 +5,7 @@ Puppet::Type.type(:service).provide :debian, :parent => :init do
5
5
  is that this supports service enabling and disabling via ``update-rc.d``."
6
6
 
7
7
  commands :update => "/usr/sbin/update-rc.d"
8
- defaultfor :operatingsystem => :debian
8
+ defaultfor :operatingsystem => [:debian, :ubuntu]
9
9
 
10
10
  def self.defpath
11
11
  superclass.defpath
@@ -2,6 +2,8 @@
2
2
  Puppet::Type.type(:service).provide :freebsd, :parent => :init do
3
3
  desc "FreeBSD's (and probably NetBSD?) form of ``init``-style service
4
4
  management; uses ``rc.conf.d`` for service enabling and disabling."
5
+
6
+ confine :operatingsystem => [:freebsd, :netbsd, :openbsd]
5
7
 
6
8
  defaultfor :operatingsystem => :freebsd
7
9
 
@@ -6,6 +6,8 @@ Puppet::Type.type(:service).provide :gentoo, :parent => :init do
6
6
 
7
7
  commands :update => "/sbin/rc-update"
8
8
 
9
+ confine :operatingsystem => :gentoo
10
+
9
11
  defaultfor :operatingsystem => :gentoo
10
12
 
11
13
  def self.defpath
File without changes
@@ -6,7 +6,7 @@ Puppet::Type.type(:service).provide :redhat, :parent => :init do
6
6
 
7
7
  commands :chkconfig => "/sbin/chkconfig", :service => "/sbin/service"
8
8
 
9
- defaultfor :operatingsystem => [:redhat, :fedora, :suse, :centos]
9
+ defaultfor :operatingsystem => [:redhat, :fedora, :suse, :centos, :sles]
10
10
 
11
11
  def self.defpath
12
12
  superclass.defpath
@@ -0,0 +1,93 @@
1
+ # Daemontools service management
2
+ #
3
+ # author Brice Figureau <brice-puppet@daysofwonder.com>
4
+ Puppet::Type.type(:service).provide :runit, :parent => :daemontools do
5
+ desc "Runit service management.
6
+ This provider manages daemons running supervised by Runit.
7
+ It tries to detect the service directory, with by order of preference:
8
+ * /service
9
+ * /var/service
10
+ * /etc/service
11
+ The daemon directory should be placed in a directory that can be
12
+ by default in:
13
+ * /etc/sv
14
+ or this can be overriden in the service resource parameters:
15
+ service {
16
+ \"myservice\":
17
+ provider => \"runit\", path => \"/path/to/daemons\";
18
+ }
19
+
20
+ This provider supports out of the box:
21
+ * start/stop
22
+ * enable/disable
23
+ * restart
24
+ * status"
25
+
26
+ commands :sv => "/usr/bin/sv"
27
+
28
+ class << self
29
+ # this is necessary to autodetect a valid resource
30
+ # default path, since there is no standard for such directory.
31
+ def defpath
32
+ unless defined?(@defpath) and @defpath
33
+ ["/etc/sv", "/var/lib/service"].each do |path|
34
+ if FileTest.exist?(path)
35
+ @defpath = path
36
+ break
37
+ end
38
+ end
39
+ raise "Could not find the daemon directory (tested [/var/lib/service,/etc])" unless @defpath
40
+ end
41
+ @defpath
42
+ end
43
+ end
44
+
45
+ # find the service dir on this node
46
+ def servicedir
47
+ unless defined?(@servicedir) and @servicedir
48
+ ["/service", "/etc/service","/var/service"].each do |path|
49
+ if FileTest.exist?(path)
50
+ @servicedir = path
51
+ break
52
+ end
53
+ end
54
+ raise "Could not find service directory" unless @servicedir
55
+ end
56
+ @servicedir
57
+ end
58
+
59
+ def restartcmd
60
+ [ command(:sv), "restart", self.service]
61
+ end
62
+
63
+ def status
64
+ begin
65
+ output = sv "status", self.daemon
66
+ return :running if output =~ /^run: /
67
+ rescue Puppet::ExecutionFailure => detail
68
+ unless detail.message =~ /(warning: |runsv not running$)/
69
+ raise Puppet::Error.new( "Could not get status for service %s: %s" % [ resource.ref, detail] )
70
+ end
71
+ end
72
+ return :stopped
73
+ end
74
+
75
+ # relay to the stopcmd
76
+ def stop
77
+ ucommand( :stop )
78
+ end
79
+
80
+ def stopcmd
81
+ [ command(:sv), "stop", self.service]
82
+ end
83
+
84
+ # disable by removing the symlink so that runit
85
+ # doesn't restart our service behind our back
86
+ # note that runit doesn't need to perform a stop
87
+ # before a disable
88
+ def disable
89
+ # unlink the daemon symlink to disable it
90
+ File.unlink(self.service) if FileTest.symlink?(self.service)
91
+ end
92
+ end
93
+
@@ -7,6 +7,8 @@ Puppet::Type.type(:service).provide :smf, :parent => :base do
7
7
 
8
8
  defaultfor :operatingsystem => :solaris
9
9
 
10
+ confine :operatingsystem => :solaris
11
+
10
12
  commands :adm => "/usr/sbin/svcadm", :svcs => "/usr/bin/svcs"
11
13
 
12
14
  def enable
@@ -14,7 +14,7 @@ Puppet::Type.type(:ssh_authorized_key).provide(:parsed,
14
14
  :fields => %w{options type key name},
15
15
  :optional => %w{options},
16
16
  :rts => /^\s+/,
17
- :match => /^(?:([^ ]+) )?(ssh-dss|ssh-rsa) ([^ ]+)(?: (.+))?$/,
17
+ :match => /^(?:(.+) )?(ssh-dss|ssh-rsa) ([^ ]+)(?: (.+))?$/,
18
18
  :post_parse => proc { |record|
19
19
  if record[:options].nil?
20
20
  record[:options] = [:absent]
@@ -30,6 +30,12 @@ Puppet::Type.type(:ssh_authorized_key).provide(:parsed,
30
30
  end
31
31
  }
32
32
 
33
+ record_line :key_v1,
34
+ :fields => %w{options bits exponent modulus name},
35
+ :optional => %w{options},
36
+ :rts => /^\s+/,
37
+ :match => /^(?:(.+) )?(\d+) (\d+) (\d+)(?: (.+))?$/
38
+
33
39
  def prefetch
34
40
  # This was done in the type class but path expansion was failing for
35
41
  # not yet existing users, the only workaround I found was to move that
File without changes
@@ -0,0 +1,30 @@
1
+ Puppet::Type.type(:user).provide :hpuxuseradd, :parent => :useradd do
2
+ desc "User management for hp-ux! Undocumented switch to special usermod because HP-UX regular usermod is TOO STUPID to change stuff while the user is logged in."
3
+
4
+ defaultfor :operatingsystem => "hp-ux"
5
+ confine :operatingsystem => "hp-ux"
6
+
7
+ commands :modify => "/usr/sam/lbin/usermod.sam", :delete => "/usr/sam/lbin/userdel.sam", :add => "/usr/sbin/useradd"
8
+ options :comment, :method => :gecos
9
+ options :groups, :flag => "-G"
10
+ options :home, :flag => "-d", :method => :dir
11
+
12
+ verify :gid, "GID must be an integer" do |value|
13
+ value.is_a? Integer
14
+ end
15
+
16
+ verify :groups, "Groups must be comma-separated" do |value|
17
+ value !~ /\s/
18
+ end
19
+
20
+ has_features :manages_homedir, :allows_duplicates
21
+
22
+ def deletecmd
23
+ super.insert(1,"-F")
24
+ end
25
+
26
+ def modifycmd(param,value)
27
+ super.insert(1,"-F")
28
+ end
29
+
30
+ end
@@ -0,0 +1,156 @@
1
+ require 'puppet/util/user_attr'
2
+
3
+ Puppet::Type.type(:user).provide :user_role_add, :parent => :useradd do
4
+
5
+ desc "User management inherits ``useradd`` and adds logic to manage roles on Solaris using roleadd."
6
+
7
+ defaultfor :operatingsystem => :solaris
8
+
9
+ commands :add => "useradd", :delete => "userdel", :modify => "usermod", :role_add => "roleadd", :role_delete => "roledel", :role_modify => "rolemod"
10
+ options :home, :flag => "-d", :method => :dir
11
+ options :comment, :method => :gecos
12
+ options :groups, :flag => "-G"
13
+ options :roles, :flag => "-R"
14
+ options :auths, :flag => "-A"
15
+ options :profiles, :flag => "-P"
16
+
17
+ verify :gid, "GID must be an integer" do |value|
18
+ value.is_a? Integer
19
+ end
20
+
21
+ verify :groups, "Groups must be comma-separated" do |value|
22
+ value !~ /\s/
23
+ end
24
+
25
+ has_features :manages_homedir, :allows_duplicates, :manages_solaris_rbac
26
+
27
+ if Puppet.features.libshadow?
28
+ has_feature :manages_passwords
29
+ end
30
+
31
+ #must override this to hand the keyvalue pairs
32
+ def add_properties
33
+ cmd = []
34
+ Puppet::Type.type(:user).validproperties.each do |property|
35
+ next if property == :ensure
36
+ # the value needs to be quoted, mostly because -c might
37
+ # have spaces in it
38
+ if value = @resource.should(property) and value != ""
39
+ if property == :keys
40
+ cmd += build_keys_cmd(value)
41
+ else
42
+ cmd << flag(property) << value
43
+ end
44
+ end
45
+ end
46
+ cmd
47
+ end
48
+
49
+ def user_attributes
50
+ @user_attributes ||= UserAttr.get_attributes_by_name(@resource[:name])
51
+ end
52
+
53
+ def flush
54
+ @user_attributes = nil
55
+ end
56
+
57
+ def command(cmd)
58
+ if is_role? or (!exists? and @resource[:ensure] == :role)
59
+ cmd = ("role_" + cmd.to_s).intern
60
+ end
61
+ super(cmd)
62
+ end
63
+
64
+ def is_role?
65
+ user_attributes and user_attributes[:type] == "role"
66
+ end
67
+
68
+ def run(cmd, msg)
69
+ begin
70
+ execute(cmd)
71
+ rescue Puppet::ExecutionFailure => detail
72
+ raise Puppet::Error, "Could not %s %s %s: %s" %
73
+ [msg, @resource.class.name, @resource.name, detail]
74
+ end
75
+ end
76
+
77
+ def transition(type)
78
+ cmd = [command(:modify)]
79
+ cmd << "-K" << "type=#{type}"
80
+ cmd += add_properties
81
+ cmd << @resource[:name]
82
+ end
83
+
84
+ def create
85
+ if is_role?
86
+ run(transition("normal"), "transition role to")
87
+ else
88
+ run(addcmd, "create")
89
+ end
90
+ end
91
+
92
+ def destroy
93
+ run(deletecmd, "delete "+ (is_role? ? "role" : "user"))
94
+ end
95
+
96
+ def create_role
97
+ if exists? and !is_role?
98
+ run(transition("role"), "transition user to")
99
+ else
100
+ run(addcmd, "create role")
101
+ end
102
+ end
103
+
104
+ def roles
105
+ if user_attributes
106
+ user_attributes[:roles]
107
+ end
108
+ end
109
+
110
+ def auths
111
+ if user_attributes
112
+ user_attributes[:auths]
113
+ end
114
+ end
115
+
116
+ def profiles
117
+ if user_attributes
118
+ user_attributes[:profiles]
119
+ end
120
+ end
121
+
122
+ def project
123
+ if user_attributes
124
+ user_attributes[:project]
125
+ end
126
+ end
127
+
128
+ def managed_attributes
129
+ [:name, :type, :roles, :auths, :profiles, :project]
130
+ end
131
+
132
+ def remove_managed_attributes
133
+ managed = managed_attributes
134
+ user_attributes.select { |k,v| !managed.include?(k) }.inject({}) { |hash, array| hash[array[0]] = array[1]; hash }
135
+ end
136
+
137
+ def keys
138
+ if user_attributes
139
+ #we have to get rid of all the keys we are managing another way
140
+ remove_managed_attributes
141
+ end
142
+ end
143
+
144
+ def build_keys_cmd(keys_hash)
145
+ cmd = []
146
+ keys_hash.each do |k,v|
147
+ cmd << "-K" << "#{k}=#{v}"
148
+ end
149
+ cmd
150
+ end
151
+
152
+ def keys=(keys_hash)
153
+ run([command(:modify)] + build_keys_cmd(keys_hash) << @resource[:name], "modify attribute key pairs")
154
+ end
155
+ end
156
+