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
@@ -14,19 +14,19 @@ module Puppet
14
14
  # Switch the goals of the property, thus running the change in reverse.
15
15
  def backward
16
16
  @property.should = @is
17
- @property.retrieve
17
+ @is = @property.retrieve
18
18
 
19
19
  unless defined? @transaction
20
20
  raise Puppet::Error,
21
21
  "PropertyChange '%s' tried to be executed outside of transaction" %
22
22
  self
23
23
  end
24
- unless @property.insync?
24
+ unless @property.insync?(@is)
25
25
  @property.info "Backing %s" % self
26
26
  return self.go
27
27
  else
28
28
  @property.debug "rollback is already in sync: %s vs. %s" %
29
- [@property.is.inspect, @property.should.inspect]
29
+ [@is, @property.should.inspect]
30
30
  return nil
31
31
  end
32
32
  end
@@ -42,7 +42,7 @@ module Puppet
42
42
  @property.warning("Property '%s' returned invalid event '%s'; resetting to default" %
43
43
  [@property.class,event])
44
44
 
45
- event = @property.parent.class.name.id2name + "_changed"
45
+ event = @property.resource.class.name.id2name + "_changed"
46
46
  end
47
47
 
48
48
  Puppet::Event.new(
@@ -52,14 +52,14 @@ module Puppet
52
52
  )
53
53
  end
54
54
 
55
- def initialize(property)
55
+ def initialize(property, currentvalue)
56
56
  unless property.is_a?(Puppet::Type::Property)
57
57
  raise Puppet::DevError, "Got a %s instead of a property" %
58
58
  property.class
59
59
  end
60
60
  @property = property
61
61
  @path = [property.path,"change"].flatten
62
- @is = property.is
62
+ @is = currentvalue
63
63
 
64
64
  @should = property.should
65
65
 
@@ -92,7 +92,7 @@ module Puppet
92
92
  end
93
93
 
94
94
  return events.collect { |name|
95
- @report = @property.log(@property.change_to_s)
95
+ @report = @property.log(@property.change_to_s(@is, @should))
96
96
  event(name)
97
97
  }
98
98
  end
@@ -114,14 +114,14 @@ module Puppet
114
114
  end
115
115
 
116
116
  def skip?
117
- if @property.insync?
117
+ if @property.insync?(@is)
118
118
  @property.info "Already in sync"
119
119
  return true
120
120
  end
121
121
 
122
122
  if @property.noop
123
123
  @property.log "is %s, should be %s (noop)" %
124
- [property.is_to_s, property.should_to_s]
124
+ [property.is_to_s(@is), property.should_to_s(@should)]
125
125
  #@property.debug "%s is noop" % @property
126
126
  return true
127
127
  end
@@ -129,15 +129,15 @@ module Puppet
129
129
  end
130
130
 
131
131
  def source
132
- self.proxy || @property.parent
132
+ self.proxy || @property.resource
133
133
  end
134
134
 
135
135
  def to_s
136
136
  return "change %s.%s(%s)" %
137
- [@transaction.object_id, self.object_id, @property.change_to_s]
137
+ [@transaction.object_id, self.object_id, @property.change_to_s(@is, @should)]
138
138
  #return "change %s.%s" % [@transaction.object_id, self.object_id]
139
139
  end
140
140
  end
141
141
  end
142
142
 
143
- # $Id: propertychange.rb 2286 2007-03-17 23:16:37Z luke $
143
+ # $Id: propertychange.rb 2500 2007-05-09 22:05:32Z luke $
@@ -2,6 +2,8 @@
2
2
  class Puppet::Provider
3
3
  include Puppet::Util
4
4
  include Puppet::Util::Errors
5
+ include Puppet::Util::Warnings
6
+ extend Puppet::Util::Warnings
5
7
 
6
8
  Puppet::Util.logmethods(self, true)
7
9
 
@@ -10,11 +12,21 @@ class Puppet::Provider
10
12
  include Puppet::Util, Puppet::Util::Docs
11
13
  include Puppet::Util::Logging
12
14
  attr_accessor :name
15
+
16
+ # The source parameter exists so that providers using the same
17
+ # source can specify this, so reading doesn't attempt to read the
18
+ # same package multiple times.
19
+ attr_writer :source
20
+
21
+ # LAK 2007-05-09: Keep the model stuff around for backward compatibility
13
22
  attr_reader :model
