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
@@ -0,0 +1,61 @@
1
+ module Puppet::Util
2
+ # The abstract base class for client configuration storage.
3
+ class ConfigStore
4
+ extend Puppet::Util
5
+ extend Puppet::Util::Docs
6
+ extend Puppet::Util::ClassGen
7
+
8
+ @loader = Puppet::Util::Autoload.new(self, "puppet/config_stores")
9
+ @stores = {}
10
+
11
+ # Add a new report type.
12
+ def self.newstore(name, options = {}, &block)
13
+ klass = genclass(name,
14
+ :block => block,
15
+ :prefix => "ConfigStore",
16
+ :hash => @stores,
17
+ :attributes => options
18
+ )
19
+ end
20
+
21
+ # Remove a store; really only used for testing.
22
+ def self.rmstore(name)
23
+ rmclass(name, :hash => @stores)
24
+ end
25
+
26
+ # Load a store.
27
+ def self.store(name)
28
+ name = symbolize(name)
29
+ unless @stores.include? name
30
+ if @loader.load(name)
31
+ unless @stores.include? name
32
+ Puppet.warning(
33
+ "Loaded report file for %s but report was not defined" %
34
+ name
35
+ )
36
+ return nil
37
+ end
38
+ else
39
+ return nil
40
+ end
41
+ end
42
+ @stores[name]
43
+ end
44
+
45
+ # Retrieve the config for a client.
46
+ def get(client)
47
+ raise Puppet::DevError, "%s has not overridden get" % self.class.name
48
+ end
49
+
50
+ # Store the config for a client.
51
+ def store(client, config)
52
+ raise Puppet::DevError, "%s has not overridden store" % self.class.name
53
+ end
54
+
55
+ def collect_exported(client, conditions)
56
+ raise Puppet::DevError, "%s has not overridden collect_exported" % self.class.name
57
+ end
58
+
59
+ end
60
+ end
61
+
@@ -0,0 +1,60 @@
1
+ # Created on 2007-05-02
2
+ # Copyright Luke Kanies
3
+
4
+ module Puppet::Util
5
+ # The abstract base class for client fact storage.
6
+ class FactStore
7
+ extend Puppet::Util
8
+ extend Puppet::Util::Docs
9
+ extend Puppet::Util::ClassGen
10
+
11
+ @loader = Puppet::Util::Autoload.new(self, "puppet/fact_stores")
12
+ @stores = {}
13
+
14
+ # Add a new report type.
15
+ def self.newstore(name, options = {}, &block)
16
+ klass = genclass(name,
17
+ :block => block,
18
+ :prefix => "FactStore",
19
+ :hash => @stores,
20
+ :attributes => options
21
+ )
22
+ end
23
+
24
+ # Remove a store; really only used for testing.
25
+ def self.rmstore(name)
26
+ rmclass(name, :hash => @stores)
27
+ end
28
+
29
+ # Load a store.
30
+ def self.store(name)
31
+ name = symbolize(name)
32
+ unless @stores.include? name
33
+ if @loader.load(name)
34
+ unless @stores.include? name
35
+ Puppet.warning(
36
+ "Loaded report file for %s but report was not defined" %
37
+ name
38
+ )
39
+ return nil
40
+ end
41
+ else
42
+ return nil
43
+ end
44
+ end
45
+ @stores[name]
46
+ end
47
+
48
+ # Retrieve the facts for a node.
49
+ def get(node)
50
+ raise Puppet::DevError, "%s has not overridden get" % self.class.name
51
+ end
52
+
53
+ # Set the facts for a node.
54
+ def set(node, facts)
55
+ raise Puppet::DevError, "%s has not overridden set" % self.class.name
56
+ end
57
+ end
58
+ end
59
+
60
+ # $Id: fact_store.rb 2457 2007-05-03 05:24:13Z luke $
@@ -0,0 +1,74 @@
1
+ require 'puppet/util/autoload'
2
+ require 'puppet/util'
3
+
4
+ # A module that can easily autoload things for us. Uses an instance
5
+ # of Puppet::Util::Autoload
6
+ module Puppet::Util::InstanceLoader
7
+ include Puppet::Util
8
+ # Define a new type of autoloading.
9
+ def autoload(type, path, options = {})
10
+ @autoloaders ||= {}
11
+ @instances ||= {}
12
+ type = symbolize(type)
13
+ @instances[type] = {}
14
+ @autoloaders[type] = Puppet::Util::Autoload.new(self, path, options)
15
+
16
+ # Now define our new simple methods
17
+ unless respond_to?(type)
18
+ meta_def(type) do |name|
19
+ loaded_instance(type, name)
20
+ end
21
+ end
22
+ end
23
+
24
+ # Return a list of the names of all instances
25
+ def loaded_instances(type)
26
+ @instances[type].keys
27
+ end
28
+
29
+ # Collect the docs for all of our instances.
30
+ def instance_docs(type)
31
+ docs = ""
32
+
33
+ # Use this method so they all get loaded
34
+ loaded_instances(type).sort { |a,b| a.to_s <=> b.to_s }.each do |name|
35
+ mod = self.loaded_instance(name)
36
+ docs += "%s\n%s\n" % [name, "-" * name.to_s.length]
37
+
38
+ docs += Puppet::Util::Docs.scrub(mod.doc) + "\n\n"
39
+ end
40
+
41
+ docs
42
+ end
43
+
44
+ # Return the instance hash for our type.
45
+ def instance_hash(type)
46
+ @instances[symbolize(type)]
47
+ end
48
+
49
+ # Return the Autoload object for a given type.
50
+ def instance_loader(type)
51
+ @autoloaders[symbolize(type)]
52
+ end
53
+
54
+ # Retrieve an alread-loaded instance, or attempt to load our instance.
55
+ def loaded_instance(type, name)
56
+ name = symbolize(name)
57
+ instances = instance_hash(type)
58
+ unless instances.include? name
59
+ if instance_loader(type).load(name)
60
+ unless instances.include? name
61
+ Puppet.warning(
62
+ "Loaded %s file for %s but %s was not defined" % [type, name, type]
63
+ )
64
+ return nil
65
+ end
66
+ else
67
+ return nil
68
+ end
69
+ end
70
+ instances[name]
71
+ end
72
+ end
73
+
74
+ # $Id: instance_loader.rb 2476 2007-05-07 18:59:40Z luke $
@@ -12,16 +12,13 @@ module Puppet
12
12
  # have to depend on the granularity of the filesystem.
