puppet 0.23.0 → 0.23.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (125) hide show
  1. data/CHANGELOG +58 -0
  2. data/Rakefile +1 -1
  3. data/bin/filebucket +6 -6
  4. data/bin/puppetca +11 -1
  5. data/bin/puppetmasterd +7 -6
  6. data/conf/redhat/client.init +1 -0
  7. data/conf/redhat/{puppetd.conf → puppet.conf} +1 -1
  8. data/conf/redhat/puppet.spec +43 -31
  9. data/conf/redhat/server.init +1 -0
  10. data/lib/puppet.rb +3 -3
  11. data/lib/puppet/configuration.rb +16 -5
  12. data/lib/puppet/metatype/attributes.rb +12 -19
  13. data/lib/puppet/metatype/evaluation.rb +10 -1
  14. data/lib/puppet/metatype/instances.rb +39 -15
  15. data/lib/puppet/metatype/manager.rb +1 -28
  16. data/lib/puppet/metatype/metaparams.rb +20 -16
  17. data/lib/puppet/metatype/providers.rb +8 -2
  18. data/lib/puppet/metatype/schedules.rb +14 -19
  19. data/lib/puppet/{modules.rb → module.rb} +2 -0
  20. data/lib/puppet/network/authstore.rb +5 -1
  21. data/lib/puppet/network/client/dipper.rb +2 -2
  22. data/lib/puppet/network/client/master.rb +18 -9
  23. data/lib/puppet/network/handler/fileserver.rb +3 -6
  24. data/lib/puppet/network/handler/report.rb +2 -1
  25. data/lib/puppet/network/server/mongrel.rb +4 -2
  26. data/lib/puppet/network/xmlrpc/client.rb +10 -3
  27. data/lib/puppet/parameter.rb +11 -4
  28. data/lib/puppet/parser/ast/collexpr.rb +10 -10
  29. data/lib/puppet/parser/ast/hostclass.rb +2 -2
  30. data/lib/puppet/parser/ast/resourceparam.rb +4 -3
  31. data/lib/puppet/parser/ast/resourceref.rb +16 -2
  32. data/lib/puppet/parser/collector.rb +8 -4
  33. data/lib/puppet/parser/functions.rb +5 -2
  34. data/lib/puppet/parser/interpreter.rb +48 -9
  35. data/lib/puppet/parser/lexer.rb +2 -1
  36. data/lib/puppet/parser/parser.rb +669 -589
  37. data/lib/puppet/parser/resource.rb +20 -11
  38. data/lib/puppet/parser/resource/param.rb +21 -10
  39. data/lib/puppet/parser/resource/reference.rb +2 -2
  40. data/lib/puppet/parser/scope.rb +22 -10
  41. data/lib/puppet/{type/property.rb → property.rb} +48 -15
  42. data/lib/puppet/propertychange.rb +3 -3
  43. data/lib/puppet/provider/cron/crontab.rb +38 -36
  44. data/lib/puppet/provider/host/netinfo.rb +1 -2
  45. data/lib/puppet/provider/mailalias/aliases.rb +31 -0
  46. data/lib/puppet/provider/maillist/mailman.rb +113 -0
  47. data/lib/puppet/provider/mount.rb +5 -11
  48. data/lib/puppet/provider/mount/parsed.rb +2 -2
  49. data/lib/puppet/provider/package/appdmg.rb +1 -2
  50. data/lib/puppet/provider/package/apt.rb +3 -1
  51. data/lib/puppet/provider/package/aptrpm.rb +14 -4
  52. data/lib/puppet/provider/package/blastwave.rb +6 -4
  53. data/lib/puppet/provider/package/dpkg.rb +12 -4
  54. data/lib/puppet/provider/package/pkgdmg.rb +2 -2
  55. data/lib/puppet/provider/package/rpm.rb +11 -1
  56. data/lib/puppet/provider/package/rug.rb +1 -0
  57. data/lib/puppet/provider/package/urpmi.rb +11 -1
  58. data/lib/puppet/provider/package/yum.rb +12 -2
  59. data/lib/puppet/provider/parsedfile.rb +36 -6
  60. data/lib/puppet/rails.rb +9 -2
  61. data/lib/puppet/rails/param_name.rb +2 -3
  62. data/lib/puppet/rails/param_value.rb +20 -1
  63. data/lib/puppet/rails/resource.rb +8 -2
  64. data/lib/puppet/reference/configuration.rb +14 -16
  65. data/lib/puppet/reference/type.rb +4 -4
  66. data/lib/puppet/transaction.rb +4 -4
  67. data/lib/puppet/type.rb +19 -6
  68. data/lib/puppet/type/component.rb +9 -3
  69. data/lib/puppet/type/cron.rb +10 -4
  70. data/lib/puppet/type/exec.rb +9 -5
  71. data/lib/puppet/type/group.rb +2 -3
  72. data/lib/puppet/type/mailalias.rb +50 -0
  73. data/lib/puppet/type/maillist.rb +57 -0
  74. data/lib/puppet/type/mount.rb +25 -11
  75. data/lib/puppet/type/package.rb +6 -27
  76. data/lib/puppet/type/pfile.rb +5 -6
  77. data/lib/puppet/type/pfile/source.rb +8 -2
  78. data/lib/puppet/type/pfilebucket.rb +4 -3
  79. data/lib/puppet/type/resources.rb +1 -3
  80. data/lib/puppet/type/schedule.rb +16 -16
  81. data/lib/puppet/type/service.rb +4 -1
  82. data/lib/puppet/type/tidy.rb +1 -2
  83. data/lib/puppet/type/user.rb +2 -3
  84. data/lib/puppet/type/yumrepo.rb +2 -2
  85. data/lib/puppet/util.rb +29 -4
  86. data/lib/puppet/util/autoload.rb +45 -16
  87. data/lib/puppet/util/fileparsing.rb +23 -6
  88. data/lib/puppet/util/filetype.rb +12 -1
  89. data/lib/puppet/util/log.rb +2 -2
  90. data/lib/puppet/util/log_paths.rb +16 -0
  91. data/lib/puppet/util/reference.rb +2 -2
  92. data/test/language/ast/hostclass.rb +21 -4
  93. data/test/language/ast/resourceref.rb +95 -0
  94. data/test/language/functions.rb +5 -5
  95. data/test/language/interpreter.rb +129 -1
  96. data/test/language/node.rb +13 -2
  97. data/test/language/resource.rb +26 -1
  98. data/test/language/scope.rb +25 -5
  99. data/test/lib/puppettest/support/collection.rb +2 -2
  100. data/test/network/client/master.rb +28 -42
  101. data/test/network/server/mongrel_test.rb +7 -1
  102. data/test/other/propertychange.rb +2 -2
  103. data/test/other/transactions.rb +44 -5
  104. data/test/puppet/modules.rb +2 -1
  105. data/test/rails/ast.rb +7 -8
  106. data/test/rails/collection.rb +2 -2
  107. data/test/rails/railsresource.rb +21 -5
  108. data/test/ral/manager/attributes.rb +33 -1
  109. data/test/ral/manager/instances.rb +33 -6
  110. data/test/ral/manager/type.rb +29 -49
  111. data/test/ral/providers/cron/crontab.rb +61 -13
  112. data/test/ral/providers/mailalias/aliases.rb +57 -0
  113. data/test/ral/providers/mount/parsed.rb +4 -4
  114. data/test/ral/providers/package/apt.rb +13 -1
  115. data/test/ral/providers/parsedfile.rb +20 -7
  116. data/test/ral/types/cron.rb +17 -1
  117. data/test/ral/types/mailalias.rb +50 -0
  118. data/test/ral/types/mount.rb +35 -2
  119. data/test/ral/types/package.rb +10 -2
  120. data/test/ral/types/parameter.rb +4 -4
  121. data/test/ral/types/property.rb +39 -1
  122. data/test/util/autoload.rb +33 -18
  123. data/test/util/filetype.rb +49 -3
  124. metadata +13 -6
  125. data/lib/puppet/element.rb +0 -52
