puppet 0.22.4 → 0.23.0

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 (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
@@ -1,5 +1,6 @@
1
+ require 'puppet/provider/package'
1
2
  # RPM packaging. Should work anywhere that has rpm installed.
2
- Puppet::Type.type(:package).provide :rpm do
3
+ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Provider::Package do
3
4
  desc "RPM packaging support; should work anywhere with a working ``rpm``
4
5
  binary."
5
6
 
@@ -10,7 +11,7 @@ Puppet::Type.type(:package).provide :rpm do
10
11
 
11
12
  commands :rpm => "rpm"
12
13
 
13
- def self.list
14
+ def self.instances
14
15
  packages = []
15
16
 
16
17
  # list out all of the packages
@@ -30,7 +31,7 @@ Puppet::Type.type(:package).provide :rpm do
30
31
  hash[field] = value
31
32
  }
32
33
  hash[:provider] = self.name
33
- packages.push Puppet.type(:package).installedpkg(hash)
34
+ packages << new(hash)
34
35
  else
35
36
  raise "failed to match rpm line %s" % line
36
37
  end
@@ -47,7 +48,7 @@ Puppet::Type.type(:package).provide :rpm do
47
48
  # a hash with entries :instance => fully versioned package name, and
48
49
  # :ensure => version-release
49
50
  def query
50
- cmd = ["-q", @model[:name], "--nosignature", "--nodigest", "--qf", "#{NVRFORMAT} #{VERSIONSTRING}\n"]
51
+ cmd = ["-q", @resource[:name], "--nosignature", "--nodigest", "--qf", "#{NVRFORMAT} #{VERSIONSTRING}\n"]
51
52
 
52
53
  begin
53
54
  output = rpm(*cmd)
@@ -57,10 +58,10 @@ Puppet::Type.type(:package).provide :rpm do
57
58
 
58
59
  regex = %r{^(\S+)\s+(\S+)}
59
60
  fields = [:instance, :ensure]
60
- hash = {}
61
+ attrs = {}
61
62
  if match = regex.match(output)
62
63
  fields.zip(match.captures) { |field,value|
63
- hash[field] = value
64
+ attrs[field] = value
64
65
  }
65
66
  else
66
67
  raise Puppet::DevError,
@@ -68,36 +69,36 @@ Puppet::Type.type(:package).provide :rpm do
68
69
  output
69
70
  end
70
71
 
71
- @nvr = hash[:instance]
72
+ @nvr = attrs[:instance]
72
73
 
73
- return hash
74
+ return attrs
74
75
  end
75
76
 
76
77
  # Here we just retrieve the version from the file specified in the source.
77
78
  def latest
78
- unless source = @model[:source]
79
- @model.fail "RPMs must specify a package source"
79
+ unless source = @resource[:source]
80
+ @resource.fail "RPMs must specify a package source"
80
81
  end
81
82
 
82
- cmd = [command(:rpm), "-q", "--qf", "#{VERSIONSTRING}", "-p", "#{@model[:source]}"]
83
+ cmd = [command(:rpm), "-q", "--qf", "#{VERSIONSTRING}", "-p", "#{@resource[:source]}"]
83
84
  version = execfail(cmd, Puppet::Error)
84
85
  return version
85
86
  end
86
87
 
87
88
  def install
88
89
  source = nil
89
- unless source = @model[:source]
90
- @model.fail "RPMs must specify a package source"
90
+ unless source = @resource[:source]
91
+ @resource.fail "RPMs must specify a package source"
91
92
  end
92
- if @model.should(:ensure) == @model.is(:ensure) ||
93
- @model.should(:ensure) == :latest && @model.is(:ensure) == latest
94
- # RPM gets pissy if you try to install an already
95
- # installed package
93
+ # RPM gets pissy if you try to install an already
94
+ # installed package
95
+ if @resource.should(:ensure) == @property_hash[:ensure] or
96
+ @resource.should(:ensure) == :latest && @property_hash[:ensure] == latest
96
97
  return
97
98
  end
98
99
 
99
100
  flag = "-i"
100
- if @model.is(:ensure) != :absent
101
+ if @property_hash[:ensure] and @property_hash[:ensure] != :absent
101
102
  flag = "-U"
102
103
  end
103
104
 
@@ -112,14 +113,10 @@ Puppet::Type.type(:package).provide :rpm do
112
113
  self.install
113
114
  end
114
115
 
