puppet 0.22.4 → 0.23.0

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 (266) hide show
  1. data/CHANGELOG +156 -0
  2. data/README +2 -2
  3. data/Rakefile +6 -6
  4. data/bin/filebucket +212 -0
  5. data/bin/puppet +2 -0
  6. data/bin/puppetca +2 -4
  7. data/bin/puppetd +16 -15
  8. data/bin/puppetdoc +46 -496
  9. data/bin/puppetmasterd +3 -5
  10. data/bin/puppetrun +8 -3
  11. data/bin/ralsh +271 -0
  12. data/conf/redhat/client.init +1 -1
  13. data/conf/redhat/puppet.spec +13 -2
  14. data/conf/solaris/pkginfo +1 -1
  15. data/ext/puppet-test +374 -0
  16. data/install.rb +40 -31
  17. data/lib/puppet.rb +39 -4
  18. data/lib/puppet/config_stores/rest.rb +60 -0
  19. data/lib/puppet/configuration.rb +312 -17
  20. data/lib/puppet/external/event-loop/event-loop.rb +4 -0
  21. data/lib/puppet/external/gratr/rdot.rb +1 -1
  22. data/lib/puppet/fact_stores/yaml.rb +42 -0
  23. data/lib/puppet/feature/base.rb +4 -1
  24. data/lib/puppet/metatype/attributes.rb +20 -43
  25. data/lib/puppet/metatype/container.rb +1 -36
  26. data/lib/puppet/metatype/evaluation.rb +48 -19
  27. data/lib/puppet/metatype/instances.rb +35 -1
  28. data/lib/puppet/metatype/metaparams.rb +23 -19
  29. data/lib/puppet/metatype/providers.rb +25 -38
  30. data/lib/puppet/network/client/ca.rb +8 -5
  31. data/lib/puppet/network/client/master.rb +59 -17
  32. data/lib/puppet/network/handler.rb +18 -1
  33. data/lib/puppet/network/handler/ca.rb +9 -3
  34. data/lib/puppet/network/handler/facts.rb +70 -0
  35. data/lib/puppet/network/handler/filebucket.rb +4 -1
  36. data/lib/puppet/network/handler/fileserver.rb +65 -21
  37. data/lib/puppet/network/handler/master.rb +6 -3
  38. data/lib/puppet/network/handler/report.rb +12 -26
  39. data/lib/puppet/network/handler/resource.rb +14 -2
  40. data/lib/puppet/network/handler/runner.rb +5 -1
  41. data/lib/puppet/network/handler/status.rb +5 -1
  42. data/lib/puppet/network/server/mongrel.rb +4 -4
  43. data/lib/puppet/network/server/webrick.rb +14 -3
  44. data/lib/puppet/parameter.rb +30 -25
  45. data/lib/puppet/parser/ast.rb +1 -6
  46. data/lib/puppet/parser/ast/component.rb +23 -20
  47. data/lib/puppet/parser/ast/hostclass.rb +7 -11
  48. data/lib/puppet/parser/ast/leaf.rb +4 -1
  49. data/lib/puppet/parser/ast/node.rb +6 -8
  50. data/lib/puppet/parser/functions.rb +7 -4
  51. data/lib/puppet/parser/interpreter.rb +155 -205
  52. data/lib/puppet/parser/lexer.rb +35 -2
  53. data/lib/puppet/parser/parser.rb +705 -612
  54. data/lib/puppet/parser/resource.rb +91 -48
  55. data/lib/puppet/parser/resource/param.rb +52 -29
  56. data/lib/puppet/parser/scope.rb +28 -23
  57. data/lib/puppet/pgraph.rb +26 -21
  58. data/lib/puppet/propertychange.rb +12 -12
  59. data/lib/puppet/provider.rb +102 -31
  60. data/lib/puppet/provider/cron/crontab.rb +7 -8
  61. data/lib/puppet/provider/group/groupadd.rb +4 -4
  62. data/lib/puppet/provider/group/pw.rb +3 -3
  63. data/lib/puppet/provider/mount.rb +8 -8
  64. data/lib/puppet/provider/mount/netinfo.rb +5 -5
  65. data/lib/puppet/provider/mount/parsed.rb +2 -2
  66. data/lib/puppet/provider/nameservice.rb +19 -31
  67. data/lib/puppet/provider/nameservice/netinfo.rb +14 -14
  68. data/lib/puppet/provider/nameservice/objectadd.rb +4 -4
  69. data/lib/puppet/provider/nameservice/pw.rb +4 -4
  70. data/lib/puppet/provider/package.rb +31 -0
  71. data/lib/puppet/provider/package/appdmg.rb +118 -0
  72. data/lib/puppet/provider/package/apple.rb +18 -16
  73. data/lib/puppet/provider/package/apt.rb +13 -15
  74. data/lib/puppet/provider/package/aptitude.rb +5 -3
  75. data/lib/puppet/provider/package/aptrpm.rb +9 -11
  76. data/lib/puppet/provider/package/blastwave.rb +9 -9
  77. data/lib/puppet/provider/package/darwinport.rb +12 -11
  78. data/lib/puppet/provider/package/dpkg.rb +20 -12
  79. data/lib/puppet/provider/package/fink.rb +87 -0
  80. data/lib/puppet/provider/package/freebsd.rb +10 -11
  81. data/lib/puppet/provider/package/gem.rb +15 -15
  82. data/lib/puppet/provider/package/openbsd.rb +12 -17
  83. data/lib/puppet/provider/package/pkgdmg.rb +90 -16
  84. data/lib/puppet/provider/package/portage.rb +20 -14
  85. data/lib/puppet/provider/package/ports.rb +15 -13
  86. data/lib/puppet/provider/package/rpm.rb +20 -23
  87. data/lib/puppet/provider/package/rug.rb +6 -8
  88. data/lib/puppet/provider/package/sun.rb +20 -18
  89. data/lib/puppet/provider/package/sunfreeware.rb +2 -2
  90. data/lib/puppet/provider/package/up2date.rb +6 -10
  91. data/lib/puppet/provider/package/urpmi.rb +51 -0
  92. data/lib/puppet/provider/package/yum.rb +15 -13
  93. data/lib/puppet/provider/parsedfile.rb +53 -63
  94. data/lib/puppet/provider/service/base.rb +13 -15
  95. data/lib/puppet/provider/service/debian.rb +4 -4
  96. data/lib/puppet/provider/service/gentoo.rb +4 -4
  97. data/lib/puppet/provider/service/init.rb +22 -15
  98. data/lib/puppet/provider/service/redhat.rb +6 -6
  99. data/lib/puppet/provider/service/smf.rb +6 -6
  100. data/lib/puppet/provider/user/netinfo.rb +5 -5
  101. data/lib/puppet/provider/user/pw.rb +10 -5
  102. data/lib/puppet/provider/user/useradd.rb +9 -14
  103. data/lib/puppet/provider/zone/solaris.rb +80 -45
  104. data/lib/puppet/rails.rb +3 -34
  105. data/lib/puppet/rails/database/schema.rb +45 -24
  106. data/lib/puppet/rails/fact_value.rb +1 -0
  107. data/lib/puppet/rails/host.rb +69 -40
  108. data/lib/puppet/rails/param_name.rb +3 -8
  109. data/lib/puppet/rails/param_value.rb +2 -1
  110. data/lib/puppet/rails/puppet_class.rb +0 -2
  111. data/lib/puppet/rails/puppet_tag.rb +5 -0
  112. data/lib/puppet/rails/resource.rb +41 -17
  113. data/lib/puppet/rails/resource_tag.rb +4 -0
  114. data/lib/puppet/reference/configuration.rb +149 -0
  115. data/lib/puppet/reference/function.rb +13 -0
  116. data/lib/puppet/reference/network.rb +37 -0
  117. data/lib/puppet/reference/providers.rb +118 -0
  118. data/lib/puppet/reference/report.rb +21 -0
  119. data/lib/puppet/reference/type.rb +152 -0
  120. data/lib/puppet/reports/rrdgraph.rb +21 -7
  121. data/lib/puppet/reports/tagmail.rb +4 -1
  122. data/lib/puppet/sslcertificates.rb +1 -49
  123. data/lib/puppet/sslcertificates/ca.rb +2 -79
  124. data/lib/puppet/sslcertificates/inventory.rb +0 -10
  125. data/lib/puppet/transaction.rb +24 -41
  126. data/lib/puppet/transaction/report.rb +27 -1
  127. data/lib/puppet/type.rb +7 -43
  128. data/lib/puppet/type/component.rb +198 -124
  129. data/lib/puppet/type/cron.rb +51 -42
  130. data/lib/puppet/type/exec.rb +20 -19
  131. data/lib/puppet/type/group.rb +6 -55
  132. data/lib/puppet/type/host.rb +16 -37
  133. data/lib/puppet/type/mount.rb +30 -17
  134. data/lib/puppet/type/notify.rb +7 -8
  135. data/lib/puppet/type/package.rb +44 -80
  136. data/lib/puppet/type/pfile.rb +50 -41
  137. data/lib/puppet/type/pfile/checksum.rb +82 -95
  138. data/lib/puppet/type/pfile/content.rb +21 -25
  139. data/lib/puppet/type/pfile/ensure.rb +32 -30
  140. data/lib/puppet/type/pfile/group.rb +21 -26
  141. data/lib/puppet/type/pfile/mode.rb +25 -32
  142. data/lib/puppet/type/pfile/owner.rb +23 -27
  143. data/lib/puppet/type/pfile/source.rb +42 -33
  144. data/lib/puppet/type/pfile/target.rb +20 -18
  145. data/lib/puppet/type/pfile/type.rb +6 -7
  146. data/lib/puppet/type/pfilebucket.rb +3 -3
  147. data/lib/puppet/type/port.rb +5 -7
  148. data/lib/puppet/type/property.rb +58 -61
  149. data/lib/puppet/type/resources.rb +12 -8
  150. data/lib/puppet/type/schedule.rb +8 -8
  151. data/lib/puppet/type/service.rb +26 -33
  152. data/lib/puppet/type/sshkey.rb +6 -7
  153. data/lib/puppet/type/tidy.rb +41 -35
  154. data/lib/puppet/type/user.rb +34 -67
  155. data/lib/puppet/type/yumrepo.rb +27 -12
  156. data/lib/puppet/type/zone.rb +71 -110
  157. data/lib/puppet/util.rb +46 -61
  158. data/lib/puppet/util/autoload.rb +59 -47
  159. data/lib/puppet/util/config.rb +160 -18
  160. data/lib/puppet/util/config_store.rb +61 -0
  161. data/lib/puppet/util/fact_store.rb +60 -0
  162. data/lib/puppet/util/instance_loader.rb +74 -0
  163. data/lib/puppet/util/loadedfile.rb +5 -8
  164. data/lib/puppet/util/metric.rb +17 -25
  165. data/lib/puppet/util/posix.rb +39 -7
  166. data/lib/puppet/util/provider_features.rb +9 -1
  167. data/lib/puppet/util/rails/collection_merger.rb +16 -1
  168. data/lib/puppet/util/reference.rb +189 -0
  169. data/lib/puppet/util/storage.rb +2 -2
  170. data/lib/puppet/util/subclass_loader.rb +9 -2
  171. data/test/language/ast.rb +4 -148
  172. data/test/language/ast/component.rb +10 -1
  173. data/test/language/collector.rb +1 -191
  174. data/test/language/interpreter.rb +284 -327
  175. data/test/language/lexer.rb +13 -1
  176. data/test/language/node.rb +1 -1
  177. data/test/language/parser.rb +17 -4
  178. data/test/language/resource.rb +67 -101
  179. data/test/language/scope.rb +18 -3
  180. data/test/language/snippets.rb +114 -151
  181. data/test/lib/puppettest.rb +13 -0
  182. data/test/lib/puppettest/exetest.rb +7 -0
  183. data/test/lib/puppettest/fakes.rb +39 -28
  184. data/test/lib/puppettest/railstesting.rb +1 -1
  185. data/test/lib/puppettest/support/assertions.rb +2 -2
  186. data/test/lib/puppettest/support/collection.rb +30 -0
  187. data/test/network/client/ca.rb +27 -1
  188. data/test/network/client/client.rb +3 -3
  189. data/test/network/client/master.rb +102 -1
  190. data/test/network/handler/ca.rb +35 -1
  191. data/test/network/handler/facts.rb +112 -0
  192. data/test/network/handler/fileserver.rb +25 -1
  193. data/test/network/handler/handler.rb +2 -2
  194. data/test/network/handler/master.rb +2 -49
  195. data/test/network/handler/resource.rb +5 -6
  196. data/test/network/server/mongrel_test.rb +65 -0
  197. data/test/network/server/webrick.rb +2 -2
  198. data/test/network/xmlrpc/client.rb +2 -1
  199. data/test/network/xmlrpc/processor.rb +2 -1
  200. data/test/other/pgraph.rb +6 -5
  201. data/test/other/propertychange.rb +11 -12
  202. data/test/other/report.rb +44 -27
  203. data/test/other/transactions.rb +17 -16
  204. data/test/puppet/tc_suidmanager.rb +2 -2
  205. data/test/rails/ast.rb +74 -0
  206. data/test/rails/collection.rb +214 -0
  207. data/test/rails/host.rb +49 -24
  208. data/test/rails/interpreter.rb +91 -0
  209. data/test/rails/railsparameter.rb +22 -11
  210. data/test/rails/railsresource.rb +140 -7
  211. data/test/ral/manager/attributes.rb +37 -13
  212. data/test/ral/manager/instances.rb +82 -0
  213. data/test/ral/manager/provider.rb +60 -22
  214. data/test/ral/manager/type.rb +9 -6
  215. data/test/ral/providers/cron/crontab.rb +59 -7
  216. data/test/ral/providers/group.rb +7 -7
  217. data/test/ral/providers/host/netinfo.rb +5 -6
  218. data/test/ral/providers/host/parsed.rb +4 -4
  219. data/test/ral/providers/mount/parsed.rb +11 -6
  220. data/test/ral/providers/nameservice.rb +2 -2
  221. data/test/ral/providers/package.rb +39 -14
  222. data/test/ral/providers/package/apt.rb +72 -3
  223. data/test/ral/providers/package/aptitude.rb +15 -12
  224. data/test/ral/providers/package/aptrpm.rb +3 -3
  225. data/test/ral/providers/package/dpkg.rb +2 -2
  226. data/test/ral/providers/parsedfile.rb +114 -88
  227. data/test/ral/providers/{parsedport.rb → port/parsed.rb} +1 -1
  228. data/test/ral/providers/provider.rb +93 -13
  229. data/test/ral/providers/service.rb +52 -26
  230. data/test/ral/providers/sshkey/parsed.rb +3 -3
  231. data/test/ral/providers/user.rb +19 -20
  232. data/test/ral/providers/user/useradd.rb +1 -5
  233. data/test/ral/types/cron.rb +49 -36
  234. data/test/ral/types/file.rb +38 -35
  235. data/test/ral/types/file/target.rb +4 -4
  236. data/test/ral/types/filesources.rb +24 -22
  237. data/test/ral/types/group.rb +4 -2
  238. data/test/ral/types/host.rb +17 -10
  239. data/test/ral/types/mount.rb +40 -23
  240. data/test/ral/types/package.rb +62 -5
  241. data/test/ral/types/parameter.rb +2 -2
  242. data/test/ral/types/property.rb +27 -20
  243. data/test/ral/types/resources.rb +4 -16
  244. data/test/ral/types/schedule.rb +2 -2
  245. data/test/ral/types/service.rb +2 -3
  246. data/test/ral/types/sshkey.rb +3 -3
  247. data/test/ral/types/tidy.rb +6 -15
  248. data/test/ral/types/user.rb +17 -17
  249. data/test/ral/types/yumrepo.rb +2 -2
  250. data/test/ral/types/zone.rb +71 -87
  251. data/test/util/autoload.rb +6 -21
  252. data/test/util/config.rb +201 -101
  253. data/test/util/fact_store.rb +67 -0
  254. data/test/util/features.rb +9 -6
  255. data/test/util/instance_loader.rb +53 -0
  256. data/test/util/loadedfile.rb +17 -1
  257. data/test/util/metrics.rb +54 -57
  258. data/test/util/posixtest.rb +8 -11
  259. data/test/util/utiltest.rb +31 -2
  260. metadata +520 -492
  261. data/TODO +0 -4
  262. data/lib/puppet/network/client/logger.rb +0 -6
  263. data/lib/puppet/network/handler/logger.rb +0 -52
  264. data/lib/puppet/rails/database/001_add_indexes.rb +0 -38
  265. data/lib/puppet/type/parsedtype.rb +0 -219
  266. data/test/network/handler/logger.rb +0 -183