23
+ attr_accessor :resource_type
14
24
  attr_writer :doc
15
25
  end
16
26
 
17
- attr_accessor :model
27
+ # LAK 2007-05-09: Keep the model stuff around for backward compatibility
28
+ attr_reader :model
29
+ attr_accessor :resource
18
30
 
19
31
  def self.command(name)
20
32
  name = symbolize(name)
@@ -97,6 +109,12 @@ class Puppet::Provider
97
109
  end
98
110
  end
99
111
 
112
+ # The method for returning a list of provider instances. Note that it returns providers, preferably with values already
113
+ # filled in, not resources.
114
+ def self.instances
115
+ raise Puppet::DevError, "Provider %s has not defined the 'instances' class method" % self.name
116
+ end
117
+
100
118
  # Create the methods for a given command.
101
119
  def self.make_command_methods(name)
102
120
  # Now define a method for that command
@@ -125,12 +143,21 @@ class Puppet::Provider
125
143
  end
126
144
  end
127
145
 
128
- # Create getter/setter methods for each property our model supports.
146
+ # Create getter/setter methods for each property our resource type supports.
129
147
  # They all get stored in @property_hash. This method is useful
130
148
  # for those providers that use prefetch and flush.
131
149
  def self.mkmodelmethods
132
- [model.validproperties, model.parameters].flatten.each do |attr|
150
+ warnonce "Provider.mkmodelmethods is deprecated; use Provider.mk_resource_methods"
151
+ mk_resource_methods
152
+ end
153
+
154
+ # Create getter/setter methods for each property our resource type supports.
155
+ # They all get stored in @property_hash. This method is useful
156
+ # for those providers that use prefetch and flush.
157
+ def self.mk_resource_methods
158
+ [resource_type.validproperties, resource_type.parameters].flatten.each do |attr|
133
159
  attr = symbolize(attr)
160
+ next if attr == :name
134
161
  define_method(attr) do
135
162
  @property_hash[attr] || :absent
136
163
  end
@@ -141,16 +168,6 @@ class Puppet::Provider
141
168
  end
142
169
  end
143
170
 
144
- # Add the feature module immediately, so its methods are available to the
145
- # providers.
146
- def self.model=(model)
147
- @model = model
148
- #if mod = model.feature_module
149
- # extend(mod)
150
- # include(mod)
151
- #end
152
- end
153
-
154
171
  self.initvars
155
172
 
156
173
  # Define one or more binaries we'll be using. If a block is passed, yield the name
@@ -178,29 +195,48 @@ class Puppet::Provider
178
195
  end
179
196
  end
180
197
 
198
+ # Retrieve the data source. Defaults to the provider name.
199
+ def self.source
200
+ unless defined? @source
201
+ @source = self.name
202
+ end
203
+ @source
204
+ end
205
+
181
206
  # Check whether this implementation is suitable for our platform.
182
- def self.suitable?
207
+ def self.suitable?(short = true)
183
208
  # A single false result is sufficient to turn the whole thing down.
184
209
  # We don't return 'true' until the very end, though, so that every
185
210
  # confine is tested.
211
+ missing = {}
186
212
  @confines.each do |check, values|
187
213
  case check
188
214
  when :exists:
189
215
  values.each do |value|
190
216
  unless value and FileTest.exists? value
191
217
  debug "Not suitable: missing %s" % value
192
- return false
218
+ return false if short
219
+ missing[:exists] ||= []
220
+ missing[:exists] << value
193
221
  end
194
222
  end
195
223
  when :true:
196
224
  values.each do |v|
197
225
  debug "Not suitable: false value"
198
- return false unless v
226
+ unless v
227
+ return false if short
228
+ missing[:true] ||= 0
229
+ missing[:true] += 1
230
+ end
199
231
  end
200
232
  when :false:
201
233
  values.each do |v|
202
234
  debug "Not suitable: true value"
203
- return false if v
235
+ if v and short
236
+ return false if short
237
+ missing[:false] ||= 0
238
+ missing[:false] += 1
239
+ end
204
240
  end
205
241
  else # Just delegate everything else to facter
206
242
  if result = Facter.value(check)
@@ -211,15 +247,23 @@ class Puppet::Provider
211
247
  end
212
248
  unless found
213
249
  debug "Not suitable: %s not in %s" % [check, values]
214
- return false
250
+ return false if short
251
+ missing[:facter] ||= {}
252
+ missing[:facter][check] = values
215
253
  end