115
- def versionable?
116
- true
117
- end
118
-
119
116
  def nvr
120
117
  query unless @nvr
121
118
  @nvr
122
119
  end
123
120
  end
124
121
 
125
- # $Id: rpm.rb 2292 2007-03-18 19:01:31Z luke $
122
+ # $Id: rpm.rb 2595 2007-06-17 00:06:46Z luke $
@@ -1,15 +1,17 @@
1
1
  Puppet.type(:package).provide :rug, :parent => :rpm do
2
2
  desc "Support for suse ``rug`` package manager."
3
3
 
4
+ has_feature :versionable
5
+
4
6
  commands :rug => "/usr/bin/rug"
5
7
  defaultfor :operatingsystem => :suse
6
8
  confine :operatingsystem => :suse
7
9
 
8
10
  # Install a package using 'rug'.
9
11
  def install
10
- should = @model.should(:ensure)
12
+ should = @resource.should(:ensure)
11
13
  self.debug "Ensuring => #{should}"
12
- wanted = @model[:name]
14
+ wanted = @resource[:name]
13
15
 
14
16
  # XXX: We don't actually deal with epochs here.
15
17
  case should
@@ -33,12 +35,12 @@ Puppet.type(:package).provide :rug, :parent => :rpm do
33
35
  #rug can only get a list of *all* available packages?
34
36
  output = rug "list-updates"
35
37
 
36
- if output =~ /#{@model[:name]}\s*\|\s*([0-9\.\-]+)/
38
+ if output =~ /#{@resource[:name]}\s*\|\s*([0-9\.\-]+)/
37
39
  return $1
38
40
  else
39
41
  # rug didn't find updates, pretend the current
40
42
  # version is the latest
41
- return @model.is(:ensure)
43
+ return @property_hash[:ensure]
42
44
  end
43
45
  end
44
46
 
@@ -46,8 +48,4 @@ Puppet.type(:package).provide :rug, :parent => :rpm do
46
48
  # rug install can be used for update, too
47
49
  self.install
48
50
  end
49
-
50
- def versionable?
51
- true
52
- end
53
51
  end
@@ -1,6 +1,8 @@
1
- # Sun packaging. No one else uses these package tools, AFAIK.
1
+ # Sun packaging.
2
2
 
3
- Puppet::Type.type(:package).provide :sun do
3
+ require 'puppet/provider/package'
4
+
5
+ Puppet::Type.type(:package).provide :sun, :parent => Puppet::Provider::Package do
4
6
  desc "Sun's packaging system. Requires that you specify the source for
5
7
  the packages you're managing."
6
8
  commands :pkginfo => "/usr/bin/pkginfo",
@@ -9,7 +11,7 @@ Puppet::Type.type(:package).provide :sun do
9
11
 
10
12
  defaultfor :operatingsystem => :solaris
11
13
 
12
- def self.list
14
+ def self.instances
13
15
  packages = []
14
16
  hash = {}
