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.
- data/CHANGELOG +156 -0
- data/README +2 -2
- data/Rakefile +6 -6
- data/bin/filebucket +212 -0
- data/bin/puppet +2 -0
- data/bin/puppetca +2 -4
- data/bin/puppetd +16 -15
- data/bin/puppetdoc +46 -496
- data/bin/puppetmasterd +3 -5
- data/bin/puppetrun +8 -3
- data/bin/ralsh +271 -0
- data/conf/redhat/client.init +1 -1
- data/conf/redhat/puppet.spec +13 -2
- data/conf/solaris/pkginfo +1 -1
- data/ext/puppet-test +374 -0
- data/install.rb +40 -31
- data/lib/puppet.rb +39 -4
- data/lib/puppet/config_stores/rest.rb +60 -0
- data/lib/puppet/configuration.rb +312 -17
- data/lib/puppet/external/event-loop/event-loop.rb +4 -0
- data/lib/puppet/external/gratr/rdot.rb +1 -1
- data/lib/puppet/fact_stores/yaml.rb +42 -0
- data/lib/puppet/feature/base.rb +4 -1
- data/lib/puppet/metatype/attributes.rb +20 -43
- data/lib/puppet/metatype/container.rb +1 -36
- data/lib/puppet/metatype/evaluation.rb +48 -19
- data/lib/puppet/metatype/instances.rb +35 -1
- data/lib/puppet/metatype/metaparams.rb +23 -19
- data/lib/puppet/metatype/providers.rb +25 -38
- data/lib/puppet/network/client/ca.rb +8 -5
- data/lib/puppet/network/client/master.rb +59 -17
- data/lib/puppet/network/handler.rb +18 -1
- data/lib/puppet/network/handler/ca.rb +9 -3
- data/lib/puppet/network/handler/facts.rb +70 -0
- data/lib/puppet/network/handler/filebucket.rb +4 -1
- data/lib/puppet/network/handler/fileserver.rb +65 -21
- data/lib/puppet/network/handler/master.rb +6 -3
- data/lib/puppet/network/handler/report.rb +12 -26
- data/lib/puppet/network/handler/resource.rb +14 -2
- data/lib/puppet/network/handler/runner.rb +5 -1
- data/lib/puppet/network/handler/status.rb +5 -1
- data/lib/puppet/network/server/mongrel.rb +4 -4
- data/lib/puppet/network/server/webrick.rb +14 -3
- data/lib/puppet/parameter.rb +30 -25
- data/lib/puppet/parser/ast.rb +1 -6
- data/lib/puppet/parser/ast/component.rb +23 -20
- data/lib/puppet/parser/ast/hostclass.rb +7 -11
- data/lib/puppet/parser/ast/leaf.rb +4 -1
- data/lib/puppet/parser/ast/node.rb +6 -8
- data/lib/puppet/parser/functions.rb +7 -4
- data/lib/puppet/parser/interpreter.rb +155 -205
- data/lib/puppet/parser/lexer.rb +35 -2
- data/lib/puppet/parser/parser.rb +705 -612
- data/lib/puppet/parser/resource.rb +91 -48
- data/lib/puppet/parser/resource/param.rb +52 -29
- data/lib/puppet/parser/scope.rb +28 -23
- data/lib/puppet/pgraph.rb +26 -21
- data/lib/puppet/propertychange.rb +12 -12
- data/lib/puppet/provider.rb +102 -31
- data/lib/puppet/provider/cron/crontab.rb +7 -8
- data/lib/puppet/provider/group/groupadd.rb +4 -4
- data/lib/puppet/provider/group/pw.rb +3 -3
- data/lib/puppet/provider/mount.rb +8 -8
- data/lib/puppet/provider/mount/netinfo.rb +5 -5
- data/lib/puppet/provider/mount/parsed.rb +2 -2
- data/lib/puppet/provider/nameservice.rb +19 -31
- data/lib/puppet/provider/nameservice/netinfo.rb +14 -14
- data/lib/puppet/provider/nameservice/objectadd.rb +4 -4
- data/lib/puppet/provider/nameservice/pw.rb +4 -4
- data/lib/puppet/provider/package.rb +31 -0
- data/lib/puppet/provider/package/appdmg.rb +118 -0
- data/lib/puppet/provider/package/apple.rb +18 -16
- data/lib/puppet/provider/package/apt.rb +13 -15
- data/lib/puppet/provider/package/aptitude.rb +5 -3
- data/lib/puppet/provider/package/aptrpm.rb +9 -11
- data/lib/puppet/provider/package/blastwave.rb +9 -9
- data/lib/puppet/provider/package/darwinport.rb +12 -11
- data/lib/puppet/provider/package/dpkg.rb +20 -12
- data/lib/puppet/provider/package/fink.rb +87 -0
- data/lib/puppet/provider/package/freebsd.rb +10 -11
- data/lib/puppet/provider/package/gem.rb +15 -15
- data/lib/puppet/provider/package/openbsd.rb +12 -17
- data/lib/puppet/provider/package/pkgdmg.rb +90 -16
- data/lib/puppet/provider/package/portage.rb +20 -14
- data/lib/puppet/provider/package/ports.rb +15 -13
- data/lib/puppet/provider/package/rpm.rb +20 -23
- data/lib/puppet/provider/package/rug.rb +6 -8
- data/lib/puppet/provider/package/sun.rb +20 -18
- data/lib/puppet/provider/package/sunfreeware.rb +2 -2
- data/lib/puppet/provider/package/up2date.rb +6 -10
- data/lib/puppet/provider/package/urpmi.rb +51 -0
- data/lib/puppet/provider/package/yum.rb +15 -13
- data/lib/puppet/provider/parsedfile.rb +53 -63
- data/lib/puppet/provider/service/base.rb +13 -15
- data/lib/puppet/provider/service/debian.rb +4 -4
- data/lib/puppet/provider/service/gentoo.rb +4 -4
- data/lib/puppet/provider/service/init.rb +22 -15
- data/lib/puppet/provider/service/redhat.rb +6 -6
- data/lib/puppet/provider/service/smf.rb +6 -6
- data/lib/puppet/provider/user/netinfo.rb +5 -5
- data/lib/puppet/provider/user/pw.rb +10 -5
- data/lib/puppet/provider/user/useradd.rb +9 -14
- data/lib/puppet/provider/zone/solaris.rb +80 -45
- data/lib/puppet/rails.rb +3 -34
- data/lib/puppet/rails/database/schema.rb +45 -24
- data/lib/puppet/rails/fact_value.rb +1 -0
- data/lib/puppet/rails/host.rb +69 -40
- data/lib/puppet/rails/param_name.rb +3 -8
- data/lib/puppet/rails/param_value.rb +2 -1
- data/lib/puppet/rails/puppet_class.rb +0 -2
- data/lib/puppet/rails/puppet_tag.rb +5 -0
- data/lib/puppet/rails/resource.rb +41 -17
- data/lib/puppet/rails/resource_tag.rb +4 -0
- data/lib/puppet/reference/configuration.rb +149 -0
- data/lib/puppet/reference/function.rb +13 -0
- data/lib/puppet/reference/network.rb +37 -0
- data/lib/puppet/reference/providers.rb +118 -0
- data/lib/puppet/reference/report.rb +21 -0
- data/lib/puppet/reference/type.rb +152 -0
- data/lib/puppet/reports/rrdgraph.rb +21 -7
- data/lib/puppet/reports/tagmail.rb +4 -1
- data/lib/puppet/sslcertificates.rb +1 -49
- data/lib/puppet/sslcertificates/ca.rb +2 -79
- data/lib/puppet/sslcertificates/inventory.rb +0 -10
- data/lib/puppet/transaction.rb +24 -41
- data/lib/puppet/transaction/report.rb +27 -1
- data/lib/puppet/type.rb +7 -43
- data/lib/puppet/type/component.rb +198 -124
- data/lib/puppet/type/cron.rb +51 -42
- data/lib/puppet/type/exec.rb +20 -19
- data/lib/puppet/type/group.rb +6 -55
- data/lib/puppet/type/host.rb +16 -37
- data/lib/puppet/type/mount.rb +30 -17
- data/lib/puppet/type/notify.rb +7 -8
- data/lib/puppet/type/package.rb +44 -80
- data/lib/puppet/type/pfile.rb +50 -41
- data/lib/puppet/type/pfile/checksum.rb +82 -95
- data/lib/puppet/type/pfile/content.rb +21 -25
- data/lib/puppet/type/pfile/ensure.rb +32 -30
- data/lib/puppet/type/pfile/group.rb +21 -26
- data/lib/puppet/type/pfile/mode.rb +25 -32
- data/lib/puppet/type/pfile/owner.rb +23 -27
- data/lib/puppet/type/pfile/source.rb +42 -33
- data/lib/puppet/type/pfile/target.rb +20 -18
- data/lib/puppet/type/pfile/type.rb +6 -7
- data/lib/puppet/type/pfilebucket.rb +3 -3
- data/lib/puppet/type/port.rb +5 -7
- data/lib/puppet/type/property.rb +58 -61
- data/lib/puppet/type/resources.rb +12 -8
- data/lib/puppet/type/schedule.rb +8 -8
- data/lib/puppet/type/service.rb +26 -33
- data/lib/puppet/type/sshkey.rb +6 -7
- data/lib/puppet/type/tidy.rb +41 -35
- data/lib/puppet/type/user.rb +34 -67
- data/lib/puppet/type/yumrepo.rb +27 -12
- data/lib/puppet/type/zone.rb +71 -110
- data/lib/puppet/util.rb +46 -61
- data/lib/puppet/util/autoload.rb +59 -47
- data/lib/puppet/util/config.rb +160 -18
- data/lib/puppet/util/config_store.rb +61 -0
- data/lib/puppet/util/fact_store.rb +60 -0
- data/lib/puppet/util/instance_loader.rb +74 -0
- data/lib/puppet/util/loadedfile.rb +5 -8
- data/lib/puppet/util/metric.rb +17 -25
- data/lib/puppet/util/posix.rb +39 -7
- data/lib/puppet/util/provider_features.rb +9 -1
- data/lib/puppet/util/rails/collection_merger.rb +16 -1
- data/lib/puppet/util/reference.rb +189 -0
- data/lib/puppet/util/storage.rb +2 -2
- data/lib/puppet/util/subclass_loader.rb +9 -2
- data/test/language/ast.rb +4 -148
- data/test/language/ast/component.rb +10 -1
- data/test/language/collector.rb +1 -191
- data/test/language/interpreter.rb +284 -327
- data/test/language/lexer.rb +13 -1
- data/test/language/node.rb +1 -1
- data/test/language/parser.rb +17 -4
- data/test/language/resource.rb +67 -101
- data/test/language/scope.rb +18 -3
- data/test/language/snippets.rb +114 -151
- data/test/lib/puppettest.rb +13 -0
- data/test/lib/puppettest/exetest.rb +7 -0
- data/test/lib/puppettest/fakes.rb +39 -28
- data/test/lib/puppettest/railstesting.rb +1 -1
- data/test/lib/puppettest/support/assertions.rb +2 -2
- data/test/lib/puppettest/support/collection.rb +30 -0
- data/test/network/client/ca.rb +27 -1
- data/test/network/client/client.rb +3 -3
- data/test/network/client/master.rb +102 -1
- data/test/network/handler/ca.rb +35 -1
- data/test/network/handler/facts.rb +112 -0
- data/test/network/handler/fileserver.rb +25 -1
- data/test/network/handler/handler.rb +2 -2
- data/test/network/handler/master.rb +2 -49
- data/test/network/handler/resource.rb +5 -6
- data/test/network/server/mongrel_test.rb +65 -0
- data/test/network/server/webrick.rb +2 -2
- data/test/network/xmlrpc/client.rb +2 -1
- data/test/network/xmlrpc/processor.rb +2 -1
- data/test/other/pgraph.rb +6 -5
- data/test/other/propertychange.rb +11 -12
- data/test/other/report.rb +44 -27
- data/test/other/transactions.rb +17 -16
- data/test/puppet/tc_suidmanager.rb +2 -2
- data/test/rails/ast.rb +74 -0
- data/test/rails/collection.rb +214 -0
- data/test/rails/host.rb +49 -24
- data/test/rails/interpreter.rb +91 -0
- data/test/rails/railsparameter.rb +22 -11
- data/test/rails/railsresource.rb +140 -7
- data/test/ral/manager/attributes.rb +37 -13
- data/test/ral/manager/instances.rb +82 -0
- data/test/ral/manager/provider.rb +60 -22
- data/test/ral/manager/type.rb +9 -6
- data/test/ral/providers/cron/crontab.rb +59 -7
- data/test/ral/providers/group.rb +7 -7
- data/test/ral/providers/host/netinfo.rb +5 -6
- data/test/ral/providers/host/parsed.rb +4 -4
- data/test/ral/providers/mount/parsed.rb +11 -6
- data/test/ral/providers/nameservice.rb +2 -2
- data/test/ral/providers/package.rb +39 -14
- data/test/ral/providers/package/apt.rb +72 -3
- data/test/ral/providers/package/aptitude.rb +15 -12
- data/test/ral/providers/package/aptrpm.rb +3 -3
- data/test/ral/providers/package/dpkg.rb +2 -2
- data/test/ral/providers/parsedfile.rb +114 -88
- data/test/ral/providers/{parsedport.rb → port/parsed.rb} +1 -1
- data/test/ral/providers/provider.rb +93 -13
- data/test/ral/providers/service.rb +52 -26
- data/test/ral/providers/sshkey/parsed.rb +3 -3
- data/test/ral/providers/user.rb +19 -20
- data/test/ral/providers/user/useradd.rb +1 -5
- data/test/ral/types/cron.rb +49 -36
- data/test/ral/types/file.rb +38 -35
- data/test/ral/types/file/target.rb +4 -4
- data/test/ral/types/filesources.rb +24 -22
- data/test/ral/types/group.rb +4 -2
- data/test/ral/types/host.rb +17 -10
- data/test/ral/types/mount.rb +40 -23
- data/test/ral/types/package.rb +62 -5
- data/test/ral/types/parameter.rb +2 -2
- data/test/ral/types/property.rb +27 -20
- data/test/ral/types/resources.rb +4 -16
- data/test/ral/types/schedule.rb +2 -2
- data/test/ral/types/service.rb +2 -3
- data/test/ral/types/sshkey.rb +3 -3
- data/test/ral/types/tidy.rb +6 -15
- data/test/ral/types/user.rb +17 -17
- data/test/ral/types/yumrepo.rb +2 -2
- data/test/ral/types/zone.rb +71 -87
- data/test/util/autoload.rb +6 -21
- data/test/util/config.rb +201 -101
- data/test/util/fact_store.rb +67 -0
- data/test/util/features.rb +9 -6
- data/test/util/instance_loader.rb +53 -0
- data/test/util/loadedfile.rb +17 -1
- data/test/util/metrics.rb +54 -57
- data/test/util/posixtest.rb +8 -11
- data/test/util/utiltest.rb +31 -2
- metadata +520 -492
- data/TODO +0 -4
- data/lib/puppet/network/client/logger.rb +0 -6
- data/lib/puppet/network/handler/logger.rb +0 -52
- data/lib/puppet/rails/database/001_add_indexes.rb +0 -38
- data/lib/puppet/type/parsedtype.rb +0 -219
- data/test/network/handler/logger.rb +0 -183
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
require 'puppet/provider/package'
|
|
1
2
|
# RPM packaging. Should work anywhere that has rpm installed.
|
|
2
|
-
Puppet::Type.type(:package).provide :rpm do
|
|
3
|
+
Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Provider::Package do
|
|
3
4
|
desc "RPM packaging support; should work anywhere with a working ``rpm``
|
|
4
5
|
binary."
|
|
5
6
|
|
|
@@ -10,7 +11,7 @@ Puppet::Type.type(:package).provide :rpm do
|
|
|
10
11
|
|
|
11
12
|
commands :rpm => "rpm"
|
|
12
13
|
|
|
13
|
-
def self.
|
|
14
|
+
def self.instances
|
|
14
15
|
packages = []
|
|
15
16
|
|
|
16
17
|
# list out all of the packages
|
|
@@ -30,7 +31,7 @@ Puppet::Type.type(:package).provide :rpm do
|
|
|
30
31
|
hash[field] = value
|
|
31
32
|
}
|
|
32
33
|
hash[:provider] = self.name
|
|
33
|
-
packages
|
|
34
|
+
packages << new(hash)
|
|
34
35
|
else
|
|
35
36
|
raise "failed to match rpm line %s" % line
|
|
36
37
|
end
|
|
@@ -47,7 +48,7 @@ Puppet::Type.type(:package).provide :rpm do
|
|
|
47
48
|
# a hash with entries :instance => fully versioned package name, and
|
|
48
49
|
# :ensure => version-release
|
|
49
50
|
def query
|
|
50
|
-
cmd = ["-q", @
|
|
51
|
+
cmd = ["-q", @resource[:name], "--nosignature", "--nodigest", "--qf", "#{NVRFORMAT} #{VERSIONSTRING}\n"]
|
|
51
52
|
|
|
52
53
|
begin
|
|
53
54
|
output = rpm(*cmd)
|
|
@@ -57,10 +58,10 @@ Puppet::Type.type(:package).provide :rpm do
|
|
|
57
58
|
|
|
58
59
|
regex = %r{^(\S+)\s+(\S+)}
|
|
59
60
|
fields = [:instance, :ensure]
|
|
60
|
-
|
|
61
|
+
attrs = {}
|
|
61
62
|
if match = regex.match(output)
|
|
62
63
|
fields.zip(match.captures) { |field,value|
|
|
63
|
-
|
|
64
|
+
attrs[field] = value
|
|
64
65
|
}
|
|
65
66
|
else
|
|
66
67
|
raise Puppet::DevError,
|
|
@@ -68,36 +69,36 @@ Puppet::Type.type(:package).provide :rpm do
|
|
|
68
69
|
output
|
|
69
70
|
end
|
|
70
71
|
|
|
71
|
-
@nvr =
|
|
72
|
+
@nvr = attrs[:instance]
|
|
72
73
|
|
|
73
|
-
return
|
|
74
|
+
return attrs
|
|
74
75
|
end
|
|
75
76
|
|
|
76
77
|
# Here we just retrieve the version from the file specified in the source.
|
|
77
78
|
def latest
|
|
78
|
-
unless source = @
|
|
79
|
-
@
|
|
79
|
+
unless source = @resource[:source]
|
|
80
|
+
@resource.fail "RPMs must specify a package source"
|
|
80
81
|
end
|
|
81
82
|
|
|
82
|
-
cmd = [command(:rpm), "-q", "--qf", "#{VERSIONSTRING}", "-p", "#{@
|
|
83
|
+
cmd = [command(:rpm), "-q", "--qf", "#{VERSIONSTRING}", "-p", "#{@resource[:source]}"]
|
|
83
84
|
version = execfail(cmd, Puppet::Error)
|
|
84
85
|
return version
|
|
85
86
|
end
|
|
86
87
|
|
|
87
88
|
def install
|
|
88
89
|
source = nil
|
|
89
|
-
unless source = @
|
|
90
|
-
@
|
|
90
|
+
unless source = @resource[:source]
|
|
91
|
+
@resource.fail "RPMs must specify a package source"
|
|
91
92
|
end
|
|
92
|
-
if
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
# RPM gets pissy if you try to install an already
|
|
94
|
+
# installed package
|
|
95
|
+
if @resource.should(:ensure) == @property_hash[:ensure] or
|
|
96
|
+
@resource.should(:ensure) == :latest && @property_hash[:ensure] == latest
|
|
96
97
|
return
|
|
97
98
|
end
|
|
98
99
|
|
|
99
100
|
flag = "-i"
|
|
100
|
-
if @
|
|
101
|
+
if @property_hash[:ensure] and @property_hash[:ensure] != :absent
|
|
101
102
|
flag = "-U"
|
|
102
103
|
end
|
|
103
104
|
|
|
@@ -112,14 +113,10 @@ Puppet::Type.type(:package).provide :rpm do
|
|
|
112
113
|
self.install
|
|
113
114
|
end
|
|
114
115
|
|
|
115
|
-
def versionable?
|
|
116
|
-
true
|
|
117
|
-
end
|
|
118
|
-
|
|
119
116
|
def nvr
|
|
120
117
|
query unless @nvr
|
|
121
118
|
@nvr
|
|
122
119
|
end
|
|
123
120
|
end
|
|
124
121
|
|
|
125
|
-
# $Id: rpm.rb
|
|
122
|
+
# $Id: rpm.rb 2595 2007-06-17 00:06:46Z luke $
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
Puppet.type(:package).provide :rug, :parent => :rpm do
|
|
2
2
|
desc "Support for suse ``rug`` package manager."
|
|
3
3
|
|
|
4
|
+
has_feature :versionable
|
|
5
|
+
|
|
4
6
|
commands :rug => "/usr/bin/rug"
|
|
5
7
|
defaultfor :operatingsystem => :suse
|
|
6
8
|
confine :operatingsystem => :suse
|
|
7
9
|
|
|
8
10
|
# Install a package using 'rug'.
|
|
9
11
|
def install
|
|
10
|
-
should = @
|
|
12
|
+
should = @resource.should(:ensure)
|
|
11
13
|
self.debug "Ensuring => #{should}"
|
|
12
|
-
wanted = @
|
|
14
|
+
wanted = @resource[:name]
|
|
13
15
|
|
|
14
16
|
# XXX: We don't actually deal with epochs here.
|
|
15
17
|
case should
|
|
@@ -33,12 +35,12 @@ Puppet.type(:package).provide :rug, :parent => :rpm do
|
|
|
33
35
|
#rug can only get a list of *all* available packages?
|
|
34
36
|
output = rug "list-updates"
|
|
35
37
|
|
|
36
|
-
if output =~ /#{@
|
|
38
|
+
if output =~ /#{@resource[:name]}\s*\|\s*([0-9\.\-]+)/
|
|
37
39
|
return $1
|
|
38
40
|
else
|
|
39
41
|
# rug didn't find updates, pretend the current
|
|
40
42
|
# version is the latest
|
|
41
|
-
return @
|
|
43
|
+
return @property_hash[:ensure]
|
|
42
44
|
end
|
|
43
45
|
end
|
|
44
46
|
|
|
@@ -46,8 +48,4 @@ Puppet.type(:package).provide :rug, :parent => :rpm do
|
|
|
46
48
|
# rug install can be used for update, too
|
|
47
49
|
self.install
|
|
48
50
|
end
|
|
49
|
-
|
|
50
|
-
def versionable?
|
|
51
|
-
true
|
|
52
|
-
end
|
|
53
51
|
end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
# Sun packaging.
|
|
1
|
+
# Sun packaging.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require 'puppet/provider/package'
|
|
4
|
+
|
|
5
|
+
Puppet::Type.type(:package).provide :sun, :parent => Puppet::Provider::Package do
|
|
4
6
|
desc "Sun's packaging system. Requires that you specify the source for
|
|
5
7
|
the packages you're managing."
|
|
6
8
|
commands :pkginfo => "/usr/bin/pkginfo",
|
|
@@ -9,7 +11,7 @@ Puppet::Type.type(:package).provide :sun do
|
|
|
9
11
|
|
|
10
12
|
defaultfor :operatingsystem => :solaris
|
|
11
13
|
|
|
12
|
-
def self.
|
|
14
|
+
def self.instances
|
|
13
15
|
packages = []
|
|
14
16
|
hash = {}
|
|
15
17
|
names = {
|
|
@@ -40,7 +42,7 @@ Puppet::Type.type(:package).provide :sun do
|
|
|
40
42
|
when /^$/:
|
|
41
43
|
hash[:provider] = :sun
|
|
42
44
|
|
|
43
|
-
packages
|
|
45
|
+
packages << new(hash)
|
|
44
46
|
hash.clear
|
|
45
47
|
when /\s*(\w+):\s+(.+)/:
|
|
46
48
|
name = $1
|
|
@@ -85,7 +87,7 @@ Puppet::Type.type(:package).provide :sun do
|
|
|
85
87
|
if device
|
|
86
88
|
cmd += " -d #{device}"
|
|
87
89
|
end
|
|
88
|
-
cmd += " #{@
|
|
90
|
+
cmd += " #{@resource[:name]}"
|
|
89
91
|
|
|
90
92
|
begin
|
|
91
93
|
# list out all of the packages
|
|
@@ -115,28 +117,28 @@ Puppet::Type.type(:package).provide :sun do
|
|
|
115
117
|
end
|
|
116
118
|
|
|
117
119
|
def install
|
|
118
|
-
unless @
|
|
120
|
+
unless @resource[:source]
|
|
119
121
|
raise Puppet::Error, "Sun packages must specify a package source"
|
|
120
122
|
end
|
|
121
123
|
cmd = []
|
|
122
124
|
|
|
123
|
-
if @
|
|
124
|
-
cmd << "-a" << @
|
|
125
|
+
if @resource[:adminfile]
|
|
126
|
+
cmd << "-a" << @resource[:adminfile]
|
|
125
127
|
end
|
|
126
128
|
|
|
127
|
-
if @
|
|
128
|
-
cmd << "-r" << @
|
|
129
|
+
if @resource[:responsefile]
|
|
130
|
+
cmd << "-r" << @resource[:responsefile]
|
|
129
131
|
end
|
|
130
132
|
|
|
131
|
-
cmd << "-d" << @
|
|
132
|
-
cmd << "-n" << @
|
|
133
|
+
cmd << "-d" << @resource[:source]
|
|
134
|
+
cmd << "-n" << @resource[:name]
|
|
133
135
|
|
|
134
136
|
pkgadd cmd
|
|
135
137
|
end
|
|
136
138
|
|
|
137
139
|
# Retrieve the version from the current package file.
|
|
138
140
|
def latest
|
|
139
|
-
hash = info2hash(@
|
|
141
|
+
hash = info2hash(@resource[:source])
|
|
140
142
|
hash[:ensure]
|
|
141
143
|
end
|
|
142
144
|
|
|
@@ -147,22 +149,22 @@ Puppet::Type.type(:package).provide :sun do
|
|
|
147
149
|
def uninstall
|
|
148
150
|
command = ["-n"]
|
|
149
151
|
|
|
150
|
-
if @
|
|
151
|
-
command << "-a" << @
|
|
152
|
+
if @resource[:adminfile]
|
|
153
|
+
command << "-a" << @resource[:adminfile]
|
|
152
154
|
end
|
|
153
155
|
|
|
154
|
-
command << @
|
|
156
|
+
command << @resource[:name]
|
|
155
157
|
pkgrm command
|
|
156
158
|
end
|
|
157
159
|
|
|
158
160
|
# Remove the old package, and install the new one. This will probably
|
|
159
161
|
# often fail.
|
|
160
162
|
def update
|
|
161
|
-
if @
|
|
163
|
+
if (@property_hash[:ensure] || info2hash()[:ensure]) != :absent
|
|
162
164
|
self.uninstall
|
|
163
165
|
end
|
|
164
166
|
self.install
|
|
165
167
|
end
|
|
166
168
|
end
|
|
167
169
|
|
|
168
|
-
# $Id: sun.rb
|
|
170
|
+
# $Id: sun.rb 2581 2007-06-14 06:21:40Z luke $
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# At this point, it's an exact copy of the Blastwave stuff.
|
|
2
|
-
Puppet::Type.type(:package).provide :sunfreeware, :parent => :blastwave do
|
|
2
|
+
Puppet::Type.type(:package).provide :sunfreeware, :parent => :blastwave, :source => :sun do
|
|
3
3
|
desc "Package management using sunfreeware.com's ``pkg-get`` command on Solaris.
|
|
4
4
|
At this point, support is exactly the same as ``blastwave`` support and
|
|
5
5
|
has not actually been tested."
|
|
6
6
|
commands :pkgget => "pkg-get"
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
# $Id: sunfreeware.rb
|
|
9
|
+
# $Id: sunfreeware.rb 2555 2007-06-08 17:20:00Z luke $
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Puppet.type(:package).provide :up2date, :parent => :rpm do
|
|
1
|
+
Puppet.type(:package).provide :up2date, :parent => :rpm, :source => :rpm do
|
|
2
2
|
desc "Support for Red Hat's proprietary ``up2date`` package update
|
|
3
3
|
mechanism."
|
|
4
4
|
|
|
@@ -9,7 +9,7 @@ Puppet.type(:package).provide :up2date, :parent => :rpm do
|
|
|
9
9
|
|
|
10
10
|
# Install a package using 'up2date'.
|
|
11
11
|
def install
|
|
12
|
-
up2date "-u", @
|
|
12
|
+
up2date "-u", @resource[:name]
|
|
13
13
|
|
|
14
14
|
unless self.query
|
|
15
15
|
raise Puppet::ExecutionFailure.new(
|
|
@@ -21,14 +21,14 @@ Puppet.type(:package).provide :up2date, :parent => :rpm do
|
|
|
21
21
|
# What's the latest package version available?
|
|
22
22
|
def latest
|
|
23
23
|
#up2date can only get a list of *all* available packages?
|
|
24
|
-
output = up2date "--
|
|
24
|
+
output = up2date "--showall"
|
|
25
25
|
|
|
26
|
-
if output =~
|
|
26
|
+
if output =~ /^#{@resource[:name]}-(\d+.*)\.\w+/
|
|
27
27
|
return $1
|
|
28
28
|
else
|
|
29
29
|
# up2date didn't find updates, pretend the current
|
|
30
30
|
# version is the latest
|
|
31
|
-
return @
|
|
31
|
+
return @property_hash[:ensure]
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
|
|
@@ -36,10 +36,6 @@ Puppet.type(:package).provide :up2date, :parent => :rpm do
|
|
|
36
36
|
# Install in up2date can be used for update, too
|
|
37
37
|
self.install
|
|
38
38
|
end
|
|
39
|
-
|
|
40
|
-
def versionable?
|
|
41
|
-
false
|
|
42
|
-
end
|
|
43
39
|
end
|
|
44
40
|
|
|
45
|
-
# $Id: up2date.rb
|
|
41
|
+
# $Id: up2date.rb 2582 2007-06-14 06:23:02Z luke $
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
Puppet::Type.type(:package).provide :urpmi, :parent => :rpm, :source => :rpm do
|
|
2
|
+
desc "Support via ``urpmi``."
|
|
3
|
+
commands :urpmi => "urpmi", :rpm => "rpm"
|
|
4
|
+
|
|
5
|
+
defaultfor :operatingsystem => [:mandriva, :mandrake]
|
|
6
|
+
|
|
7
|
+
has_feature :versionable
|
|
8
|
+
|
|
9
|
+
def install
|
|
10
|
+
should = @resource.should(:ensure)
|
|
11
|
+
self.debug "Ensuring => #{should}"
|
|
12
|
+
wanted = @resource[:name]
|
|
13
|
+
|
|
14
|
+
# XXX: We don't actually deal with epochs here.
|
|
15
|
+
case should
|
|
16
|
+
when true, false, Symbol
|
|
17
|
+
# pass
|
|
18
|
+
else
|
|
19
|
+
# Add the package version
|
|
20
|
+
wanted += "-%s" % should
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
output = urpmi "--auto", wanted
|
|
24
|
+
|
|
25
|
+
unless self.query
|
|
26
|
+
raise Puppet::Error.new(
|
|
27
|
+
"Could not find package %s" % self.name
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# What's the latest package version available?
|
|
33
|
+
def latest
|
|
34
|
+
output = urpmi "-S", :available, @resource[:name]
|
|
35
|
+
|
|
36
|
+
if output =~ /^#{@resource[:name]}\S+\s+(\S+)\s/
|
|
37
|
+
return $1
|
|
38
|
+
else
|
|
39
|
+
# urpmi didn't find updates, pretend the current
|
|
40
|
+
# version is the latest
|
|
41
|
+
return @resource[:ensure]
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def update
|
|
46
|
+
# Install in urpmi can be used for update, too
|
|
47
|
+
self.install
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# $Id: urpmi.rb 2618 2007-06-18 21:18:48Z luke $
|
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
Puppet::Type.type(:package).provide :yum, :parent => :rpm do
|
|
1
|
+
Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
|
|
2
2
|
desc "Support via ``yum``."
|
|
3
|
+
|
|
4
|
+
has_feature :versionable
|
|
5
|
+
|
|
3
6
|
commands :yum => "yum", :rpm => "rpm"
|
|
4
7
|
|
|
5
8
|
defaultfor :operatingsystem => [:fedora, :centos, :redhat]
|
|
6
9
|
|
|
7
10
|
def install
|
|
8
11
|
|
|
9
|
-
should = @
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
should = @resource.should(:ensure)
|
|
13
|
+
self.debug "Ensuring => #{should}"
|
|
14
|
+
wanted = @resource[:name]
|
|
12
15
|
|
|
13
|
-
|
|
16
|
+
# XXX: We don't actually deal with epochs here.
|
|
14
17
|
case should
|
|
15
18
|
when true, false, Symbol
|
|
16
19
|
# pass
|
|
@@ -30,14 +33,17 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm do
|
|
|
30
33
|
|
|
31
34
|
# What's the latest package version available?
|
|
32
35
|
def latest
|
|
33
|
-
output = yum "-d", "0", "-e", "0", :list, :available, @
|
|
36
|
+
output = yum "-d", "0", "-e", "0", :list, :available, @resource[:name]
|
|
34
37
|
|
|
35
|
-
if output =~ /^#{@
|
|
38
|
+
if output =~ /^#{@resource[:name]}\S+\s+(\S+)\s/
|
|
36
39
|
return $1
|
|
37
40
|
else
|
|
38
41
|
# Yum didn't find updates, pretend the current
|
|
39
42
|
# version is the latest
|
|
40
|
-
|
|
43
|
+
unless properties[:ensure] != :absent
|
|
44
|
+
raise Puppet::DevError, "Tried to get latest on a missing package"
|
|
45
|
+
end
|
|
46
|
+
return @property_hash[:ensure]
|
|
41
47
|
end
|
|
42
48
|
end
|
|
43
49
|
|
|
@@ -45,10 +51,6 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm do
|
|
|
45
51
|
# Install in yum can be used for update, too
|
|
46
52
|
self.install
|
|
47
53
|
end
|
|
48
|
-
|
|
49
|
-
def versionable?
|
|
50
|
-
true
|
|
51
|
-
end
|
|
52
54
|
end
|
|
53
55
|
|
|
54
|
-
# $Id: yum.rb
|
|
56
|
+
# $Id: yum.rb 2618 2007-06-18 21:18:48Z luke $
|
|
@@ -8,7 +8,7 @@ require 'puppet/util/fileparsing'
|
|
|
8
8
|
# on the provider instance. At this point, the file is written once
|
|
9
9
|
# for every provider instance.
|
|
10
10
|
#
|
|
11
|
-
# Once the provider prefetches the data, it's the
|
|
11
|
+
# Once the provider prefetches the data, it's the resource's job to copy
|
|
12
12
|
# that data over to the @is variables.
|
|
13
13
|
class Puppet::Provider::ParsedFile < Puppet::Provider
|
|
14
14
|
extend Puppet::Util::FileParsing
|
|
@@ -70,7 +70,7 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
|
|
|
70
70
|
|
|
71
71
|
flushed = []
|
|
72
72
|
@modified.sort { |a,b| a.to_s <=> b.to_s }.uniq.each do |target|
|
|
73
|
-
Puppet.debug "Flushing %s provider target %s" % [@
|
|
73
|
+
Puppet.debug "Flushing %s provider target %s" % [@resource_type.name, target]
|
|
74
74
|
flush_target(target)
|
|
75
75
|
flushed << target
|
|
76
76
|
end
|
|
@@ -107,58 +107,54 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
|
|
|
107
107
|
end
|
|
108
108
|
|
|
109
109
|
# Return a list of all of the records we can find.
|
|
110
|
-
def self.
|
|
110
|
+
def self.instances
|
|
111
111
|
prefetch()
|
|
112
112
|
@records.find_all { |r| r[:record_type] == self.name }.collect { |r|
|
|
113
|
-
clean(r)
|
|
113
|
+
new(clean(r))
|
|
114
114
|
}
|
|
115
115
|
end
|
|
116
116
|
|
|
117
|
-
def self.list_by_name
|
|
118
|
-
list.collect { |r| r[:name] }
|
|
119
|
-
end
|
|
120
|
-
|
|
121
117
|
# Override the default method with a lot more functionality.
|
|
122
|
-
def self.
|
|
123
|
-
[
|
|
118
|
+
def self.mk_resource_methods
|
|
119
|
+
[resource_type.validproperties, resource_type.parameters].flatten.each do |attr|
|
|
124
120
|
attr = symbolize(attr)
|
|
125
121
|
define_method(attr) do
|
|
126
122
|
# If it's not a valid field for this record type (which can happen
|
|
127
123
|
# when different platforms support different fields), then just
|
|
128
|
-
# return the should value, so the
|
|
124
|
+
# return the should value, so the resource shuts up.
|
|
129
125
|
if @property_hash[attr] or self.class.valid_attr?(self.class.name, attr)
|
|
130
126
|
@property_hash[attr] || :absent
|
|
131
127
|
else
|
|
132
|
-
@
|
|
128
|
+
@resource.should(attr)
|
|
133
129
|
end
|
|
134
130
|
end
|
|
135
131
|
|
|
136
132
|
define_method(attr.to_s + "=") do |val|
|
|
137
133
|
# Mark that this target was modified.
|
|
138
|
-
|
|
134
|
+
resourcetarget = @resource.should(:target) || self.class.default_target
|
|
139
135
|
|
|
140
136
|
# If they're the same, then just mark that one as modified
|
|
141
|
-
if @property_hash[:target] and @property_hash[:target] ==
|
|
142
|
-
self.class.modified(
|
|
137
|
+
if @property_hash[:target] and @property_hash[:target] == resourcetarget
|
|
138
|
+
self.class.modified(resourcetarget)
|
|
143
139
|
else
|
|
144
|
-
# Always mark the
|
|
140
|
+
# Always mark the resourcetarget as modified, and if there's
|
|
145
141
|
# and old property_hash target, mark it as modified and replace
|
|
146
142
|
# it.
|
|
147
|
-
self.class.modified(
|
|
143
|
+
self.class.modified(resourcetarget)
|
|
148
144
|
if @property_hash[:target]
|
|
149
145
|
self.class.modified(@property_hash[:target])
|
|
150
146
|
end
|
|
151
|
-
@property_hash[:target] =
|
|
147
|
+
@property_hash[:target] = resourcetarget
|
|
152
148
|
end
|
|
153
149
|
@property_hash[attr] = val
|
|
154
150
|
end
|
|
155
151
|
end
|
|
156
152
|
end
|
|
157
153
|
|
|
158
|
-
# Always make the
|
|
159
|
-
def self.
|
|
154
|
+
# Always make the resource methods.
|
|
155
|
+
def self.resource_type=(resource)
|
|
160
156
|
super
|
|
161
|
-
|
|
157
|
+
mk_resource_methods()
|
|
162
158
|
end
|
|
163
159
|
|
|
164
160
|
# Mark a target as modified so we know to flush it. This only gets
|
|
@@ -169,17 +165,30 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
|
|
|
169
165
|
end
|
|
170
166
|
|
|
171
167
|
# Retrieve all of the data from disk. There are three ways to know
|
|
172
|
-
#
|
|
173
|
-
# set up, there might be instances of our associated
|
|
168
|
+
# which files to retrieve: We might have a list of file objects already
|
|
169
|
+
# set up, there might be instances of our associated resource and they
|
|
174
170
|
# will have a path parameter set, and we will have a default path
|
|
175
171
|
# set. We need to turn those three locations into a list of files,
|
|
176
172
|
# prefetch each one, and make sure they're associated with each appropriate
|
|
177
|
-
#
|
|
178
|
-
def self.prefetch
|
|
173
|
+
# resource instance.
|
|
174
|
+
def self.prefetch(resources = nil)
|
|
179
175
|
# Reset the record list.
|
|
180
176
|
@records = []
|
|
181
|
-
targets().each do |target|
|
|
182
|
-
prefetch_target(target)
|
|
177
|
+
targets(resources).each do |target|
|
|
178
|
+
@records += prefetch_target(target)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
if resources
|
|
182
|
+
@records.each do |record|
|
|
183
|
+
if name = record[:name] and resource = resources[name]
|
|
184
|
+
resource.provider = new(record)
|
|
185
|
+
elsif respond_to?(:match)
|
|
186
|
+
if instance = match(record, resources)
|
|
187
|
+
record[:name] = instance[:name]
|
|
188
|
+
instance.provider = new(record)
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
end
|
|
183
192
|
end
|
|
184
193
|
end
|
|
185
194
|
|
|
@@ -196,25 +205,10 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
|
|
|
196
205
|
end
|
|
197
206
|
|
|
198
207
|
unless target_records
|
|
199
|
-
raise Puppet::DevError, "
|
|
200
|
-
self.name
|
|
208
|
+
raise Puppet::DevError, "Prefetching %s for provider %s returned nil" % [target, self.name]
|
|
201
209
|
end
|
|
202
210
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
# Set current property on any existing resource instances.
|
|
206
|
-
target_records(target).find_all { |i| i.is_a?(Hash) }.each do |record|
|
|
207
|
-
# Find any model instances whose names match our instances.
|
|
208
|
-
if instance = self.model[record[:name]]
|
|
209
|
-
next unless instance.provider.is_a?(self)
|
|
210
|
-
instance.provider.property_hash = record
|
|
211
|
-
elsif respond_to?(:match)
|
|
212
|
-
if instance = match(record)
|
|
213
|
-
record[:name] = instance[:name]
|
|
214
|
-
instance.provider.property_hash = record
|
|
215
|
-
end
|
|
216
|
-
end
|
|
217
|
-
end
|
|
211
|
+
target_records
|
|
218
212
|
end
|
|
219
213
|
|
|
220
214
|
# Is there an existing record with this name?
|
|
@@ -256,7 +250,7 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
|
|
|
256
250
|
|
|
257
251
|
# Find a list of all of the targets that we should be reading. This is
|
|
258
252
|
# used to figure out what targets we need to prefetch.
|
|
259
|
-
def self.targets
|
|
253
|
+
def self.targets(resources = nil)
|
|
260
254
|
targets = []
|
|
261
255
|
# First get the default target
|
|
262
256
|
unless self.default_target
|
|
@@ -267,18 +261,14 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
|
|
|
267
261
|
# Then get each of the file objects
|
|
268
262
|
targets += @target_objects.keys
|
|
269
263
|
|
|
270
|
-
# Lastly, check the file from any
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
# This is only the case for properties, and targets should always
|
|
275
|
-
# be properties.
|
|
276
|
-
if model.respond_to?(:is)
|
|
277
|
-
targets << model.is(:target)
|
|
264
|
+
# Lastly, check the file from any resource instances
|
|
265
|
+
if resources
|
|
266
|
+
resources.each do |name, resource|
|
|
267
|
+
targets << resource.value(:target)
|
|
278
268
|
end
|
|
279
269
|
end
|
|
280
270
|
|
|
281
|
-
targets.uniq.
|
|
271
|
+
targets.uniq.compact
|
|
282
272
|
end
|
|
283
273
|
|
|
284
274
|
def self.to_file(records)
|
|
@@ -288,19 +278,19 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
|
|
|
288
278
|
|
|
289
279
|
|
|
290
280
|
def create
|
|
291
|
-
@
|
|
292
|
-
if value = @
|
|
281
|
+
@resource.class.validproperties.each do |property|
|
|
282
|
+
if value = @resource.should(property)
|
|
293
283
|
@property_hash[property] = value
|
|
294
284
|
end
|
|
295
285
|
end
|
|
296
286
|
self.class.modified(@property_hash[:target] || self.class.default_target)
|
|
297
|
-
return (@
|
|
287
|
+
return (@resource.class.name.to_s + "_created").intern
|
|
298
288
|
end
|
|
299
289
|
|
|
300
290
|
def destroy
|
|
301
291
|
# We use the method here so it marks the target as modified.
|
|
302
292
|
self.ensure = :absent
|
|
303
|
-
return (@
|
|
293
|
+
return (@resource.class.name.to_s + "_deleted").intern
|
|
304
294
|
end
|
|
305
295
|
|
|
306
296
|
def exists?
|
|
@@ -318,15 +308,15 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
|
|
|
318
308
|
# If the target isn't set, then this is our first modification, so
|
|
319
309
|
# mark it for flushing.
|
|
320
310
|
unless @property_hash[:target]
|
|
321
|
-
@property_hash[:target] = @
|
|
311
|
+
@property_hash[:target] = @resource.should(:target) || self.class.default_target
|
|
322
312
|
self.class.modified(@property_hash[:target])
|
|
323
313
|
end
|
|
324
|
-
@property_hash[:name] ||= @
|
|
314
|
+
@property_hash[:name] ||= @resource.name
|
|
325
315
|
|
|
326
316
|
self.class.flush(@property_hash)
|
|
327
317
|
end
|
|
328
318
|
|
|
329
|
-
def initialize(
|
|
319
|
+
def initialize(resource)
|
|
330
320
|
super
|
|
331
321
|
|
|
332
322
|
# See if there's already a matching property_hash in the records list;
|
|
@@ -334,9 +324,9 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
|
|
|
334
324
|
# We provide a default for 'ensure' here, because the provider will
|
|
335
325
|
# override it if the thing exists, but it won't touch it if it doesn't
|
|
336
326
|
# exist.
|
|
337
|
-
@property_hash = self.class.record?(
|
|
327
|
+
@property_hash = self.class.record?(resource[:name]) ||
|
|
338
328
|
{:record_type => self.class.name, :ensure => :absent}
|
|
339
329
|
end
|
|
340
330
|
end
|
|
341
331
|
|
|
342
|
-
# $Id: parsedfile.rb
|
|
332
|
+
# $Id: parsedfile.rb 2551 2007-06-04 20:37:14Z luke $
|