216
254
  else
217
- return false
255
+ return false if short
256
+ missing[:facter] ||= {}
257
+ missing[:facter][check] = values
218
258
  end
219
259
  end
220
260
  end
221
261
 
222
- return true
262
+ if short
263
+ return true
264
+ else
265
+ return missing
266
+ end
223
267
  end
224
268
 
225
269
  # Does this provider support the specified parameter?
@@ -227,8 +271,8 @@ class Puppet::Provider
227
271
  if param.is_a?(Class)
228
272
  klass = param
229
273
  else
230
- unless klass = @model.attrclass(param)
231
- raise Puppet::DevError, "'%s' is not a valid parameter for %s" % [param, @model.name]
274
+ unless klass = resource_type.attrclass(param)
275
+ raise Puppet::DevError, "'%s' is not a valid parameter for %s" % [param, resource_type.name]
232
276
  end
233
277
  end
234
278
  return true unless features = klass.required_features
@@ -242,8 +286,8 @@ class Puppet::Provider
242
286
 
243
287
  def self.to_s
244
288
  unless defined? @str
245
- if self.model
246
- @str = "%s provider %s" % [@model.name, self.name]
289
+ if self.resource_type
290
+ @str = "%s provider %s" % [resource_type.name, self.name]
247
291
  else
248
292
  @str = "unattached provider %s" % [self.name]
249
293
  end
@@ -275,8 +319,9 @@ class Puppet::Provider
275
319
  end
276
320
  end
277
321
 
278
- # Remove the reference to the model, so GC can clean up.
322
+ # Remove the reference to the resource, so GC can clean up.
279
323
  def clear
324
+ @resource = nil
280
325
  @model = nil
281
326
  end
282
327
 
@@ -285,18 +330,44 @@ class Puppet::Provider
285
330
  self.class.command(name)
286
331
  end
287
332
 
288
- def initialize(model)
289
- @model = model
290
- @property_hash = {}
333
+ # Get a parameter value.
334
+ def get(param)
335
+ @property_hash[symbolize(param)] || :absent
336
+ end
337
+
338
+ def initialize(resource = nil)
339
+ if resource.is_a?(Hash)
340
+ @property_hash = resource.dup
341
+ elsif resource
342
+ @resource = resource if resource
343
+ # LAK 2007-05-09: Keep the model stuff around for backward compatibility
344
+ @model = resource
345
+ @property_hash = {}
346
+ else
347
+ @property_hash = {}
348
+ end
291
349
  end
292
350
 
293
351
  def name
294
- @model.name
352
+ if n = @property_hash[:name]
353
+ return n
354
+ elsif self.resource
355
+ resource.name
356
+ else
357
+ raise Puppet::DevError, "No resource and no name in property hash"
358
+ end
359
+ end
360
+
361
+ # Set passed params as the current values.
362
+ def set(params)
363
+ params.each do |param, value|
364
+ @property_hash[symbolize(param)] = value
365
+ end
295
366
  end
296
367
 
297
368
  def to_s
298
- "%s(provider=%s)" % [@model.to_s, self.class.name]
369
+ "%s(provider=%s)" % [@resource.to_s, self.class.name]
299
370
  end
300
371
  end
301
372
 