13
13
  attr_writer :tstamp
14
14
 
15
- Puppet.config.setdefaults(:puppet,
16
- :filetimeout => [ 15,
17
- "The minimum time to wait between checking for updates in
18
- configuration files."
19
- ]
20
- )
21
-
22
15
  # Determine whether the file has changed and thus whether it should
23
16
  # be reparsed.
24
17
  def changed?
18
+ # Allow the timeout to be disabled entirely.
19
+ if Puppet[:filetimeout] < 0
20
+ return true
21
+ end
25
22
  tmp = stamp()
26
23
 
27
24
  # We use a different internal variable than the stamp method
@@ -68,4 +65,4 @@ module Puppet
68
65
  end
69
66
  end
70
67
 
71
- # $Id: loadedfile.rb 2178 2007-02-07 23:56:59Z luke $
68
+ # $Id: loadedfile.rb 2629 2007-06-19 22:18:55Z luke $
@@ -3,23 +3,12 @@ require 'puppet'
3
3
 
4
4
  # A class for handling metrics. This is currently ridiculously hackish.
5
5
  class Puppet::Util::Metric
6
- Puppet.config.setdefaults("metrics",
7
- :rrddir => {:default => "$vardir/rrd",
8
- :owner => "$user",
9
- :group => "$group",
10
- :desc => "The directory where RRD database files are stored.
11
- Directories for each reporting host will be created under
12
- this directory."
13
- },
14
- :rrdgraph => [false, "Whether RRD information should be graphed."],
15
- :rrdinterval => ["$runinterval", "How often RRD should expect data.
16
- This should match how often the hosts report back to the server."]
17
- )
18
6
 
19
7
  # Load the library as a feature, so we can test its presence.
20
- Puppet.features.add :rrd, :libs => 'RRD'
8
+ Puppet.features.add :rrd, :libs => 'RRDtool'
21
9
 
22
10
  attr_accessor :type, :name, :value, :label
11
+ attr_writer :values
23
12
 
24
13
  attr_writer :basedir
25
14
 
@@ -36,12 +25,8 @@ class Puppet::Util::Metric
36
25
 
37
26
  start ||= Time.now.to_i - 5
38
27
 
39
- path = self.path
40
- args = [
41
- path,
42
- "--start", start,
43
- "--step", Puppet[:rrdinterval]
44
- ]
28
+ @rrd = RRDtool.new(self.path)
29
+ args = []
45
30
 
46
31
  values.each { |value|
47
32
  # the 7200 is the heartbeat -- this means that any data that isn't
@@ -51,14 +36,14 @@ class Puppet::Util::Metric
51
36
  args.push "RRA:AVERAGE:0.5:1:300"
52
37
 
53
38
  begin
54
- RRD.create(*args)
39
+ @rrd.create( Puppet[:rrdinterval].to_i, start, args)
55
40
  rescue => detail
56
41
  raise "Could not create RRD file %s: %s" % [path,detail]
57
42
  end
58
43
  end
59
44
 
60
45
  def dump
61
- puts RRD.info(self.path)
46
+ puts @rrd.info
62
47
  end
63
48
 
64
49
  def graph(range = nil)
@@ -68,7 +53,7 @@ class Puppet::Util::Metric
68
53
  end
69
54
 
70
55
  unit = 60 * 60 * 24
71
- colorstack = %w{#ff0000 #00ff00 #0000ff #099000 #000990 #f00990 #0f0f0f}
56
+ colorstack = %w{#00ff00 #ff0000 #0000ff #ffff00 #ff99ff #ff9966 #66ffff #990000 #099000 #000990 #f00990 #0f0f0f #555555 #333333 #ffffff}
72
57
 
73
58
  {:daily => unit, :weekly => unit * 7, :monthly => unit * 30, :yearly => unit * 365}.each do |name, time|
74
59
  file = self.path.sub(/\.rrd$/, "-%s.png" % name)
@@ -97,7 +82,8 @@ class Puppet::Util::Metric
97
82
  end
98
83
 
99
84
  begin
100
- RRD.graph(*args)
85
+ #Puppet.warning "args = #{args}"
86
+ RRDtool.graph( args )
101
87
  rescue => detail
102
88
  Puppet.err "Failed to graph %s: %s" % [self.name,detail]
103
89
  end
@@ -136,14 +122,20 @@ class Puppet::Util::Metric
136
122
  self.create(time - 5)
137
123
  end
138
124
 
125
+ @rrd ||= RRDtool.new(self.path)
126
+
139
127
  # XXX this is not terribly error-resistant
140
128
  args = [time]
129
+ temps = []
141
130
  values.each { |value|
131
+ #Puppet.warning "value[0]: #{value[0]}; value[1]: #{value[1]}; value[2]: #{value[2]}; "
142
132
  args.push value[2]
133
+ temps.push value[0]
143
134
  }
144
135
  arg = args.join(":")
136
+ template = temps.join(":")
145
137
  begin
146
- RRD.update(self.path,arg)
138
+ @rrd.update( template, [ arg ] )
147
139
  #system("rrdtool updatev %s '%s'" % [self.path, arg])
148
140
  rescue => detail
149
141
  raise Puppet::Error, "Failed to update %s: %s" % [self.name,detail]
@@ -157,4 +149,4 @@ end
157
149
 
158
150
  Puppet::Metric = Puppet::Util::Metric
159
151
 
160
- # $Id: metric.rb 2339 2007-03-21 18:32:09Z luke $
152
+ # $Id: metric.rb 2584 2007-06-14 14:23:58Z luke $
@@ -1,8 +1,13 @@
1
1
  # Utility methods for interacting with POSIX objects; mostly user and group
2
2
  module Puppet::Util::POSIX
3
+
3
4
  # Retrieve a field from a POSIX Etc object. The id can be either an integer
4
- # or a name. This only works for users and groups.
5
- def get_posix_field(space, field, id)
5
+ # or a name. This only works for users and groups. It's also broken on
6
+ # some platforms, unfortunately.
7
+ def old_get_posix_field(space, field, id)
8
+ unless id
9
+ raise ArgumentError, "Did not get id"
10
+ end
6
11
  if id =~ /^\d+$/
7
12
  id = Integer(id)
8
13
  end
@@ -24,8 +29,35 @@ module Puppet::Util::POSIX
24
29
  return nil
25
30
  end
26
31
  end
32
+
33
+ # A degenerate method of retrieving name/id mappings. The job of this method is
34
+ # to find a specific entry and then return a given field from that entry.
35
+ def get_posix_field(type, field, id)
36
+ idmethod = idfield(type)
37
+ integer = false
38
+ if id =~ /^\d+$/
39
+ id = Integer(id)
40
+ end
41
+ if id.is_a?(Integer)
42
+ integer = true
43
+ if id > 1000000
44
+ Puppet.err "Tried to get %s field for silly id %s" % [field, id]
45
+ return nil
46
+ end
47
+ end
48
+
49
+ Etc.send(type) do |object|
50
+ if integer and object.send(idmethod) == id
51
+ return object.send(field)
52
+ elsif object.name == id
53
+ return object.send(field)
54
+ end
55
+ end
56
+ return nil
57
+ end
27
58
 
28
59
  # Look in memory for an already-managed type and use its info if available.
60
+ # Currently unused.
29
61
  def get_provider_value(type, field, id)
30
62
  unless typeklass = Puppet::Type.type(type)
31
63
  raise ArgumentError, "Invalid type %s" % type
@@ -37,7 +69,7 @@ module Puppet::Util::POSIX
37
69
  obj = typeklass.find { |obj|
38
70
  if id =~ /^\d+$/
39
71
  obj.should(chkfield).to_s == id ||
40
- obj.is(chkfield).to_s == id
72
+ obj.provider.send(chkfield) == id
41
73
  else
42
74
  obj[:name] == id
43
75
  end
@@ -67,7 +99,7 @@ module Puppet::Util::POSIX
67
99
  def idfield(space)
68
100
  case Puppet::Util.symbolize(space)
69
101
  when :gr, :group: return :gid
70
- when :pw, :user: return :uid
102
+ when :pw, :user, :passwd: return :uid
71
103
  else
72
104
  raise ArgumentError.new("Can only handle users and groups")
73
105
  end
@@ -75,13 +107,13 @@ module Puppet::Util::POSIX
75
107
 
76
108
  # Get the GID of a given group, provided either a GID or a name
77
109
  def gid(group)
78
- get_provider_value(:group, :gid, group) or get_posix_field(:gr, :gid, group)
110
+ get_posix_field(:group, :gid, group)
79
111
  end
80
112
 
81
113
  # Get the UID of a given user, whether a UID or name is provided
82
114
  def uid(user)
83
- get_provider_value(:user, :uid, user) or get_posix_field(:pw, :uid, user)
115
+ get_posix_field(:passwd, :uid, user)
84
116
  end
85
117
  end
86
118
 
87
- # $Id: posix.rb 2052 2007-01-05 17:09:04Z luke $
119
+ # $Id: posix.rb 2598 2007-06-17 23:11:14Z luke $
@@ -100,6 +100,12 @@ module Puppet::Util::ProviderFeatures
100
100
  str
101
101
  end
102
102
 
103
+ # Return a list of features.
104
+ def features
105
+ @features ||= {}
106
+ @features.keys
107
+ end
108
+
103
109
  # Generate a module that sets up the boolean methods to test for given
104
110
  # features.
105
111
  def feature_module
@@ -162,9 +168,11 @@ module Puppet::Util::ProviderFeatures
162
168
  @declared_features << name
163
169
  end
164
170
  end
171
+ # Aaah, grammatical correctness
172
+ @feature_module.send(:alias_method, :has_feature, :has_features)
165
173
  end
166
174
  @feature_module
167
175
  end
168
176
  end
169
177
 
170
- # $Id: provider_features.rb 2413 2007-04-25 20:04:59Z luke $
178
+ # $Id: provider_features.rb 2542 2007-05-30 20:36:29Z mpalmer $
@@ -37,6 +37,21 @@ module Puppet::Util::CollectionMerger
37
37
  send(collection).delete(object)
38
38
  end
39
39
  end
40
+
41
+ def ar_hash_merge(db_hash, mem_hash, args)
42
+ (db_hash.keys | mem_hash.keys).each do |key|
43
+ if (db_hash[key] && mem_hash[key])
44
+ # in both, update value
45
+ args[:modify].call(db_hash[key], mem_hash[key])
46
+ elsif (db_hash[key])
47
+ # in db, not memory, delete from database
48
+ args[:delete].call(db_hash[key])
49
+ else
50
+ # in mem, not in db, insert into the database
51
+ args[:create].call(key, mem_hash[key])
52
+ end
53
+ end
54
+ end
40
55
  end
41
56
 
42
- # $Id: collection_merger.rb 2350 2007-03-24 21:24:29Z luke $
57
+ # $Id: collection_merger.rb 2565 2007-06-12 00:31:16Z ballman $