puppet 0.22.4 → 0.23.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 +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
@@ -16,28 +16,27 @@ Puppet::Type.type(:package).provide :freebsd, :parent => :openbsd do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def install
|
19
|
-
should = @
|
19
|
+
should = @resource.should(:ensure)
|
20
20
|
|
21
|
-
if @
|
21
|
+
if @resource[:source]
|
22
22
|
return super
|
23
23
|
end
|
24
24
|
|
25
|
-
pkgadd "-r", @
|
25
|
+
pkgadd "-r", @resource[:name]
|
26
26
|
end
|
27
27
|
|
28
28
|
def query
|
29
|
-
self.class.
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
else
|
34
|
-
return nil
|
29
|
+
self.class.instances.each do |provider|
|
30
|
+
if provider.name == @resource.name
|
31
|
+
return provider.properties
|
32
|
+
end
|
35
33
|
end
|
34
|
+
return nil
|
36
35
|
end
|
37
36
|
|
38
37
|
def uninstall
|
39
|
-
pkgdelete "%s-%s" % [@
|
38
|
+
pkgdelete "%s-%s" % [@resource[:name], @resource.should(:ensure)]
|
40
39
|
end
|
41
40
|
end
|
42
41
|
|
43
|
-
# $Id: freebsd.rb
|
42
|
+
# $Id: freebsd.rb 2555 2007-06-08 17:20:00Z luke $
|
@@ -1,8 +1,12 @@
|
|
1
|
+
require 'puppet/provider/package'
|
2
|
+
|
1
3
|
# Ruby gems support.
|
2
|
-
Puppet::Type.type(:package).provide :gem do
|
4
|
+
Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package do
|
3
5
|
desc "Ruby Gem support. By default uses remote gems, but you can specify
|
4
6
|
the path to a local gem via ``source``."
|
5
7
|
|
8
|
+
has_feature :versionable
|
9
|
+
|
6
10
|
commands :gemcmd => "gem"
|
7
11
|
|
8
12
|
def self.gemlist(hash)
|
@@ -54,24 +58,24 @@ Puppet::Type.type(:package).provide :gem do
|
|
54
58
|
end
|
55
59
|
end
|
56
60
|
|
57
|
-
def self.
|
61
|
+
def self.instances(justme = false)
|
58
62
|
gemlist(:local => true).collect do |hash|
|
59
|
-
|
63
|
+
new(hash)
|
60
64
|
end
|
61
65
|
end
|
62
66
|
|
63
67
|
def install(useversion = true)
|
64
68
|
command = ["install"]
|
65
|
-
if (! @
|
66
|
-
command << "-v" << @
|
69
|
+
if (! @resource.should(:ensure).is_a? Symbol) and useversion
|
70
|
+
command << "-v" << @resource.should(:ensure)
|
67
71
|
end
|
68
72
|
# Always include dependencies
|
69
73
|
command << "--include-dependencies"
|
70
74
|
|
71
|
-
if source = @
|
75
|
+
if source = @resource[:source]
|
72
76
|
command << source
|
73
77
|
else
|
74
|
-
command << @
|
78
|
+
command << @resource[:name]
|
75
79
|
end
|
76
80
|
|
77
81
|
gemcmd(*command)
|
@@ -79,26 +83,22 @@ Puppet::Type.type(:package).provide :gem do
|
|
79
83
|
|
80
84
|
def latest
|
81
85
|
# This always gets the latest version available.
|
82
|
-
hash = self.class.gemlist(:justme => @
|
86
|
+
hash = self.class.gemlist(:justme => @resource[:name])
|
83
87
|
|
84
88
|
return hash[:ensure]
|
85
89
|
end
|
86
90
|
|
87
91
|
def query
|
88
|
-
self.class.gemlist(:justme => @
|
92
|
+
self.class.gemlist(:justme => @resource[:name], :local => true)
|
89
93
|
end
|
90
94
|
|
91
95
|
def uninstall
|
92
|
-
gemcmd "uninstall", "-x", "-a", @
|
96
|
+
gemcmd "uninstall", "-x", "-a", @resource[:name]
|
93
97
|
end
|
94
98
|
|
95
99
|
def update
|
96
100
|
self.install(false)
|
97
101
|
end
|
98
|
-
|
99
|
-
def versionable?
|
100
|
-
true
|
101
|
-
end
|
102
102
|
end
|
103
103
|
|
104
|
-
# $Id: gem.rb
|
104
|
+
# $Id: gem.rb 2618 2007-06-18 21:18:48Z luke $
|
@@ -1,5 +1,7 @@
|
|
1
|
+
require 'puppet/provider/package'
|
2
|
+
|
1
3
|
# Packaging on OpenBSD. Doesn't work anywhere else that I know of.
|
2
|
-
Puppet::Type.type(:package).provide :openbsd do
|
4
|
+
Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Package do
|
3
5
|
desc "OpenBSD's form of ``pkg_add`` support."
|
4
6
|
|
5
7
|
commands :pkginfo => "pkg_info", :pkgadd => "pkg_add", :pkgdelete => "pkg_delete"
|
@@ -7,7 +9,7 @@ Puppet::Type.type(:package).provide :openbsd do
|
|
7
9
|
defaultfor :operatingsystem => :openbsd
|
8
10
|
confine :operatingsystem => :openbsd
|
9
11
|
|
10
|
-
def self.
|
12
|
+
def self.instances
|
11
13
|
packages = []
|
12
14
|
|
13
15
|
begin
|
@@ -29,8 +31,7 @@ Puppet::Type.type(:package).provide :openbsd do
|
|
29
31
|
|
30
32
|
hash[:provider] = self.name
|
31
33
|
|
32
|
-
|
33
|
-
packages << pkg
|
34
|
+
packages << new(hash)
|
34
35
|
else
|
35
36
|
# Print a warning on lines we can't match, but move
|
36
37
|
# on, since it should be non-fatal
|
@@ -38,12 +39,6 @@ Puppet::Type.type(:package).provide :openbsd do
|
|
38
39
|
end
|
39
40
|
}
|
40
41
|
end
|
41
|
-
# Mark as absent any packages we didn't find
|
42
|
-
Puppet.type(:package).each do |pkg|
|
43
|
-
unless packages.include? pkg
|
44
|
-
pkg.is = [:ensure, :absent]
|
45
|
-
end
|
46
|
-
end
|
47
42
|
|
48
43
|
return packages
|
49
44
|
rescue Puppet::ExecutionFailure
|
@@ -56,22 +51,22 @@ Puppet::Type.type(:package).provide :openbsd do
|
|
56
51
|
end
|
57
52
|
|
58
53
|
def install
|
59
|
-
should = @
|
54
|
+
should = @resource.should(:ensure)
|
60
55
|
|
61
|
-
unless @
|
56
|
+
unless @resource[:source]
|
62
57
|
raise Puppet::Error,
|
63
58
|
"You must specify a package source for BSD packages"
|
64
59
|
end
|
65
60
|
|
66
|
-
pkgadd @
|
61
|
+
pkgadd @resource[:source]
|
67
62
|
end
|
68
63
|
|
69
64
|
def query
|
70
65
|
hash = {}
|
71
|
-
info = pkginfo @
|
66
|
+
info = pkginfo @resource[:name]
|
72
67
|
|
73
68
|
# Search for the version info
|
74
|
-
if info =~ /Information for #{@
|
69
|
+
if info =~ /Information for #{@resource[:name]}-(\S+)/
|
75
70
|
hash[:ensure] = $1
|
76
71
|
else
|
77
72
|
return nil
|
@@ -86,8 +81,8 @@ Puppet::Type.type(:package).provide :openbsd do
|
|
86
81
|
end
|
87
82
|
|
88
83
|
def uninstall
|
89
|
-
pkgdelete @
|
84
|
+
pkgdelete @resource[:name]
|
90
85
|
end
|
91
86
|
end
|
92
87
|
|
93
|
-
# $Id: openbsd.rb
|
88
|
+
# $Id: openbsd.rb 2555 2007-06-08 17:20:00Z luke $
|
@@ -1,6 +1,20 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
1
|
+
#
|
2
|
+
# pkgdmg.rb
|
3
|
+
#
|
4
|
+
# Install Installer.app packages wrapped up inside a DMG image file.
|
5
|
+
#
|
6
|
+
# Copyright (C) 2007 Jeff McCune Jeff McCune <jeff@northstarlabs.net>
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or
|
9
|
+
# modify it under the terms of the GNU General Public License
|
10
|
+
# as published by the Free Software Foundation (version 2 of the License)
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program; if not, write to the Free Software
|
17
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston MA 02110-1301 USA
|
4
18
|
#
|
5
19
|
# Motivation: DMG files provide a true HFS file system
|
6
20
|
# and are easier to manage and .pkg bundles.
|
@@ -11,11 +25,71 @@
|
|
11
25
|
# As a result, we store installed .pkg.dmg file names
|
12
26
|
# in /var/db/.puppet_pkgdmg_installed_<name>
|
13
27
|
|
14
|
-
|
15
|
-
|
28
|
+
require 'puppet/provider/package'
|
29
|
+
|
30
|
+
Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Package do
|
31
|
+
desc "Package management based on Apple's Installer.app and DiskUtility.app
|
32
|
+
|
33
|
+
Author: Jeff McCune <jeff@northstarlabs.net>
|
34
|
+
|
35
|
+
Please direct questions about this provider to the puppet-users mailing list.
|
36
|
+
|
37
|
+
This package works by checking the contents of a DMG image for Apple pkg or
|
38
|
+
mpkg files. Any number of pkg or mpkg files may exist in the root directory of
|
39
|
+
the DMG file system. Sub directories are not checked for packages.
|
40
|
+
|
41
|
+
This provider always assumes the label (formerly called 'name') attribute
|
42
|
+
declared in the manifest will always exactly match the file name (without
|
43
|
+
path) of the DMG file itself. Therefore, if you want to install packages in
|
44
|
+
'Foobar.pkg.dmg' you must explicitly specify the label:
|
45
|
+
|
46
|
+
package { Foobar.pkg.dmg: ensure => installed, provider => pkgdmg }
|
47
|
+
|
48
|
+
Only the dmg file name itself is used when puppet determines if the packages
|
49
|
+
contained within are currently installed. For example, if a package resource
|
50
|
+
named 'Foobar.pkg.dmg' is named for installation and contains multiple
|
51
|
+
packages, this provider will install all packages in the root directory of
|
52
|
+
this file system, then create a small cookie for the whole bundle, located at
|
53
|
+
/var/db/.puppet_pkgdmg_installed_Foobar.pkg.dmg
|
54
|
+
|
55
|
+
As a result, if you change the contents of the DMG file in any way, Puppet
|
56
|
+
will not update or re-install the packages contained within unless you change
|
57
|
+
the file name of the DMG wrapper itself. Therefore, if you use this provider,
|
58
|
+
I recommend you name the DMG wrapper files in a manner that lends itself to
|
59
|
+
incremental version changes. I include some version or date string in the DMG
|
60
|
+
name, like so:
|
61
|
+
|
62
|
+
Firefox-2.0.0.3-1.pkg.dmg
|
63
|
+
|
64
|
+
If I realize I've mis-packaged this DMG, then I have the option to increment
|
65
|
+
the package version, yielding Firefox-2.0.0.3-2.pkg.dmg.
|
66
|
+
|
67
|
+
This provider allows you to host DMG files within an FTP or HTTP server. This
|
68
|
+
is primarily how the author provider distributes software. Any URL mechanism
|
69
|
+
curl or Ruby's open-uri module supports is supported by this provider. Curl
|
70
|
+
supported URL's yield much faster data throughput than open-uri, so I
|
71
|
+
recommend HTTP, HTTPS, or FTP for source package repositories.
|
72
|
+
|
73
|
+
Because the provider assumes packages will be transfered via CURL, a two stage
|
74
|
+
process occurs. First, if a URL is detected, curl is invoked to transfer the
|
75
|
+
file into a temporary directory. If no URL is present, the provider skips
|
76
|
+
straight to step 2. In step two, the source file is mounted, then packages
|
77
|
+
installed, and finally the DMG file is removed.
|
78
|
+
|
79
|
+
WARNING: Because I assume files will be downloaded to /tmp, the current
|
80
|
+
implementation attempts to delete DMG files if you install directly from the
|
81
|
+
file system and not via a URL method.
|
82
|
+
|
83
|
+
If this is a problem for you, please patch the code, or bug Jeff to fix this.
|
84
|
+
|
85
|
+
Example usage:
|
16
86
|
|
17
|
-
|
18
|
-
|
87
|
+
package { Thunderbird-2.0.0.4-1.pkg.dmg:
|
88
|
+
provider => pkgdmg, ensure => present
|
89
|
+
source => 'http://0.0.0.0:8000/packages/Thunderbird-2.0.0.4-1.pkg.dmg',
|
90
|
+
}
|
91
|
+
"
|
92
|
+
|
19
93
|
|
20
94
|
confine :exists => "/Library/Receipts"
|
21
95
|
commands :installer => "/usr/sbin/installer"
|
@@ -23,7 +97,7 @@ Puppet::Type.type(:package).provide :pkgdmg do
|
|
23
97
|
commands :curl => "/usr/bin/curl"
|
24
98
|
|
25
99
|
# JJM We store a cookie for each installed .pkg.dmg in /var/db
|
26
|
-
def self.
|
100
|
+
def self.instance_by_name
|
27
101
|
Dir.entries("/var/db").find_all { |f|
|
28
102
|
f =~ /^\.puppet_pkgdmg_installed_/
|
29
103
|
}.collect do |f|
|
@@ -33,9 +107,9 @@ Puppet::Type.type(:package).provide :pkgdmg do
|
|
33
107
|
end
|
34
108
|
end
|
35
109
|
|
36
|
-
def self.
|
37
|
-
|
38
|
-
|
110
|
+
def self.instances
|
111
|
+
instance_by_name.collect do |name|
|
112
|
+
new(
|
39
113
|
:name => name,
|
40
114
|
:provider => :pkgdmg,
|
41
115
|
:ensure => :installed
|
@@ -97,8 +171,8 @@ Puppet::Type.type(:package).provide :pkgdmg do
|
|
97
171
|
end # def self.installpkgdmg
|
98
172
|
|
99
173
|
def query
|
100
|
-
if FileTest.exists?("/var/db/.puppet_pkgdmg_installed_#{@
|
101
|
-
return {:name => @
|
174
|
+
if FileTest.exists?("/var/db/.puppet_pkgdmg_installed_#{@resource[:name]}")
|
175
|
+
return {:name => @resource[:name], :ensure => :present}
|
102
176
|
else
|
103
177
|
return nil
|
104
178
|
end
|
@@ -106,14 +180,14 @@ Puppet::Type.type(:package).provide :pkgdmg do
|
|
106
180
|
|
107
181
|
def install
|
108
182
|
source = nil
|
109
|
-
unless source = @
|
183
|
+
unless source = @resource[:source]
|
110
184
|
self.fail "Mac OS X PKG DMG's must specify a package source."
|
111
185
|
end
|
112
|
-
unless name = @
|
186
|
+
unless name = @resource[:name]
|
113
187
|
self.fail "Mac OS X PKG DMG's must specify a package name."
|
114
188
|
end
|
115
189
|
self.class.installpkgdmg(source,name)
|
116
190
|
end
|
117
191
|
end
|
118
192
|
|
119
|
-
# $Id: pkgdmg.rb
|
193
|
+
# $Id: pkgdmg.rb 2622 2007-06-18 23:57:28Z mccune $
|
@@ -1,17 +1,24 @@
|
|
1
|
-
|
1
|
+
require 'puppet/provider/package'
|
2
|
+
|
3
|
+
Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Package do
|
2
4
|
desc "Provides packaging support for Gentoo's portage system."
|
3
5
|
|
4
|
-
|
6
|
+
has_feature :versionable
|
7
|
+
|
8
|
+
commands :emerge => "/usr/bin/emerge", :eix => "/usr/bin/eix", :update_eix => "/usr/bin/update-eix"
|
5
9
|
|
6
10
|
defaultfor :operatingsystem => :gentoo
|
7
11
|
|
8
|
-
def self.
|
12
|
+
def self.instances
|
9
13
|
result_format = /(\S+) (\S+) \[(.*)\] \[[^0-9]*([^\s:]*)(:\S*)?\] ([\S]*) (.*)/
|
10
14
|
result_fields = [:category, :name, :ensure, :version_available, :slot, :vendor, :description]
|
11
15
|
|
12
16
|
search_format = "{installedversionsshort}<category> <name> [<installedversionsshort>] [<best>] <homepage> <description>{}"
|
13
17
|
|
14
18
|
begin
|
19
|
+
if !FileUtils.uptodate?("/var/cache/eix", %w(/usr/bin/eix /usr/portage/metadata/timestamp))
|
20
|
+
update_eix
|
21
|
+
end
|
15
22
|
search_output = eix "--nocolor", "--format", search_format
|
16
23
|
|
17
24
|
packages = []
|
@@ -26,7 +33,7 @@ Puppet::Type.type(:package).provide :portage do
|
|
26
33
|
package[:provider] = :portage
|
27
34
|
package[:ensure] = package[:ensure].split.last
|
28
35
|
|
29
|
-
packages
|
36
|
+
packages << new(package)
|
30
37
|
end
|
31
38
|
end
|
32
39
|
|
@@ -37,7 +44,7 @@ Puppet::Type.type(:package).provide :portage do
|
|
37
44
|
end
|
38
45
|
|
39
46
|
def install
|
40
|
-
should = @
|
47
|
+
should = @resource.should(:ensure)
|
41
48
|
name = package_name
|
42
49
|
unless should == :present or should == :latest
|
43
50
|
# We must install a specific version
|
@@ -48,7 +55,7 @@ Puppet::Type.type(:package).provide :portage do
|
|
48
55
|
|
49
56
|
# The common package name format.
|
50
57
|
def package_name
|
51
|
-
"%s/%s" % [@
|
58
|
+
"%s/%s" % [@resource[:category], @resource[:name]]
|
52
59
|
end
|
53
60
|
|
54
61
|
def uninstall
|
@@ -63,11 +70,14 @@ Puppet::Type.type(:package).provide :portage do
|
|
63
70
|
result_format = /(\S+) (\S+) \[(.*)\] \[[^0-9]*([^\s:]*)(:\S*)?\] ([\S]*) (.*)/
|
64
71
|
result_fields = [:category, :name, :ensure, :version_available, :slot, :vendor, :description]
|
65
72
|
|
66
|
-
search_field = @
|
67
|
-
search_value = @
|
73
|
+
search_field = @resource[:category] ? "--category-name" : "--name"
|
74
|
+
search_value = @resource[:category] ? package_name : @resource[:name]
|
68
75
|
search_format = "<category> <name> [<installedversionsshort>] [<best>] <homepage> <description>"
|
69
76
|
|
70
77
|
begin
|
78
|
+
if !FileUtils.uptodate?("/var/cache/eix", %w(/usr/bin/eix /usr/portage/metadata/timestamp))
|
79
|
+
update_eix
|
80
|
+
end
|
71
81
|
search_output = eix "--nocolor", "--format", search_format, "--exact", search_field, search_value
|
72
82
|
|
73
83
|
packages = []
|
@@ -88,7 +98,7 @@ Puppet::Type.type(:package).provide :portage do
|
|
88
98
|
|
89
99
|
case packages.size
|
90
100
|
when 0
|
91
|
-
not_found_value = "%s/%s" % [@
|
101
|
+
not_found_value = "%s/%s" % [@resource[:category] ? @resource[:category] : "<unspecified category>", @resource[:name]]
|
92
102
|
raise Puppet::PackageError.new("No package found with the specified name [#{not_found_value}]")
|
93
103
|
when 1
|
94
104
|
return packages[0]
|
@@ -103,10 +113,6 @@ Puppet::Type.type(:package).provide :portage do
|
|
103
113
|
def latest
|
104
114
|
return self.query[:version_available]
|
105
115
|
end
|
106
|
-
|
107
|
-
def versionable?
|
108
|
-
true
|
109
|
-
end
|
110
116
|
end
|
111
117
|
|
112
|
-
# $Id: portage.rb
|
118
|
+
# $Id: portage.rb 2618 2007-06-18 21:18:48Z luke $
|
@@ -1,6 +1,7 @@
|
|
1
|
-
Puppet::Type.type(:package).provide :ports, :parent => :freebsd do
|
1
|
+
Puppet::Type.type(:package).provide :ports, :parent => :freebsd, :source => :freebsd do
|
2
2
|
desc "Support for FreeBSD's ports. Again, this still mixes packages
|
3
3
|
and ports."
|
4
|
+
|
4
5
|
commands :portupgrade => "/usr/local/sbin/portupgrade",
|
5
6
|
:portversion => "/usr/local/sbin/portversion",
|
6
7
|
:portuninstall => "/usr/local/sbin/pkg_deinstall",
|
@@ -19,17 +20,18 @@ Puppet::Type.type(:package).provide :ports, :parent => :freebsd do
|
|
19
20
|
# -p: create a package
|
20
21
|
# -N: install if the package is missing, otherwise upgrade
|
21
22
|
# -P: prefer binary packages
|
22
|
-
|
23
|
+
# -M: yes, we're a batch, so don't ask any questions
|
24
|
+
cmd = %w{-p -N -P -M BATCH=yes} << @resource[:name]
|
23
25
|
|
24
26
|
output = portupgrade(*cmd)
|
25
27
|
if output =~ /\*\* No such /
|
26
|
-
raise Puppet::ExecutionFailure, "Could not find package %s" % @
|
28
|
+
raise Puppet::ExecutionFailure, "Could not find package %s" % @resource[:name]
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
30
32
|
# If there are multiple packages, we only use the last one
|
31
33
|
def latest
|
32
|
-
cmd = ["-v", @
|
34
|
+
cmd = ["-v", @resource[:name]]
|
33
35
|
|
34
36
|
begin
|
35
37
|
output = portversion(*cmd)
|
@@ -47,7 +49,7 @@ Puppet::Type.type(:package).provide :ports, :parent => :freebsd do
|
|
47
49
|
match = $2
|
48
50
|
info = $3
|
49
51
|
|
50
|
-
unless pkgstuff =~ /^(\
|
52
|
+
unless pkgstuff =~ /^(\S+)-([^-\s]+)$/
|
51
53
|
raise Puppet::PackageError,
|
52
54
|
"Could not match package info '%s'" % pkgstuff
|
53
55
|
end
|
@@ -73,17 +75,17 @@ Puppet::Type.type(:package).provide :ports, :parent => :freebsd do
|
|
73
75
|
end
|
74
76
|
|
75
77
|
def query
|
76
|
-
self.class.
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
else
|
81
|
-
return nil
|
78
|
+
self.class.instances.each do |instance|
|
79
|
+
if instance.name == self.name
|
80
|
+
return instance.properties
|
81
|
+
end
|
82
82
|
end
|
83
|
+
|
84
|
+
return nil
|
83
85
|
end
|
84
86
|
|
85
87
|
def uninstall
|
86
|
-
portuninstall @
|
88
|
+
portuninstall @resource[:name]
|
87
89
|
end
|
88
90
|
|
89
91
|
def update
|
@@ -91,4 +93,4 @@ Puppet::Type.type(:package).provide :ports, :parent => :freebsd do
|
|
91
93
|
end
|
92
94
|
end
|
93
95
|
|
94
|
-
# $Id: ports.rb
|
96
|
+
# $Id: ports.rb 2614 2007-06-18 19:56:19Z luke $
|