puppet 0.13.6 → 0.16.0
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 +57 -0
- data/Rakefile +38 -410
- data/bin/puppet +14 -12
- data/bin/puppetca +1 -3
- data/bin/puppetd +25 -7
- data/bin/puppetdoc +161 -104
- data/bin/puppetmasterd +4 -4
- data/conf/epm.list +8 -0
- data/conf/redhat/client.init +6 -1
- data/conf/redhat/no-chuser-0.15.1.patch +38 -0
- data/conf/redhat/puppet.spec +20 -5
- data/conf/redhat/puppetd.conf +1 -1
- data/conf/redhat/puppetmasterd.conf +1 -1
- data/conf/redhat/server.init +2 -4
- data/examples/code/snippets/{casestatement → casestatement.pp} +12 -1
- data/examples/code/snippets/selectorvalues.pp +15 -0
- data/examples/code/snippets/singleselector.pp +22 -0
- data/examples/code/snippets/tag.pp +9 -0
- data/ext/module_puppet +1 -1
- data/install.rb +303 -303
- data/lib/puppet.rb +7 -9
- data/lib/puppet/client.rb +18 -5
- data/lib/puppet/client/dipper.rb +12 -10
- data/lib/puppet/client/master.rb +113 -41
- data/lib/puppet/client/pelement.rb +20 -0
- data/lib/puppet/config.rb +113 -6
- data/lib/puppet/element.rb +1 -3
- data/lib/puppet/event.rb +12 -23
- data/lib/puppet/filetype.rb +93 -5
- data/lib/puppet/inifile.rb +201 -0
- data/lib/puppet/log.rb +18 -6
- data/lib/puppet/parameter.rb +80 -29
- data/lib/puppet/parser/ast.rb +6 -4
- data/lib/puppet/parser/ast/caseopt.rb +13 -4
- data/lib/puppet/parser/ast/casestatement.rb +2 -2
- data/lib/puppet/parser/ast/component.rb +4 -14
- data/lib/puppet/parser/ast/hostclass.rb +1 -1
- data/lib/puppet/parser/ast/leaf.rb +12 -0
- data/lib/puppet/parser/ast/node.rb +4 -4
- data/lib/puppet/parser/ast/objectdef.rb +5 -51
- data/lib/puppet/parser/ast/selector.rb +2 -0
- data/lib/puppet/parser/ast/tag.rb +26 -0
- data/lib/puppet/parser/interpreter.rb +89 -74
- data/lib/puppet/parser/lexer.rb +4 -3
- data/lib/puppet/parser/parser.rb +440 -378
- data/lib/puppet/parser/scope.rb +844 -887
- data/lib/puppet/server.rb +12 -1
- data/lib/puppet/server/authconfig.rb +166 -0
- data/lib/puppet/server/authstore.rb +8 -6
- data/lib/puppet/server/ca.rb +23 -26
- data/lib/puppet/server/filebucket.rb +24 -23
- data/lib/puppet/server/fileserver.rb +116 -47
- data/lib/puppet/server/master.rb +58 -19
- data/lib/puppet/server/pelement.rb +176 -0
- data/lib/puppet/server/rights.rb +78 -0
- data/lib/puppet/server/servlet.rb +19 -6
- data/lib/puppet/sslcertificates.rb +4 -2
- data/lib/puppet/sslcertificates/ca.rb +66 -34
- data/lib/puppet/storage.rb +20 -26
- data/lib/puppet/transaction.rb +49 -92
- data/lib/puppet/type.rb +142 -35
- data/lib/puppet/type/cron.rb +29 -14
- data/lib/puppet/type/exec.rb +92 -35
- data/lib/puppet/type/group.rb +29 -11
- data/lib/puppet/type/nameservice.rb +50 -1
- data/lib/puppet/type/nameservice/netinfo.rb +68 -1
- data/lib/puppet/type/nameservice/objectadd.rb +1 -0
- data/lib/puppet/type/package.rb +150 -109
- data/lib/puppet/type/package/apple.rb +27 -0
- data/lib/puppet/type/package/apt.rb +1 -0
- data/lib/puppet/type/package/darwinport.rb +97 -0
- data/lib/puppet/type/package/dpkg.rb +10 -2
- data/lib/puppet/type/package/freebsd.rb +19 -0
- data/lib/puppet/type/package/{bsd.rb → openbsd.rb} +36 -7
- data/lib/puppet/type/package/ports.rb +98 -0
- data/lib/puppet/type/package/rpm.rb +43 -7
- data/lib/puppet/type/package/sun.rb +53 -36
- data/lib/puppet/type/package/yum.rb +5 -16
- data/lib/puppet/type/parsedtype.rb +41 -29
- data/lib/puppet/type/parsedtype/host.rb +13 -5
- data/lib/puppet/type/parsedtype/mount.rb +250 -0
- data/lib/puppet/type/parsedtype/port.rb +8 -6
- data/lib/puppet/type/pfile.rb +284 -30
- data/lib/puppet/type/pfile/checksum.rb +96 -68
- data/lib/puppet/type/pfile/content.rb +16 -13
- data/lib/puppet/type/pfile/ensure.rb +64 -126
- data/lib/puppet/type/pfile/group.rb +12 -5
- data/lib/puppet/type/pfile/mode.rb +16 -4
- data/lib/puppet/type/pfile/source.rb +47 -73
- data/lib/puppet/type/pfile/target.rb +81 -0
- data/lib/puppet/type/pfile/uid.rb +10 -3
- data/lib/puppet/type/pfilebucket.rb +12 -3
- data/lib/puppet/type/schedule.rb +5 -1
- data/lib/puppet/type/service.rb +138 -66
- data/lib/puppet/type/service/debian.rb +9 -3
- data/lib/puppet/type/service/init.rb +51 -56
- data/lib/puppet/type/service/smf.rb +16 -6
- data/lib/puppet/type/state.rb +71 -32
- data/lib/puppet/type/symlink.rb +12 -7
- data/lib/puppet/type/tidy.rb +5 -1
- data/lib/puppet/type/user.rb +116 -20
- data/lib/puppet/type/yumrepo.rb +314 -0
- data/lib/puppet/util.rb +84 -14
- data/test/client/client.rb +41 -18
- data/test/client/master.rb +50 -4
- data/test/executables/puppetbin.rb +31 -4
- data/test/executables/puppetca.rb +18 -2
- data/test/language/ast.rb +201 -31
- data/test/language/interpreter.rb +8 -2
- data/test/{parser → language}/lexer.rb +1 -1
- data/test/language/node.rb +84 -0
- data/test/{parser → language}/parser.rb +1 -1
- data/test/language/scope.rb +101 -2
- data/test/language/snippets.rb +23 -2
- data/test/other/config.rb +99 -1
- data/test/other/filetype.rb +95 -0
- data/test/other/inifile.rb +114 -0
- data/test/other/log.rb +3 -2
- data/test/other/transactions.rb +55 -10
- data/test/puppet/utiltest.rb +25 -1
- data/test/puppettest.rb +140 -46
- data/test/server/authconfig.rb +56 -0
- data/test/server/bucket.rb +32 -18
- data/test/server/fileserver.rb +75 -30
- data/test/server/master.rb +27 -4
- data/test/server/pelement.rb +298 -0
- data/test/server/rights.rb +41 -0
- data/test/server/server.rb +2 -2
- data/test/tagging/tagging.rb +100 -1
- data/test/types/basic.rb +3 -3
- data/test/types/cron.rb +24 -1
- data/test/types/exec.rb +99 -1
- data/test/types/file.rb +298 -2
- data/test/types/filebucket.rb +4 -15
- data/test/types/filesources.rb +43 -14
- data/test/types/group.rb +1 -13
- data/test/types/mount.rb +277 -0
- data/test/types/package.rb +164 -33
- data/test/types/parameter.rb +107 -0
- data/test/types/port.rb +2 -1
- data/test/types/service.rb +37 -2
- data/test/types/state.rb +92 -0
- data/test/types/symlink.rb +30 -2
- data/test/types/tidy.rb +2 -14
- data/test/types/type.rb +35 -1
- data/test/types/user.rb +110 -1
- data/test/types/yumrepo.rb +95 -0
- metadata +316 -290
- data/test/types/filetype.rb +0 -160
@@ -0,0 +1,27 @@
|
|
1
|
+
module Puppet
|
2
|
+
# OS X Packaging sucks. We can install packages, but that's about it.
|
3
|
+
Puppet.type(:package).newpkgtype(:apple) do
|
4
|
+
def query
|
5
|
+
if FileTest.exists?("/Library/Receipts/#{self[:name]}.pkg")
|
6
|
+
return {:name => self[:name], :ensure => :present}
|
7
|
+
else
|
8
|
+
return nil
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def install
|
13
|
+
source = nil
|
14
|
+
unless source = self[:source]
|
15
|
+
self.fail "Mac OS X packages must specify a package source"
|
16
|
+
end
|
17
|
+
|
18
|
+
output = %x{/usr/sbin/installer -pkg #{source} -target / 2>&1}
|
19
|
+
|
20
|
+
unless $? == 0
|
21
|
+
raise Puppet::PackageError.new(output)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# $Id: apple.rb 1055 2006-04-03 17:08:21Z luke $
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module Puppet
|
2
|
+
Puppet.type(:package).newpkgtype(:darwinport) do
|
3
|
+
def port
|
4
|
+
"/opt/local/bin/port"
|
5
|
+
end
|
6
|
+
|
7
|
+
def eachpkgashash
|
8
|
+
# list out all of the packages
|
9
|
+
open("| #{port} list installed") { |process|
|
10
|
+
regex = %r{(\S+)\s+@(\S+)\s+(\S+)}
|
11
|
+
fields = [:name, :version, :location]
|
12
|
+
hash = {}
|
13
|
+
|
14
|
+
# now turn each returned line into a package object
|
15
|
+
process.each { |line|
|
16
|
+
hash.clear
|
17
|
+
|
18
|
+
if match = regex.match(line)
|
19
|
+
fields.zip(match.captures) { |field,value|
|
20
|
+
hash[field] = value
|
21
|
+
}
|
22
|
+
|
23
|
+
hash.delete :location
|
24
|
+
hash[:ensure] = hash[:version]
|
25
|
+
yield hash.dup
|
26
|
+
else
|
27
|
+
raise Puppet::DevError,
|
28
|
+
"Failed to match dpkg line %s" % line
|
29
|
+
end
|
30
|
+
}
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
def install
|
35
|
+
should = self.should(:ensure)
|
36
|
+
|
37
|
+
# Seems like you can always say 'upgrade'
|
38
|
+
cmd = "#{port()} upgrade #{self[:name]}"
|
39
|
+
|
40
|
+
self.info "Executing %s" % cmd.inspect
|
41
|
+
output = %x{#{cmd} 2>&1}
|
42
|
+
|
43
|
+
unless $? == 0
|
44
|
+
raise Puppet::PackageError.new(output)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def list
|
49
|
+
packages = []
|
50
|
+
|
51
|
+
eachpkgashash do |hash|
|
52
|
+
pkg = Puppet.type(:package).installedpkg(hash)
|
53
|
+
packages << pkg
|
54
|
+
end
|
55
|
+
|
56
|
+
return packages
|
57
|
+
end
|
58
|
+
|
59
|
+
def query
|
60
|
+
version = nil
|
61
|
+
eachpkgashash do |hash|
|
62
|
+
if hash[:name] == self[:name]
|
63
|
+
return hash
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
return nil
|
68
|
+
end
|
69
|
+
|
70
|
+
def latest
|
71
|
+
info = %x{#{port()} search '^#{self[:name]}$' 2>/dev/null}
|
72
|
+
|
73
|
+
if $? != 0 or info =~ /^Error/
|
74
|
+
return nil
|
75
|
+
end
|
76
|
+
|
77
|
+
ary = info.split(/\s+/)
|
78
|
+
version = ary[2].sub(/^@/, '')
|
79
|
+
|
80
|
+
return version
|
81
|
+
end
|
82
|
+
|
83
|
+
def uninstall
|
84
|
+
cmd = "#{port()} uninstall #{self[:name]}"
|
85
|
+
output = %x{#{cmd} 2>&1}
|
86
|
+
if $? != 0
|
87
|
+
raise Puppet::PackageError.new(output)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def update
|
92
|
+
return install()
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
# $Id: darwinport.rb 1080 2006-04-05 08:08:00Z luke $
|
@@ -67,7 +67,7 @@ module Puppet
|
|
67
67
|
open("| dpkg -l") { |process|
|
68
68
|
# our regex for matching dpkg output
|
69
69
|
regex = %r{^(\S+)\s+(\S+)\s+(\S+)\s+(.+)$}
|
70
|
-
fields = [:status, :name, :
|
70
|
+
fields = [:status, :name, :version, :description]
|
71
71
|
hash = {}
|
72
72
|
|
73
73
|
5.times { process.gets } # throw away the header
|
@@ -80,6 +80,14 @@ module Puppet
|
|
80
80
|
fields.zip(match.captures) { |field,value|
|
81
81
|
hash[field] = value
|
82
82
|
}
|
83
|
+
|
84
|
+
if self.is_a? Puppet::Type and type = self[:type]
|
85
|
+
hash[:type] = type
|
86
|
+
elsif self.is_a? Module and self.respond_to? :name
|
87
|
+
hash[:type] = self.name
|
88
|
+
else
|
89
|
+
raise Puppet::DevError, "Cannot determine package type"
|
90
|
+
end
|
83
91
|
packages.push Puppet.type(:package).installedpkg(hash)
|
84
92
|
else
|
85
93
|
raise Puppet::DevError,
|
@@ -102,4 +110,4 @@ module Puppet
|
|
102
110
|
end
|
103
111
|
end
|
104
112
|
|
105
|
-
# $Id: dpkg.rb
|
113
|
+
# $Id: dpkg.rb 1124 2006-04-20 07:00:10Z luke $
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Puppet
|
2
|
+
Puppet.type(:package).newpkgtype(:freebsd, :openbsd) do
|
3
|
+
def listcmd
|
4
|
+
"pkg_info"
|
5
|
+
end
|
6
|
+
|
7
|
+
def query
|
8
|
+
list
|
9
|
+
|
10
|
+
if self[:version]
|
11
|
+
return :listed
|
12
|
+
else
|
13
|
+
return nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# $Id: freebsd.rb 1079 2006-04-05 06:54:13Z luke $
|
@@ -1,5 +1,11 @@
|
|
1
1
|
module Puppet
|
2
|
-
Puppet.type(:package).newpkgtype(:
|
2
|
+
Puppet.type(:package).newpkgtype(:openbsd) do
|
3
|
+
def listcmd
|
4
|
+
"pkg_info -a"
|
5
|
+
end
|
6
|
+
|
7
|
+
module_function :listcmd
|
8
|
+
|
3
9
|
def install
|
4
10
|
should = self.should(:ensure)
|
5
11
|
|
@@ -42,8 +48,13 @@ module Puppet
|
|
42
48
|
def list
|
43
49
|
packages = []
|
44
50
|
|
51
|
+
if self.is_a? Puppet::Type
|
52
|
+
debug "Executing %s" % listcmd().inspect
|
53
|
+
else
|
54
|
+
Puppet.debug "Executing %s" % listcmd().inspect
|
55
|
+
end
|
45
56
|
# list out all of the packages
|
46
|
-
open("|
|
57
|
+
open("| #{listcmd()}") { |process|
|
47
58
|
# our regex for matching dpkg output
|
48
59
|
regex = %r{^(\S+)-(\d\S+)\s+(.+)}
|
49
60
|
fields = [:name, :version, :description]
|
@@ -51,20 +62,38 @@ module Puppet
|
|
51
62
|
|
52
63
|
# now turn each returned line into a package object
|
53
64
|
process.each { |line|
|
65
|
+
hash.clear
|
54
66
|
if match = regex.match(line)
|
55
|
-
hash.clear
|
56
|
-
|
57
67
|
fields.zip(match.captures) { |field,value|
|
58
68
|
hash[field] = value
|
59
69
|
}
|
60
|
-
|
70
|
+
yup = nil
|
71
|
+
name = hash[:name]
|
72
|
+
hash[:ensure] = :present
|
73
|
+
|
74
|
+
if self.is_a? Puppet::Type and type = self[:type]
|
75
|
+
hash[:type] = type
|
76
|
+
elsif self.is_a? Module and self.respond_to? :name
|
77
|
+
hash[:type] = self.name
|
78
|
+
else
|
79
|
+
raise Puppet::DevError, "Cannot determine package type"
|
80
|
+
end
|
81
|
+
|
82
|
+
pkg = Puppet.type(:package).installedpkg(hash)
|
83
|
+
packages << pkg
|
61
84
|
else
|
62
85
|
raise Puppet::DevError,
|
63
86
|
"Failed to match dpkg line %s" % line
|
64
87
|
end
|
65
88
|
}
|
66
89
|
}
|
67
|
-
|
90
|
+
|
91
|
+
# Mark any packages we didn't find as absent
|
92
|
+
Puppet.type(:package).each do |pkg|
|
93
|
+
unless packages.include? pkg
|
94
|
+
pkg.is = [:ensure, :absent]
|
95
|
+
end
|
96
|
+
end
|
68
97
|
|
69
98
|
return packages
|
70
99
|
end
|
@@ -79,4 +108,4 @@ module Puppet
|
|
79
108
|
end
|
80
109
|
end
|
81
110
|
|
82
|
-
# $Id:
|
111
|
+
# $Id: openbsd.rb 1128 2006-04-21 03:06:54Z luke $
|
@@ -0,0 +1,98 @@
|
|
1
|
+
module Puppet
|
2
|
+
Puppet.type(:package).newpkgtype(:ports, :openbsd) do
|
3
|
+
# I hate ports
|
4
|
+
%w{INTERACTIVE UNAME}.each do |var|
|
5
|
+
if ENV.include?(var)
|
6
|
+
ENV.delete(var)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
def install
|
10
|
+
# -p: create a package
|
11
|
+
# -N: install if the package is missing, otherwise upgrade
|
12
|
+
# -P: prefer binary packages
|
13
|
+
cmd = "/usr/local/sbin/portupgrade -p -N -P #{self[:name]}"
|
14
|
+
|
15
|
+
self.debug "Executing %s" % cmd.inspect
|
16
|
+
output = %x{#{cmd} 2>&1}
|
17
|
+
|
18
|
+
unless $? == 0
|
19
|
+
raise Puppet::PackageError.new(output)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# If there are multiple packages, we only use the last one
|
24
|
+
def latest
|
25
|
+
cmd = "/usr/local/sbin/portversion -v #{self[:name]}"
|
26
|
+
|
27
|
+
self.debug "Executing %s" % cmd.inspect
|
28
|
+
output = %x{#{cmd} 2>/dev/null}.chomp
|
29
|
+
line = output.split("\n").pop
|
30
|
+
|
31
|
+
unless line =~ /^(\S+)\s+(\S)\s+(.+)$/
|
32
|
+
# There's no "latest" version, so just return a placeholder
|
33
|
+
return :latest
|
34
|
+
end
|
35
|
+
|
36
|
+
pkgstuff = $1
|
37
|
+
match = $2
|
38
|
+
info = $3
|
39
|
+
|
40
|
+
unless pkgstuff =~ /^(\w+)-([0-9].+)$/
|
41
|
+
raise Puppet::PackageError,
|
42
|
+
"Could not match package info '%s'" % pkgstuff
|
43
|
+
end
|
44
|
+
|
45
|
+
name, version = $1, $2
|
46
|
+
|
47
|
+
if match == "=" or match == ">"
|
48
|
+
# we're up to date or more recent
|
49
|
+
return version
|
50
|
+
end
|
51
|
+
|
52
|
+
# Else, we need to be updated; we need to pull out the new version
|
53
|
+
|
54
|
+
unless info =~ /\((\w+) has (.+)\)/
|
55
|
+
raise Puppet::PackageError,
|
56
|
+
"Could not match version info '%s'" % info
|
57
|
+
end
|
58
|
+
|
59
|
+
source, newversion = $1, $2
|
60
|
+
|
61
|
+
debug "Newer version in %s" % source
|
62
|
+
return newversion
|
63
|
+
end
|
64
|
+
|
65
|
+
def listcmd
|
66
|
+
"pkg_info"
|
67
|
+
end
|
68
|
+
|
69
|
+
module_function :listcmd
|
70
|
+
|
71
|
+
def query
|
72
|
+
list
|
73
|
+
|
74
|
+
if self[:version] and @states[:ensure].is != :absent
|
75
|
+
return :listed
|
76
|
+
else
|
77
|
+
return nil
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def uninstall
|
82
|
+
cmd = "/usr/local/sbin/pkg_deinstall #{self[:name]}"
|
83
|
+
self.debug "Executing %s" % cmd.inspect
|
84
|
+
output = %x{#{cmd} 2>&1}
|
85
|
+
|
86
|
+
unless $? == 0
|
87
|
+
raise Puppet::PackageError.new(output)
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
def update
|
93
|
+
install()
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# $Id: ports.rb 1128 2006-04-21 03:06:54Z luke $
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module Puppet
|
2
2
|
Puppet.type(:package).newpkgtype(:rpm) do
|
3
|
+
VERSIONSTRING = "%{VERSION}-%{RELEASE}"
|
3
4
|
def query
|
4
5
|
fields = {
|
5
6
|
:name => "NAME",
|
@@ -8,7 +9,7 @@ module Puppet
|
|
8
9
|
}
|
9
10
|
|
10
11
|
cmd = "rpm -q #{self[:name]} --qf '%s\n'" %
|
11
|
-
"%{NAME}
|
12
|
+
"%{NAME} #{VERSIONSTRING}"
|
12
13
|
|
13
14
|
self.debug "Executing %s" % cmd.inspect
|
14
15
|
# list out all of the packages
|
@@ -40,11 +41,24 @@ module Puppet
|
|
40
41
|
return hash
|
41
42
|
end
|
42
43
|
|
44
|
+
# Here we just retrieve the version from the file specified in the source.
|
45
|
+
def latest
|
46
|
+
unless source = self[:source]
|
47
|
+
self.fail "RPMs must specify a package source"
|
48
|
+
end
|
49
|
+
|
50
|
+
cmd = "rpm -p -q --qf '#{VERSIONSTRING}' #{self[:source]}"
|
51
|
+
self.debug "Executing %s" % cmd.inspect
|
52
|
+
version = %x{#{cmd}}
|
53
|
+
|
54
|
+
return version
|
55
|
+
end
|
56
|
+
|
43
57
|
def list
|
44
58
|
packages = []
|
45
59
|
|
46
60
|
# list out all of the packages
|
47
|
-
open("| rpm -q -a --qf '%{NAME}
|
61
|
+
open("| rpm -q -a --qf '%{NAME} #{VERSIONSTRING}\n'") { |process|
|
48
62
|
# our regex for matching dpkg output
|
49
63
|
regex = %r{^(\S+)\s+(\S+)}
|
50
64
|
fields = [:name, :ensure]
|
@@ -58,6 +72,13 @@ module Puppet
|
|
58
72
|
fields.zip(match.captures) { |field,value|
|
59
73
|
hash[field] = value
|
60
74
|
}
|
75
|
+
if self.is_a? Puppet::Type and type = self[:type]
|
76
|
+
hash[:type] = type
|
77
|
+
elsif self.is_a? Module and self.respond_to? :name
|
78
|
+
hash[:type] = self.name
|
79
|
+
else
|
80
|
+
raise Puppet::DevError, "Cannot determine package type"
|
81
|
+
end
|
61
82
|
packages.push Puppet.type(:package).installedpkg(hash)
|
62
83
|
else
|
63
84
|
raise "failed to match rpm line %s" % line
|
@@ -68,11 +89,22 @@ module Puppet
|
|
68
89
|
return packages
|
69
90
|
end
|
70
91
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
92
|
+
def install
|
93
|
+
source = nil
|
94
|
+
unless source = self[:source]
|
95
|
+
self.fail "RPMs must specify a package source"
|
96
|
+
end
|
97
|
+
|
98
|
+
flag = "-i"
|
99
|
+
if @states[:ensure].is != :absent
|
100
|
+
flag = "-U"
|
101
|
+
end
|
102
|
+
output = %x{rpm #{flag} #{source} 2>&1}
|
103
|
+
|
104
|
+
unless $? == 0
|
105
|
+
raise Puppet::PackageError.new(output)
|
106
|
+
end
|
107
|
+
end
|
76
108
|
|
77
109
|
def uninstall
|
78
110
|
cmd = "rpm -e %s" % self[:name]
|
@@ -81,5 +113,9 @@ module Puppet
|
|
81
113
|
raise output
|
82
114
|
end
|
83
115
|
end
|
116
|
+
|
117
|
+
def update
|
118
|
+
self.install
|
119
|
+
end
|
84
120
|
end
|
85
121
|
end
|