302
- # $Id: provider.rb 2444 2007-05-01 03:14:09Z luke $
373
+ # $Id: provider.rb 2588 2007-06-15 14:05:10Z luke $
@@ -62,7 +62,7 @@ Puppet::Type.type(:cron).provide(:crontab,
62
62
  if details[:name]
63
63
  str = "# Puppet Name: %s\n" % details[:name]
64
64
  end
65
- if details[:environment] and details[:environment] != :absent
65
+ if details[:environment] and details[:environment] != :absent and details[:environment] != [:absent]
66
66
  details[:environment].each do |env|
67
67
  str += env + "\n"
68
68
  end
@@ -84,10 +84,8 @@ Puppet::Type.type(:cron).provide(:crontab,
84
84
  end
85
85
 
86
86
  # See if we can match the hash against an existing cron job.
87
- def self.match(hash)
88
- model.find_all { |obj|
89
- obj.value(:user) == hash[:user] and obj.value(:command) == hash[:command]
90
- }.each do |obj|
87
+ def self.match(hash, resources)
88
+ resources.each do |name, obj|
91
89
  # we now have a cron job whose command exactly matches
92
90
  # let's see if the other fields match
93
91
 
@@ -152,9 +150,10 @@ Puppet::Type.type(:cron).provide(:crontab,
152
150
  record[:name] = name
153
151
  name = nil
154
152
  end
155
- unless envs.empty?
153
+ if envs.empty?
154
+ record[:environment] = :absent
155
+ else
156
156
  record[:environment] = envs
157
- envs = []
158
157
  end
159
158
  end
160
159
  }.reject { |record| record[:skip] }
@@ -184,4 +183,4 @@ Puppet::Type.type(:cron).provide(:crontab,
184
183
  end
185
184
  end
186
185
 
187
- # $Id: crontab.rb 2440 2007-04-30 19:29:15Z luke $
186
+ # $Id: crontab.rb 2624 2007-06-19 01:49:19Z luke $
@@ -12,18 +12,18 @@ Puppet::Type.type(:group).provide :groupadd, :parent => Puppet::Provider::NameSe
12
12
 
13
13
  def addcmd
14
14
  cmd = [command(:add)]
15
- if gid = @model.should(:gid)
15
+ if gid = @resource.should(:gid)
16
16
  unless gid == :absent
17
17
  cmd << flag(:gid) << gid
18
18
  end
19
19
  end
20
- if @model[:allowdupe] == :true
20
+ if @resource[:allowdupe] == :true
21
21
  cmd << "-o"
22
22
  end
23
- cmd << @model[:name]
23
+ cmd << @resource[:name]
24
24
 
25
25
  return cmd
26
26
  end
27
27
  end
28
28
 
29
- # $Id: groupadd.rb 1979 2006-12-28 08:06:46Z luke $
29
+ # $Id: groupadd.rb 2501 2007-05-09 23:08:42Z luke $
@@ -11,8 +11,8 @@ Puppet::Type.type(:group).provide :pw, :parent => Puppet::Provider::NameService:
11
11
  end
12
12
 
13
13
  def addcmd
14
- cmd = [command(:pw), "groupadd", @model[:name]]
15
- if gid = @model.should(:gid)
14
+ cmd = [command(:pw), "groupadd", @resource[:name]]
15
+ if gid = @resource.should(:gid)
16
16
  unless gid == :absent
17
17
  cmd << flag(:gid) << gid
18
18
  end
@@ -28,4 +28,4 @@ Puppet::Type.type(:group).provide :pw, :parent => Puppet::Provider::NameService:
28
28
  end
29
29
  end
30
30
 
31
- # $Id: pw.rb 1979 2006-12-28 08:06:46Z luke $
31
+ # $Id: pw.rb 2501 2007-05-09 23:08:42Z luke $
@@ -14,15 +14,15 @@ module Puppet::Provider::Mount
14
14
  if self.options and self.options != :absent
15
15
  args << "-o" << self.options
16
16
  end
17
- args << @model[:name]
17
+ args << @resource[:name]
18
18
 
19
19
  mountcmd(*args)
20
20
  end
21
21
 
22
22
  def remount
23
23
  info "Remounting"
24
- if @model[:remounts] == :true
25
- mountcmd "-o", "remount", @model[:name]
24
+ if @resource[:remounts] == :true
25
+ mountcmd "-o", "remount", @resource[:name]
26
26
  else
27
27
  unmount()
28
28
  mount()
@@ -31,7 +31,7 @@ module Puppet::Provider::Mount
31
31
 
32
32
  # This only works when the mount point is synced to the fstab.
33
33
  def unmount
34
- umount @model[:name]
34
+ umount @resource[:name]
35
35
  end
36
36
 
37
37
  # Is the mount currently mounted?
@@ -45,13 +45,13 @@ module Puppet::Provider::Mount
45
45
  execute(df).split("\n").find do |line|
46
46
  fs = line.split(/\s+/)[-1]
47
47
  if platform == "Darwin"
48
- fs == "/private/var/automount" + @model[:name] or
49
- fs == @model[:name]
48
+ fs == "/private/var/automount" + @resource[:name] or
49
+ fs == @resource[:name]
50
50
  else
51
- fs == @model[:name]
51
+ fs == @resource[:name]
52
52
  end
53
53
  end
54
54
  end
55
55
  end
56
56
 
57
- # $Id: mount.rb 2445 2007-05-01 03:45:09Z luke $
57
+ # $Id: mount.rb 2501 2007-05-09 23:08:42Z luke $