@@ -16,28 +16,27 @@ Puppet::Type.type(:package).provide :freebsd, :parent => :openbsd do
16
16
  end
17
17
 
18
18
  def install
19
- should = @model.should(:ensure)
19
+ should = @resource.should(:ensure)
20
20
 
21
- if @model[:source]
21
+ if @resource[:source]
22
22
  return super
23
23
  end
24
24
 
25
- pkgadd "-r", @model[:name]
25
+ pkgadd "-r", @resource[:name]
26
26
  end
27
27
 
28
28
  def query
29
- self.class.list
30
-
31
- if @model.is(:ensure)
32
- return :listed
33
- else
34
- return nil
29
+ self.class.instances.each do |provider|
30
+ if provider.name == @resource.name
31
+ return provider.properties
32
+ end
35
33
  end
34
+ return nil
36
35
  end
37
36
 
38
37
  def uninstall
39
- pkgdelete "%s-%s" % [@model[:name], @model.should(:ensure)]
38
+ pkgdelete "%s-%s" % [@resource[:name], @resource.should(:ensure)]
40
39
  end
41
40
  end
42
41
 
43
- # $Id: freebsd.rb 1979 2006-12-28 08:06:46Z luke $
42
+ # $Id: freebsd.rb 2555 2007-06-08 17:20:00Z luke $
@@ -1,8 +1,12 @@
1
+ require 'puppet/provider/package'
2
+
1
3
  # Ruby gems support.
