puppet 0.24.1 → 0.24.2
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 +94 -0
- data/Rakefile +0 -4
- data/bin/puppet +18 -10
- data/bin/puppetd +1 -1
- data/bin/puppetdoc +14 -4
- data/bin/puppetmasterd +1 -1
- data/bin/puppetrun +3 -8
- data/bin/ralsh +12 -11
- data/conf/freebsd/puppetd +1 -1
- data/conf/freebsd/puppetmasterd +1 -1
- data/conf/gentoo/puppet/puppet.conf +29 -0
- data/conf/namespaceauth.conf +20 -0
- data/conf/redhat/puppet.spec +4 -1
- data/conf/solaris/smf/puppetd.xml +1 -1
- data/conf/solaris/smf/puppetmasterd.xml +1 -1
- data/conf/suse/puppet.spec +10 -8
- data/examples/root/etc/puppet/{puppetmasterd.conf → puppet.conf} +6 -3
- data/ext/logcheck/puppet +7 -0
- data/ext/puppet-test +28 -5
- data/lib/puppet.rb +2 -1
- data/lib/puppet/defaults.rb +12 -5
- data/lib/puppet/dsl.rb +43 -45
- data/lib/puppet/external/{gratr/rdot.rb → dot.rb} +0 -0
- data/lib/puppet/external/nagios.rb +50 -0
- data/lib/puppet/external/nagios/base.rb +421 -0
- data/lib/puppet/external/nagios/parser.rb +816 -0
- data/lib/puppet/file_serving/file_base.rb +16 -3
- data/lib/puppet/file_serving/metadata.rb +29 -11
- data/lib/puppet/indirector/terminus.rb +1 -0
- data/lib/puppet/metatype/closure.rb +4 -0
- data/lib/puppet/metatype/evaluation.rb +2 -17
- data/lib/puppet/metatype/metaparams.rb +1 -1
- data/lib/puppet/network.rb +3 -0
- data/lib/puppet/network/client.rb +4 -5
- data/lib/puppet/network/client/master.rb +10 -7
- data/lib/puppet/network/handler/fileserver.rb +22 -45
- data/lib/puppet/network/http_pool.rb +3 -0
- data/lib/puppet/network/http_server/mongrel.rb +7 -1
- data/lib/puppet/network/http_server/webrick.rb +4 -3
- data/lib/puppet/network/xmlrpc/client.rb +12 -1
- data/lib/puppet/node/catalog.rb +51 -40
- data/lib/puppet/parser/ast.rb +27 -49
- data/lib/puppet/parser/ast/astarray.rb +5 -24
- data/lib/puppet/parser/ast/caseopt.rb +4 -4
- data/lib/puppet/parser/ast/casestatement.rb +4 -5
- data/lib/puppet/parser/ast/collection.rb +3 -5
- data/lib/puppet/parser/ast/collexpr.rb +3 -5
- data/lib/puppet/parser/ast/definition.rb +148 -159
- data/lib/puppet/parser/ast/else.rb +2 -3
- data/lib/puppet/parser/ast/function.rb +3 -10
- data/lib/puppet/parser/ast/hostclass.rb +66 -59
- data/lib/puppet/parser/ast/ifstatement.rb +4 -5
- data/lib/puppet/parser/ast/leaf.rb +6 -6
- data/lib/puppet/parser/ast/node.rb +26 -58
- data/lib/puppet/parser/ast/resource.rb +5 -7
- data/lib/puppet/parser/ast/resource_defaults.rb +2 -4
- data/lib/puppet/parser/ast/resource_override.rb +4 -6
- data/lib/puppet/parser/ast/resource_reference.rb +2 -4
- data/lib/puppet/parser/ast/resourceparam.rb +2 -4
- data/lib/puppet/parser/ast/selector.rb +5 -6
- data/lib/puppet/parser/ast/tag.rb +2 -4
- data/lib/puppet/parser/ast/vardef.rb +3 -4
- data/lib/puppet/parser/collector.rb +5 -5
- data/lib/puppet/parser/{compile.rb → compiler.rb} +69 -107
- data/lib/puppet/parser/functions.rb +3 -3
- data/lib/puppet/parser/interpreter.rb +32 -23
- data/lib/puppet/parser/lexer.rb +391 -282
- data/lib/puppet/parser/parser.rb +5 -4
- data/lib/puppet/parser/parser_support.rb +3 -6
- data/lib/puppet/parser/resource.rb +24 -36
- data/lib/puppet/parser/resource/param.rb +1 -1
- data/lib/puppet/parser/resource/reference.rb +7 -3
- data/lib/puppet/parser/scope.rb +12 -7
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/pgraph.rb +9 -98
- data/lib/puppet/provider/interface/redhat.rb +65 -65
- data/lib/puppet/provider/mount/parsed.rb +1 -1
- data/lib/puppet/provider/naginator.rb +55 -0
- data/lib/puppet/provider/nameservice/directoryservice.rb +6 -7
- data/lib/puppet/provider/package/fink.rb +0 -2
- data/lib/puppet/provider/package/gem.rb +9 -5
- data/lib/puppet/provider/package/openbsd.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -8
- data/lib/puppet/provider/package/portage.rb +4 -4
- data/lib/puppet/provider/package/yumhelper.py +8 -6
- data/lib/puppet/provider/parsedfile.rb +7 -1
- data/lib/puppet/provider/service/debian.rb +2 -0
- data/lib/puppet/provider/service/gentoo.rb +4 -0
- data/lib/puppet/provider/service/init.rb +1 -1
- data/lib/puppet/provider/sshkey/parsed.rb +2 -0
- data/lib/puppet/provider/user/useradd.rb +1 -1
- data/lib/puppet/rails.rb +4 -0
- data/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb +17 -0
- data/lib/puppet/rails/fact_value.rb +4 -0
- data/lib/puppet/rails/host.rb +1 -2
- data/lib/puppet/rails/param_value.rb +4 -0
- data/lib/puppet/rails/resource_tag.rb +4 -0
- data/lib/puppet/rails/source_file.rb +4 -1
- data/lib/puppet/relationship.rb +5 -1
- data/lib/puppet/reports/tagmail.rb +12 -1
- data/lib/puppet/resource_reference.rb +1 -1
- data/lib/puppet/simple_graph.rb +78 -11
- data/lib/puppet/sslcertificates.rb +1 -1
- data/lib/puppet/sslcertificates/ca.rb +3 -3
- data/lib/puppet/transaction.rb +7 -4
- data/lib/puppet/transportable.rb +1 -1
- data/lib/puppet/type.rb +3 -10
- data/lib/puppet/type/cron.rb +18 -0
- data/lib/puppet/type/exec.rb +18 -12
- data/lib/puppet/type/{pfile.rb → file.rb} +66 -84
- data/lib/puppet/type/file/checksum.rb +271 -0
- data/lib/puppet/type/{pfile → file}/content.rb +10 -15
- data/lib/puppet/type/{pfile → file}/ensure.rb +15 -8
- data/lib/puppet/type/{pfile → file}/group.rb +0 -0
- data/lib/puppet/type/{pfile → file}/mode.rb +0 -0
- data/lib/puppet/type/{pfile → file}/owner.rb +0 -0
- data/lib/puppet/type/{pfile → file}/source.rb +34 -48
- data/lib/puppet/type/{pfile → file}/target.rb +0 -0
- data/lib/puppet/type/{pfile → file}/type.rb +0 -0
- data/lib/puppet/type/{pfilebucket.rb → filebucket.rb} +0 -0
- data/lib/puppet/type/host.rb +13 -0
- data/lib/puppet/type/mailalias.rb +1 -1
- data/lib/puppet/type/nagios_command.rb +3 -0
- data/lib/puppet/type/nagios_contact.rb +3 -0
- data/lib/puppet/type/nagios_contactgroup.rb +3 -0
- data/lib/puppet/type/nagios_host.rb +3 -0
- data/lib/puppet/type/nagios_hostextinfo.rb +3 -0
- data/lib/puppet/type/nagios_hostgroup.rb +3 -0
- data/lib/puppet/type/nagios_hostgroupescalation.rb +3 -0
- data/lib/puppet/type/nagios_service.rb +3 -0
- data/lib/puppet/type/nagios_servicedependency.rb +3 -0
- data/lib/puppet/type/nagios_serviceescalation.rb +3 -0
- data/lib/puppet/type/nagios_serviceextinfo.rb +3 -0
- data/lib/puppet/type/nagios_timeperiod.rb +3 -0
- data/lib/puppet/type/package.rb +4 -12
- data/lib/puppet/type/service.rb +9 -0
- data/lib/puppet/type/sshkey.rb +3 -3
- data/lib/puppet/util/autoload.rb +5 -5
- data/lib/puppet/util/checksums.rb +51 -13
- data/lib/puppet/util/constant_inflector.rb +14 -0
- data/lib/puppet/util/filetype.rb +1 -1
- data/lib/puppet/util/graph.rb +3 -9
- data/lib/puppet/util/nagios_maker.rb +57 -0
- data/lib/puppet/util/settings.rb +19 -16
- data/lib/puppet/util/tagging.rb +39 -0
- data/test/executables/puppetbin.rb +17 -0
- data/test/language/ast.rb +8 -58
- data/test/language/ast/casestatement.rb +3 -3
- data/test/language/ast/resource.rb +6 -7
- data/test/language/ast/resource_reference.rb +12 -12
- data/test/language/ast/selector.rb +2 -2
- data/test/language/ast/variable.rb +2 -2
- data/test/language/functions.rb +24 -24
- data/test/language/parser.rb +20 -8
- data/test/language/resource.rb +5 -42
- data/test/language/scope.rb +21 -37
- data/test/language/snippets.rb +7 -0
- data/test/lib/puppettest.rb +28 -14
- data/test/lib/puppettest/parsertesting.rb +10 -10
- data/test/lib/puppettest/support/resources.rb +1 -1
- data/test/network/client/master.rb +10 -0
- data/test/network/handler/fileserver.rb +51 -49
- data/test/network/server/webrick.rb +1 -1
- data/test/other/dsl.rb +3 -4
- data/test/other/transactions.rb +6 -4
- data/test/rails/ast.rb +2 -2
- data/test/rails/configuration.rb +1 -1
- data/test/rails/railsparameter.rb +2 -0
- data/test/rails/railsresource.rb +1 -0
- data/test/ral/manager/type.rb +4 -4
- data/test/ral/providers/cron/crontab.rb +3 -1
- data/test/ral/providers/package.rb +1 -1
- data/test/ral/{types → type}/basic.rb +2 -2
- data/test/ral/{types → type}/cron.rb +0 -0
- data/test/ral/{types → type}/exec.rb +42 -2
- data/test/ral/{types → type}/file.rb +34 -79
- data/test/ral/{types → type}/file/target.rb +0 -0
- data/test/ral/{types → type}/filebucket.rb +0 -0
- data/test/ral/{types → type}/fileignoresource.rb +0 -0
- data/test/ral/{types → type}/filesources.rb +8 -27
- data/test/ral/{types → type}/group.rb +0 -0
- data/test/ral/{types → type}/host.rb +16 -0
- data/test/ral/{types → type}/mailalias.rb +0 -0
- data/test/ral/{types → type}/parameter.rb +0 -0
- data/test/ral/{types → type}/port.rb +0 -0
- data/test/ral/{types → type}/property.rb +0 -0
- data/test/ral/{types → type}/resources.rb +0 -0
- data/test/ral/{types → type}/service.rb +0 -0
- data/test/ral/{types → type}/sshkey.rb +0 -0
- data/test/ral/{types → type}/tidy.rb +1 -0
- data/test/ral/{types → type}/user.rb +0 -0
- data/test/ral/{types → type}/yumrepo.rb +0 -0
- data/test/ral/{types → type}/zone.rb +0 -0
- data/test/util/autoload.rb +24 -5
- metadata +60 -107
- data/conf/gentoo/puppet/puppetca.conf +0 -29
- data/conf/gentoo/puppet/puppetd.conf +0 -29
- data/conf/gentoo/puppet/puppetmasterd.conf +0 -29
- data/examples/root/etc/puppet/puppetd.conf +0 -4
- data/lib/puppet/external/gratr.rb +0 -33
- data/lib/puppet/external/gratr/adjacency_graph.rb +0 -257
- data/lib/puppet/external/gratr/base.rb +0 -34
- data/lib/puppet/external/gratr/biconnected.rb +0 -116
- data/lib/puppet/external/gratr/chinese_postman.rb +0 -123
- data/lib/puppet/external/gratr/common.rb +0 -73
- data/lib/puppet/external/gratr/comparability.rb +0 -92
- data/lib/puppet/external/gratr/digraph.rb +0 -116
- data/lib/puppet/external/gratr/digraph_distance.rb +0 -185
- data/lib/puppet/external/gratr/dot.rb +0 -90
- data/lib/puppet/external/gratr/edge.rb +0 -145
- data/lib/puppet/external/gratr/graph.rb +0 -303
- data/lib/puppet/external/gratr/graph_api.rb +0 -83
- data/lib/puppet/external/gratr/import.rb +0 -44
- data/lib/puppet/external/gratr/labels.rb +0 -90
- data/lib/puppet/external/gratr/maximum_flow.rb +0 -64
- data/lib/puppet/external/gratr/search.rb +0 -409
- data/lib/puppet/external/gratr/strong_components.rb +0 -127
- data/lib/puppet/external/gratr/undirected_graph.rb +0 -153
- data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +0 -62
- data/lib/puppet/rails/external/tagging/init.rb +0 -5
- data/lib/puppet/rails/external/tagging/tag.rb +0 -50
- data/lib/puppet/rails/external/tagging/tagging.rb +0 -12
- data/lib/puppet/rails/puppet_class.rb +0 -6
- data/lib/puppet/reference/node_source.rb +0 -9
- data/lib/puppet/reference/report.rb +0 -21
- data/lib/puppet/type/pfile/checksum.rb +0 -326
- data/test/language/ast/definition.rb +0 -166
- data/test/language/ast/hostclass.rb +0 -184
- data/test/language/compile.rb +0 -569
- data/test/language/lexer.rb +0 -276
- data/test/lib/mocha.rb +0 -19
- data/test/lib/mocha/any_instance_method.rb +0 -35
- data/test/lib/mocha/auto_verify.rb +0 -113
- data/test/lib/mocha/central.rb +0 -35
- data/test/lib/mocha/class_method.rb +0 -62
- data/test/lib/mocha/deprecation.rb +0 -22
- data/test/lib/mocha/exception_raiser.rb +0 -17
- data/test/lib/mocha/expectation.rb +0 -378
- data/test/lib/mocha/expectation_error.rb +0 -6
- data/test/lib/mocha/infinite_range.rb +0 -25
- data/test/lib/mocha/inspect.rb +0 -39
- data/test/lib/mocha/instance_method.rb +0 -8
- data/test/lib/mocha/is_a.rb +0 -9
- data/test/lib/mocha/metaclass.rb +0 -7
- data/test/lib/mocha/missing_expectation.rb +0 -27
- data/test/lib/mocha/mock.rb +0 -207
- data/test/lib/mocha/multiple_yields.rb +0 -20
- data/test/lib/mocha/no_yields.rb +0 -11
- data/test/lib/mocha/object.rb +0 -110
- data/test/lib/mocha/parameter_matchers.rb +0 -9
- data/test/lib/mocha/parameter_matchers/all_of.rb +0 -39
- data/test/lib/mocha/parameter_matchers/any_of.rb +0 -44
- data/test/lib/mocha/parameter_matchers/anything.rb +0 -30
- data/test/lib/mocha/parameter_matchers/has_entry.rb +0 -39
- data/test/lib/mocha/parameter_matchers/has_key.rb +0 -39
- data/test/lib/mocha/parameter_matchers/has_value.rb +0 -39
- data/test/lib/mocha/parameter_matchers/includes.rb +0 -37
- data/test/lib/mocha/pretty_parameters.rb +0 -28
- data/test/lib/mocha/return_values.rb +0 -31
- data/test/lib/mocha/setup_and_teardown.rb +0 -23
- data/test/lib/mocha/single_return_value.rb +0 -24
- data/test/lib/mocha/single_yield.rb +0 -18
- data/test/lib/mocha/standalone.rb +0 -32
- data/test/lib/mocha/stub.rb +0 -18
- data/test/lib/mocha/test_case_adapter.rb +0 -49
- data/test/lib/mocha/yield_parameters.rb +0 -31
data/lib/puppet/parser/parser.rb
CHANGED
@@ -29,7 +29,7 @@ module Puppet
|
|
29
29
|
|
30
30
|
class Parser < Racc::Parser
|
31
31
|
|
32
|
-
module_eval <<'..end grammar.ra modeval..
|
32
|
+
module_eval <<'..end grammar.ra modeval..idfef5d70c9f', 'grammar.ra', 638
|
33
33
|
|
34
34
|
# It got too annoying having code in a file that needs to be compiled.
|
35
35
|
require 'puppet/parser/parser_support'
|
@@ -39,8 +39,9 @@ require 'puppet/parser/parser_support'
|
|
39
39
|
# mode: ruby
|
40
40
|
# End:
|
41
41
|
|
42
|
+
# $Id$
|
42
43
|
|
43
|
-
..end grammar.ra modeval..
|
44
|
+
..end grammar.ra modeval..idfef5d70c9f
|
44
45
|
|
45
46
|
##### racc 1.4.5 generates ###
|
46
47
|
|
@@ -956,7 +957,7 @@ module_eval <<'.,.,', 'grammar.ra', 174
|
|
956
957
|
def _reduce_38( val, _values, result )
|
957
958
|
type = val[0]
|
958
959
|
|
959
|
-
if type == :exported and ! Puppet[:storeconfigs]
|
960
|
+
if (type == :exported and ! Puppet[:storeconfigs]) and ! Puppet[:parseonly]
|
960
961
|
error "You cannot collect without storeconfigs being set"
|
961
962
|
end
|
962
963
|
|
@@ -1009,7 +1010,7 @@ module_eval <<'.,.,', 'grammar.ra', 199
|
|
1009
1010
|
else
|
1010
1011
|
args[:form] = val[1]
|
1011
1012
|
end
|
1012
|
-
if args[:form] == :exported and ! Puppet[:storeconfigs]
|
1013
|
+
if args[:form] == :exported and ! Puppet[:storeconfigs] and ! Puppet[:parseonly]
|
1013
1014
|
error "You cannot collect exported resources without storeconfigs being set"
|
1014
1015
|
end
|
1015
1016
|
result = ast AST::Collection, args
|
@@ -47,11 +47,8 @@ class Puppet::Parser::Parser
|
|
47
47
|
|
48
48
|
# Create an AST object, and automatically add the file and line information if
|
49
49
|
# available.
|
50
|
-
def ast(klass, hash =
|
51
|
-
hash
|
52
|
-
unless hash.include?(:line)
|
53
|
-
hash[:line] = @lexer.line
|
54
|
-
end
|
50
|
+
def ast(klass, hash = {})
|
51
|
+
hash[:line] = @lexer.line unless hash.include?(:line)
|
55
52
|
|
56
53
|
unless hash.include?(:file)
|
57
54
|
if file = @lexer.file
|
@@ -180,7 +177,7 @@ class Puppet::Parser::Parser
|
|
180
177
|
"in file #{@lexer.file} at line #{@lexer.line}"
|
181
178
|
)
|
182
179
|
end
|
183
|
-
files = Puppet::Module::find_manifests(pat, :cwd => dir)
|
180
|
+
files = Puppet::Module::find_manifests(pat, :cwd => dir, :environment => @environment)
|
184
181
|
if files.size == 0
|
185
182
|
raise Puppet::ImportError.new("No file(s) found for import " +
|
186
183
|
"of '#{pat}'")
|
@@ -3,18 +3,18 @@
|
|
3
3
|
class Puppet::Parser::Resource
|
4
4
|
require 'puppet/parser/resource/param'
|
5
5
|
require 'puppet/parser/resource/reference'
|
6
|
+
require 'puppet/util/tagging'
|
6
7
|
include Puppet::Util
|
7
8
|
include Puppet::Util::MethodHelper
|
8
9
|
include Puppet::Util::Errors
|
9
10
|
include Puppet::Util::Logging
|
11
|
+
include Puppet::Util::Tagging
|
10
12
|
|
11
13
|
attr_accessor :source, :line, :file, :scope, :rails_id
|
12
14
|
attr_accessor :virtual, :override, :translated
|
13
15
|
|
14
16
|
attr_reader :exported, :evaluated, :params
|
15
17
|
|
16
|
-
attr_writer :tags
|
17
|
-
|
18
18
|
# Determine whether the provided parameter name is a relationship parameter.
|
19
19
|
def self.relationship_parameter?(name)
|
20
20
|
unless defined?(@relationship_names)
|
@@ -58,8 +58,7 @@ class Puppet::Parser::Resource
|
|
58
58
|
def evaluate
|
59
59
|
if klass = @ref.definedtype
|
60
60
|
finish()
|
61
|
-
|
62
|
-
return klass.evaluate(:scope => scope, :resource => self)
|
61
|
+
return klass.evaluate_code(self)
|
63
62
|
elsif builtin?
|
64
63
|
devfail "Cannot evaluate a builtin type"
|
65
64
|
else
|
@@ -83,12 +82,19 @@ class Puppet::Parser::Resource
|
|
83
82
|
# Do any finishing work on this object, called before evaluation or
|
84
83
|
# before storage/translation.
|
85
84
|
def finish
|
86
|
-
|
85
|
+
return if finished?
|
86
|
+
@finished = true
|
87
87
|
add_defaults()
|
88
88
|
add_metaparams()
|
89
|
+
add_scope_tags()
|
89
90
|
validate()
|
90
91
|
end
|
91
92
|
|
93
|
+
# Has this resource already been finished?
|
94
|
+
def finished?
|
95
|
+
defined?(@finished) and @finished
|
96
|
+
end
|
97
|
+
|
92
98
|
def initialize(options)
|
93
99
|
# Set all of the options we can.
|
94
100
|
options.each do |option, value|
|
@@ -130,12 +136,16 @@ class Puppet::Parser::Resource
|
|
130
136
|
raise ArgumentError, "Resources do not accept %s" % options.keys.collect { |k| k.to_s }.join(", ")
|
131
137
|
end
|
132
138
|
|
133
|
-
@tags = []
|
134
139
|
tag(@ref.type)
|
135
|
-
tag(@ref.title) if @ref.title.to_s
|
140
|
+
tag(@ref.title) if valid_tag?(@ref.title.to_s)
|
141
|
+
end
|
136
142
|
|
137
|
-
|
138
|
-
|
143
|
+
# Is this resource modeling an isomorphic resource type?
|
144
|
+
def isomorphic?
|
145
|
+
if builtin?
|
146
|
+
return @ref.builtintype.isomorphic?
|
147
|
+
else
|
148
|
+
return true
|
139
149
|
end
|
140
150
|
end
|
141
151
|
|
@@ -223,23 +233,6 @@ class Puppet::Parser::Resource
|
|
223
233
|
@ref.to_s
|
224
234
|
end
|
225
235
|
|
226
|
-
# Add a tag to our current list. These tags will be added to all
|
227
|
-
# of the objects contained in this scope.
|
228
|
-
def tag(*ary)
|
229
|
-
ary.collect { |tag| tag.to_s.downcase }.collect { |tag| tag.split("::") }.flatten.each do |tag|
|
230
|
-
unless tag =~ /^\w[-\w]*$/
|
231
|
-
fail Puppet::ParseError, "Invalid tag %s" % tag.inspect
|
232
|
-
end
|
233
|
-
unless @tags.include?(tag)
|
234
|
-
@tags << tag
|
235
|
-
end
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
|
-
def tags
|
240
|
-
@tags.dup
|
241
|
-
end
|
242
|
-
|
243
236
|
def to_hash
|
244
237
|
@params.inject({}) do |hash, ary|
|
245
238
|
param = ary[1]
|
@@ -260,6 +253,8 @@ class Puppet::Parser::Resource
|
|
260
253
|
# Handle file specially
|
261
254
|
db_resource.file = self.file
|
262
255
|
|
256
|
+
db_resource.save
|
257
|
+
|
263
258
|
@params.each { |name, param|
|
264
259
|
param.to_rails(db_resource)
|
265
260
|
}
|
@@ -361,16 +356,9 @@ class Puppet::Parser::Resource
|
|
361
356
|
end
|
362
357
|
end
|
363
358
|
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
overrides.each do |over|
|
368
|
-
self.merge(over)
|
369
|
-
end
|
370
|
-
|
371
|
-
# Remove the overrides, so that the configuration knows there
|
372
|
-
# are none left.
|
373
|
-
overrides.clear
|
359
|
+
def add_scope_tags
|
360
|
+
if scope_resource = scope.resource
|
361
|
+
tag(*scope_resource.tags)
|
374
362
|
end
|
375
363
|
end
|
376
364
|
|
@@ -12,7 +12,7 @@ class Puppet::Parser::Resource::Param
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def inspect
|
15
|
-
"#<#{self.class} @name => #{
|
15
|
+
"#<#{self.class} @name => #{name}, @value => #{value}, @source => #{source.name}>"
|
16
16
|
end
|
17
17
|
|
18
18
|
def line_to_i
|
@@ -37,10 +37,14 @@ class Puppet::Parser::Resource::Reference < Puppet::ResourceReference
|
|
37
37
|
if self.title == :main
|
38
38
|
tmp = @scope.findclass("")
|
39
39
|
else
|
40
|
-
tmp = @scope.findclass(self.title)
|
40
|
+
unless tmp = @scope.findclass(self.title)
|
41
|
+
fail Puppet::ParseError, "Could not find class '%s'" % self.title
|
42
|
+
end
|
41
43
|
end
|
42
44
|
when "Node": # look for node definitions
|
43
|
-
tmp = @scope.parser.nodes[self.title]
|
45
|
+
unless tmp = @scope.parser.nodes[self.title]
|
46
|
+
fail Puppet::ParseError, "Could not find node '%s'" % self.title
|
47
|
+
end
|
44
48
|
else # normal definitions
|
45
49
|
# We have to swap these variables around so the errors are right.
|
46
50
|
tmp = @scope.finddefine(self.type)
|
@@ -49,7 +53,7 @@ class Puppet::Parser::Resource::Reference < Puppet::ResourceReference
|
|
49
53
|
if tmp
|
50
54
|
@definedtype = tmp
|
51
55
|
else
|
52
|
-
fail Puppet::ParseError, "Could not find resource '%s'" % self
|
56
|
+
fail Puppet::ParseError, "Could not find resource type '%s'" % self.type
|
53
57
|
end
|
54
58
|
end
|
55
59
|
|
data/lib/puppet/parser/scope.rb
CHANGED
@@ -17,15 +17,20 @@ class Puppet::Parser::Scope
|
|
17
17
|
include Puppet::Util::Errors
|
18
18
|
attr_accessor :parent, :level, :parser, :source, :resource
|
19
19
|
attr_accessor :base, :keyword, :nodescope
|
20
|
-
attr_accessor :top, :translated, :
|
20
|
+
attr_accessor :top, :translated, :compiler
|
21
|
+
|
22
|
+
# A demeterific shortcut to the catalog.
|
23
|
+
def catalog
|
24
|
+
compiler.catalog
|
25
|
+
end
|
21
26
|
|
22
27
|
# Proxy accessors
|
23
28
|
def host
|
24
|
-
@
|
29
|
+
@compiler.node.name
|
25
30
|
end
|
26
31
|
|
27
32
|
def interpreter
|
28
|
-
@
|
33
|
+
@compiler.interpreter
|
29
34
|
end
|
30
35
|
|
31
36
|
# Is the value true? This allows us to control the definition of truth
|
@@ -72,7 +77,7 @@ class Puppet::Parser::Scope
|
|
72
77
|
end
|
73
78
|
|
74
79
|
def findresource(string, name = nil)
|
75
|
-
|
80
|
+
compiler.findresource(string, name)
|
76
81
|
end
|
77
82
|
|
78
83
|
# Initialize our new scope. Defaults to having no parent.
|
@@ -147,7 +152,7 @@ class Puppet::Parser::Scope
|
|
147
152
|
unless klass
|
148
153
|
raise Puppet::ParseError, "Could not find class %s" % klassname
|
149
154
|
end
|
150
|
-
unless kscope =
|
155
|
+
unless kscope = compiler.class_scope(klass)
|
151
156
|
raise Puppet::ParseError, "Class %s has not been evaluated so its variables cannot be referenced" % klass.classname
|
152
157
|
end
|
153
158
|
return kscope.lookupvar(shortname, usestring)
|
@@ -184,7 +189,7 @@ class Puppet::Parser::Scope
|
|
184
189
|
|
185
190
|
# Create a new scope and set these options.
|
186
191
|
def newscope(options = {})
|
187
|
-
|
192
|
+
compiler.newscope(self, options)
|
188
193
|
end
|
189
194
|
|
190
195
|
# Is this class for a node? This is used to make sure that
|
@@ -199,7 +204,7 @@ class Puppet::Parser::Scope
|
|
199
204
|
# than doing lots of queries.
|
200
205
|
def parent
|
201
206
|
unless defined?(@parent)
|
202
|
-
@parent =
|
207
|
+
@parent = compiler.parent(self)
|
203
208
|
end
|
204
209
|
@parent
|
205
210
|
end
|
@@ -7,7 +7,7 @@ class Puppet::Parser::TemplateWrapper
|
|
7
7
|
|
8
8
|
def initialize(scope, file)
|
9
9
|
@scope = scope
|
10
|
-
@file = Puppet::Module::find_template(file, @scope.
|
10
|
+
@file = Puppet::Module::find_template(file, @scope.compiler.environment)
|
11
11
|
|
12
12
|
unless FileTest.exists?(@file)
|
13
13
|
raise Puppet::ParseError,
|
data/lib/puppet/pgraph.rb
CHANGED
@@ -1,51 +1,27 @@
|
|
1
1
|
# Created by Luke A. Kanies on 2006-11-24.
|
2
2
|
# Copyright (c) 2006. All rights reserved.
|
3
3
|
|
4
|
-
require 'puppet/external/gratr/digraph'
|
5
|
-
require 'puppet/external/gratr/import'
|
6
|
-
require 'puppet/external/gratr/dot'
|
7
|
-
|
8
4
|
require 'puppet/relationship'
|
9
5
|
require 'puppet/simple_graph'
|
10
6
|
|
11
7
|
# This class subclasses a graph class in order to handle relationships
|
12
8
|
# among resources.
|
13
9
|
class Puppet::PGraph < Puppet::SimpleGraph
|
14
|
-
# This is the type used for splicing.
|
15
|
-
attr_accessor :container_type
|
16
|
-
|
17
10
|
include Puppet::Util
|
18
11
|
|
19
|
-
def add_edge
|
12
|
+
def add_edge(*args)
|
20
13
|
@reversal = nil
|
21
14
|
super
|
22
15
|
end
|
23
16
|
|
24
|
-
def add_vertex
|
17
|
+
def add_vertex(*args)
|
25
18
|
@reversal = nil
|
26
19
|
super
|
27
20
|
end
|
28
21
|
|
29
|
-
# Make sure whichever edge has a label keeps the label
|
30
|
-
def copy_label(source, target, label)
|
31
|
-
# 'require' relationships will not have a label,
|
32
|
-
# and all 'subscribe' relationships have the same
|
33
|
-
# label, at least for now.
|
34
|
-
|
35
|
-
# Labels default to {}, so we can't just test for nil.
|
36
|
-
newlabel = label || {}
|
37
|
-
oldlabel = edge_label(source, target) || {}
|
38
|
-
if ! newlabel.empty? and oldlabel.empty?
|
39
|
-
edge_label_set(source, target, label)
|
40
|
-
# We should probably check to see if the labels both exist
|
41
|
-
# and don't match, but we'd just throw an error which the user
|
42
|
-
# couldn't do anyting about.
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
22
|
# Which resources a given resource depends upon.
|
47
23
|
def dependents(resource)
|
48
|
-
|
24
|
+
tree_from_vertex(resource).keys
|
49
25
|
end
|
50
26
|
|
51
27
|
# Which resources depend upon the given resource.
|
@@ -58,19 +34,13 @@ class Puppet::PGraph < Puppet::SimpleGraph
|
|
58
34
|
# Strangely, it's significantly faster to search a reversed
|
59
35
|
# tree in the :out direction than to search a normal tree
|
60
36
|
# in the :in direction.
|
61
|
-
@reversal.
|
62
|
-
#tree_from_vertex2(resource, :in).keys
|
63
|
-
end
|
64
|
-
|
65
|
-
# Override this method to use our class instead.
|
66
|
-
def edge_class()
|
67
|
-
Puppet::Relationship
|
37
|
+
@reversal.tree_from_vertex(resource, :out).keys
|
68
38
|
end
|
69
39
|
|
70
40
|
# Determine all of the leaf nodes below a given vertex.
|
71
|
-
def leaves(vertex,
|
72
|
-
tree = tree_from_vertex(vertex,
|
73
|
-
l = tree.keys.find_all { |c| adjacent(c, :direction =>
|
41
|
+
def leaves(vertex, direction = :out)
|
42
|
+
tree = tree_from_vertex(vertex, direction)
|
43
|
+
l = tree.keys.find_all { |c| adjacent(c, :direction => direction).empty? }
|
74
44
|
return l
|
75
45
|
end
|
76
46
|
|
@@ -128,83 +98,24 @@ class Puppet::PGraph < Puppet::SimpleGraph
|
|
128
98
|
t = edge.target
|
129
99
|
end
|
130
100
|
|
131
|
-
|
132
|
-
# same edge, but we *do* want to make sure we
|
133
|
-
# keep labels around.
|
134
|
-
# XXX This will *not* work when we support multiple
|
135
|
-
# types of labels, and only works now because
|
136
|
-
# you can only do simple subscriptions.
|
137
|
-
if edge?(s, t)
|
138
|
-
copy_label(s, t, edge.label)
|
139
|
-
next
|
140
|
-
end
|
141
|
-
add_edge!(s, t, edge.label)
|
101
|
+
add_edge(s, t, edge.label)
|
142
102
|
end
|
143
103
|
|
144
104
|
# Now get rid of the edge, so remove_vertex! works correctly.
|
145
105
|
remove_edge!(edge)
|
146
|
-
Puppet.debug "%s: %s => %s: %s" % [container,
|
147
|
-
edge.source, edge.target, edge?(edge.source, edge.target)]
|
148
106
|
end
|
149
107
|
end
|
150
108
|
remove_vertex!(container)
|
151
109
|
end
|
152
110
|
end
|
153
|
-
|
154
|
-
# For some reason, unconnected vertices do not show up in
|
155
|
-
# this graph.
|
156
|
-
def to_jpg(path, name)
|
157
|
-
gv = vertices()
|
158
|
-
Dir.chdir(path) do
|
159
|
-
induced_subgraph(gv).write_to_graphic_file('jpg', name)
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
# Replace the default method, because we want to throw errors on back edges,
|
164
|
-
# not just skip them.
|
165
|
-
def topsort(start = nil, &block)
|
166
|
-
result = []
|
167
|
-
go = true
|
168
|
-
cycles = []
|
169
|
-
back = Proc.new { |e|
|
170
|
-
cycles << e
|
171
|
-
go = false
|
172
|
-
}
|
173
|
-
push = Proc.new { |v| result.unshift(v) if go}
|
174
|
-
start ||= vertices[0]
|
175
|
-
dfs({:exit_vertex => push, :back_edge => back, :start => start})
|
176
|
-
if block_given?
|
177
|
-
result.each {|v| yield(v) }
|
178
|
-
end
|
179
|
-
|
180
|
-
if cycles.length > 0
|
181
|
-
msg = "Found cycles in the following relationships:"
|
182
|
-
cycles.each { |edge| msg += " %s => %s" % [edge.source, edge.target] }
|
183
|
-
raise Puppet::Error, msg
|
184
|
-
end
|
185
|
-
return result
|
186
|
-
end
|
187
|
-
|
188
|
-
def to_yaml_properties
|
189
|
-
instance_variables
|
190
|
-
end
|
191
111
|
|
192
112
|
# A different way of walking a tree, and a much faster way than the
|
193
113
|
# one that comes with GRATR.
|
194
|
-
def
|
114
|
+
def tree_from_vertex(start, direction = :out)
|
195
115
|
predecessor={}
|
196
116
|
walk(start, direction) do |parent, child|
|
197
117
|
predecessor[child] = parent
|
198
118
|
end
|
199
119
|
predecessor
|
200
120
|
end
|
201
|
-
|
202
|
-
# A support method for tree_from_vertex2. Just walk the tree and pass
|
203
|
-
# the parents and children.
|
204
|
-
def walk(source, direction, &block)
|
205
|
-
adjacent(source, :direction => direction).each do |target|
|
206
|
-
yield source, target
|
207
|
-
walk(target, direction, &block)
|
208
|
-
end
|
209
|
-
end
|
210
121
|
end
|