puppet 0.9.2 → 0.13.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 +58 -0
- data/README +21 -18
- data/Rakefile +176 -36
- data/bin/puppet +34 -48
- data/bin/puppetca +41 -28
- data/bin/puppetd +87 -65
- data/bin/puppetdoc +99 -23
- data/bin/puppetmasterd +72 -91
- data/conf/redhat/client.init +80 -0
- data/conf/redhat/client.sysconfig +11 -0
- data/conf/redhat/fileserver.conf +12 -0
- data/conf/redhat/puppet.spec +130 -0
- data/conf/redhat/server.init +89 -0
- data/conf/redhat/server.sysconfig +9 -0
- data/examples/code/allatonce +2 -2
- data/examples/code/assignments +1 -1
- data/examples/code/classing +2 -2
- data/examples/code/components +2 -2
- data/examples/code/file.bl +5 -5
- data/examples/code/filedefaults +2 -2
- data/examples/code/fileparsing +1 -1
- data/examples/code/filerecursion +1 -1
- data/examples/code/functions +1 -1
- data/examples/code/groups +1 -1
- data/examples/code/importing +1 -1
- data/examples/code/nodes +1 -1
- data/examples/code/one +1 -1
- data/examples/code/relationships +2 -2
- data/examples/code/simpletests +5 -5
- data/examples/code/snippets/argumentdefaults +2 -2
- data/examples/code/snippets/casestatement +16 -8
- data/examples/code/snippets/classheirarchy.pp +4 -4
- data/examples/code/snippets/classincludes.pp +4 -4
- data/examples/code/snippets/classpathtest +2 -2
- data/examples/code/snippets/componentmetaparams.pp +11 -0
- data/examples/code/snippets/dirchmod +5 -5
- data/examples/code/snippets/emptyclass.pp +9 -0
- data/examples/code/snippets/failmissingexecpath.pp +1 -1
- data/examples/code/snippets/falsevalues.pp +1 -1
- data/examples/code/snippets/filecreate +5 -5
- data/examples/code/snippets/implicititeration +5 -5
- data/examples/code/snippets/multipleinstances +4 -4
- data/examples/code/snippets/namevartest +3 -3
- data/examples/code/snippets/scopetest +1 -1
- data/examples/code/snippets/selectorvalues.pp +3 -3
- data/examples/code/snippets/simpledefaults +2 -2
- data/examples/code/snippets/simpleselector +5 -5
- data/examples/code/snippets/singleary.pp +19 -0
- data/examples/root/etc/init.d/sleeper +3 -2
- data/ext/emacs/puppet-mode-init.el +6 -0
- data/ext/emacs/puppet-mode.el +189 -0
- data/ext/ldap/puppet.schema +17 -0
- data/ext/{module:puppet → module_puppet} +30 -31
- data/ext/vim/filetype.vim +9 -0
- data/ext/vim/puppet.vim +87 -0
- data/install.rb +63 -30
- data/lib/puppet.rb +216 -122
- data/lib/puppet/client.rb +51 -416
- data/lib/puppet/client/ca.rb +17 -0
- data/lib/puppet/client/dipper.rb +78 -0
- data/lib/puppet/client/file.rb +20 -0
- data/lib/puppet/client/log.rb +17 -0
- data/lib/puppet/client/master.rb +246 -0
- data/lib/puppet/client/proxy.rb +27 -0
- data/lib/puppet/client/status.rb +7 -0
- data/lib/puppet/config.rb +563 -13
- data/lib/puppet/daemon.rb +50 -22
- data/lib/puppet/element.rb +4 -4
- data/lib/puppet/event-loop.rb +1 -0
- data/lib/puppet/event-loop/better-definers.rb +367 -0
- data/lib/puppet/event-loop/event-loop.rb +355 -0
- data/lib/puppet/event-loop/signal-system.rb +220 -0
- data/lib/puppet/event.rb +9 -11
- data/lib/puppet/filetype.rb +195 -0
- data/lib/puppet/log.rb +35 -12
- data/lib/puppet/metric.rb +2 -2
- data/lib/puppet/networkclient.rb +145 -0
- data/lib/puppet/parameter.rb +335 -0
- data/lib/puppet/parser/ast.rb +42 -1453
- data/lib/puppet/parser/ast/astarray.rb +88 -0
- data/lib/puppet/parser/ast/branch.rb +47 -0
- data/lib/puppet/parser/ast/caseopt.rb +66 -0
- data/lib/puppet/parser/ast/casestatement.rb +78 -0
- data/lib/puppet/parser/ast/classdef.rb +78 -0
- data/lib/puppet/parser/ast/compdef.rb +111 -0
- data/lib/puppet/parser/ast/component.rb +105 -0
- data/lib/puppet/parser/ast/hostclass.rb +82 -0
- data/lib/puppet/parser/ast/leaf.rb +86 -0
- data/lib/puppet/parser/ast/node.rb +103 -0
- data/lib/puppet/parser/ast/nodedef.rb +68 -0
- data/lib/puppet/parser/ast/objectdef.rb +336 -0
- data/lib/puppet/parser/ast/objectparam.rb +30 -0
- data/lib/puppet/parser/ast/objectref.rb +76 -0
- data/lib/puppet/parser/ast/selector.rb +60 -0
- data/lib/puppet/parser/ast/typedefaults.rb +45 -0
- data/lib/puppet/parser/ast/vardef.rb +44 -0
- data/lib/puppet/parser/interpreter.rb +31 -14
- data/lib/puppet/parser/lexer.rb +2 -4
- data/lib/puppet/parser/parser.rb +332 -242
- data/lib/puppet/parser/scope.rb +55 -38
- data/lib/puppet/server.rb +43 -44
- data/lib/puppet/server/authstore.rb +3 -6
- data/lib/puppet/server/ca.rb +5 -2
- data/lib/puppet/server/filebucket.rb +2 -4
- data/lib/puppet/server/fileserver.rb +28 -12
- data/lib/puppet/server/logger.rb +15 -4
- data/lib/puppet/server/master.rb +62 -7
- data/lib/puppet/sslcertificates.rb +41 -607
- data/lib/puppet/sslcertificates/ca.rb +291 -0
- data/lib/puppet/sslcertificates/certificate.rb +283 -0
- data/lib/puppet/statechange.rb +6 -1
- data/lib/puppet/storage.rb +67 -56
- data/lib/puppet/transaction.rb +25 -9
- data/lib/puppet/transportable.rb +102 -22
- data/lib/puppet/type.rb +1096 -315
- data/lib/puppet/type/component.rb +30 -21
- data/lib/puppet/type/cron.rb +409 -448
- data/lib/puppet/type/exec.rb +234 -174
- data/lib/puppet/type/group.rb +65 -82
- data/lib/puppet/type/nameservice.rb +247 -3
- data/lib/puppet/type/nameservice/netinfo.rb +29 -40
- data/lib/puppet/type/nameservice/objectadd.rb +52 -66
- data/lib/puppet/type/nameservice/posix.rb +6 -194
- data/lib/puppet/type/package.rb +447 -295
- data/lib/puppet/type/package/apt.rb +51 -50
- data/lib/puppet/type/package/bsd.rb +82 -0
- data/lib/puppet/type/package/dpkg.rb +85 -88
- data/lib/puppet/type/package/rpm.rb +67 -63
- data/lib/puppet/type/package/sun.rb +119 -98
- data/lib/puppet/type/package/yum.rb +41 -37
- data/lib/puppet/type/parsedtype.rb +295 -0
- data/lib/puppet/type/parsedtype/host.rb +143 -0
- data/lib/puppet/type/parsedtype/port.rb +232 -0
- data/lib/puppet/type/parsedtype/sshkey.rb +129 -0
- data/lib/puppet/type/pfile.rb +484 -460
- data/lib/puppet/type/pfile/checksum.rb +237 -181
- data/lib/puppet/type/pfile/content.rb +67 -0
- data/lib/puppet/type/pfile/ensure.rb +212 -0
- data/lib/puppet/type/pfile/group.rb +106 -105
- data/lib/puppet/type/pfile/mode.rb +98 -101
- data/lib/puppet/type/pfile/source.rb +228 -209
- data/lib/puppet/type/pfile/type.rb +18 -21
- data/lib/puppet/type/pfile/uid.rb +127 -130
- data/lib/puppet/type/pfilebucket.rb +68 -63
- data/lib/puppet/type/schedule.rb +341 -0
- data/lib/puppet/type/service.rb +351 -255
- data/lib/puppet/type/service/base.rb +9 -14
- data/lib/puppet/type/service/debian.rb +32 -38
- data/lib/puppet/type/service/init.rb +130 -130
- data/lib/puppet/type/service/smf.rb +48 -20
- data/lib/puppet/type/state.rb +229 -16
- data/lib/puppet/type/symlink.rb +51 -63
- data/lib/puppet/type/tidy.rb +105 -102
- data/lib/puppet/type/user.rb +118 -180
- data/lib/puppet/util.rb +100 -6
- data/test/certmgr/certmgr.rb +0 -1
- data/test/client/client.rb +4 -4
- data/test/executables/puppetbin.rb +7 -14
- data/test/executables/puppetca.rb +18 -24
- data/test/executables/puppetd.rb +7 -16
- data/test/executables/puppetmasterd.rb +7 -9
- data/test/executables/puppetmodule.rb +11 -16
- data/test/language/ast.rb +11 -7
- data/test/language/interpreter.rb +1 -1
- data/test/language/scope.rb +2 -0
- data/test/language/snippets.rb +30 -5
- data/test/language/transportable.rb +77 -0
- data/test/other/config.rb +316 -0
- data/test/other/events.rb +22 -21
- data/test/other/log.rb +14 -14
- data/test/other/metrics.rb +4 -8
- data/test/other/overrides.rb +5 -5
- data/test/other/relationships.rb +4 -2
- data/test/other/storage.rb +64 -3
- data/test/other/transactions.rb +20 -20
- data/test/parser/parser.rb +7 -4
- data/test/puppet/conffiles.rb +12 -12
- data/test/puppet/defaults.rb +13 -11
- data/test/puppet/utiltest.rb +14 -11
- data/test/puppettest.rb +156 -48
- data/test/server/bucket.rb +2 -2
- data/test/server/fileserver.rb +6 -6
- data/test/server/logger.rb +19 -11
- data/test/server/master.rb +33 -4
- data/test/server/server.rb +2 -7
- data/test/types/basic.rb +5 -7
- data/test/types/component.rb +22 -18
- data/test/types/cron.rb +111 -44
- data/test/types/exec.rb +116 -59
- data/test/types/file.rb +262 -137
- data/test/types/filebucket.rb +13 -15
- data/test/types/fileignoresource.rb +12 -16
- data/test/types/filesources.rb +73 -48
- data/test/types/filetype.rb +13 -15
- data/test/types/group.rb +15 -13
- data/test/types/host.rb +146 -0
- data/test/types/package.rb +74 -63
- data/test/types/port.rb +139 -0
- data/test/types/query.rb +8 -8
- data/test/types/schedule.rb +335 -0
- data/test/types/service.rb +137 -21
- data/test/types/sshkey.rb +140 -0
- data/test/types/symlink.rb +3 -5
- data/test/types/tidy.rb +5 -14
- data/test/types/type.rb +67 -11
- data/test/types/user.rb +25 -23
- metadata +186 -122
- data/lib/puppet/type/pfile/create.rb +0 -108
- data/lib/puppet/type/pprocess.rb +0 -97
- data/lib/puppet/type/typegen.rb +0 -149
- data/lib/puppet/type/typegen/filerecord.rb +0 -243
- data/lib/puppet/type/typegen/filetype.rb +0 -316
- data/test/other/state.rb +0 -106
@@ -1,70 +1,71 @@
|
|
1
1
|
module Puppet
|
2
|
-
|
2
|
+
Puppet.type(:package).newpkgtype(:apt, :dpkg) do
|
3
3
|
# A derivative of DPKG; this is how most people actually manage
|
4
4
|
# Debian boxes, and the only thing that differs is that it can
|
5
5
|
# install packages from remote sites.
|
6
|
-
module APT
|
7
|
-
include DPKG
|
8
6
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
# Install a package using 'apt-get'. This function needs to support
|
8
|
+
# installing a specific version.
|
9
|
+
def install
|
10
|
+
should = self.should(:ensure)
|
13
11
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
12
|
+
str = self.name
|
13
|
+
case should
|
14
|
+
when true, false, Symbol
|
15
|
+
# pass
|
16
|
+
else
|
17
|
+
# Add the package version
|
18
|
+
str += "=%s" % should
|
19
|
+
end
|
20
|
+
cmd = "apt-get -q -y install %s" % str
|
23
21
|
|
24
|
-
|
25
|
-
|
22
|
+
self.info "Executing %s" % cmd.inspect
|
23
|
+
output = %x{#{cmd} 2>&1}
|
26
24
|
|
27
|
-
|
28
|
-
|
29
|
-
end
|
25
|
+
unless $? == 0
|
26
|
+
raise Puppet::PackageError.new(output)
|
30
27
|
end
|
28
|
+
end
|
31
29
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
unless $? == 0
|
38
|
-
raise Puppet::PackageError.new(output)
|
39
|
-
end
|
30
|
+
# What's the latest package version available?
|
31
|
+
def latest
|
32
|
+
cmd = "apt-cache showpkg %s" % self.name
|
33
|
+
output = %x{#{cmd} 2>&1}
|
40
34
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
if version =~ /^([^\(]+)\(/
|
45
|
-
$1
|
46
|
-
else
|
47
|
-
self.warning "Could not match version '%s'" % version
|
48
|
-
nil
|
49
|
-
end
|
50
|
-
}.reject { |vers| vers.nil? }.sort[-1]
|
35
|
+
unless $? == 0
|
36
|
+
raise Puppet::PackageError.new(output)
|
37
|
+
end
|
51
38
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
39
|
+
if output =~ /Versions:\s*\n((\n|.)+)^$/
|
40
|
+
versions = $1
|
41
|
+
version = versions.split(/\n/).collect { |version|
|
42
|
+
if version =~ /^([^\(]+)\(/
|
43
|
+
$1
|
44
|
+
else
|
45
|
+
self.warning "Could not match version '%s'" % version
|
46
|
+
nil
|
57
47
|
end
|
48
|
+
}.reject { |vers| vers.nil? }.sort[-1]
|
58
49
|
|
59
|
-
|
60
|
-
|
61
|
-
|
50
|
+
unless version
|
51
|
+
self.debug "No latest version"
|
52
|
+
if Puppet[:debug]
|
53
|
+
print output
|
54
|
+
end
|
62
55
|
end
|
63
|
-
end
|
64
56
|
|
65
|
-
|
66
|
-
|
57
|
+
return version
|
58
|
+
else
|
59
|
+
self.err "Could not match string"
|
67
60
|
end
|
68
61
|
end
|
62
|
+
|
63
|
+
def update
|
64
|
+
self.install
|
65
|
+
end
|
66
|
+
|
67
|
+
def versionable?
|
68
|
+
true
|
69
|
+
end
|
69
70
|
end
|
70
71
|
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Puppet
|
2
|
+
Puppet.type(:package).newpkgtype(:bsd) do
|
3
|
+
def install
|
4
|
+
should = self.should(:ensure)
|
5
|
+
|
6
|
+
unless self[:source]
|
7
|
+
raise Puppet::Error,
|
8
|
+
"You must specify a package source for BSD packages"
|
9
|
+
end
|
10
|
+
|
11
|
+
cmd = "pkg_add #{self[:source]}"
|
12
|
+
|
13
|
+
self.info "Executing %s" % cmd.inspect
|
14
|
+
output = %x{#{cmd} 2>&1}
|
15
|
+
|
16
|
+
unless $? == 0
|
17
|
+
raise Puppet::PackageError.new(output)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def query
|
22
|
+
hash = {}
|
23
|
+
# list out our specific package
|
24
|
+
info = %x{pkg_info #{self.name} 2>/dev/null}
|
25
|
+
|
26
|
+
# Search for the version info
|
27
|
+
if info =~ /Information for #{self.name}-(\S+)/
|
28
|
+
hash[:version] = $1
|
29
|
+
hash[:ensure] = :present
|
30
|
+
else
|
31
|
+
return nil
|
32
|
+
end
|
33
|
+
|
34
|
+
# And the description
|
35
|
+
if info =~ /Comment:\s*\n(.+)/
|
36
|
+
hash[:description] = $1
|
37
|
+
end
|
38
|
+
|
39
|
+
return hash
|
40
|
+
end
|
41
|
+
|
42
|
+
def list
|
43
|
+
packages = []
|
44
|
+
|
45
|
+
# list out all of the packages
|
46
|
+
open("| pkg_info -a") { |process|
|
47
|
+
# our regex for matching dpkg output
|
48
|
+
regex = %r{^(\S+)-(\d\S+)\s+(.+)}
|
49
|
+
fields = [:name, :version, :description]
|
50
|
+
hash = {}
|
51
|
+
|
52
|
+
# now turn each returned line into a package object
|
53
|
+
process.each { |line|
|
54
|
+
if match = regex.match(line)
|
55
|
+
hash.clear
|
56
|
+
|
57
|
+
fields.zip(match.captures) { |field,value|
|
58
|
+
hash[field] = value
|
59
|
+
}
|
60
|
+
packages.push Puppet.type(:package).installedpkg(hash)
|
61
|
+
else
|
62
|
+
raise Puppet::DevError,
|
63
|
+
"Failed to match dpkg line %s" % line
|
64
|
+
end
|
65
|
+
}
|
66
|
+
}
|
67
|
+
ENV["COLUMNS"] = oldcol
|
68
|
+
|
69
|
+
return packages
|
70
|
+
end
|
71
|
+
|
72
|
+
def uninstall
|
73
|
+
cmd = "pkg_delete %s" % self.name
|
74
|
+
output = %x{#{cmd} 2>&1}
|
75
|
+
if $? != 0
|
76
|
+
raise Puppet::PackageError.new(output)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# $Id: bsd.rb 836 2006-01-17 22:11:51Z luke $
|
@@ -1,108 +1,105 @@
|
|
1
1
|
module Puppet
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
2
|
+
Puppet.type(:package).newpkgtype(:dpkg) do
|
3
|
+
def query
|
4
|
+
packages = []
|
5
|
+
|
6
|
+
# dpkg only prints as many columns as you have available
|
7
|
+
# which means we don't get all of the info
|
8
|
+
# stupid stupid
|
9
|
+
oldcol = ENV["COLUMNS"]
|
10
|
+
ENV["COLUMNS"] = "500"
|
11
|
+
fields = [:desired, :status, :error, :name, :version, :description]
|
12
|
+
|
13
|
+
hash = {}
|
14
|
+
# list out our specific package
|
15
|
+
open("| dpkg -l %s 2>/dev/null" % self.name) { |process|
|
16
|
+
# our regex for matching dpkg output
|
17
|
+
regex = %r{^(.)(.)(.)\s(\S+)\s+(\S+)\s+(.+)$}
|
18
|
+
|
19
|
+
# we only want the last line
|
20
|
+
lines = process.readlines
|
21
|
+
# we've got four header lines, so we should expect all of those
|
22
|
+
# plus our output
|
23
|
+
if lines.length < 5
|
24
|
+
return nil
|
25
|
+
end
|
26
|
+
|
27
|
+
line = lines[-1]
|
28
|
+
|
29
|
+
if match = regex.match(line)
|
30
|
+
fields.zip(match.captures) { |field,value|
|
31
|
+
hash[field] = value
|
32
|
+
}
|
33
|
+
#packages.push Puppet.type(:package).installedpkg(hash)
|
34
|
+
else
|
35
|
+
raise Puppet::DevError,
|
36
|
+
"failed to match dpkg line %s" % line
|
37
|
+
end
|
38
|
+
}
|
39
|
+
ENV["COLUMNS"] = oldcol
|
40
|
+
|
41
|
+
if hash[:error] != " "
|
42
|
+
raise Puppet::PackageError.new(
|
43
|
+
"Package %s, version %s is in error state: %s" %
|
44
|
+
[hash[:name], hash[:version], hash[:error]]
|
45
|
+
)
|
46
|
+
end
|
14
47
|
|
48
|
+
if hash[:status] == "i"
|
49
|
+
hash[:ensure] = :present
|
50
|
+
else
|
51
|
+
hash[:ensure] = :absent
|
52
|
+
end
|
53
|
+
|
54
|
+
return hash
|
55
|
+
end
|
56
|
+
|
57
|
+
def list
|
58
|
+
packages = []
|
59
|
+
|
60
|
+
# dpkg only prints as many columns as you have available
|
61
|
+
# which means we don't get all of the info
|
62
|
+
# stupid stupid
|
63
|
+
oldcol = ENV["COLUMNS"]
|
64
|
+
ENV["COLUMNS"] = "500"
|
65
|
+
|
66
|
+
# list out all of the packages
|
67
|
+
open("| dpkg -l") { |process|
|
68
|
+
# our regex for matching dpkg output
|
69
|
+
regex = %r{^(\S+)\s+(\S+)\s+(\S+)\s+(.+)$}
|
70
|
+
fields = [:status, :name, :absent, :description]
|
15
71
|
hash = {}
|
16
|
-
# list out our specific package
|
17
|
-
open("| dpkg -l %s 2>/dev/null" % self.name) { |process|
|
18
|
-
# our regex for matching dpkg output
|
19
|
-
regex = %r{^(.)(.)(.)\s(\S+)\s+(\S+)\s+(.+)$}
|
20
|
-
|
21
|
-
# we only want the last line
|
22
|
-
lines = process.readlines
|
23
|
-
# we've got four header lines, so we should expect all of those
|
24
|
-
# plus our output
|
25
|
-
if lines.length < 5
|
26
|
-
return nil
|
27
|
-
end
|
28
72
|
|
29
|
-
|
73
|
+
5.times { process.gets } # throw away the header
|
30
74
|
|
75
|
+
# now turn each returned line into a package object
|
76
|
+
process.each { |line|
|
31
77
|
if match = regex.match(line)
|
78
|
+
hash.clear
|
79
|
+
|
32
80
|
fields.zip(match.captures) { |field,value|
|
33
81
|
hash[field] = value
|
34
82
|
}
|
35
|
-
|
83
|
+
packages.push Puppet.type(:package).installedpkg(hash)
|
36
84
|
else
|
37
85
|
raise Puppet::DevError,
|
38
|
-
"
|
86
|
+
"Failed to match dpkg line %s" % line
|
39
87
|
end
|
40
88
|
}
|
41
|
-
|
42
|
-
|
43
|
-
if hash[:error] != " "
|
44
|
-
raise Puppet::PackageError.new(
|
45
|
-
"Package %s, version %s is in error state: %s" %
|
46
|
-
[hash[:name], hash[:install], hash[:error]]
|
47
|
-
)
|
48
|
-
end
|
49
|
-
|
50
|
-
if hash[:status] == "i"
|
51
|
-
hash[:install] = hash[:version]
|
52
|
-
else
|
53
|
-
hash[:install] = :notinstalled
|
54
|
-
end
|
55
|
-
|
56
|
-
return hash
|
57
|
-
end
|
58
|
-
|
59
|
-
def list
|
60
|
-
packages = []
|
61
|
-
|
62
|
-
# dpkg only prints as many columns as you have available
|
63
|
-
# which means we don't get all of the info
|
64
|
-
# stupid stupid
|
65
|
-
oldcol = ENV["COLUMNS"]
|
66
|
-
ENV["COLUMNS"] = "500"
|
67
|
-
|
68
|
-
# list out all of the packages
|
69
|
-
open("| dpkg -l") { |process|
|
70
|
-
# our regex for matching dpkg output
|
71
|
-
regex = %r{^(\S+)\s+(\S+)\s+(\S+)\s+(.+)$}
|
72
|
-
fields = [:status, :name, :install, :description]
|
73
|
-
hash = {}
|
74
|
-
|
75
|
-
5.times { process.gets } # throw away the header
|
76
|
-
|
77
|
-
# now turn each returned line into a package object
|
78
|
-
process.each { |line|
|
79
|
-
if match = regex.match(line)
|
80
|
-
hash.clear
|
81
|
-
|
82
|
-
fields.zip(match.captures) { |field,value|
|
83
|
-
hash[field] = value
|
84
|
-
}
|
85
|
-
packages.push Puppet::Type::Package.installedpkg(hash)
|
86
|
-
else
|
87
|
-
raise Puppet::DevError,
|
88
|
-
"Failed to match dpkg line %s" % line
|
89
|
-
end
|
90
|
-
}
|
91
|
-
}
|
92
|
-
ENV["COLUMNS"] = oldcol
|
89
|
+
}
|
90
|
+
ENV["COLUMNS"] = oldcol
|
93
91
|
|
94
|
-
|
95
|
-
|
92
|
+
return packages
|
93
|
+
end
|
96
94
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
end
|
95
|
+
def uninstall
|
96
|
+
cmd = "dpkg -r %s" % self.name
|
97
|
+
output = %x{#{cmd} 2>&1}
|
98
|
+
if $? != 0
|
99
|
+
raise Puppet::PackageError.new(output)
|
103
100
|
end
|
104
101
|
end
|
105
102
|
end
|
106
103
|
end
|
107
104
|
|
108
|
-
# $Id: dpkg.rb
|
105
|
+
# $Id: dpkg.rb 832 2006-01-17 07:11:50Z luke $
|
@@ -1,80 +1,84 @@
|
|
1
1
|
module Puppet
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
}
|
10
|
-
|
11
|
-
cmd = "rpm -q #{self.name} --qf '%s\n'" %
|
12
|
-
"%{NAME} %{VERSION}-%{RELEASE}"
|
2
|
+
Puppet.type(:package).newpkgtype(:rpm) do
|
3
|
+
def query
|
4
|
+
fields = {
|
5
|
+
:name => "NAME",
|
6
|
+
:version => "VERSION",
|
7
|
+
:description => "DESCRIPTION"
|
8
|
+
}
|
13
9
|
|
14
|
-
|
15
|
-
|
10
|
+
cmd = "rpm -q #{self.name} --qf '%s\n'" %
|
11
|
+
"%{NAME} %{VERSION}-%{RELEASE}"
|
16
12
|
|
17
|
-
|
18
|
-
|
19
|
-
|
13
|
+
self.debug "Executing %s" % cmd.inspect
|
14
|
+
# list out all of the packages
|
15
|
+
output = %x{#{cmd} 2>/dev/null}.chomp
|
20
16
|
|
21
|
-
|
22
|
-
#
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
hash[field] = value
|
28
|
-
}
|
29
|
-
else
|
30
|
-
raise Puppet::DevError,
|
31
|
-
"Failed to match rpm output '%s'" %
|
32
|
-
output
|
33
|
-
end
|
17
|
+
if $? != 0
|
18
|
+
#if Puppet[:debug]
|
19
|
+
# puts output
|
20
|
+
#end
|
21
|
+
return nil
|
22
|
+
end
|
34
23
|
|
35
|
-
|
24
|
+
regex = %r{^(\S+)\s+(\S+)}
|
25
|
+
#fields = [:name, :ensure, :description]
|
26
|
+
fields = [:name, :version]
|
27
|
+
hash = {}
|
28
|
+
if match = regex.match(output)
|
29
|
+
fields.zip(match.captures) { |field,value|
|
30
|
+
hash[field] = value
|
31
|
+
}
|
32
|
+
else
|
33
|
+
raise Puppet::DevError,
|
34
|
+
"Failed to match rpm output '%s'" %
|
35
|
+
output
|
36
36
|
end
|
37
37
|
|
38
|
-
|
39
|
-
packages = []
|
38
|
+
hash[:ensure] = :present
|
40
39
|
|
41
|
-
|
42
|
-
|
43
|
-
# our regex for matching dpkg output
|
44
|
-
regex = %r{^(\S+)\s+(\S+)}
|
45
|
-
fields = [:name, :install]
|
46
|
-
hash = {}
|
40
|
+
return hash
|
41
|
+
end
|
47
42
|
|
48
|
-
|
49
|
-
|
50
|
-
if match = regex.match(line)
|
51
|
-
hash.clear
|
43
|
+
def list
|
44
|
+
packages = []
|
52
45
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
46
|
+
# list out all of the packages
|
47
|
+
open("| rpm -q -a --qf '%{NAME} %{VERSION}\n'") { |process|
|
48
|
+
# our regex for matching dpkg output
|
49
|
+
regex = %r{^(\S+)\s+(\S+)}
|
50
|
+
fields = [:name, :ensure]
|
51
|
+
hash = {}
|
52
|
+
|
53
|
+
# now turn each returned line into a package object
|
54
|
+
process.each { |line|
|
55
|
+
if match = regex.match(line)
|
56
|
+
hash.clear
|
57
|
+
|
58
|
+
fields.zip(match.captures) { |field,value|
|
59
|
+
hash[field] = value
|
60
|
+
}
|
61
|
+
packages.push Puppet.type(:package).installedpkg(hash)
|
62
|
+
else
|
63
|
+
raise "failed to match rpm line %s" % line
|
64
|
+
end
|
61
65
|
}
|
66
|
+
}
|
62
67
|
|
63
|
-
|
64
|
-
|
68
|
+
return packages
|
69
|
+
end
|
65
70
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
+
# we need package retrieval mechanisms before we can have package
|
72
|
+
# installation mechanisms...
|
73
|
+
#type.install = proc { |pkg|
|
74
|
+
# raise "installation not implemented yet"
|
75
|
+
#}
|
71
76
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
end
|
77
|
+
def uninstall
|
78
|
+
cmd = "rpm -e %s" % self.name
|
79
|
+
output = %x{#{cmd}}
|
80
|
+
if $? != 0
|
81
|
+
raise output
|
78
82
|
end
|
79
83
|
end
|
80
84
|
end
|