2
- Puppet::Type.type(:package).provide :gem do
4
+ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package do
3
5
  desc "Ruby Gem support. By default uses remote gems, but you can specify
4
6
  the path to a local gem via ``source``."
5
7
 
8
+ has_feature :versionable
9
+
6
10
  commands :gemcmd => "gem"
7
11
 
8
12
  def self.gemlist(hash)
@@ -54,24 +58,24 @@ Puppet::Type.type(:package).provide :gem do
54
58
  end
55
59
  end
56
60
 
57
- def self.list(justme = false)
61
+ def self.instances(justme = false)
58
62
  gemlist(:local => true).collect do |hash|
59
- Puppet::Type.type(:package).installedpkg(hash)
63
+ new(hash)
60
64
  end
61
65
  end
62
66
 
63
67
  def install(useversion = true)
64
68
  command = ["install"]
65
- if (! @model.should(:ensure).is_a? Symbol) and useversion
66
- command << "-v" << @model.should(:ensure)
69
+ if (! @resource.should(:ensure).is_a? Symbol) and useversion
70
+ command << "-v" << @resource.should(:ensure)
67
71
  end
68
72
  # Always include dependencies
69
73
  command << "--include-dependencies"
70
74
 
71
- if source = @model[:source]
75
+ if source = @resource[:source]
72
76
  command << source
