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,3 @@
1
- require 'puppet/type/parsedtype'
2
-
3
1
  module Puppet
4
2
  # We want the mount to refresh when it changes.
5
3
  newtype(:mount, :self_refresh => true) do
@@ -43,7 +41,8 @@ module Puppet
43
41
 
44
42
  newvalue(:mounted, :event => :mount_mounted) do
45
43
  # Create the mount point if it does not already exist.
46
- if self.is == :absent or self.is.nil?
44
+ current_value = self.retrieve
45
+ if current_value.nil? or current_value == :absent
47
46
  provider.create
48
47
  end
49
48
 
@@ -52,24 +51,26 @@ module Puppet
52
51
  end
53
52
 
54
53
  def retrieve
55
- if provider.mounted?
56
- @is = :mounted
57
- else
58
- @is = super()
59
- end
54
+ return provider.mounted? ? :mounted : super()
60
55
  end
61
56
 
62
57
  def syncothers
63
58
  # We have to flush any changes to disk.
64
- oos = @parent.send(:properties).find_all do |prop|
59
+ currentvalues = @resource.retrieve
60
+ oos = @resource.send(:properties).find_all do |prop|
61
+ unless currentvalues.include?(prop)
62
+ raise Puppet::DevError,
63
+ "Parent has property %s but it doesn't appear in the current vallues",
64
+ [prop.name]
65
+ end
65
66
  if prop.name == :ensure
66
67
  false
67
68
  else
68
- ! prop.insync?
69
+ ! prop.insync?(currentvalues[prop])
69
70
  end
70
71
  end.each { |prop| prop.sync }.length
71
72
  if oos > 0
72
- @parent.flush
73
+ @resource.flush
73
74
  end
74
75
  end
75
76
  end
@@ -90,7 +91,7 @@ module Puppet
90
91
  # Default to the device but with "dsk" replaced with "rdsk".
91
92
  defaultto do
92
93
  if Facter["operatingsystem"].value == "Solaris"
93
- device = @parent.value(:device)
94
+ device = @resource.value(:device)
94
95
  if device =~ %r{/dsk/}
95
96
  device.sub(%r{/dsk/}, "/rdsk/")
96
97
  else
@@ -114,6 +115,12 @@ module Puppet
114
115
 
115
116
  newproperty(:pass) do
116
117
  desc "The pass in which the mount is checked."
118
+
119
+ defaultto {
120
+ if @resource.managed?
121
+ 0
122
+ end
123
+ }
117
124
  end
118
125
 
119
126
  newproperty(:atboot) do
@@ -124,14 +131,20 @@ module Puppet
124
131
  newproperty(:dump) do
125
132
  desc "Whether to dump the mount. Not all platforms
126
133
  support this."
134
+
135
+ defaultto {
136
+ if @resource.managed?
137
+ 0
138
+ end
139
+ }
127
140
  end
128
141
 
129
142
  newproperty(:target) do
130
143
  desc "The file in which to store the mount table. Only used by
131
144
  those providers that write to disk (i.e., not NetInfo)."
132
145
 
