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.
- data/CHANGELOG +58 -0
- data/Rakefile +1 -1
- data/bin/filebucket +6 -6
- data/bin/puppetca +11 -1
- data/bin/puppetmasterd +7 -6
- data/conf/redhat/client.init +1 -0
- data/conf/redhat/{puppetd.conf → puppet.conf} +1 -1
- data/conf/redhat/puppet.spec +43 -31
- data/conf/redhat/server.init +1 -0
- data/lib/puppet.rb +3 -3
- data/lib/puppet/configuration.rb +16 -5
- data/lib/puppet/metatype/attributes.rb +12 -19
- data/lib/puppet/metatype/evaluation.rb +10 -1
- data/lib/puppet/metatype/instances.rb +39 -15
- data/lib/puppet/metatype/manager.rb +1 -28
- data/lib/puppet/metatype/metaparams.rb +20 -16
- data/lib/puppet/metatype/providers.rb +8 -2
- data/lib/puppet/metatype/schedules.rb +14 -19
- data/lib/puppet/{modules.rb → module.rb} +2 -0
- data/lib/puppet/network/authstore.rb +5 -1
- data/lib/puppet/network/client/dipper.rb +2 -2
- data/lib/puppet/network/client/master.rb +18 -9
- data/lib/puppet/network/handler/fileserver.rb +3 -6
- data/lib/puppet/network/handler/report.rb +2 -1
- data/lib/puppet/network/server/mongrel.rb +4 -2
- data/lib/puppet/network/xmlrpc/client.rb +10 -3
- data/lib/puppet/parameter.rb +11 -4
- data/lib/puppet/parser/ast/collexpr.rb +10 -10
- data/lib/puppet/parser/ast/hostclass.rb +2 -2
- data/lib/puppet/parser/ast/resourceparam.rb +4 -3
- data/lib/puppet/parser/ast/resourceref.rb +16 -2
- data/lib/puppet/parser/collector.rb +8 -4
- data/lib/puppet/parser/functions.rb +5 -2
- data/lib/puppet/parser/interpreter.rb +48 -9
- data/lib/puppet/parser/lexer.rb +2 -1
- data/lib/puppet/parser/parser.rb +669 -589
- data/lib/puppet/parser/resource.rb +20 -11
- data/lib/puppet/parser/resource/param.rb +21 -10
- data/lib/puppet/parser/resource/reference.rb +2 -2
- data/lib/puppet/parser/scope.rb +22 -10
- data/lib/puppet/{type/property.rb → property.rb} +48 -15
- data/lib/puppet/propertychange.rb +3 -3
- data/lib/puppet/provider/cron/crontab.rb +38 -36
- data/lib/puppet/provider/host/netinfo.rb +1 -2
- data/lib/puppet/provider/mailalias/aliases.rb +31 -0
- data/lib/puppet/provider/maillist/mailman.rb +113 -0
- data/lib/puppet/provider/mount.rb +5 -11
- data/lib/puppet/provider/mount/parsed.rb +2 -2
- data/lib/puppet/provider/package/appdmg.rb +1 -2
- data/lib/puppet/provider/package/apt.rb +3 -1
- data/lib/puppet/provider/package/aptrpm.rb +14 -4
- data/lib/puppet/provider/package/blastwave.rb +6 -4
- data/lib/puppet/provider/package/dpkg.rb +12 -4
- data/lib/puppet/provider/package/pkgdmg.rb +2 -2
- data/lib/puppet/provider/package/rpm.rb +11 -1
- data/lib/puppet/provider/package/rug.rb +1 -0
- data/lib/puppet/provider/package/urpmi.rb +11 -1
- data/lib/puppet/provider/package/yum.rb +12 -2
- data/lib/puppet/provider/parsedfile.rb +36 -6
- data/lib/puppet/rails.rb +9 -2
- data/lib/puppet/rails/param_name.rb +2 -3
- data/lib/puppet/rails/param_value.rb +20 -1
- data/lib/puppet/rails/resource.rb +8 -2
- data/lib/puppet/reference/configuration.rb +14 -16
- data/lib/puppet/reference/type.rb +4 -4
- data/lib/puppet/transaction.rb +4 -4
- data/lib/puppet/type.rb +19 -6
- data/lib/puppet/type/component.rb +9 -3
- data/lib/puppet/type/cron.rb +10 -4
- data/lib/puppet/type/exec.rb +9 -5
- data/lib/puppet/type/group.rb +2 -3
- data/lib/puppet/type/mailalias.rb +50 -0
- data/lib/puppet/type/maillist.rb +57 -0
- data/lib/puppet/type/mount.rb +25 -11
- data/lib/puppet/type/package.rb +6 -27
- data/lib/puppet/type/pfile.rb +5 -6
- data/lib/puppet/type/pfile/source.rb +8 -2
- data/lib/puppet/type/pfilebucket.rb +4 -3
- data/lib/puppet/type/resources.rb +1 -3
- data/lib/puppet/type/schedule.rb +16 -16
- data/lib/puppet/type/service.rb +4 -1
- data/lib/puppet/type/tidy.rb +1 -2
- data/lib/puppet/type/user.rb +2 -3
- data/lib/puppet/type/yumrepo.rb +2 -2
- data/lib/puppet/util.rb +29 -4
- data/lib/puppet/util/autoload.rb +45 -16
- data/lib/puppet/util/fileparsing.rb +23 -6
- data/lib/puppet/util/filetype.rb +12 -1
- data/lib/puppet/util/log.rb +2 -2
- data/lib/puppet/util/log_paths.rb +16 -0
- data/lib/puppet/util/reference.rb +2 -2
- data/test/language/ast/hostclass.rb +21 -4
- data/test/language/ast/resourceref.rb +95 -0
- data/test/language/functions.rb +5 -5
- data/test/language/interpreter.rb +129 -1
- data/test/language/node.rb +13 -2
- data/test/language/resource.rb +26 -1
- data/test/language/scope.rb +25 -5
- data/test/lib/puppettest/support/collection.rb +2 -2
- data/test/network/client/master.rb +28 -42
- data/test/network/server/mongrel_test.rb +7 -1
- data/test/other/propertychange.rb +2 -2
- data/test/other/transactions.rb +44 -5
- data/test/puppet/modules.rb +2 -1
- data/test/rails/ast.rb +7 -8
- data/test/rails/collection.rb +2 -2
- data/test/rails/railsresource.rb +21 -5
- data/test/ral/manager/attributes.rb +33 -1
- data/test/ral/manager/instances.rb +33 -6
- data/test/ral/manager/type.rb +29 -49
- data/test/ral/providers/cron/crontab.rb +61 -13
- data/test/ral/providers/mailalias/aliases.rb +57 -0
- data/test/ral/providers/mount/parsed.rb +4 -4
- data/test/ral/providers/package/apt.rb +13 -1
- data/test/ral/providers/parsedfile.rb +20 -7
- data/test/ral/types/cron.rb +17 -1
- data/test/ral/types/mailalias.rb +50 -0
- data/test/ral/types/mount.rb +35 -2
- data/test/ral/types/package.rb +10 -2
- data/test/ral/types/parameter.rb +4 -4
- data/test/ral/types/property.rb +39 -1
- data/test/util/autoload.rb +33 -18
- data/test/util/filetype.rb +49 -3
- metadata +13 -6
- 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
|
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
|
-
|
41
|
-
|
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
|
-
|
49
|
-
fs == @resource[:name]
|
43
|
+
line =~ / on #{name} / or line =~ %r{ on /private/var/automount#{name}}
|
50
44
|
else
|
51
|
-
|
45
|
+
line =~ / on #{name} /
|
52
46
|
end
|
53
47
|
end
|
54
48
|
end
|
55
49
|
end
|
56
50
|
|
57
|
-
# $Id: mount.rb
|
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"
|
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
|
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
|
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
|
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 => "
|
10
|
-
commands :aptcache => "
|
11
|
-
commands :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
|
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
|
-
|
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
|
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+
|
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]
|
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
|
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
|
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
|
132
|
+
# $Id: rpm.rb 2701 2007-07-16 23:43:50Z luke $
|
@@ -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
|
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
|
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
|
187
|
-
|
188
|
-
|
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
|
-
|
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
|
362
|
+
# $Id: parsedfile.rb 2722 2007-07-20 16:27:44Z luke $
|