73
77
  else
74
- command << @model[:name]
78
+ command << @resource[:name]
75
79
  end
76
80
 
77
81
  gemcmd(*command)
@@ -79,26 +83,22 @@ Puppet::Type.type(:package).provide :gem do
79
83
 
80
84
  def latest
81
85
  # This always gets the latest version available.
82
- hash = self.class.gemlist(:justme => @model[:name])
86
+ hash = self.class.gemlist(:justme => @resource[:name])
83
87
 
84
88
  return hash[:ensure]
85
89
  end
86
90
 
87
91
  def query
88
- self.class.gemlist(:justme => @model[:name], :local => true)
92
+ self.class.gemlist(:justme => @resource[:name], :local => true)
89
93
  end
90
94
 
91
95
  def uninstall
92
- gemcmd "uninstall", "-x", "-a", @model[:name]
96
+ gemcmd "uninstall", "-x", "-a", @resource[:name]
93
97
  end
94
98
 
95
99
  def update
96
100
  self.install(false)
97
101
  end
98
-
99
- def versionable?
100
- true
101
- end
102
102
  end
103
103
 
104
- # $Id: gem.rb 2355 2007-03-27 18:06:50Z luke $
104
+ # $Id: gem.rb 2618 2007-06-18 21:18:48Z luke $
@@ -1,5 +1,7 @@
1
+ require 'puppet/provider/package'
2
+
1
3
  # Packaging on OpenBSD. Doesn't work anywhere else that I know of.