133
- defaultto { if @parent.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
134
- @parent.class.defaultprovider.default_target
146
+ defaultto { if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
147
+ @resource.class.defaultprovider.default_target
135
148
  else
136
149
  nil
137
150
  end
@@ -149,7 +162,7 @@ module Puppet
149
162
 
150
163
  def value=(value)
151
164
  warning "'path' is deprecated for mounts. Please use 'name'."
152
- @parent[:name] = value
165
+ @resource[:name] = value
153
166
  super
154
167
  end
155
168
  end
@@ -162,7 +175,7 @@ module Puppet
162
175
  newvalues(:true, :false)
163
176
  defaultto do
164
177
  case Facter.value(:operatingsystem)
165
- when "Darwin", "FreeBSD": false
178
+ when "FreeBSD": false
166
179
  else
167
180
  true
168
181
  end
@@ -186,4 +199,4 @@ module Puppet
186
199
  end
187
200
  end
188
201
 
189
- # $Id: mount.rb 2183 2007-02-11 23:50:15Z luke $
202
+ # $Id: mount.rb 2563 2007-06-11 22:30:00Z luke $
@@ -9,11 +9,11 @@ module Puppet
9
9
  newproperty(:message) do
10
10
  desc "The message to be sent to the log."
11
11
  def sync
12
- case @parent["withpath"]
12
+ case @resource["withpath"]
13
13
  when :true:
14
- log(self.should)
14
+ send(@resource[:loglevel], self.should)
15
15
  else
16
- Puppet.send(@parent[:loglevel], self.should)
16
+ Puppet.send(@resource[:loglevel], self.should)
17
17
  end
18
18
  return
19
19
  end
@@ -22,16 +22,15 @@ module Puppet
22
22
  return
23
23
  end
24
24
 
25
- def insync?
25
+ def insync?(is)
26
26
  false
27
27
  end
28
28
 
29
- defaultto { @parent[:name] }
29
+ defaultto { @resource[:name] }
30
30
  end
31
31
 
32
32
  newparam(:withpath) do
33
- desc "Whether to not to show the full object path. Sends the
34
- message at the current loglevel."
33
+ desc "Whether to not to show the full object path."
35
34
  defaultto :false
36
35
 
37
36
  newvalues(:true, :false)
@@ -44,4 +43,4 @@ module Puppet
44
43
  end
45
44
  end
46
45
 
47
- # $Id: notify.rb 2317 2007-03-19 17:42:17Z luke $
46
+ # $Id: notify.rb 2525 2007-05-18 03:34:37Z luke $
@@ -34,6 +34,10 @@ module Puppet
34
34
  existing configuration files. This feature is thus destructive
35
35
  and should be used with the utmost care.",
36
36
  :methods => [:purge]
37
+ feature :versionable, "The provider is capable of interrogating the
38
+ package database for installed version(s), and can select
39
+ which out of a set of available versions of a package to
40
+ install if asked."
37
41
 
38
42
  ensurable do
39
43
  desc "What state the package should be in.
@@ -59,7 +63,7 @@ module Puppet
59
63
  unless provider.purgeable?
60
64
  self.fail(
61
65
  "Package provider %s does not purging" %
62
- @parent[:provider]
66
+ @resource[:provider]
63
67
  )
64
68
  end
65
69
  provider.purge
@@ -72,14 +76,14 @@ module Puppet
72
76
  unless provider.upgradeable?
73
77
  self.fail(
74
78
  "Package provider %s does not support specifying 'latest'" %
75
- @parent[:provider]
79
+ @resource[:provider]
76
80
  )
77
81
  end
78
82
 
79
83
  # Because yum always exits with a 0 exit code, there's a retrieve
80
84
  # in the "install" method. So, check the current state now,
81
85
  # to compare against later.
82
- current = self.is
86
+ current = self.retrieve
83
87
  begin
84
88
  provider.update
85
89
  rescue => detail
@@ -94,10 +98,10 @@ module Puppet
94
98
  end
95
99
 
96
100
  newvalue(/./) do
97
- unless provider.versionable?
101
+ unless provider.class.versionable?
98
102
  self.fail(
99
103
  "Package provider %s does not support specifying versions" %
100
- @parent[:provider]
104
+ @resource[:provider]
101
105
  )
102
106
  end
103
107
  begin
@@ -106,7 +110,7 @@ module Puppet
106
110
  self.fail "Could not update: %s" % detail
107
111
  end
108
112
 
109
- if self.is == :absent
113
+ if self.retrieve == :absent
110
114
  :package_installed
111
115
  else
112
116
  :package_changed
@@ -118,7 +122,7 @@ module Puppet
118
122
 
119
123
  # Override the parent method, because we've got all kinds of
120
124
  # funky definitions of 'in sync'.
121
- def insync?
125
+ def insync?(is)
122
126
  @should ||= []
123
127
 
124
128
  @latest = nil unless defined? @latest
@@ -128,19 +132,19 @@ module Puppet
128
132
  @should.each { |should|
129
133
  case should
130
134
  when :present
131
- unless @is == :absent
135
+ unless is == :absent
132
136
  return true
133
137
  end
134
138
  when :latest
135
139
  # Short-circuit packages that are not present
136
- if @is == :absent
140
+ if is == :absent
137
141
  return false
138
142
  end
139
143
 
140
144
  unless provider.respond_to?(:latest)
141
145
  self.fail(
142
146
  "Package type %s does not support specifying 'latest'" %
143
- @parent[:provider]
147
+ @resource[:provider]
144
148
  )
145
149
  end
146
150
 
@@ -152,11 +156,13 @@ module Puppet
152
156
  @latest = provider.latest
153
157
  @lateststamp = Time.now.to_i
154
158
  rescue => detail
155
- self.fail "Could not get latest version: %s" % detail
159
+ error = Puppet::Error.new("Could not get latest version: %s" % detail.to_s)
160
+ error.set_backtrace(detail.backtrace)
161
+ raise error
156
162
  end
157
163
  end
158
164
 
159
- case @is
165
+ case is
160
166
  when @latest:
161
167
  return true
162
168
  when :present:
@@ -164,14 +170,14 @@ module Puppet
164
170
  # that can't query versions.
165
171
  return true
166
172
  else
167
- self.debug "@is is %s, latest %s is %s" %
168
- [@is.inspect, @parent.name, @latest.inspect]
173
+ self.debug "is is %s, latest %s is %s" %
174
+ [is.inspect, @resource.name, @latest.inspect]
169
175
  end
170
176
  when :absent
171
- if @is == :absent
177
+ if is == :absent or is == :purged
172
178
  return true
173
179
  end
174
- when @is
180
+ when is
175
181
  return true
176
182
  end
177
183
  }
@@ -181,15 +187,15 @@ module Puppet
181
187
 
182
188
  # This retrieves the current state. LAK: I think this method is unused.
183
189
  def retrieve
184
- @is = @parent.retrieve
190
+ return @resource.retrieve
185
191
  end
186
192
 
187
193
  # Provide a bit more information when logging upgrades.
188
- def should_to_s
194
+ def should_to_s(newvalue = @should)
189
195
  if @latest
190
196
  @latest.to_s
191
197
  else
192
- super
198
+ super(newvalue)
193
199
  end
194
200
  end
195
201
  end
@@ -258,9 +264,9 @@ module Puppet
258
264
 
259
265
  munge do |value|
260
266
  warning "'type' is deprecated; use 'provider' instead"
261
- @parent[:provider] = value
267
+ @resource[:provider] = value
262
268
 
263
- @parent[:provider]
269
+ @resource[:provider]
264
270
  end
265
271
  end
266
272
 
@@ -355,23 +361,6 @@ module Puppet
355
361
  return object
356
362
  end
357
363
 
358
- # List all package instances
359
- def self.list
360
- # XXX For now, just list the default provider, but we should list
361
- # all suitables or something, but we need to not list a parent
362
- # type if a child type gets listed.
363
- #suitableprovider.each do |provider|
364
- # p provider.name
365
- # provider.list
366
- #end
367
-
368
- defaultprovider.list
369
-
370
- self.collect do |pkg|
371
- pkg
372
- end
373
- end
374
-
375
364
  # Iterate across all packages of a given type and mark them absent
376
365
  # if they are not in the list
377
366
  def self.markabsent(pkgtype, packages)
@@ -379,7 +368,7 @@ module Puppet
379
368
  self.each do |pkg|
380
369
  next unless packages[:provider] == pkgtype
381
370
  unless packages.include? pkg
382
- pkg.is = [:ensure, :absent]
371
+ pkg.provider.send(:ensure, :absent)
383
372
  end
384
373
  end
385
374
  end
@@ -394,70 +383,45 @@ module Puppet
394
383
  # The 'query' method returns a hash of info if the package
395
384
  # exists and returns nil if it does not.
396
385
  def exists?
397
- @provider.query
386
+ @provider.get(:ensure) != :absent
398
387
  end
399
388
 
400
389
  # okay, there are two ways that a package could be created...
401
390
  # either through the language, in which case the hash's values should
402
391
  # be set in 'should', or through comparing against the system, in which
403
392
  # case the hash's values should be set in 'is'
404
- def initialize(hash)
393
+ def initialize(params)
405
394
  self.initvars
406
- type = nil
395
+ provider = nil
407
396
  [:provider, "use"].each { |label|
408
- if hash.include?(label)
409
- type = hash[label]
410
- hash.delete(label)
397
+ if params.include?(label)
398
+ provider = params[label]
399
+ params.delete(label)
411
400
  end
412
401
  }
413
- if type
414
- self[:provider] = type
402
+ if provider
403
+ self[:provider] = provider
415
404
  else
416
405
  self.setdefaults(:provider)
417
406
  end
418
407
 
419
- super
408
+ super(params)
420
409
 
421
410
  unless @parameters.include?(:provider)
422
- raise Puppet::DevError, "No package type set"
411
+ raise Puppet::DevError, "No package provider set"
423
412
  end
424
413
  end
425
414
 
426
415
  def retrieve
427
- # If the package is installed, then retrieve all of the information
428
- # about it and set it appropriately.
429
- if hash = @provider.query
430
- if hash == :listed # Mmmm, hackalicious
431
- return
416
+ @provider.properties.inject({}) do |props, ary|
417
+ name, value = ary
418
+ if prop = @parameters[name]
419
+ props[prop] = value
432
420
  end
433
- hash.each { |param, value|
434
- unless self.class.validattr?(param)
435
- hash.delete(param)
436
- end
437
- }
438
-
439
- setparams(hash)
440
- else
441
- # Else just mark all of the properties absent.
442
- self.class.validproperties.each { |name|
443
- self.is = [name, :absent]
444
- }
421
+ props
445
422
  end
446
423
  end
447
-
448
- # Set all of the params' "is" value. Most are parameters, but some
449
- # are properties.
450
- def setparams(hash)
451
- # Everything on packages is a parameter except :ensure
452
- hash.each { |param, value|
453
- if self.class.attrtype(param) == :property
454
- self.is = [param, value]
455
- else
456
- self[param] = value
457
- end
458
- }
459
- end
460
424
  end # Puppet.type(:package)
461
425
  end
462
426
 
463
- # $Id: package.rb 2430 2007-04-30 15:19:23Z luke $
427
+ # $Id: package.rb 2620 2007-06-18 21:55:05Z luke $
@@ -96,16 +96,16 @@ module Puppet
96
96
  # we have to do it after all of the objects
97
97
  # have been instantiated.
98
98
  if bucketobj = Puppet::Type.type(:filebucket)[value]
99
- @parent.bucket = bucketobj.bucket
99
+ @resource.bucket = bucketobj.bucket
100
100
  bucketobj.title
101
101
  else
102
102
  # Set it to the string; finish() turns it into a
103
103
  # filebucket.
104
- @parent.bucket = value
104
+ @resource.bucket = value
105
105
  value
106
106
  end
107
107
  when Puppet::Network::Client.client(:Dipper):
108
- @parent.bucket = value
108
+ @resource.bucket = value
109
109
  value.name
110
110
  else
111
111
  self.fail "Invalid backup type %s" %
@@ -259,7 +259,7 @@ module Puppet
259
259
  end
260
260
 
261
261
  # List files, but only one level deep.
262
- def self.list(base = "/")
262
+ def self.instances(base = "/")
263
263
  unless FileTest.directory?(base)
264
264
  return []
265
265
  end
@@ -823,22 +823,21 @@ module Puppet
823
823
  def retrieve
824
824
  unless stat = self.stat(true)
825
825
  self.debug "File does not exist"
826
- properties().each { |property|
827
- property.is = :absent
828
- }
829
-
830
826
  # If the file doesn't exist but we have a source, then call
831
827
  # retrieve on that property
828
+
829
+ propertyvalues = properties().inject({}) { |hash, property|
830
+ hash[property] = :absent
831
+ hash
832
+ }
833
+
832
834
  if @parameters.include?(:source)
833
- @parameters[:source].retrieve
835
+ propertyvalues[:source] = @parameters[:source].retrieve
834
836
  end
835
-
836
- return
837
+ return propertyvalues
837
838
  end
838
839
 
839
- properties().each { |property|
840
- property.retrieve
841
- }
840
+ return currentpropvalues()
842
841
  end
843
842
 
844
843
  # This recurses against the remote source and makes sure the local
@@ -929,8 +928,8 @@ module Puppet
929
928
  else
930
929
  # If they didn't pass in a sum, then tell checksum to
931
930
  # figure it out.
932
- @parameters[:checksum].retrieve
933
- @parameters[:checksum].checksum = @parameters[:checksum].is
931
+ currentvalue = @parameters[:checksum].retrieve
932
+ @parameters[:checksum].checksum = currentvalue
934
933
  end
935
934
  end
936
935
  end
@@ -969,7 +968,7 @@ module Puppet
969
968
  # We have to hack this just a little bit, because otherwise we'll get
970
969
  # an error when the target and the contents are created as properties on
971
970
  # the far side.
972
- def to_trans
971
+ def to_trans(retrieve = true)
973
972
  obj = super
974
973
  if obj[:target] == :notlink
975
974
  obj.delete(:target)
@@ -977,6 +976,18 @@ module Puppet
977
976
  obj
978
977
  end
979
978
 
979
+ def localfileserver
980
+ unless defined? @@localfileserver
981
+ args = {
982
+ :Local => true,
983
+ :Mount => { "/" => "localhost" },
984
+ :Config => false
985
+ }
986
+ @@localfileserver = Puppet::Network::Handler.handler(:fileserver).new(args)
987
+ end
988
+ @@localfileserver
989
+ end
990
+
980
991
  def uri2obj(source)
981
992
  sourceobj = FileSource.new
982
993
  path = nil
@@ -997,25 +1008,24 @@ module Puppet
997
1008
 
998
1009
  case uri.scheme
999
1010
  when "file":
1000
- unless defined? @@localfileserver
1001
- @@localfileserver = Puppet::Network::Handler.handler(:fileserver).new(
1002
- :Local => true,
1003
- :Mount => { "/" => "localhost" },
1004
- :Config => false
1005
- )
1006
- #@@localfileserver.mount("/", "localhost")
1007
- end
1008
- sourceobj.server = @@localfileserver
1011
+ sourceobj.server = localfileserver
1009
1012
  path = "/localhost" + uri.path
1010
1013
  when "puppet":
1011
- args = { :Server => uri.host }
1012
- if uri.port
1013
- args[:Port] = uri.port
1014
- end
1015
- # FIXME We should cache a copy of this server
1016
- #sourceobj.server = Puppet::Network::NetworkClient.new(args)
1014
+ # FIXME: We should cache clients by uri.host + uri.port
1015
+ # not by the full source path
1017
1016
  unless @clients.include?(source)
1018
- @clients[source] = Puppet::Network::Client.file.new(args)
1017
+ host = uri.host
1018
+ host ||= Puppet[:server] unless Puppet[:name] == "puppet"
1019
+ if host.nil?
1020
+ server = localfileserver
1021
+ else
1022
+ args = { :Server => host }
1023
+ if uri.port
1024
+ args[:Port] = uri.port
1025
+ end
1026
+ server = Puppet::Network::Client.file.new(args)
1027
+ end
1028
+ @clients[source] = server
1019
1029
  end
1020
1030
  sourceobj.server = @clients[source]
1021
1031
 
@@ -1028,7 +1038,7 @@ module Puppet
1028
1038
  self.fail "Invalid source path %s" % tmp
1029
1039
  end
1030
1040
  else
1031
- self.fail "Got other recursive file proto %s from %s" %
1041
+ self.fail "Got other URL type '%s' from %s" %
1032
1042
  [uri.scheme, source]
1033
1043
  end
1034
1044
 
@@ -1118,7 +1128,7 @@ module Puppet
1118
1128
 
1119
1129
  # Override the parent method, because we don't want to generate changes
1120
1130
  # when the file is missing and there is no 'ensure' state.
1121
- def propertychanges
1131
+ def propertychanges(currentvalues)
1122
1132
  unless self.stat
1123
1133
  found = false
1124
1134
  ([:ensure] + CREATORS).each do |prop|
@@ -1137,14 +1147,13 @@ module Puppet
1137
1147
  # There are some cases where all of the work does not get done on
1138
1148
  # file creation/modification, so we have to do some extra checking.
1139
1149
  def property_fix
1140
- self.each do |thing|
1141
- next unless thing.is_a? Puppet::Property
1150
+ properties.each do |thing|
1142
1151
  next unless [:mode, :owner, :group].include?(thing.name)
1143
1152
 
1144
1153
  # Make sure we get a new stat objct
1145
1154
  self.stat(true)
1146
- thing.retrieve
1147
- unless thing.insync?
1155
+ currentvalue = thing.retrieve
1156
+ unless thing.insync?(currentvalue)
1148
1157
  thing.sync
1149
1158
  end
1150
1159
  end
@@ -1159,7 +1168,7 @@ module Puppet
1159
1168
 
1160
1169
  # We put all of the properties in separate files, because there are so many
1161
1170
  # of them. The order these are loaded is important, because it determines
1162
- # the order they are in the property list.
1171
+ # the order they are in the property lit.
1163
1172
  require 'puppet/type/pfile/checksum'
1164
1173
  require 'puppet/type/pfile/content' # can create the file
1165
1174
  require 'puppet/type/pfile/source' # can create the file
@@ -1170,4 +1179,4 @@ module Puppet
1170
1179
  require 'puppet/type/pfile/mode'
1171
1180
  require 'puppet/type/pfile/type'
1172
1181
  end
1173
- # $Id: pfile.rb 2436 2007-04-30 17:29:02Z luke $
1182
+ # $Id: pfile.rb 2610 2007-06-18 19:29:56Z lutter $