@@ -1,7 +1,6 @@
1
1
  # Manage NetInfo POSIX objects. Probably only used on OS X, but I suppose
2
2
  # it could be used elsewhere.
3
3
  require 'puppet/provider/nameservice/netinfo'
4
- require 'puppet/provider/host/netinfo'
5
4
 
6
5
  Puppet::Type.type(:host).provide :netinfo, :parent => Puppet::Provider::NameService::NetInfo,
7
6
  :netinfodir => "machines" do
@@ -15,4 +14,4 @@ Puppet::Type.type(:host).provide :netinfo, :parent => Puppet::Provider::NameServ
15
14
  defaultfor :operatingsystem => :darwin
16
15
  end
17
16
 
18
- # $Id: netinfo.rb 1865 2006-11-13 04:20:57Z luke $
17
+ # $Id: netinfo.rb 2714 2007-07-19 18:12:20Z luke $
@@ -0,0 +1,31 @@
1
+ require 'puppet/provider/parsedfile'
2
+
3
+ Puppet::Type.type(:mailalias).provide(:aliases,
4
+ :parent => Puppet::Provider::ParsedFile,
5
+ :default_target => "/etc/aliases",
6
+ :filetype => :flat
7
+ ) do
8
+ text_line :comment, :match => /^#/
9
+ text_line :blank, :match => /^\s*$/
10
+
11
+ record_line :aliases, :fields => %w{name recipient}, :separator => /\s*:\s*/, :block_eval => :instance do
12
+ def post_parse(record)
13
+ record[:recipient] = record[:recipient].split(/\s*,\s*/).collect { |d| d.gsub(/^['"]|['"]$/, '') }
14
+ record
15
+ end
16
+
17
+ def to_line(record)
18
+ dest = record[:recipient].collect do |d|
19
+ # Quote aliases that have non-alpha chars
20
+ if d =~ /[^-\w@.]/
21
+ '"%s"' % d
22
+ else
23
+ d
24
+ end
25
+ end.join(",")
26
+ return "%s: %s" % [record[:name], dest]
27
+ end
28
+ end
29
+ end
30
+
31
+ # $Id: aliases.rb 2676 2007-07-10 23:24:34Z luke $
@@ -0,0 +1,113 @@
1
+ require 'puppet/provider/parsedfile'
2
+
3
+ Puppet::Type.type(:maillist).provide(:mailman) do
4
+ commands :list_lists => "list_lists", :rmlist => "rmlist", :newlist => "newlist"
5
+
6
+ # This probably won't work for non-Debian installs, but this path is sure not to be in the PATH.
7
+ commands :mailman => "/var/lib/mailman/mail/mailman"
8
+
9
+ mk_resource_methods
10
+
11
+ # Return a list of existing mailman instances.
12
+ def self.instances
13
+ list_lists.split("\n").reject { |line| line.include?("matching mailing lists") }.collect do |line|
14
+ name, description = line.sub(/^\s+/, '').sub(/\s+$/, '').split(/\s+-\s+/)
15
+ if description.include?("no description available")
16
+ description = :absent
17
+ end
18
+ new(:ensure => :present, :name => name, :description => description)
19
+ end
20
+ end
21
+
22
+ # Prefetch our list list, yo.
23
+ def self.prefetch(lists)
24
+ instances.each do |prov|
25
+ if list = lists[prov.name] || lists[prov.name.downcase]
26
+ list.provider = prov
27
+ end
28
+ end
29
+ end
30
+
31
+ def aliases
32
+ mailman = self.class.command(:mailman)
33
+ name = self.name.downcase
34
+ aliases = {name => "| #{mailman} post #{name}"}
35
+ %w{admin bounces confirm join leave owner request subscribe unsubscribe}.each do |address|
36
+ aliases["%s-%s" % [name, address]] = "| %s %s %s" % [mailman, address, name]
37
+ end
38
+ aliases
39
+ end
40
+
41
+ # Create the list.
42
+ def create
43
+ args = []
44
+ if val = @resource[:mailserver]
45
+ args << "--emailhost" << val
46
+ end
47
+ if val = @resource[:webserver]
48
+ args << "--urlhost" << val
49
+ end
50
+
51
+ args << self.name
52
+ if val = @resource[:admin]
53
+ args << val
54
+ else
55
+ raise ArgumentError, "Mailman lists require an administrator email address"
56
+ end
57
+ if val = @resource[:password]
58
+ args << val
59
+ else
60
+ raise ArgumentError, "Mailman lists require an administrator password"
61
+ end
62
+ newlist(*args)
63
+ end
64
+
65
+ # Delete the list.
66
+ def delete(purge = false)
67
+ args = []
68
+ if purge
69
+ args << "--archives"
70
+ end
71
+ args << self.name
72
+ rmlist(*args)
73
+ end
74
+
75
+ # Does our list exist already?
76
+ def exists?
77
+ properties[:ensure] != :absent
78
+ end
79
+
80
+ # Clear out the cached values.
81
+ def flush
82
+ @property_hash.clear
83
+ end
84
+
85
+ # Look up the current status.
86
+ def properties
87
+ if @property_hash.empty?
88
+ @property_hash = query || {:ensure => :absent}
89
+ if @property_hash.empty?
90
+ @property_hash[:ensure] = :absent
91
+ end
92
+ end
93
+ @property_hash.dup
94
+ end
95
+
96
+ # Remove the list and its archives.
97
+ def purge
98
+ delete(true)
99
+ end
100
+
101
+ # Pull the current state of the list from the full list. We're
102
+ # getting some double entendre here....
103
+ def query
104
+ provider.class.instances.each do |list|
105
+ if list.name == self.name or list.name.downcase == self.name
106
+ return list.property_hash
107
+ end
108
+ end
109
+ nil
110
+ end
111
+ end
112
+
113
+ # $Id: mailman.rb 2719 2007-07-20 03:24:04Z luke $
@@ -37,21 +37,15 @@ module Puppet::Provider::Mount
37
37
  # Is the mount currently mounted?
38
38
  def mounted?
39
39
  platform = Facter["operatingsystem"].value
40
- df = [command(:df)]
41
- case Facter["operatingsystem"].value
42
- # Solaris's df prints in a very weird format
43
- when "Solaris": df << "-k"
44
- end
45
- execute(df).split("\n").find do |line|
46
- fs = line.split(/\s+/)[-1]
40
+ name = @resource[:name]
41
+ mounts = mountcmd.split("\n").find do |line|
47
42
  if platform == "Darwin"
48
- fs == "/private/var/automount" + @resource[:name] or
49
- fs == @resource[:name]
43
+ line =~ / on #{name} / or line =~ %r{ on /private/var/automount#{name}}
50
44
  else
51
- fs == @resource[:name]
45
+ line =~ / on #{name} /
52
46
  end
53
47
  end
54
48
  end
55
49
  end
56
50
 
57
- # $Id: mount.rb 2501 2007-05-09 23:08:42Z luke $
51
+ # $Id: mount.rb 2707 2007-07-18 20:40:11Z luke $
@@ -16,7 +16,7 @@ Puppet::Type.type(:mount).provide(:parsed,
16
16
  include Puppet::Provider::Mount
17
17
  confine :exists => fstab
18
18
 
19
- commands :mountcmd => "mount", :umount => "umount", :df => "df"
19
+ commands :mountcmd => "mount", :umount => "umount"
20
20
 
21
21
  @platform = Facter["operatingsystem"].value
22
22
  case @platform
@@ -34,4 +34,4 @@ Puppet::Type.type(:mount).provide(:parsed,
34
34
  record_line self.name, :fields => @fields, :separator => /\s+/, :joiner => "\t", :optional => [:pass, :dump]
35
35
  end
36
36
 
37
- # $Id: parsed.rb 2564 2007-06-11 22:49:06Z luke $
37
+ # $Id: parsed.rb 2707 2007-07-18 20:40:11Z luke $
@@ -19,7 +19,6 @@ require 'puppet/provider/package'
19
19
  Puppet::Type.type(:package).provide(:appdmg, :parent => Puppet::Provider::Package) do
20
20
  desc "Package management which copies application bundles to a target."
21
21
 
22
- defaultfor :operatingsystem => :darwin
23
22
  confine :exists => "/Library/Receipts"
24
23
  commands :hdiutil => "/usr/bin/hdiutil"
25
24
  commands :curl => "/usr/bin/curl"
@@ -115,4 +114,4 @@ Puppet::Type.type(:package).provide(:appdmg, :parent => Puppet::Provider::Packag
115
114
  end
116
115
  end
117
116
 
118
- # $Id: appdmg.rb 2609 2007-06-18 18:46:00Z luke $
117
+ # $Id: appdmg.rb 2647 2007-07-04 22:25:23Z luke $
@@ -111,7 +111,9 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
111
111
 
112
112
  def purge
113
113
  aptget '-y', '-q', 'remove', '--purge', @resource[:name]
114
+ # workaround a "bug" in apt, that already removed packages are not purged
115
+ super
114
116
  end
115
117
  end
116
118
 
117
- # $Id: apt.rb 2618 2007-06-18 21:18:48Z luke $
119
+ # $Id: apt.rb 2708 2007-07-18 23:48:58Z luke $
@@ -6,9 +6,19 @@ Puppet::Type.type(:package).provide :aptrpm, :parent => :rpm, :source => :rpm do
6
6
 
7
7
  has_feature :versionable
8
8
 
9
- commands :aptget => "/usr/bin/apt-get"
10
- commands :aptcache => "/usr/bin/apt-cache"
11
- commands :rpm => "/usr/bin/rpm"
9
+ commands :aptget => "apt-get"
10
+ commands :aptcache => "apt-cache"
11
+ commands :rpm => "rpm"
12
+
13
+ if command('rpm')
14
+ confine :true => begin
15
+ rpm('-ql', 'rpm')
16
+ rescue Puppet::ExecutionFailure
17
+ false
18
+ else
19
+ true
20
+ end
21
+ end
12
22
 
13
23
  # Install a package using 'apt-get'. This function needs to support
14
24
  # installing a specific version.
@@ -74,4 +84,4 @@ Puppet::Type.type(:package).provide :aptrpm, :parent => :rpm, :source => :rpm do
74
84
  end
75
85
  end
76
86
 
77
- # $Id: aptrpm.rb 2618 2007-06-18 21:18:48Z luke $
87
+ # $Id: aptrpm.rb 2701 2007-07-16 23:43:50Z luke $
@@ -96,9 +96,11 @@ Puppet::Type.type(:package).provide :blastwave, :parent => :sun, :source => :sun
96
96
  end
97
97
 
98
98
  def query
99
- hash = self.class.blastlist(:justme => @resource[:name])
100
-
101
- {:ensure => hash[:ensure]}
99
+ if hash = self.class.blastlist(:justme => @resource[:name])
100
+ hash
101
+ else
102
+ {:ensure => :absent}
103
+ end
102
104
  end
103
105
 
104
106
  # Remove the old package, and install the new one
@@ -111,4 +113,4 @@ Puppet::Type.type(:package).provide :blastwave, :parent => :sun, :source => :sun
111
113
  end
112
114
  end
113
115
 
114
- # $Id: blastwave.rb 2555 2007-06-08 17:20:00Z luke $
116
+ # $Id: blastwave.rb 2656 2007-07-08 16:26:51Z luke $
@@ -17,8 +17,8 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
17
17
  Puppet.debug "Executing '%s'" % cmd
18
18
  execpipe(cmd) do |process|
19
19
  # our regex for matching dpkg output
20
- regex = %r{^(\S+ +\S+ +\S+) (\S+) (\S*)$}
21
- fields = [:status, :name, :ensure]
20
+ regex = %r{^(\S+) +(\S+) +(\S+) (\S+) (\S*)$}
21
+ fields = [:desired, :error, :status, :name, :ensure]
22
22
  hash = {}
23
23
 
24
24
  # now turn each returned line into a package object
@@ -32,6 +32,12 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
32
32
 
33
33
  hash[:provider] = self.name
34
34
 
35
+ if hash[:status] == 'not-installed'
36
+ hash[:ensure] = :purged
37
+ elsif hash[:status] != "installed"
38
+ hash[:ensure] = :absent
39
+ end
40
+
35
41
  packages << new(hash)
36
42
  else
37
43
  Puppet.warning "Failed to match dpkg-query line %s" %
@@ -98,7 +104,9 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
98
104
  end
99
105
 
100
106
  # DPKG can discuss packages that are no longer installed, so allow that.
101
- if hash[:status] != "installed"
107
+ if hash[:status] == "not-installed"
108
+ hash[:ensure] = :purged
109
+ elsif hash[:status] != "installed"
102
110
  hash[:ensure] = :absent
103
111
  end
104
112
 
@@ -114,4 +122,4 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
114
122
  end
115
123
  end
116
124
 
117
- # $Id: dpkg.rb 2615 2007-06-18 20:10:35Z luke $
125
+ # $Id: dpkg.rb 2708 2007-07-18 23:48:58Z luke $
@@ -146,7 +146,7 @@ package { Thunderbird-2.0.0.4-1.pkg.dmg:
146
146
 
147
147
  begin
148
148
  open(cached_source) do |dmg|
149
- xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-mountrandom", "/tmp", dmg.path
149
+ xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-mountrandom", "-noidme", "/tmp", dmg.path
150
150
  ptable = Plist::parse_xml xml_str
151
151
  # JJM Filter out all mount-paths into a single array, discard the rest.
152
152
  mounts = ptable['system-entities'].collect { |entity|
@@ -190,4 +190,4 @@ package { Thunderbird-2.0.0.4-1.pkg.dmg:
190
190
  end
191
191
  end
192
192
 
193
- # $Id: pkgdmg.rb 2622 2007-06-18 23:57:28Z mccune $
193
+ # $Id: pkgdmg.rb 2650 2007-07-05 12:58:23Z mccune $
@@ -11,6 +11,16 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
11
11
 
12
12
  commands :rpm => "rpm"
13
13
 
14
+ if command('rpm')
15
+ confine :true => begin
16
+ rpm('-ql', 'rpm')
17
+ rescue Puppet::ExecutionFailure
18
+ false
19
+ else
20
+ true
21
+ end
22
+ end
23
+
14
24
  def self.instances
15
25
  packages = []
16
26
 
@@ -119,4 +129,4 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
119
129
  end
120
130
  end
121
131
 
122
- # $Id: rpm.rb 2595 2007-06-17 00:06:46Z luke $
132
+ # $Id: rpm.rb 2701 2007-07-16 23:43:50Z luke $
@@ -4,6 +4,7 @@ Puppet.type(:package).provide :rug, :parent => :rpm do
4
4
  has_feature :versionable
5
5
 
6
6
  commands :rug => "/usr/bin/rug"
7
+ commands :rpm => "rpm"
7
8
  defaultfor :operatingsystem => :suse
8
9
  confine :operatingsystem => :suse
9
10
 
@@ -2,6 +2,16 @@ Puppet::Type.type(:package).provide :urpmi, :parent => :rpm, :source => :rpm do
2
2
  desc "Support via ``urpmi``."
3
3
  commands :urpmi => "urpmi", :rpm => "rpm"
4
4
 
5
+ if command('rpm')
6
+ confine :true => begin
7
+ rpm('-ql', 'rpm')
8
+ rescue Puppet::ExecutionFailure
9
+ false
10
+ else
11
+ true
12
+ end
13
+ end
14
+
5
15
  defaultfor :operatingsystem => [:mandriva, :mandrake]
6
16
 
7
17
  has_feature :versionable
@@ -48,4 +58,4 @@ Puppet::Type.type(:package).provide :urpmi, :parent => :rpm, :source => :rpm do
48
58
  end
49
59
  end
50
60
 
51
- # $Id: urpmi.rb 2618 2007-06-18 21:18:48Z luke $
61
+ # $Id: urpmi.rb 2701 2007-07-16 23:43:50Z luke $
@@ -5,6 +5,16 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
5
5
 
6
6
  commands :yum => "yum", :rpm => "rpm"
7
7
 
8
+ if command('rpm')
9
+ confine :true => begin
10
+ rpm('-ql', 'rpm')
11
+ rescue Puppet::ExecutionFailure
12
+ false
13
+ else
14
+ true
15
+ end
16
+ end
17
+
8
18
  defaultfor :operatingsystem => [:fedora, :centos, :redhat]
9
19
 
10
20
  def install
@@ -35,7 +45,7 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
35
45
  def latest
36
46
  output = yum "-d", "0", "-e", "0", :list, :available, @resource[:name]
37
47
 
38
- if output =~ /^#{@resource[:name]}\S+\s+(\S+)\s/
48
+ if output =~ /^#{Regexp.escape(@resource[:name])}\S+\s+(\S+)\s/
39
49
  return $1
40
50
  else
41
51
  # Yum didn't find updates, pretend the current
@@ -53,4 +63,4 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
53
63
  end
54
64
  end
55
65
 
56
- # $Id: yum.rb 2618 2007-06-18 21:18:48Z luke $
66
+ # $Id: yum.rb 2710 2007-07-19 00:48:09Z lutter $
@@ -119,6 +119,15 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
119
119
  [resource_type.validproperties, resource_type.parameters].flatten.each do |attr|
120
120
  attr = symbolize(attr)
121
121
  define_method(attr) do
122
+ # if @property_hash.empty?
123
+ # # Note that this swaps the provider out from under us.
124
+ # prefetch()
125
+ # if @resource.provider == self
126
+ # return @property_hash[attr]
127
+ # else
128
+ # return @resource.provider.send(attr)
129
+ # end
130
+ # end
122
131
  # If it's not a valid field for this record type (which can happen
123
132
  # when different platforms support different fields), then just
124
133
  # return the should value, so the resource shuts up.
@@ -179,13 +188,19 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
179
188
  end
180
189
 
181
190
  if resources
191
+ matchers = resources.dup
182
192
  @records.each do |record|
193
+ # Skip things like comments and blank lines
194
+ next if record_type(record[:record_type]).text?
195
+
183
196
  if name = record[:name] and resource = resources[name]
184
197
  resource.provider = new(record)
185
198
  elsif respond_to?(:match)
186
- if instance = match(record, resources)
187
- record[:name] = instance[:name]
188
- instance.provider = new(record)
199
+ if resource = match(record, matchers)
200
+ # Remove this resource from circulation so we don't unnecessarily try to match
201
+ matchers.delete(resource.title)
202
+ record[:name] = resource[:name]
203
+ resource.provider = new(record)
189
204
  end
190
205
  end
191
206
  end
@@ -229,7 +244,10 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
229
244
  old = @target
230
245
  begin
231
246
  @target = path
232
- self.parse(text)
247
+ return self.parse(text)
248
+ rescue Puppet::Error => detail
249
+ detail.file = @target
250
+ raise detail
233
251
  ensure
234
252
  @target = old
235
253
  end
@@ -264,7 +282,9 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
264
282
  # Lastly, check the file from any resource instances
265
283
  if resources
266
284
  resources.each do |name, resource|
267
- targets << resource.value(:target)
285
+ if value = resource.should(:target)
286
+ targets << value
287
+ end
268
288
  end
269
289
  end
270
290
 
@@ -314,6 +334,8 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
314
334
  @property_hash[:name] ||= @resource.name
315
335
 
316
336
  self.class.flush(@property_hash)
337
+
338
+ #@property_hash = {}
317
339
  end
318
340
 
319
341
  def initialize(resource)
@@ -327,6 +349,14 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
327
349
  @property_hash = self.class.record?(resource[:name]) ||
328
350
  {:record_type => self.class.name, :ensure => :absent}
329
351
  end
352
+
353
+ # Retrieve the current state from disk.
354
+ def prefetch
355
+ unless @resource
356
+ raise Puppet::DevError, "Somehow got told to prefetch with no resource set"
357
+ end
358
+ self.class.prefetch(@resource[:name] => @resource)
359
+ end
330
360
  end
331
361
 
332
- # $Id: parsedfile.rb 2551 2007-06-04 20:37:14Z luke $
362
+ # $Id: parsedfile.rb 2722 2007-07-20 16:27:44Z luke $