2
- Puppet::Type.type(:package).provide :openbsd do
4
+ Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Package do
3
5
  desc "OpenBSD's form of ``pkg_add`` support."
4
6
 
5
7
  commands :pkginfo => "pkg_info", :pkgadd => "pkg_add", :pkgdelete => "pkg_delete"
@@ -7,7 +9,7 @@ Puppet::Type.type(:package).provide :openbsd do
7
9
  defaultfor :operatingsystem => :openbsd
8
10
  confine :operatingsystem => :openbsd
9
11
 
10
- def self.list
12
+ def self.instances
11
13
  packages = []
12
14
 
13
15
  begin
@@ -29,8 +31,7 @@ Puppet::Type.type(:package).provide :openbsd do
29
31
 
30
32
  hash[:provider] = self.name
31
33
 
32
- pkg = Puppet.type(:package).installedpkg(hash)
33
- packages << pkg
34
+ packages << new(hash)
34
35
  else
35
36
  # Print a warning on lines we can't match, but move
36
37
  # on, since it should be non-fatal
@@ -38,12 +39,6 @@ Puppet::Type.type(:package).provide :openbsd do
38
39
  end
39
40
  }
40
41
  end
41
- # Mark as absent any packages we didn't find
42
- Puppet.type(:package).each do |pkg|
43
- unless packages.include? pkg
44
- pkg.is = [:ensure, :absent]
45
- end
46
- end
47
42
 
48
43
  return packages
49
44
  rescue Puppet::ExecutionFailure
@@ -56,22 +51,22 @@ Puppet::Type.type(:package).provide :openbsd do
56
51
  end
57
52
 
58
53
  def install
59
- should = @model.should(:ensure)
54
+ should = @resource.should(:ensure)
60
55
 
61
- unless @model[:source]
56
+ unless @resource[:source]
62
57
  raise Puppet::Error,
63
58
  "You must specify a package source for BSD packages"
64
59
  end
65
60
 
66
- pkgadd @model[:source]
61
+ pkgadd @resource[:source]
67
62
  end
68
63
 
69
64
  def query
70
65
  hash = {}
71
- info = pkginfo @model[:name]
66
+ info = pkginfo @resource[:name]
72
67
 
73
68
  # Search for the version info
74
- if info =~ /Information for #{@model[:name]}-(\S+)/
69
+ if info =~ /Information for #{@resource[:name]}-(\S+)/
75
70
  hash[:ensure] = $1
76
71
  else
77
72
  return nil
@@ -86,8 +81,8 @@ Puppet::Type.type(:package).provide :openbsd do
86
81
  end
87
82
 
88
83
  def uninstall
89
- pkgdelete @model[:name]
84
+ pkgdelete @resource[:name]
90
85
  end
91
86
  end
92
87
 