15
17
  names = {
@@ -40,7 +42,7 @@ Puppet::Type.type(:package).provide :sun do
40
42
  when /^$/:
41
43
  hash[:provider] = :sun
42
44
 
43
- packages.push Puppet.type(:package).installedpkg(hash)
45
+ packages << new(hash)
44
46
  hash.clear
45
47
  when /\s*(\w+):\s+(.+)/:
46
48
  name = $1
@@ -85,7 +87,7 @@ Puppet::Type.type(:package).provide :sun do
85
87
  if device
86
88
  cmd += " -d #{device}"
87
89
  end
88
- cmd += " #{@model[:name]}"
90
+ cmd += " #{@resource[:name]}"
89
91
 
90
92
  begin
91
93
  # list out all of the packages
@@ -115,28 +117,28 @@ Puppet::Type.type(:package).provide :sun do
115
117
  end
116
118
 
117
119
  def install
118
- unless @model[:source]
120
+ unless @resource[:source]
119
121
  raise Puppet::Error, "Sun packages must specify a package source"
120
122
  end
121
123
  cmd = []
122
124
 
123
- if @model[:adminfile]
124
- cmd << "-a" << @model[:adminfile]
125
+ if @resource[:adminfile]
126
+ cmd << "-a" << @resource[:adminfile]
125
127
  end
126
128
 
127
- if @model[:responsefile]
128
- cmd << "-r" << @model[:responsefile]
129
+ if @resource[:responsefile]
130
+ cmd << "-r" << @resource[:responsefile]
129
131
  end
130
132
 
131
- cmd << "-d" << @model[:source]
132
- cmd << "-n" << @model[:name]
133
+ cmd << "-d" << @resource[:source]
134
+ cmd << "-n" << @resource[:name]
133
135
 
134
136
  pkgadd cmd
135
137
  end
136
138
 
137
139
  # Retrieve the version from the current package file.
138
140
  def latest
139
- hash = info2hash(@model[:source])
141
+ hash = info2hash(@resource[:source])
140
142
  hash[:ensure]
141
143
  end
142
144
 
@@ -147,22 +149,22 @@ Puppet::Type.type(:package).provide :sun do
147
149
  def uninstall
148
150
  command = ["-n"]
149
151
 
150
- if @model[:adminfile]
151
- command << "-a" << @model[:adminfile]
152
+ if @resource[:adminfile]
153
+ command << "-a" << @resource[:adminfile]
152
154
  end
153
155
 
154
- command << @model[:name]
156
+ command << @resource[:name]
155
157
  pkgrm command
156
158
  end
157
159
 
158
160
  # Remove the old package, and install the new one. This will probably
159
161
  # often fail.
160
162
  def update
161
- if @model.is(:ensure) != :absent
163
+ if (@property_hash[:ensure] || info2hash()[:ensure]) != :absent
162
164
  self.uninstall
163
165
  end
164
166
  self.install
165
167
  end
166
168
  end
167
169
 
168
- # $Id: sun.rb 1980 2006-12-28 19:14:11Z luke $
170
+ # $Id: sun.rb 2581 2007-06-14 06:21:40Z luke $
@@ -1,9 +1,9 @@
1
1
  # At this point, it's an exact copy of the Blastwave stuff.
2
- Puppet::Type.type(:package).provide :sunfreeware, :parent => :blastwave do
2
+ Puppet::Type.type(:package).provide :sunfreeware, :parent => :blastwave, :source => :sun do
3
3
  desc "Package management using sunfreeware.com's ``pkg-get`` command on Solaris.
4
4
  At this point, support is exactly the same as ``blastwave`` support and
5
5
  has not actually been tested."
6
6
  commands :pkgget => "pkg-get"
7
7
  end
8
8
 
9
- # $Id: sunfreeware.rb 1571 2006-09-06 04:49:45Z luke $
9
+ # $Id: sunfreeware.rb 2555 2007-06-08 17:20:00Z luke $
@@ -1,4 +1,4 @@
1
- Puppet.type(:package).provide :up2date, :parent => :rpm do
1
+ Puppet.type(:package).provide :up2date, :parent => :rpm, :source => :rpm do
2
2
  desc "Support for Red Hat's proprietary ``up2date`` package update
3
3
  mechanism."
4
4
 
@@ -9,7 +9,7 @@ Puppet.type(:package).provide :up2date, :parent => :rpm do
9
9
 
10
10
  # Install a package using 'up2date'.
11
11
  def install
12
- up2date "-u", @model[:name]
12
+ up2date "-u", @resource[:name]
13
13
 
14
14
  unless self.query
15
15
  raise Puppet::ExecutionFailure.new(
@@ -21,14 +21,14 @@ Puppet.type(:package).provide :up2date, :parent => :rpm do
21
21
  # What's the latest package version available?
22
22
  def latest
23
23
  #up2date can only get a list of *all* available packages?
24
- output = up2date "--show-available"
24
+ output = up2date "--showall"
25
25
 
26
- if output =~ /#{@model[:name]}-(\d+.*)\.\w+/
26
+ if output =~ /^#{@resource[:name]}-(\d+.*)\.\w+/
27
27
  return $1
28
28
  else
29
29
  # up2date didn't find updates, pretend the current
30
30
  # version is the latest
31
- return @model.is(:ensure)
31
+ return @property_hash[:ensure]
32
32
  end
33
33
  end
34
34
 
@@ -36,10 +36,6 @@ Puppet.type(:package).provide :up2date, :parent => :rpm do
36
36
  # Install in up2date can be used for update, too
37
37
  self.install
38
38
  end
39
-
40
- def versionable?
41
- false
42
- end
43
39
  end
44
40
 
45
- # $Id: up2date.rb 2233 2007-02-27 23:16:54Z lutter $
41
+ # $Id: up2date.rb 2582 2007-06-14 06:23:02Z luke $
@@ -0,0 +1,51 @@
1
+ Puppet::Type.type(:package).provide :urpmi, :parent => :rpm, :source => :rpm do
2
+ desc "Support via ``urpmi``."
3
+ commands :urpmi => "urpmi", :rpm => "rpm"
4
+
5
+ defaultfor :operatingsystem => [:mandriva, :mandrake]
6
+
7
+ has_feature :versionable
8
+
9
+ def install
10
+ should = @resource.should(:ensure)
11
+ self.debug "Ensuring => #{should}"
12
+ wanted = @resource[:name]
13
+
14
+ # XXX: We don't actually deal with epochs here.
15
+ case should
16
+ when true, false, Symbol
17
+ # pass
18
+ else
19
+ # Add the package version
20
+ wanted += "-%s" % should
21
+ end
22
+
23
+ output = urpmi "--auto", wanted
24
+
25
+ unless self.query
26
+ raise Puppet::Error.new(
27
+ "Could not find package %s" % self.name
28
+ )
29
+ end
30
+ end
31
+
32
+ # What's the latest package version available?
33
+ def latest
34
+ output = urpmi "-S", :available, @resource[:name]
35
+
36
+ if output =~ /^#{@resource[:name]}\S+\s+(\S+)\s/
37
+ return $1
38
+ else
39
+ # urpmi didn't find updates, pretend the current
40
+ # version is the latest
41
+ return @resource[:ensure]
42
+ end
43
+ end
44
+
45
+ def update
46
+ # Install in urpmi can be used for update, too
47
+ self.install
48
+ end
49
+ end
50
+
51
+ # $Id: urpmi.rb 2618 2007-06-18 21:18:48Z luke $
@@ -1,16 +1,19 @@
1
- Puppet::Type.type(:package).provide :yum, :parent => :rpm do
1
+ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
2
2
  desc "Support via ``yum``."
3
+
4
+ has_feature :versionable
5
+
3
6
  commands :yum => "yum", :rpm => "rpm"
4
7
 
5
8
  defaultfor :operatingsystem => [:fedora, :centos, :redhat]
6
9
 
7
10
  def install
8
11
 
9
- should = @model.should(:ensure)
10
- self.debug "Ensuring => #{should}"
11
- wanted = @model[:name]
12
+ should = @resource.should(:ensure)
13
+ self.debug "Ensuring => #{should}"
14
+ wanted = @resource[:name]
12
15
 
13
- # XXX: We don't actually deal with epochs here.
16
+ # XXX: We don't actually deal with epochs here.
14
17
  case should
15
18
  when true, false, Symbol
16
19
  # pass
@@ -30,14 +33,17 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm do
30
33
 
31
34
  # What's the latest package version available?
32
35
  def latest
33
- output = yum "-d", "0", "-e", "0", :list, :available, @model[:name]
36
+ output = yum "-d", "0", "-e", "0", :list, :available, @resource[:name]
34
37
 
35
- if output =~ /^#{@model[:name]}\S+\s+(\S+)\s/
38
+ if output =~ /^#{@resource[:name]}\S+\s+(\S+)\s/
36
39
  return $1
37
40
  else
38
41
  # Yum didn't find updates, pretend the current
39
42
  # version is the latest
40
- return @model[:ensure]
43
+ unless properties[:ensure] != :absent
44
+ raise Puppet::DevError, "Tried to get latest on a missing package"
45
+ end
46
+ return @property_hash[:ensure]
41
47
  end
42
48
  end
43
49
 
@@ -45,10 +51,6 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm do
45
51
  # Install in yum can be used for update, too
46
52
  self.install
47
53
  end
48
-
49
- def versionable?
50
- true
51
- end
52
54
  end
53
55
 
54
- # $Id: yum.rb 2235 2007-02-27 23:18:52Z luke $
56
+ # $Id: yum.rb 2618 2007-06-18 21:18:48Z luke $
@@ -8,7 +8,7 @@ require 'puppet/util/fileparsing'
8
8
  # on the provider instance. At this point, the file is written once
9
9
  # for every provider instance.
10
10
  #
11
- # Once the provider prefetches the data, it's the model's job to copy
11
+ # Once the provider prefetches the data, it's the resource's job to copy
12
12
  # that data over to the @is variables.
13
13
  class Puppet::Provider::ParsedFile < Puppet::Provider
14
14
  extend Puppet::Util::FileParsing
@@ -70,7 +70,7 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
70
70
 
71
71
  flushed = []
72
72
  @modified.sort { |a,b| a.to_s <=> b.to_s }.uniq.each do |target|
73
- Puppet.debug "Flushing %s provider target %s" % [@model.name, target]
73
+ Puppet.debug "Flushing %s provider target %s" % [@resource_type.name, target]
74
74
  flush_target(target)
75
75
  flushed << target
76
76
  end
@@ -107,58 +107,54 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
107
107
  end
108
108
 
109
109
  # Return a list of all of the records we can find.
110
- def self.list
110
+ def self.instances
111
111
  prefetch()
112
112
  @records.find_all { |r| r[:record_type] == self.name }.collect { |r|
113
- clean(r)
113
+ new(clean(r))
114
114
  }
115
115
  end
116
116
 
117
- def self.list_by_name
118
- list.collect { |r| r[:name] }
119
- end
120
-
121
117
  # Override the default method with a lot more functionality.
122
- def self.mkmodelmethods
123
- [model.validproperties, model.parameters].flatten.each do |attr|
118
+ def self.mk_resource_methods
119
+ [resource_type.validproperties, resource_type.parameters].flatten.each do |attr|
124
120
  attr = symbolize(attr)
125
121
  define_method(attr) do
126
122
  # If it's not a valid field for this record type (which can happen
127
123
  # when different platforms support different fields), then just
128
- # return the should value, so the model shuts up.
124
+ # return the should value, so the resource shuts up.
129
125
  if @property_hash[attr] or self.class.valid_attr?(self.class.name, attr)
130
126
  @property_hash[attr] || :absent
131
127
  else
132
- @model.should(attr)
128
+ @resource.should(attr)
133
129
  end
134
130
  end
135
131
 
136
132
  define_method(attr.to_s + "=") do |val|
137
133
  # Mark that this target was modified.
138
- modeltarget = @model.should(:target) || self.class.default_target
134
+ resourcetarget = @resource.should(:target) || self.class.default_target
139
135
 
140
136
  # If they're the same, then just mark that one as modified
141
- if @property_hash[:target] and @property_hash[:target] == modeltarget
142
- self.class.modified(modeltarget)
137
+ if @property_hash[:target] and @property_hash[:target] == resourcetarget
138
+ self.class.modified(resourcetarget)
143
139
  else
144
- # Always mark the modeltarget as modified, and if there's
140
+ # Always mark the resourcetarget as modified, and if there's
145
141
  # and old property_hash target, mark it as modified and replace
146
142
  # it.
147
- self.class.modified(modeltarget)
143
+ self.class.modified(resourcetarget)
148
144
  if @property_hash[:target]
149
145
  self.class.modified(@property_hash[:target])
150
146
  end
151
- @property_hash[:target] = modeltarget
147
+ @property_hash[:target] = resourcetarget
152
148
  end
153
149
  @property_hash[attr] = val
154
150
  end
155
151
  end
156
152
  end
157
153
 
158
- # Always make the model methods.
159
- def self.model=(model)
154
+ # Always make the resource methods.
155
+ def self.resource_type=(resource)
160
156
  super
161
- mkmodelmethods()
157
+ mk_resource_methods()
162
158
  end
163
159
 
164
160
  # Mark a target as modified so we know to flush it. This only gets
@@ -169,17 +165,30 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
169
165
  end
170
166
 
171
167
  # Retrieve all of the data from disk. There are three ways to know
172
- # while files to retrieve: We might have a list of file objects already
173
- # set up, there might be instances of our associated model and they
168
+ # which files to retrieve: We might have a list of file objects already
169
+ # set up, there might be instances of our associated resource and they
174
170
  # will have a path parameter set, and we will have a default path
175
171
  # set. We need to turn those three locations into a list of files,
176
172
  # prefetch each one, and make sure they're associated with each appropriate
177
- # model instance.
178
- def self.prefetch
173
+ # resource instance.
174
+ def self.prefetch(resources = nil)
179
175
  # Reset the record list.
180
176
  @records = []
181
- targets().each do |target|
182
- prefetch_target(target)
177
+ targets(resources).each do |target|
178
+ @records += prefetch_target(target)
179
+ end
180
+
181
+ if resources
182
+ @records.each do |record|
183
+ if name = record[:name] and resource = resources[name]
184
+ resource.provider = new(record)
185
+ elsif respond_to?(:match)
186
+ if instance = match(record, resources)
187
+ record[:name] = instance[:name]
188
+ instance.provider = new(record)
189
+ end
190
+ end
191
+ end
183
192
  end
184
193
  end
185
194
 
@@ -196,25 +205,10 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
196
205
  end
197
206
 
198
207
  unless target_records
199
- raise Puppet::DevError, "Prefetch hook for provider %s returned nil" %
200
- self.name
208
+ raise Puppet::DevError, "Prefetching %s for provider %s returned nil" % [target, self.name]
201
209
  end
202
210
 
203
- @records += target_records
204
-
205
- # Set current property on any existing resource instances.
206
- target_records(target).find_all { |i| i.is_a?(Hash) }.each do |record|
207
- # Find any model instances whose names match our instances.
208
- if instance = self.model[record[:name]]
209
- next unless instance.provider.is_a?(self)
210
- instance.provider.property_hash = record
211
- elsif respond_to?(:match)
212
- if instance = match(record)
213
- record[:name] = instance[:name]
214
- instance.provider.property_hash = record
215
- end
216
- end
217
- end
211
+ target_records
218
212
  end
219
213
 
220
214
  # Is there an existing record with this name?
@@ -256,7 +250,7 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
256
250
 
257
251
  # Find a list of all of the targets that we should be reading. This is
258
252
  # used to figure out what targets we need to prefetch.
259
- def self.targets
253
+ def self.targets(resources = nil)
260
254
  targets = []
261
255
  # First get the default target
262
256
  unless self.default_target
@@ -267,18 +261,14 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
267
261
  # Then get each of the file objects
268
262
  targets += @target_objects.keys
269
263
 
270
- # Lastly, check the file from any model instances
271
- self.model.each do |model|
272
- targets << model.value(:target)
273
-
274
- # This is only the case for properties, and targets should always
275
- # be properties.
276
- if model.respond_to?(:is)
277
- targets << model.is(:target)
264
+ # Lastly, check the file from any resource instances
265
+ if resources
266
+ resources.each do |name, resource|
267
+ targets << resource.value(:target)
278
268
  end
279
269
  end
280
270
 
281
- targets.uniq.reject { |t| t.nil? }
271
+ targets.uniq.compact
282
272
  end
283
273
 
284
274
  def self.to_file(records)
@@ -288,19 +278,19 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
288
278
 
289
279
 
290
280
  def create
291
- @model.class.validproperties.each do |property|
292
- if value = @model.should(property)
281
+ @resource.class.validproperties.each do |property|
282
+ if value = @resource.should(property)
293
283
  @property_hash[property] = value
294
284
  end
295
285
  end
296
286
  self.class.modified(@property_hash[:target] || self.class.default_target)
297
- return (@model.class.name.to_s + "_created").intern
287
+ return (@resource.class.name.to_s + "_created").intern
298
288
  end
299
289
 
300
290
  def destroy
301
291
  # We use the method here so it marks the target as modified.
302
292
  self.ensure = :absent
303
- return (@model.class.name.to_s + "_deleted").intern
293
+ return (@resource.class.name.to_s + "_deleted").intern
304
294
  end
305
295
 
306
296
  def exists?
@@ -318,15 +308,15 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
318
308
  # If the target isn't set, then this is our first modification, so
319
309
  # mark it for flushing.
320
310
  unless @property_hash[:target]
321
- @property_hash[:target] = @model[:target] || self.class.default_target
311
+ @property_hash[:target] = @resource.should(:target) || self.class.default_target
322
312
  self.class.modified(@property_hash[:target])
323
313
  end
324
- @property_hash[:name] ||= @model.name
314
+ @property_hash[:name] ||= @resource.name
325
315
 
326
316
  self.class.flush(@property_hash)
327
317
  end
328
318
 
329
- def initialize(model)
319
+ def initialize(resource)
330
320
  super
331
321
 
332
322
  # See if there's already a matching property_hash in the records list;
@@ -334,9 +324,9 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
334
324
  # We provide a default for 'ensure' here, because the provider will
335
325
  # override it if the thing exists, but it won't touch it if it doesn't
336
326
  # exist.
337
- @property_hash = self.class.record?(model[:name]) ||
327
+ @property_hash = self.class.record?(resource[:name]) ||
338
328
  {:record_type => self.class.name, :ensure => :absent}
339
329
  end
340
330
  end
341
331
 
342
- # $Id: parsedfile.rb 2296 2007-03-18 22:48:57Z luke $
332
+ # $Id: parsedfile.rb 2551 2007-06-04 20:37:14Z luke $