puppet 0.24.5 → 0.24.6
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 +206 -0
- data/Rakefile +53 -0
- data/bin/filebucket +0 -0
- data/bin/puppet +32 -11
- data/bin/puppetca +1 -0
- data/bin/puppetd +0 -0
- data/bin/puppetdoc +0 -0
- data/bin/puppetmasterd +0 -0
- data/bin/puppetrun +16 -8
- data/bin/ralsh +0 -0
- data/conf/debian/rules +0 -0
- data/conf/gentoo/init.d/puppetmaster +0 -0
- data/conf/osx/PackageInfo.plist +36 -0
- data/conf/osx/createpackage.sh +167 -0
- data/conf/osx/preflight +12 -0
- data/conf/redhat/client.init +1 -1
- data/conf/redhat/puppet.spec +34 -6
- data/conf/redhat/server.init +42 -7
- data/conf/redhat/server.sysconfig +22 -0
- data/conf/solaris/smf/svc-puppetd +0 -0
- data/conf/solaris/smf/svc-puppetmasterd +0 -0
- data/examples/etc/init.d/sleeper +0 -0
- data/examples/mac_dscl.pp +0 -0
- data/examples/mac_dscl_revert.pp +0 -0
- data/examples/mac_netinfo.pp +0 -0
- data/examples/mac_pkgdmg.pp +0 -0
- data/ext/bin/sleeper +0 -0
- data/ext/module_puppet +0 -0
- data/ext/nagios/check_puppet.rb +0 -0
- data/ext/passenger/README +63 -0
- data/ext/passenger/apache2.conf +29 -0
- data/ext/passenger/config.ru +40 -0
- data/ext/puppet-test +0 -0
- data/ext/puppetlast +6 -31
- data/ext/puppetstoredconfigclean.rb +87 -0
- data/install.rb +75 -20
- data/lib/puppet.rb +1 -1
- data/lib/puppet/daemon.rb +0 -0
- data/lib/puppet/defaults.rb +3 -7
- data/lib/puppet/external/base64.rb +0 -0
- data/lib/puppet/external/nagios.rb +0 -0
- data/lib/puppet/external/nagios/base.rb +0 -0
- data/lib/puppet/file_serving/fileset.rb +2 -2
- data/lib/puppet/file_serving/metadata.rb +3 -3
- data/lib/puppet/indirector/facts/facter.rb +3 -2
- data/lib/puppet/indirector/yaml.rb +10 -1
- data/lib/puppet/module.rb +36 -12
- data/lib/puppet/network/authstore.rb +0 -0
- data/lib/puppet/network/client/master.rb +12 -11
- data/lib/puppet/network/handler/filebucket.rb +0 -0
- data/lib/puppet/network/handler/fileserver.rb +38 -46
- data/lib/puppet/network/handler/master.rb +1 -1
- data/lib/puppet/network/handler/report.rb +0 -0
- data/lib/puppet/network/handler/resource.rb +0 -0
- data/lib/puppet/network/handler/runner.rb +0 -0
- data/lib/puppet/network/http_server/rack.rb +148 -0
- data/lib/puppet/network/rights.rb +0 -0
- data/lib/puppet/network/xmlrpc/client.rb +5 -5
- data/lib/puppet/node.rb +5 -9
- data/lib/puppet/node/environment.rb +1 -17
- data/lib/puppet/node/facts.rb +0 -0
- data/lib/puppet/parameter.rb +1 -28
- data/lib/puppet/parser/ast.rb +6 -0
- data/lib/puppet/parser/ast/arithmetic_operator.rb +41 -0
- data/lib/puppet/parser/ast/boolean_operator.rb +48 -0
- data/lib/puppet/parser/ast/collexpr.rb +6 -1
- data/lib/puppet/parser/ast/comparison_operator.rb +37 -0
- data/lib/puppet/parser/ast/minus.rb +23 -0
- data/lib/puppet/parser/ast/nop.rb +11 -0
- data/lib/puppet/parser/ast/not.rb +19 -0
- data/lib/puppet/parser/ast/resource_override.rb +23 -16
- data/lib/puppet/parser/ast/resource_reference.rb +10 -6
- data/lib/puppet/parser/ast/vardef.rb +2 -2
- data/lib/puppet/parser/collector.rb +2 -1
- data/lib/puppet/parser/functions.rb +7 -217
- data/lib/puppet/parser/functions/defined.rb +27 -0
- data/lib/puppet/parser/functions/fail.rb +4 -0
- data/lib/puppet/parser/functions/file.rb +21 -0
- data/lib/puppet/parser/functions/fqdn_rand.rb +15 -0
- data/lib/puppet/parser/functions/generate.rb +35 -0
- data/lib/puppet/parser/functions/include.rb +26 -0
- data/lib/puppet/parser/functions/realize.rb +14 -0
- data/lib/puppet/parser/functions/search.rb +7 -0
- data/lib/puppet/parser/functions/sha1.rb +6 -0
- data/lib/puppet/parser/functions/tag.rb +6 -0
- data/lib/puppet/parser/functions/tagged.rb +18 -0
- data/lib/puppet/parser/functions/template.rb +22 -0
- data/lib/puppet/parser/lexer.rb +15 -5
- data/lib/puppet/parser/parser.rb +1073 -715
- data/lib/puppet/parser/parser_support.rb +18 -13
- data/lib/puppet/parser/resource.rb +1 -1
- data/lib/puppet/parser/resource/param.rb +10 -2
- data/lib/puppet/parser/scope.rb +63 -5
- data/lib/puppet/parser/templatewrapper.rb +61 -15
- data/lib/puppet/property.rb +7 -1
- data/lib/puppet/property/keyvalue.rb +96 -0
- data/lib/puppet/property/list.rb +78 -0
- data/lib/puppet/provider/confine.rb +1 -1
- data/lib/puppet/provider/confine/variable.rb +10 -1
- data/lib/puppet/provider/cron/crontab.rb +0 -0
- data/lib/puppet/provider/mailalias/aliases.rb +0 -0
- data/lib/puppet/provider/maillist/mailman.rb +0 -0
- data/lib/puppet/provider/mount/parsed.rb +0 -0
- data/lib/puppet/provider/nameservice.rb +24 -39
- data/lib/puppet/provider/nameservice/directoryservice.rb +12 -3
- data/lib/puppet/provider/nameservice/netinfo.rb +12 -2
- data/lib/puppet/provider/nameservice/objectadd.rb +1 -10
- data/lib/puppet/provider/package/appdmg.rb +1 -1
- data/lib/puppet/provider/package/apple.rb +0 -0
- data/lib/puppet/provider/package/apt.rb +14 -21
- data/lib/puppet/provider/package/aptitude.rb +0 -0
- data/lib/puppet/provider/package/blastwave.rb +2 -0
- data/lib/puppet/provider/package/darwinport.rb +0 -0
- data/lib/puppet/provider/package/dpkg.rb +33 -51
- data/lib/puppet/provider/package/fink.rb +1 -1
- data/lib/puppet/provider/package/freebsd.rb +0 -0
- data/lib/puppet/provider/package/gem.rb +0 -0
- data/lib/puppet/provider/package/hpux.rb +46 -0
- data/lib/puppet/provider/package/openbsd.rb +0 -0
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/portage.rb +3 -1
- data/lib/puppet/provider/package/ports.rb +3 -3
- data/lib/puppet/provider/package/rpm.rb +8 -1
- data/lib/puppet/provider/package/rug.rb +2 -2
- data/lib/puppet/provider/package/sun.rb +2 -0
- data/lib/puppet/provider/package/sunfreeware.rb +3 -0
- data/lib/puppet/provider/package/yum.rb +24 -17
- data/lib/puppet/provider/package/yumhelper.py +92 -11
- data/lib/puppet/provider/parsedfile.rb +0 -0
- data/lib/puppet/provider/port/parsed.rb +0 -0
- data/lib/puppet/provider/selboolean/getsetsebool.rb +47 -0
- data/lib/puppet/provider/selmodule/semodule.rb +143 -0
- data/lib/puppet/provider/service/base.rb +0 -0
- data/lib/puppet/provider/service/daemontools.rb +154 -0
- data/lib/puppet/provider/service/debian.rb +1 -1
- data/lib/puppet/provider/service/freebsd.rb +2 -0
- data/lib/puppet/provider/service/gentoo.rb +2 -0
- data/lib/puppet/provider/service/init.rb +0 -0
- data/lib/puppet/provider/service/redhat.rb +1 -1
- data/lib/puppet/provider/service/runit.rb +93 -0
- data/lib/puppet/provider/service/smf.rb +2 -0
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +7 -1
- data/lib/puppet/provider/sshkey/parsed.rb +0 -0
- data/lib/puppet/provider/user/hpux.rb +30 -0
- data/lib/puppet/provider/user/user_role_add.rb +156 -0
- data/lib/puppet/provider/user/useradd.rb +23 -14
- data/lib/puppet/rails/database/002_remove_duplicated_index_on_all_tables.rb +17 -0
- data/lib/puppet/rails/database/schema.rb +0 -8
- data/lib/puppet/rails/resource.rb +6 -6
- data/lib/puppet/reference/configuration.rb +0 -7
- data/lib/puppet/reports.rb +0 -0
- data/lib/puppet/reports/rrdgraph.rb +3 -2
- data/lib/puppet/sslcertificates.rb +0 -0
- data/lib/puppet/sslcertificates/inventory.rb +3 -2
- data/lib/puppet/sslcertificates/support.rb +3 -0
- data/lib/puppet/transaction/report.rb +1 -7
- data/lib/puppet/transportable.rb +10 -7
- data/lib/puppet/type.rb +2110 -14
- data/lib/puppet/type/cron.rb +0 -0
- data/lib/puppet/type/exec.rb +0 -0
- data/lib/puppet/type/file.rb +12 -2
- data/lib/puppet/type/file/checksum.rb +4 -0
- data/lib/puppet/type/file/content.rb +0 -0
- data/lib/puppet/type/file/ensure.rb +0 -0
- data/lib/puppet/type/file/group.rb +30 -43
- data/lib/puppet/type/file/mode.rb +0 -0
- data/lib/puppet/type/file/owner.rb +0 -0
- data/lib/puppet/type/file/selcontext.rb +104 -0
- data/lib/puppet/type/file/source.rb +0 -0
- data/lib/puppet/type/file/type.rb +0 -0
- data/lib/puppet/type/filebucket.rb +0 -0
- data/lib/puppet/type/group.rb +0 -8
- data/lib/puppet/type/host.rb +0 -0
- data/lib/puppet/type/mailalias.rb +0 -0
- data/lib/puppet/type/maillist.rb +0 -0
- data/lib/puppet/type/mount.rb +0 -0
- data/lib/puppet/type/package.rb +2 -2
- data/lib/puppet/type/port.rb +0 -0
- data/lib/puppet/type/schedule.rb +0 -0
- data/lib/puppet/type/selboolean.rb +31 -0
- data/lib/puppet/type/selmodule.rb +54 -0
- data/lib/puppet/type/ssh_authorized_key.rb +3 -3
- data/lib/puppet/type/sshkey.rb +0 -0
- data/lib/puppet/type/tidy.rb +0 -0
- data/lib/puppet/type/user.rb +153 -137
- data/lib/puppet/type/yumrepo.rb +18 -2
- data/lib/puppet/type/zone.rb +5 -1
- data/lib/puppet/util.rb +7 -7
- data/lib/puppet/util/filetype.rb +7 -0
- data/lib/puppet/util/instance_loader.rb +0 -0
- data/lib/puppet/util/ldap/connection.rb +11 -1
- data/lib/puppet/util/ldap/manager.rb +1 -1
- data/lib/puppet/util/loadedfile.rb +0 -0
- data/lib/puppet/util/log.rb +42 -43
- data/lib/puppet/util/metric.rb +23 -9
- data/lib/puppet/util/posix.rb +69 -18
- data/lib/puppet/util/selinux.rb +139 -0
- data/lib/puppet/util/settings.rb +5 -7
- data/lib/puppet/util/user_attr.rb +21 -0
- data/test/certmgr/ca.rb +0 -0
- data/test/certmgr/certmgr.rb +0 -0
- data/test/certmgr/inventory.rb +0 -0
- data/test/certmgr/support.rb +0 -0
- data/test/data/providers/ssh_authorized_key/parsed/authorized_keys1 +3 -0
- data/test/data/snippets/append.pp +11 -0
- data/test/data/snippets/arithmetic_expression.pp +8 -0
- data/test/data/snippets/arraytrailingcomma.pp +3 -0
- data/test/data/snippets/emptyifelse.pp +9 -0
- data/test/data/snippets/funccomma.pp +5 -0
- data/test/data/snippets/ifexpression.rb +6 -0
- data/test/data/snippets/subclass_name_duplication.pp +0 -0
- data/test/executables/filebucket.rb +0 -0
- data/test/executables/puppetbin.rb +0 -0
- data/test/executables/puppetca.rb +0 -0
- data/test/executables/puppetd.rb +0 -0
- data/test/executables/puppetmasterd.rb +0 -0
- data/test/executables/puppetmodule.rb +0 -0
- data/test/language/ast.rb +0 -0
- data/test/language/ast/casestatement.rb +0 -0
- data/test/language/ast/resource.rb +0 -0
- data/test/language/ast/resource_reference.rb +0 -28
- data/test/language/ast/selector.rb +0 -0
- data/test/language/ast/variable.rb +0 -0
- data/test/language/functions.rb +91 -12
- data/test/language/parser.rb +21 -0
- data/test/language/resource.rb +0 -0
- data/test/language/scope.rb +28 -0
- data/test/language/snippets.rb +14 -0
- data/test/language/transportable.rb +0 -0
- data/test/lib/puppettest.rb +0 -0
- data/test/lib/puppettest/reporttesting.rb +0 -2
- data/test/lib/puppettest/runnable_test.rb +2 -0
- data/test/lib/puppettest/support/resources.rb +0 -0
- data/test/network/authconfig.rb +0 -0
- data/test/network/authorization.rb +0 -0
- data/test/network/authstore.rb +0 -0
- data/test/network/client/ca.rb +0 -0
- data/test/network/client/client.rb +0 -0
- data/test/network/client/dipper.rb +0 -0
- data/test/network/client/master.rb +2 -6
- data/test/network/client/resource.rb +0 -0
- data/test/network/client_request.rb +0 -0
- data/test/network/daemon.rb +0 -0
- data/test/network/handler/bucket.rb +0 -0
- data/test/network/handler/ca.rb +0 -0
- data/test/network/handler/fileserver.rb +8 -0
- data/test/network/handler/handler.rb +0 -0
- data/test/network/handler/master.rb +3 -1
- data/test/network/handler/report.rb +0 -0
- data/test/network/handler/resource.rb +0 -0
- data/test/network/handler/runner.rb +0 -0
- data/test/network/rights.rb +0 -0
- data/test/network/server/mongrel_test.rb +0 -0
- data/test/network/server/webrick.rb +0 -0
- data/test/network/xmlrpc/client.rb +0 -0
- data/test/network/xmlrpc/processor.rb +0 -0
- data/test/network/xmlrpc/server.rb +0 -0
- data/test/network/xmlrpc/webrick_servlet.rb +0 -0
- data/test/other/dsl.rb +0 -0
- data/test/other/events.rb +0 -0
- data/test/other/overrides.rb +0 -0
- data/test/other/provider.rb +0 -0
- data/test/other/puppet.rb +0 -0
- data/test/other/relationships.rb +0 -0
- data/test/other/report.rb +2 -4
- data/test/other/transactions.rb +1 -1
- data/test/puppet/conffiles.rb +0 -0
- data/test/puppet/defaults.rb +0 -0
- data/test/puppet/errortest.rb +0 -0
- data/test/puppet/tc_suidmanager.rb +0 -0
- data/test/rails/ast.rb +0 -0
- data/test/rails/configuration.rb +0 -0
- data/test/rails/host.rb +0 -0
- data/test/rails/rails.rb +0 -0
- data/test/rails/railsparameter.rb +0 -0
- data/test/rails/railsresource.rb +0 -0
- data/test/ral/manager/attributes.rb +0 -0
- data/test/ral/manager/instances.rb +0 -0
- data/test/ral/manager/manager.rb +0 -0
- data/test/ral/manager/provider.rb +0 -0
- data/test/ral/manager/type.rb +0 -0
- data/test/ral/providers/cron/crontab.rb +0 -0
- data/test/ral/providers/group.rb +14 -13
- data/test/ral/providers/host/netinfo.rb +0 -0
- data/test/ral/providers/host/parsed.rb +0 -0
- data/test/ral/providers/mailalias/aliases.rb +0 -0
- data/test/ral/providers/mount/netinfo.rb +0 -0
- data/test/ral/providers/nameservice.rb +0 -0
- data/test/ral/providers/package.rb +0 -31
- data/test/ral/providers/package/aptitude.rb +1 -2
- data/test/ral/providers/package/aptrpm.rb +2 -2
- data/test/ral/providers/parsedfile.rb +0 -0
- data/test/ral/providers/port/parsed.rb +0 -0
- data/test/ral/providers/provider.rb +0 -0
- data/test/ral/providers/service/base.rb +0 -0
- data/test/ral/providers/service/debian.rb +0 -0
- data/test/ral/providers/sshkey/parsed.rb +0 -0
- data/test/ral/providers/user.rb +8 -8
- data/test/ral/providers/user/useradd.rb +0 -0
- data/test/ral/type/basic.rb +0 -0
- data/test/ral/type/cron.rb +0 -0
- data/test/ral/type/exec.rb +0 -0
- data/test/ral/type/file.rb +0 -0
- data/test/ral/type/file/target.rb +0 -0
- data/test/ral/type/filebucket.rb +0 -0
- data/test/ral/type/fileignoresource.rb +0 -0
- data/test/ral/type/filesources.rb +1 -3
- data/test/ral/type/group.rb +0 -0
- data/test/ral/type/host.rb +0 -0
- data/test/ral/type/mailalias.rb +1 -2
- data/test/ral/type/parameter.rb +0 -0
- data/test/ral/type/port.rb +0 -0
- data/test/ral/type/property.rb +0 -0
- data/test/ral/type/resources.rb +0 -0
- data/test/ral/type/service.rb +0 -0
- data/test/ral/type/sshkey.rb +0 -0
- data/test/ral/type/tidy.rb +0 -0
- data/test/ral/type/user.rb +0 -50
- data/test/ral/type/yumrepo.rb +7 -1
- data/test/ral/type/zone.rb +0 -0
- data/test/test +0 -0
- data/test/util/autoload.rb +0 -0
- data/test/util/classgen.rb +0 -0
- data/test/util/execution.rb +0 -0
- data/test/util/features.rb +0 -0
- data/test/util/fileparsing.rb +0 -0
- data/test/util/filetype.rb +0 -0
- data/test/util/inifile.rb +0 -0
- data/test/util/instance_loader.rb +0 -0
- data/test/util/log.rb +0 -59
- data/test/util/metrics.rb +0 -0
- data/test/util/package.rb +0 -0
- data/test/util/pidlock.rb +0 -0
- data/test/util/settings.rb +0 -0
- data/test/util/storage.rb +0 -0
- data/test/util/subclass_loader.rb +0 -0
- data/test/util/utiltest.rb +0 -0
- metadata +54 -19
- data/lib/puppet/metatype/attributes.rb +0 -685
- data/lib/puppet/metatype/closure.rb +0 -49
- data/lib/puppet/metatype/container.rb +0 -50
- data/lib/puppet/metatype/evaluation.rb +0 -163
- data/lib/puppet/metatype/instances.rb +0 -305
- data/lib/puppet/metatype/metaparams.rb +0 -423
- data/lib/puppet/metatype/providers.rb +0 -247
- data/lib/puppet/metatype/relationships.rb +0 -115
- data/lib/puppet/metatype/schedules.rb +0 -33
- data/lib/puppet/metatype/tags.rb +0 -38
- data/lib/puppet/util/plist.rb +0 -23
- data/lib/puppet/util/plist/generator.rb +0 -225
- data/lib/puppet/util/plist/parser.rb +0 -226
- data/test/ral/providers/package/apt.rb +0 -169
- data/test/ral/providers/package/dpkg.rb +0 -64
- data/test/util/posixtest.rb +0 -169
@@ -1,115 +0,0 @@
|
|
1
|
-
class Puppet::Type
|
2
|
-
# Specify a block for generating a list of objects to autorequire. This
|
3
|
-
# makes it so that you don't have to manually specify things that you clearly
|
4
|
-
# require.
|
5
|
-
def self.autorequire(name, &block)
|
6
|
-
@autorequires ||= {}
|
7
|
-
@autorequires[name] = block
|
8
|
-
end
|
9
|
-
|
10
|
-
# Yield each of those autorequires in turn, yo.
|
11
|
-
def self.eachautorequire
|
12
|
-
@autorequires ||= {}
|
13
|
-
@autorequires.each { |type, block|
|
14
|
-
yield(type, block)
|
15
|
-
}
|
16
|
-
end
|
17
|
-
|
18
|
-
# Figure out of there are any objects we can automatically add as
|
19
|
-
# dependencies.
|
20
|
-
def autorequire
|
21
|
-
reqs = []
|
22
|
-
self.class.eachautorequire { |type, block|
|
23
|
-
# Ignore any types we can't find, although that would be a bit odd.
|
24
|
-
next unless typeobj = Puppet.type(type)
|
25
|
-
|
26
|
-
# Retrieve the list of names from the block.
|
27
|
-
next unless list = self.instance_eval(&block)
|
28
|
-
unless list.is_a?(Array)
|
29
|
-
list = [list]
|
30
|
-
end
|
31
|
-
|
32
|
-
# Collect the current prereqs
|
33
|
-
list.each { |dep|
|
34
|
-
obj = nil
|
35
|
-
# Support them passing objects directly, to save some effort.
|
36
|
-
unless dep.is_a? Puppet::Type
|
37
|
-
# Skip autorequires that we aren't managing
|
38
|
-
unless dep = typeobj[dep]
|
39
|
-
next
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
reqs << Puppet::Relationship.new(dep, self)
|
44
|
-
}
|
45
|
-
}
|
46
|
-
|
47
|
-
return reqs
|
48
|
-
end
|
49
|
-
|
50
|
-
# Build the dependencies associated with an individual object.
|
51
|
-
def builddepends
|
52
|
-
# Handle the requires
|
53
|
-
self.class.relationship_params.collect do |klass|
|
54
|
-
if param = @parameters[klass.name]
|
55
|
-
param.to_edges
|
56
|
-
end
|
57
|
-
end.flatten.reject { |r| r.nil? }
|
58
|
-
end
|
59
|
-
|
60
|
-
# Does this resource have a relationship with the other? We have to
|
61
|
-
# check each object for both directions of relationship.
|
62
|
-
def requires?(other)
|
63
|
-
them = [other.class.name, other.title]
|
64
|
-
me = [self.class.name, self.title]
|
65
|
-
self.class.relationship_params.each do |param|
|
66
|
-
case param.direction
|
67
|
-
when :in: return true if v = self[param.name] and v.include?(them)
|
68
|
-
when :out: return true if v = other[param.name] and v.include?(me)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
return false
|
72
|
-
end
|
73
|
-
|
74
|
-
# we've received an event
|
75
|
-
# we only support local events right now, so we can pass actual
|
76
|
-
# objects around, including the transaction object
|
77
|
-
# the assumption here is that container objects will pass received
|
78
|
-
# methods on to contained objects
|
79
|
-
# i.e., we don't trigger our children, our refresh() method calls
|
80
|
-
# refresh() on our children
|
81
|
-
def trigger(event, source)
|
82
|
-
trans = event.transaction
|
83
|
-
if @callbacks.include?(source)
|
84
|
-
[:ALL_EVENTS, event.event].each { |eventname|
|
85
|
-
if method = @callbacks[source][eventname]
|
86
|
-
if trans.triggered?(self, method) > 0
|
87
|
-
next
|
88
|
-
end
|
89
|
-
if self.respond_to?(method)
|
90
|
-
self.send(method)
|
91
|
-
end
|
92
|
-
|
93
|
-
trans.triggered(self, method)
|
94
|
-
end
|
95
|
-
}
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
# Unsubscribe from a given object, possibly with a specific event.
|
100
|
-
def unsubscribe(object, event = nil)
|
101
|
-
# First look through our own relationship params
|
102
|
-
[:require, :subscribe].each do |param|
|
103
|
-
if values = self[param]
|
104
|
-
newvals = values.reject { |d|
|
105
|
-
d == [object.class.name, object.title]
|
106
|
-
}
|
107
|
-
if newvals.length != values.length
|
108
|
-
self.delete(param)
|
109
|
-
self[param] = newvals
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
@@ -1,33 +0,0 @@
|
|
1
|
-
class Puppet::Type
|
2
|
-
# Look up the schedule and set it appropriately. This is done after
|
3
|
-
# the instantiation phase, so that the schedule can be anywhere in the
|
4
|
-
# file.
|
5
|
-
def schedule
|
6
|
-
unless defined? @schedule
|
7
|
-
if name = self[:schedule]
|
8
|
-
if sched = Puppet.type(:schedule)[name]
|
9
|
-
@schedule = sched
|
10
|
-
else
|
11
|
-
self.fail "Could not find schedule %s" % name
|
12
|
-
end
|
13
|
-
else
|
14
|
-
@schedule = nil
|
15
|
-
end
|
16
|
-
end
|
17
|
-
@schedule
|
18
|
-
end
|
19
|
-
|
20
|
-
# Check whether we are scheduled to run right now or not.
|
21
|
-
def scheduled?
|
22
|
-
return true if Puppet[:ignoreschedules]
|
23
|
-
return true unless schedule = self.schedule
|
24
|
-
|
25
|
-
# We use 'checked' here instead of 'synced' because otherwise we'll
|
26
|
-
# end up checking most resources most times, because they will generally
|
27
|
-
# have been synced a long time ago (e.g., a file only gets updated
|
28
|
-
# once a month on the server and its schedule is daily; the last sync time
|
29
|
-
# will have been a month ago, so we'd end up checking every run).
|
30
|
-
return schedule.match?(self.cached(:checked).to_i)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
data/lib/puppet/metatype/tags.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
class Puppet::Type
|
2
|
-
attr_reader :tags
|
3
|
-
|
4
|
-
# Add a new tag.
|
5
|
-
def tag(tag)
|
6
|
-
tag = tag.intern if tag.is_a? String
|
7
|
-
unless @tags.include? tag
|
8
|
-
@tags << tag
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
# Define the initial list of tags.
|
13
|
-
def tags=(list)
|
14
|
-
list = [list] unless list.is_a? Array
|
15
|
-
|
16
|
-
@tags = list.collect do |t|
|
17
|
-
case t
|
18
|
-
when String: t.intern
|
19
|
-
when Symbol: t
|
20
|
-
else
|
21
|
-
self.warning "Ignoring tag %s of type %s" % [tag.inspect, tag.class]
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
@tags << self.class.name unless @tags.include?(self.class.name)
|
26
|
-
end
|
27
|
-
|
28
|
-
# Figure out of any of the specified tags apply to this object. This is an
|
29
|
-
# OR operation.
|
30
|
-
def tagged?(tags)
|
31
|
-
tags = [tags] unless tags.is_a? Array
|
32
|
-
|
33
|
-
tags = tags.collect { |t| t.intern }
|
34
|
-
|
35
|
-
return tags.find { |tag| @tags.include? tag }
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
data/lib/puppet/util/plist.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
##############################################################
|
3
|
-
# Copyright 2006, Ben Bleything <ben@bleything.net> and #
|
4
|
-
# Patrick May <patrick@hexane.org> #
|
5
|
-
# #
|
6
|
-
# Distributed under the MIT license. #
|
7
|
-
##############################################################
|
8
|
-
#++
|
9
|
-
# = Plist
|
10
|
-
#
|
11
|
-
# This is the main file for plist. Everything interesting happens in Plist and Plist::Emit.
|
12
|
-
|
13
|
-
require 'base64'
|
14
|
-
require 'cgi'
|
15
|
-
require 'stringio'
|
16
|
-
|
17
|
-
require 'puppet/util/plist/generator'
|
18
|
-
require 'puppet/util/plist/parser'
|
19
|
-
|
20
|
-
module Plist
|
21
|
-
VERSION = '3.0.0'
|
22
|
-
end
|
23
|
-
|
@@ -1,225 +0,0 @@
|
|
1
|
-
#--###########################################################
|
2
|
-
# Copyright 2006, Ben Bleything <ben@bleything.net> and #
|
3
|
-
# Patrick May <patrick@hexane.org> #
|
4
|
-
# #
|
5
|
-
# Distributed under the MIT license. #
|
6
|
-
##############################################################
|
7
|
-
#++
|
8
|
-
# See Plist::Emit.
|
9
|
-
module Plist
|
10
|
-
# === Create a plist
|
11
|
-
# You can dump an object to a plist in one of two ways:
|
12
|
-
#
|
13
|
-
# * <tt>Plist::Emit.dump(obj)</tt>
|
14
|
-
# * <tt>obj.to_plist</tt>
|
15
|
-
# * This requires that you mixin the <tt>Plist::Emit</tt> module, which is already done for +Array+ and +Hash+.
|
16
|
-
#
|
17
|
-
# The following Ruby classes are converted into native plist types:
|
18
|
-
# Array, Bignum, Date, DateTime, Fixnum, Float, Hash, Integer, String, Symbol, Time, true, false
|
19
|
-
# * +Array+ and +Hash+ are both recursive; their elements will be converted into plist nodes inside the <array> and <dict> containers (respectively).
|
20
|
-
# * +IO+ (and its descendants) and +StringIO+ objects are read from and their contents placed in a <data> element.
|
21
|
-
# * User classes may implement +to_plist_node+ to dictate how they should be serialized; otherwise the object will be passed to <tt>Marshal.dump</tt> and the result placed in a <data> element.
|
22
|
-
#
|
23
|
-
# For detailed usage instructions, refer to USAGE[link:files/docs/USAGE.html] and the methods documented below.
|
24
|
-
module Emit
|
25
|
-
# Helper method for injecting into classes. Calls <tt>Plist::Emit.dump</tt> with +self+.
|
26
|
-
def to_plist(envelope = true)
|
27
|
-
return Plist::Emit.dump(self, envelope)
|
28
|
-
end
|
29
|
-
|
30
|
-
# Helper method for injecting into classes. Calls <tt>Plist::Emit.save_plist</tt> with +self+.
|
31
|
-
def save_plist(filename)
|
32
|
-
Plist::Emit.save_plist(self, filename)
|
33
|
-
end
|
34
|
-
|
35
|
-
# The following Ruby classes are converted into native plist types:
|
36
|
-
# Array, Bignum, Date, DateTime, Fixnum, Float, Hash, Integer, String, Symbol, Time
|
37
|
-
#
|
38
|
-
# Write us (via RubyForge) if you think another class can be coerced safely into one of the expected plist classes.
|
39
|
-
#
|
40
|
-
# +IO+ and +StringIO+ objects are encoded and placed in <data> elements; other objects are <tt>Marshal.dump</tt>'ed unless they implement +to_plist_node+.
|
41
|
-
#
|
42
|
-
# The +envelope+ parameters dictates whether or not the resultant plist fragment is wrapped in the normal XML/plist header and footer. Set it to false if you only want the fragment.
|
43
|
-
def self.dump(obj, envelope = true)
|
44
|
-
output = plist_node(obj)
|
45
|
-
|
46
|
-
output = wrap(output) if envelope
|
47
|
-
|
48
|
-
return output
|
49
|
-
end
|
50
|
-
|
51
|
-
# Writes the serialized object's plist to the specified filename.
|
52
|
-
def self.save_plist(obj, filename)
|
53
|
-
File.open(filename, 'wb') do |f|
|
54
|
-
f.write(obj.to_plist)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
private
|
59
|
-
def self.plist_node(element)
|
60
|
-
output = ''
|
61
|
-
|
62
|
-
if element.respond_to? :to_plist_node
|
63
|
-
output << element.to_plist_node
|
64
|
-
else
|
65
|
-
case element
|
66
|
-
when Array
|
67
|
-
if element.empty?
|
68
|
-
output << "<array/>\n"
|
69
|
-
else
|
70
|
-
output << tag('array') {
|
71
|
-
element.collect {|e| plist_node(e)}
|
72
|
-
}
|
73
|
-
end
|
74
|
-
when Hash
|
75
|
-
if element.empty?
|
76
|
-
output << "<dict/>\n"
|
77
|
-
else
|
78
|
-
inner_tags = []
|
79
|
-
|
80
|
-
element.keys.sort.each do |k|
|
81
|
-
v = element[k]
|
82
|
-
inner_tags << tag('key', CGI::escapeHTML(k.to_s))
|
83
|
-
inner_tags << plist_node(v)
|
84
|
-
end
|
85
|
-
|
86
|
-
output << tag('dict') {
|
87
|
-
inner_tags
|
88
|
-
}
|
89
|
-
end
|
90
|
-
when true, false
|
91
|
-
output << "<#{element}/>\n"
|
92
|
-
when Time
|
93
|
-
output << tag('date', element.utc.strftime('%Y-%m-%dT%H:%M:%SZ'))
|
94
|
-
when Date # also catches DateTime
|
95
|
-
output << tag('date', element.strftime('%Y-%m-%dT%H:%M:%SZ'))
|
96
|
-
when String, Symbol, Fixnum, Bignum, Integer, Float
|
97
|
-
output << tag(element_type(element), CGI::escapeHTML(element.to_s))
|
98
|
-
when IO, StringIO
|
99
|
-
element.rewind
|
100
|
-
contents = element.read
|
101
|
-
# note that apple plists are wrapped at a different length then
|
102
|
-
# what ruby's base64 wraps by default.
|
103
|
-
# I used #encode64 instead of #b64encode (which allows a length arg)
|
104
|
-
# because b64encode is b0rked and ignores the length arg.
|
105
|
-
data = "\n"
|
106
|
-
Base64::encode64(contents).gsub(/\s+/, '').scan(/.{1,68}/o) { data << $& << "\n" }
|
107
|
-
output << tag('data', data)
|
108
|
-
else
|
109
|
-
output << comment( 'The <data> element below contains a Ruby object which has been serialized with Marshal.dump.' )
|
110
|
-
data = "\n"
|
111
|
-
Base64::encode64(Marshal.dump(element)).gsub(/\s+/, '').scan(/.{1,68}/o) { data << $& << "\n" }
|
112
|
-
output << tag('data', data )
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
return output
|
117
|
-
end
|
118
|
-
|
119
|
-
def self.comment(content)
|
120
|
-
return "<!-- #{content} -->\n"
|
121
|
-
end
|
122
|
-
|
123
|
-
def self.tag(type, contents = '', &block)
|
124
|
-
out = nil
|
125
|
-
|
126
|
-
if block_given?
|
127
|
-
out = IndentedString.new
|
128
|
-
out << "<#{type}>"
|
129
|
-
out.raise_indent
|
130
|
-
|
131
|
-
out << block.call
|
132
|
-
|
133
|
-
out.lower_indent
|
134
|
-
out << "</#{type}>"
|
135
|
-
else
|
136
|
-
out = "<#{type}>#{contents.to_s}</#{type}>\n"
|
137
|
-
end
|
138
|
-
|
139
|
-
return out.to_s
|
140
|
-
end
|
141
|
-
|
142
|
-
def self.wrap(contents)
|
143
|
-
output = ''
|
144
|
-
|
145
|
-
output << '<?xml version="1.0" encoding="UTF-8"?>' + "\n"
|
146
|
-
output << '<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">' + "\n"
|
147
|
-
output << '<plist version="1.0">' + "\n"
|
148
|
-
|
149
|
-
output << contents
|
150
|
-
|
151
|
-
output << '</plist>' + "\n"
|
152
|
-
|
153
|
-
return output
|
154
|
-
end
|
155
|
-
|
156
|
-
def self.element_type(item)
|
157
|
-
return case item
|
158
|
-
when String, Symbol: 'string'
|
159
|
-
when Fixnum, Bignum, Integer: 'integer'
|
160
|
-
when Float: 'real'
|
161
|
-
else
|
162
|
-
raise "Don't know about this data type... something must be wrong!"
|
163
|
-
end
|
164
|
-
end
|
165
|
-
private
|
166
|
-
class IndentedString #:nodoc:
|
167
|
-
attr_accessor :indent_string
|
168
|
-
|
169
|
-
@@indent_level = 0
|
170
|
-
|
171
|
-
def initialize(str = "\t")
|
172
|
-
@indent_string = str
|
173
|
-
@contents = ''
|
174
|
-
end
|
175
|
-
|
176
|
-
def to_s
|
177
|
-
return @contents
|
178
|
-
end
|
179
|
-
|
180
|
-
def raise_indent
|
181
|
-
@@indent_level += 1
|
182
|
-
end
|
183
|
-
|
184
|
-
def lower_indent
|
185
|
-
@@indent_level -= 1 if @@indent_level > 0
|
186
|
-
end
|
187
|
-
|
188
|
-
def <<(val)
|
189
|
-
if val.is_a? Array
|
190
|
-
val.each do |f|
|
191
|
-
self << f
|
192
|
-
end
|
193
|
-
else
|
194
|
-
# if it's already indented, don't bother indenting further
|
195
|
-
unless val =~ /\A#{@indent_string}/
|
196
|
-
indent = @indent_string * @@indent_level
|
197
|
-
|
198
|
-
@contents << val.gsub(/^/, indent)
|
199
|
-
else
|
200
|
-
@contents << val
|
201
|
-
end
|
202
|
-
|
203
|
-
# it already has a newline, don't add another
|
204
|
-
@contents << "\n" unless val =~ /\n$/
|
205
|
-
end
|
206
|
-
end
|
207
|
-
end
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
# we need to add this so sorting hash keys works properly
|
212
|
-
class Symbol #:nodoc:
|
213
|
-
def <=> (other)
|
214
|
-
self.to_s <=> other.to_s
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
class Array #:nodoc:
|
219
|
-
include Plist::Emit
|
220
|
-
end
|
221
|
-
|
222
|
-
class Hash #:nodoc:
|
223
|
-
include Plist::Emit
|
224
|
-
end
|
225
|
-
|
@@ -1,226 +0,0 @@
|
|
1
|
-
#--###########################################################
|
2
|
-
# Copyright 2006, Ben Bleything <ben@bleything.net> and #
|
3
|
-
# Patrick May <patrick@hexane.org> #
|
4
|
-
# #
|
5
|
-
# Distributed under the MIT license. #
|
6
|
-
##############################################################
|
7
|
-
#++
|
8
|
-
# Plist parses Mac OS X xml property list files into ruby data structures.
|
9
|
-
#
|
10
|
-
# === Load a plist file
|
11
|
-
# This is the main point of the library:
|
12
|
-
#
|
13
|
-
# r = Plist::parse_xml( filename_or_xml )
|
14
|
-
module Plist
|
15
|
-
# Note that I don't use these two elements much:
|
16
|
-
#
|
17
|
-
# + Date elements are returned as DateTime objects.
|
18
|
-
# + Data elements are implemented as Tempfiles
|
19
|
-
#
|
20
|
-
# Plist::parse_xml will blow up if it encounters a data element.
|
21
|
-
# If you encounter such an error, or if you have a Date element which
|
22
|
-
# can't be parsed into a Time object, please send your plist file to
|
23
|
-
# plist@hexane.org so that I can implement the proper support.
|
24
|
-
def Plist::parse_xml( filename_or_xml )
|
25
|
-
listener = Listener.new
|
26
|
-
#parser = REXML::Parsers::StreamParser.new(File.new(filename), listener)
|
27
|
-
parser = StreamParser.new(filename_or_xml, listener)
|
28
|
-
parser.parse
|
29
|
-
listener.result
|
30
|
-
end
|
31
|
-
|
32
|
-
class Listener
|
33
|
-
#include REXML::StreamListener
|
34
|
-
|
35
|
-
attr_accessor :result, :open
|
36
|
-
|
37
|
-
def initialize
|
38
|
-
@result = nil
|
39
|
-
@open = Array.new
|
40
|
-
end
|
41
|
-
|
42
|
-
|
43
|
-
def tag_start(name, attributes)
|
44
|
-
@open.push PTag::mappings[name].new
|
45
|
-
end
|
46
|
-
|
47
|
-
def text( contents )
|
48
|
-
@open.last.text = contents if @open.last
|
49
|
-
end
|
50
|
-
|
51
|
-
def tag_end(name)
|
52
|
-
last = @open.pop
|
53
|
-
if @open.empty?
|
54
|
-
@result = last.to_ruby
|
55
|
-
else
|
56
|
-
@open.last.children.push last
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
class StreamParser
|
62
|
-
def initialize( filename_or_xml, listener )
|
63
|
-
@filename_or_xml = filename_or_xml
|
64
|
-
@listener = listener
|
65
|
-
end
|
66
|
-
|
67
|
-
TEXT = /([^<]+)/
|
68
|
-
XMLDECL_PATTERN = /<\?xml\s+(.*?)\?>*/um
|
69
|
-
DOCTYPE_PATTERN = /\s*<!DOCTYPE\s+(.*?)(\[|>)/um
|
70
|
-
COMMENT_START = /\A<!--/u
|
71
|
-
COMMENT_END = /.*?-->/um
|
72
|
-
|
73
|
-
|
74
|
-
def parse
|
75
|
-
plist_tags = PTag::mappings.keys.join('|')
|
76
|
-
start_tag = /<(#{plist_tags})([^>]*)>/i
|
77
|
-
end_tag = /<\/(#{plist_tags})[^>]*>/i
|
78
|
-
|
79
|
-
require 'strscan'
|
80
|
-
|
81
|
-
contents = (
|
82
|
-
if (File.exists? @filename_or_xml)
|
83
|
-
File.open(@filename_or_xml) {|f| f.read}
|
84
|
-
else
|
85
|
-
@filename_or_xml
|
86
|
-
end
|
87
|
-
)
|
88
|
-
|
89
|
-
@scanner = StringScanner.new( contents )
|
90
|
-
until @scanner.eos?
|
91
|
-
if @scanner.scan(COMMENT_START)
|
92
|
-
@scanner.scan(COMMENT_END)
|
93
|
-
elsif @scanner.scan(XMLDECL_PATTERN)
|
94
|
-
elsif @scanner.scan(DOCTYPE_PATTERN)
|
95
|
-
elsif @scanner.scan(start_tag)
|
96
|
-
@listener.tag_start(@scanner[1], nil)
|
97
|
-
if (@scanner[2] =~ /\/$/)
|
98
|
-
@listener.tag_end(@scanner[1])
|
99
|
-
end
|
100
|
-
elsif @scanner.scan(TEXT)
|
101
|
-
@listener.text(@scanner[1])
|
102
|
-
elsif @scanner.scan(end_tag)
|
103
|
-
@listener.tag_end(@scanner[1])
|
104
|
-
else
|
105
|
-
raise "Unimplemented element"
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
class PTag
|
112
|
-
@@mappings = { }
|
113
|
-
def PTag::mappings
|
114
|
-
@@mappings
|
115
|
-
end
|
116
|
-
|
117
|
-
def PTag::inherited( sub_class )
|
118
|
-
key = sub_class.to_s.downcase
|
119
|
-
key.gsub!(/^plist::/, '' )
|
120
|
-
key.gsub!(/^p/, '') unless key == "plist"
|
121
|
-
|
122
|
-
@@mappings[key] = sub_class
|
123
|
-
end
|
124
|
-
|
125
|
-
attr_accessor :text, :children
|
126
|
-
def initialize
|
127
|
-
@children = Array.new
|
128
|
-
end
|
129
|
-
|
130
|
-
def to_ruby
|
131
|
-
raise "Unimplemented: " + self.class.to_s + "#to_ruby on #{self.inspect}"
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
class PList < PTag
|
136
|
-
def to_ruby
|
137
|
-
children.first.to_ruby if children.first
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
class PDict < PTag
|
142
|
-
def to_ruby
|
143
|
-
dict = Hash.new
|
144
|
-
key = nil
|
145
|
-
|
146
|
-
children.each do |c|
|
147
|
-
if key.nil?
|
148
|
-
key = c.to_ruby
|
149
|
-
else
|
150
|
-
dict[key] = c.to_ruby
|
151
|
-
key = nil
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
dict
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
class PKey < PTag
|
160
|
-
def to_ruby
|
161
|
-
CGI::unescapeHTML(text || '')
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
class PString < PTag
|
166
|
-
def to_ruby
|
167
|
-
CGI::unescapeHTML(text || '')
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
class PArray < PTag
|
172
|
-
def to_ruby
|
173
|
-
children.collect do |c|
|
174
|
-
c.to_ruby
|
175
|
-
end
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
class PInteger < PTag
|
180
|
-
def to_ruby
|
181
|
-
text.to_i
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
class PTrue < PTag
|
186
|
-
def to_ruby
|
187
|
-
true
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
class PFalse < PTag
|
192
|
-
def to_ruby
|
193
|
-
false
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
class PReal < PTag
|
198
|
-
def to_ruby
|
199
|
-
text.to_f
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
require 'date'
|
204
|
-
class PDate < PTag
|
205
|
-
def to_ruby
|
206
|
-
DateTime.parse(text)
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
require 'base64'
|
211
|
-
class PData < PTag
|
212
|
-
def to_ruby
|
213
|
-
data = Base64.decode64(text.gsub(/\s+/, ''))
|
214
|
-
|
215
|
-
begin
|
216
|
-
return Marshal.load(data)
|
217
|
-
rescue Exception => e
|
218
|
-
io = StringIO.new
|
219
|
-
io.write data
|
220
|
-
io.rewind
|
221
|
-
return io
|
222
|
-
end
|
223
|
-
end
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|