93
- # $Id: openbsd.rb 1979 2006-12-28 08:06:46Z luke $
88
+ # $Id: openbsd.rb 2555 2007-06-08 17:20:00Z luke $
@@ -1,6 +1,20 @@
1
- # Jeff McCune <mccune.jeff@gmail.com>
2
- # Mac OS X Package Installer which handles .pkg and .mpkg
3
- # bundles inside an Apple Disk Image.
1
+ #
2
+ # pkgdmg.rb
3
+ #
4
+ # Install Installer.app packages wrapped up inside a DMG image file.
5
+ #
6
+ # Copyright (C) 2007 Jeff McCune Jeff McCune <jeff@northstarlabs.net>
7
+ #
8
+ # This program is free software; you can redistribute it and/or
9
+ # modify it under the terms of the GNU General Public License
10
+ # as published by the Free Software Foundation (version 2 of the License)
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ # You should have received a copy of the GNU General Public License
16
+ # along with this program; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston MA 02110-1301 USA
4
18
  #
5
19
  # Motivation: DMG files provide a true HFS file system
6
20
  # and are easier to manage and .pkg bundles.
@@ -11,11 +25,71 @@
11
25
  # As a result, we store installed .pkg.dmg file names
12
26
  # in /var/db/.puppet_pkgdmg_installed_<name>
13
27
 
14
- # require 'ruby-debug'
15
- # Debugger.start
28
+ require 'puppet/provider/package'
29
+
30
+ Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Package do
31
+ desc "Package management based on Apple's Installer.app and DiskUtility.app
32
+
33
+ Author: Jeff McCune <jeff@northstarlabs.net>
34
+
35
+ Please direct questions about this provider to the puppet-users mailing list.
36
+
37
+ This package works by checking the contents of a DMG image for Apple pkg or
38
+ mpkg files. Any number of pkg or mpkg files may exist in the root directory of
39
+ the DMG file system. Sub directories are not checked for packages.
40
+
41
+ This provider always assumes the label (formerly called 'name') attribute
42
+ declared in the manifest will always exactly match the file name (without
43
+ path) of the DMG file itself. Therefore, if you want to install packages in
44
+ 'Foobar.pkg.dmg' you must explicitly specify the label:
45
+
46
+ package { Foobar.pkg.dmg: ensure => installed, provider => pkgdmg }
47
+
48
+ Only the dmg file name itself is used when puppet determines if the packages
49
+ contained within are currently installed. For example, if a package resource
50
+ named 'Foobar.pkg.dmg' is named for installation and contains multiple
51
+ packages, this provider will install all packages in the root directory of
52
+ this file system, then create a small cookie for the whole bundle, located at
53
+ /var/db/.puppet_pkgdmg_installed_Foobar.pkg.dmg
54
+
55
+ As a result, if you change the contents of the DMG file in any way, Puppet
56
+ will not update or re-install the packages contained within unless you change
57
+ the file name of the DMG wrapper itself. Therefore, if you use this provider,
58
+ I recommend you name the DMG wrapper files in a manner that lends itself to
59
+ incremental version changes. I include some version or date string in the DMG
60
+ name, like so:
61
+
62
+ Firefox-2.0.0.3-1.pkg.dmg
63
+
64
+ If I realize I've mis-packaged this DMG, then I have the option to increment
65
+ the package version, yielding Firefox-2.0.0.3-2.pkg.dmg.
66
+
67
+ This provider allows you to host DMG files within an FTP or HTTP server. This
68
+ is primarily how the author provider distributes software. Any URL mechanism
69
+ curl or Ruby's open-uri module supports is supported by this provider. Curl
70
+ supported URL's yield much faster data throughput than open-uri, so I
71
+ recommend HTTP, HTTPS, or FTP for source package repositories.
72
+
73
+ Because the provider assumes packages will be transfered via CURL, a two stage
74
+ process occurs. First, if a URL is detected, curl is invoked to transfer the
75
+ file into a temporary directory. If no URL is present, the provider skips
76
+ straight to step 2. In step two, the source file is mounted, then packages
77
+ installed, and finally the DMG file is removed.
78
+
79
+ WARNING: Because I assume files will be downloaded to /tmp, the current
80
+ implementation attempts to delete DMG files if you install directly from the
81
+ file system and not via a URL method.
82
+
83
+ If this is a problem for you, please patch the code, or bug Jeff to fix this.
84
+
85
+ Example usage:
16
86
 
17
- Puppet::Type.type(:package).provide :pkgdmg do
18
- desc "Package management based on Apple's Installer.app and DiskUtility.app"
87
+ package { Thunderbird-2.0.0.4-1.pkg.dmg:
88
+ provider => pkgdmg, ensure => present
89
+ source => 'http://0.0.0.0:8000/packages/Thunderbird-2.0.0.4-1.pkg.dmg',
90
+ }
91
+ "
92
+
19
93
 
20
94
  confine :exists => "/Library/Receipts"
21
95
  commands :installer => "/usr/sbin/installer"
@@ -23,7 +97,7 @@ Puppet::Type.type(:package).provide :pkgdmg do
23
97
  commands :curl => "/usr/bin/curl"
24
98
 
25
99
  # JJM We store a cookie for each installed .pkg.dmg in /var/db
26
- def self.listbyname
100
+ def self.instance_by_name
27
101
  Dir.entries("/var/db").find_all { |f|
28
102
  f =~ /^\.puppet_pkgdmg_installed_/
29
103
  }.collect do |f|
@@ -33,9 +107,9 @@ Puppet::Type.type(:package).provide :pkgdmg do
33
107
  end
34
108
  end
35
109
 
36
- def self.list
37
- listbyname.collect do |name|
38
- Puppet.type(:package).installedpkg(
110
+ def self.instances
111
+ instance_by_name.collect do |name|
112
+ new(
39
113
  :name => name,
40
114
  :provider => :pkgdmg,
41
115
  :ensure => :installed
@@ -97,8 +171,8 @@ Puppet::Type.type(:package).provide :pkgdmg do
97
171
  end # def self.installpkgdmg
98
172
 
99
173
  def query
100
- if FileTest.exists?("/var/db/.puppet_pkgdmg_installed_#{@model[:name]}")
101
- return {:name => @model[:name], :ensure => :present}
174
+ if FileTest.exists?("/var/db/.puppet_pkgdmg_installed_#{@resource[:name]}")
175
+ return {:name => @resource[:name], :ensure => :present}
102
176
  else
103
177
  return nil
104
178
  end
@@ -106,14 +180,14 @@ Puppet::Type.type(:package).provide :pkgdmg do
106
180
 
107
181
  def install
108
182
  source = nil
109
- unless source = @model[:source]
183
+ unless source = @resource[:source]
110
184
  self.fail "Mac OS X PKG DMG's must specify a package source."
111
185
  end
112
- unless name = @model[:name]
186
+ unless name = @resource[:name]
113
187
  self.fail "Mac OS X PKG DMG's must specify a package name."
114
188
  end
115
189
  self.class.installpkgdmg(source,name)
116
190
  end
117
191
  end
118
192
 
119
- # $Id: pkgdmg.rb 2187 2007-02-12 18:55:40Z luke $
193
+ # $Id: pkgdmg.rb 2622 2007-06-18 23:57:28Z mccune $
@@ -1,17 +1,24 @@
1
- Puppet::Type.type(:package).provide :portage do
1
+ require 'puppet/provider/package'
2
+
3
+ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Package do
2
4
  desc "Provides packaging support for Gentoo's portage system."
3
5
 
4
- commands :emerge => "/usr/bin/emerge", :eix => "/usr/bin/eix"
6
+ has_feature :versionable
7
+
8
+ commands :emerge => "/usr/bin/emerge", :eix => "/usr/bin/eix", :update_eix => "/usr/bin/update-eix"
5
9
 
6
10
  defaultfor :operatingsystem => :gentoo
7
11
 
8
- def self.list
12
+ def self.instances
9
13
  result_format = /(\S+) (\S+) \[(.*)\] \[[^0-9]*([^\s:]*)(:\S*)?\] ([\S]*) (.*)/
10
14
  result_fields = [:category, :name, :ensure, :version_available, :slot, :vendor, :description]
11
15
 
12
16
  search_format = "{installedversionsshort}<category> <name> [<installedversionsshort>] [<best>] <homepage> <description>{}"
13
17
 
14
18
  begin
19
+ if !FileUtils.uptodate?("/var/cache/eix", %w(/usr/bin/eix /usr/portage/metadata/timestamp))
20
+ update_eix
21
+ end
15
22
  search_output = eix "--nocolor", "--format", search_format
16
23
 
17
24
  packages = []
@@ -26,7 +33,7 @@ Puppet::Type.type(:package).provide :portage do
26
33
  package[:provider] = :portage
27
34
  package[:ensure] = package[:ensure].split.last
28
35
 
29
- packages.push(Puppet.type(:package).installedpkg(package))
36
+ packages << new(package)
30
37
  end
31
38
  end
32
39
 
@@ -37,7 +44,7 @@ Puppet::Type.type(:package).provide :portage do
37
44
  end
38
45
 
39
46
  def install
40
- should = @model.should(:ensure)
47
+ should = @resource.should(:ensure)
41
48
  name = package_name
42
49
  unless should == :present or should == :latest
43
50
  # We must install a specific version
@@ -48,7 +55,7 @@ Puppet::Type.type(:package).provide :portage do
48
55
 
49
56
  # The common package name format.
50
57
  def package_name
51
- "%s/%s" % [@model[:category], @model[:name]]
58
+ "%s/%s" % [@resource[:category], @resource[:name]]
52
59
  end
53
60
 
54
61
  def uninstall
@@ -63,11 +70,14 @@ Puppet::Type.type(:package).provide :portage do
63
70
  result_format = /(\S+) (\S+) \[(.*)\] \[[^0-9]*([^\s:]*)(:\S*)?\] ([\S]*) (.*)/
64
71
  result_fields = [:category, :name, :ensure, :version_available, :slot, :vendor, :description]
65
72
 
66
- search_field = @model[:category] ? "--category-name" : "--name"
67
- search_value = @model[:category] ? package_name : @model[:name]
73
+ search_field = @resource[:category] ? "--category-name" : "--name"
74
+ search_value = @resource[:category] ? package_name : @resource[:name]
68
75
  search_format = "<category> <name> [<installedversionsshort>] [<best>] <homepage> <description>"
69
76
 
70
77
  begin
78
+ if !FileUtils.uptodate?("/var/cache/eix", %w(/usr/bin/eix /usr/portage/metadata/timestamp))
79
+ update_eix
80
+ end
71
81
  search_output = eix "--nocolor", "--format", search_format, "--exact", search_field, search_value
72
82
 
73
83
  packages = []
@@ -88,7 +98,7 @@ Puppet::Type.type(:package).provide :portage do
88
98
 
89
99
  case packages.size
90
100
  when 0
91
- not_found_value = "%s/%s" % [@model[:category] ? @model[:category] : "<unspecified category>", @model[:name]]
101
+ not_found_value = "%s/%s" % [@resource[:category] ? @resource[:category] : "<unspecified category>", @resource[:name]]
92
102
  raise Puppet::PackageError.new("No package found with the specified name [#{not_found_value}]")
93
103
  when 1
94
104
  return packages[0]
@@ -103,10 +113,6 @@ Puppet::Type.type(:package).provide :portage do
103
113
  def latest
104
114
  return self.query[:version_available]
105
115
  end
106
-
107
- def versionable?
108
- true
109
- end
110
116
  end
111
117
 
112
- # $Id: portage.rb 2216 2007-02-20 00:35:12Z luke $
118
+ # $Id: portage.rb 2618 2007-06-18 21:18:48Z luke $
@@ -1,6 +1,7 @@
1
- Puppet::Type.type(:package).provide :ports, :parent => :freebsd do
1
+ Puppet::Type.type(:package).provide :ports, :parent => :freebsd, :source => :freebsd do
2
2
  desc "Support for FreeBSD's ports. Again, this still mixes packages
3
3
  and ports."
4
+
4
5
  commands :portupgrade => "/usr/local/sbin/portupgrade",
5
6
  :portversion => "/usr/local/sbin/portversion",
6
7
  :portuninstall => "/usr/local/sbin/pkg_deinstall",
@@ -19,17 +20,18 @@ Puppet::Type.type(:package).provide :ports, :parent => :freebsd do
19
20
  # -p: create a package
20
21
  # -N: install if the package is missing, otherwise upgrade
21
22
  # -P: prefer binary packages
22
- cmd = %w{-p -N -P} << @model[:name]
23
+ # -M: yes, we're a batch, so don't ask any questions
24
+ cmd = %w{-p -N -P -M BATCH=yes} << @resource[:name]
23
25
 
24
26
  output = portupgrade(*cmd)
25
27
  if output =~ /\*\* No such /
26
- raise Puppet::ExecutionFailure, "Could not find package %s" % @model[:name]
28
+ raise Puppet::ExecutionFailure, "Could not find package %s" % @resource[:name]
27
29
  end
28
30
  end
29
31
 
30
32
  # If there are multiple packages, we only use the last one
31
33
  def latest
32
- cmd = ["-v", @model[:name]]
34
+ cmd = ["-v", @resource[:name]]
33
35
 
34
36
  begin
35
37
  output = portversion(*cmd)
@@ -47,7 +49,7 @@ Puppet::Type.type(:package).provide :ports, :parent => :freebsd do
47
49
  match = $2
48
50
  info = $3
49
51
 
50
- unless pkgstuff =~ /^(\w+)-([0-9].+)$/
52
+ unless pkgstuff =~ /^(\S+)-([^-\s]+)$/
51
53
  raise Puppet::PackageError,
52
54
  "Could not match package info '%s'" % pkgstuff
53
55
  end
@@ -73,17 +75,17 @@ Puppet::Type.type(:package).provide :ports, :parent => :freebsd do
73
75
  end
74
76
 
75
77
  def query
76
- self.class.list
77
-
78
- if @model.is(:ensure) and @model.is(:ensure) != :absent
79
- return :listed
80
- else
81
- return nil
78
+ self.class.instances.each do |instance|
79
+ if instance.name == self.name
80
+ return instance.properties
81
+ end
82
82
  end
83
+
84
+ return nil
83
85
  end
84
86
 
85
87
  def uninstall
86
- portuninstall @model[:name]
88
+ portuninstall @resource[:name]
87
89
  end
88
90
 
89
91
  def update
@@ -91,4 +93,4 @@ Puppet::Type.type(:package).provide :ports, :parent => :freebsd do
91
93
  end
92
94
  end
93
95
 
94
- # $Id: ports.rb 1979 2006-12-28 08:06:46Z luke $
96
+ # $Id: ports.rb 2614 2007-06-18 19:56:19Z luke $