| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Resources mark themselves as evaluated to prevent being evaluated
again. Unfortunately, they were not marking themselves until after
they had finished being completely evaluated. Thus, there was
nothing actually stopping recursive evaluations. This patch just
makes resources mark themselves as evaluated when they start
evaluating, and adds tests.
The original setting of evaluated was done in an ensure block, so
this doesn't change the behavior of a resource which fails to
evaluate. The only places evaluated? is checked aren't affected
by this change, as they wouldn't want to evaluate it when it's
already being evaluated anyway.
|
|
|
|
|
|
|
|
|
|
| |
As Brice discovered, the problem was that we simply ignored empty classes in
the graph when determining application order. This patch instead replaces them
with a resource of a new type which we've frequently noted the (internal) need
for: a whit, the smallest possible resource, which has no properties or other
semantics apart from its existence and its name.
This resource then ensures application order through the normal mechanisms.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The problem is that the environment list gets cleared
when Settings#set_value is called, and it was being
called every time Settings#use was called, which is
more often than obvious but especially if reporting
is enabled.
Previously we ignored noop when running inside of Settings,
and this essentially adds that back in, so we can remove
the special noop behaviour in Settings itself.
Signed-off-by: Luke Kanies <luke@puppetlabs.com>
|
|
|
|
|
| |
This fixes double-quoted strings to interpolate undef variables
as an empty string. This is the behavior present in 0.25.x.
|
|
|
|
|
|
|
|
|
| |
Parent classes were getting searched for in a way that fails if they
were not already loaded into an environment. This patch replaces that
codepath with a call that will load them if they are needed.
This bug was masked by another bug that loads all classes into
"production", whether they are used there or not.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Ticket #4238 introduced a problem that a function couldn't compare to
another value until after it was evaluated, and AST::Function didn't have the
evaluate_match method. This change moves that method from AST::Leaf to AST.
The special casing necessary for doing comparisons between AST objects
feels messy and could probably be encapsulated better. I've created
ticket #4291 to remind us to refactor this at some point.
Paired with: Nick Lewis
Signed-off-by: Matt Robinson <matt@puppetlabs.com>
|
|
|
|
|
| |
The tweak to the fix for #4233 was too narrow, and precluded the possibility
that a type name would contain colons e.g. (MySQL::User)
|
|
|
|
|
|
|
| |
We sometimes refer to the namevar as its name and sometimes as :name; there is
no consistant pattern in the code for when this is done one way or the other.
This problem was exposed by the composite namevar refactor; the present patch
adjusts the crucial routine to work with either.
|
|
|
|
|
|
|
| |
With the title carrying semantic information it may contain arbitrary chars;
when parsing a ref we only want word chars in the type (up to the first open
square bracket) and everything else, enclosed in "[" / "]" to the end of the
string, is the title.
|
| |
|
|
|
|
|
|
|
|
| |
be multiline
Puppet allows resource titles to contain newlines. We recently
introduced several regexps that were failing on resources with multiline
titles.
|
|
|
|
|
|
| |
The loop detection mechanism isn't great (it should, for example, allow nesting
if the signatures differ) but the key problem was that the ensure was simply
backwards.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a modification of the Nick/Jesse/Matt patch, retaining their tests and
the analysis of the problem but reversing the implementation direction of the
solution.
Rather than trying to make the already somewhat brittle slurpstring smarter,
which requires telling it what following strings will be accepted by the caller
with a zero-width-lookahead negation of the regular expression used to extract
a variable name, this patch keeps that responsibility in the caller where it
belongs.
The caller (tokenize_interpolated_string) now checks to see if it got a
variable name _before_ emitting a variable token; if it got one, it proceeds
normally, but if it didn't it simply tries again from that point in the string
(accumulating the false match as a prefix). This change actually simplifies
the logic of tokenize_interpolated_string somewhat.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The comparisons operator (and more particularly == and !=) were not treating
the undef value as '', like case and selector did since #2818.
This patch makes sure comparison operator uses AST leaf matching.
Unfortunately, doing this introduces a behavior change compared to
the previous versions:
Numbers embedded in strings will now be matched as numbers in case and
selector statements instead of string matching.
Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
|
|
|
|
|
|
|
|
| |
The import function was calling type_loader#import directly so that it could
pass in the current file name, but by doing so it was thwarting the thread-
safety locking level. This patch rearanges things so that all imports go
through the same (thread safe) code path while retaining the current_file
passing, error handling, etc. from the old structure.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
arguments
When the interface to Puppet::Resource changed, its subclass
Puppet::Parser::Resource was also affected. One case of initializing
those objects did not get updated when the code changed, causing
storeconfigs to break.
Also, this patch adds a error message that would have made it easier to
catch this problem (as puppet could consume all memory and die trying to
print the old error message)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Node parameters were made a reader instead of an accessor in
commit b82b4ef04282ca0006931562f60459a1591b6268
Author: Luke Kanies <luke@reductivelabs.com>
Date: Wed Jan 6 17:42:42 2010 -0800
All non-transient parser references are gone
but external nodes needs to be able to assign to parameters. The fix is
just to change that back to an accessor. There may have been concern
over nodes replacing the hash object instead of the values could have
bad consequences, but that's not a concern since the node object being
created in this case is new also.
Paired with: Nick Lewis
|
|
|
|
|
|
| |
While find_fully_qualified expects (and gets) fully qualified class names it
does not always get absolute names (with the ::-prefix); test in the global
scope refers to the same thing as ::test.
|
|
|
|
|
|
|
| |
It looks like a merge went wrong and we were returning abruptely
from a benchmark block, thus jumping over a precious log information.
Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
|
|
|
|
| |
A diagnostic message was left in the code durring development. Now it's gone.
|
|
|
|
|
|
|
|
|
| |
unevaluated_resources was a performance bottleneck and was doing a great deal
of unneeded work, such as searching for the type of evaluated resources before
ignoring them because only unevaluated resources were wanted.
This patch is behaviour neutral but gives a 2-3x speedup for compiles with many
defined resources.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
In Red Hat bug #531116 Ruben Kerkhof noted that we weren't using the
--pidfile $pidfile option to daemon. This caused 'service puppet start'
to fail if puppet had already been started. To be consistent, we now
pass the pidfile option to daemon, killproc, and status when those
functions provide such an option. And we only test for the availability
of the -p/--pidfile option in one place.
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
When onetime was moved to global defaults, it broke the option handler
using it in agent to manage waitforcert length. Additionally, it
caused --onetime and -o to behave differently. This patch removes
the ordinary option handler defined in agent and moves the logic
for waitforcert to the one location it's used.
|
|
|
|
|
|
| |
My previous fix for #3656 missed the case where a "require" attribute
(or other graph-ish attribute) had multiple values. This patch
generalizes that fix to the multiple-value case.
|
|
|
|
|
|
|
|
|
|
|
|
| |
This came up because if you ran puppetd with a specific vardir, then
when rundir got set to a hardcoded value its parent directory might not
exist and the whole thing would fail.
This change came about with the concept of run_mode, and this fix is
restoring the behaviour that was in 0.25.x
Reviewed-by: Jesse Wolfe
Signed-off-by: Matt Robinson <matt@puppetlabs.com>
|
|
|
|
|
|
| |
The module init loading was broken in 7504f1e..b938edf and then gradually
removed as dead code. This is a minimal (and mildly ugly) reinsertion os it
with the addition of .rb support.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
type/user.rb was assuming that catalog.resources would return resources.
In 0.25.x, it (confusingly) returns strings. type/user ignored this, and
the codepath was a no-op.
In 2.6, the method was renamed to something less confusing, causing the
codepath in type/user to fail outright.
This patch added a catalog.resources method that returns resource
objects.
As a side effect, user resources will now autorequire group resources
again.
|
|
|
|
| |
Added the require.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch fixes the narrow problem of #4205, wherein type_loader would reparse
a file each time it was imported (causing the parser to incorrectly think that
it was in a loop) by checking @imported inside the existing check on the
thread-guarded @loaded. (@imported was being set but never checked).
This works (and is thread safe) because all of this is going on inside a giant
synchronize care of @loaded. But it, like the fix for #4208, does nothing
about the global lock.
Areas for future research:
1) Why is the looping inside of import?
2) Why are there separate @loaded and @imported tables?
3) Why is the parsing treated like a function (called deep in the structure)
yet coded like a thread-savvy pseudo state monad (e.g. raising errors that
presume it knows/owns what's going on outside the whole process)?
These and many other exciting questions are deferred to #4211
|
|
|
|
|
|
|
|
|
| |
Due to the glob pattern used, we are trying to import manifests twice.
Since it isn't possible (see #4205), it is not possible to use a pattern
in an import statement.
This patch makes sure manifests are returned only once.
Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
|
|
|
|
|
|
|
|
|
|
| |
Environments contain a deal of transitory information and references to other
objects, none of which is wanted when they are serialized.
Rather than having this serialization concern propogate through the code by
replacing environments by their names prior to serialization (which would be
one way to address the problem) this patch changes environments so they only
serialize their identity (name) and not their contents.
|
|
|
|
|
|
|
| |
import_if_possible calls itself recursively, but it was failing to pass
its block parameter to its younger self. Thus when the inner call
reached the un-blocked case, it raised an exception rather than doing
something useful.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Replaced 106806 occurances of ^( +)(.*$) with
The ruby community almost universally (i.e. everyone but Luke, Markus, and the other eleven people
who learned ruby in the 1900s) uses two-space indentation.
3 Examples:
The code:
end
# Tell getopt which arguments are valid
def test_get_getopt_args
element = Setting.new :name => "foo", :desc => "anything", :settings => Puppet::Util::Settings.new
assert_equal([["--foo", GetoptLong::REQUIRED_ARGUMENT]], element.getopt_args, "Did not produce appropriate getopt args")
becomes:
end
# Tell getopt which arguments are valid
def test_get_getopt_args
element = Setting.new :name => "foo", :desc => "anything", :settings => Puppet::Util::Settings.new
assert_equal([["--foo", GetoptLong::REQUIRED_ARGUMENT]], element.getopt_args, "Did not produce appropriate getopt args")
The code:
assert_equal(str, val)
assert_instance_of(Float, result)
end
# Now test it with a passed object
becomes:
assert_equal(str, val)
assert_instance_of(Float, result)
end
# Now test it with a passed object
The code:
end
assert_nothing_raised do
klass[:Yay] = "boo"
klass["Cool"] = :yayness
end
becomes:
end
assert_nothing_raised do
klass[:Yay] = "boo"
klass["Cool"] = :yayness
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Replaced 704 occurances of (.*)\b([a-z_]+)\(\) with \1\2
3 Examples:
The code:
ctx = OpenSSL::SSL::SSLContext.new()
becomes:
ctx = OpenSSL::SSL::SSLContext.new
The code:
skip()
becomes:
skip
The code:
path = tempfile()
becomes:
path = tempfile
* Replaced 31 occurances of ^( *)end *#.* with \1end
3 Examples:
The code:
becomes:
The code:
end # Dir.foreach
becomes:
end
The code:
end # def
becomes:
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Replaced 33 occurances of
([$@]?\w+)( +[|&+-]{0,2}= .+)
\1
end
with
3 Examples:
The code:
@sync ||= Sync.new
@sync
end
becomes:
@sync ||= Sync.new
end
The code:
str += "\n"
str
end
becomes:
str += "\n"
end
The code:
@indirection = Puppet::Indirector::Indirection.new(self, indirection, options)
@indirection
end
becomes:
@indirection = Puppet::Indirector::Indirection.new(self, indirection, options)
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Replaced 6 occurances of
([$@]?\w+) += +(.*) +(if +\1|unless +\1.nil\?)$
with
\1 &&= \2
3 Examples:
The code:
end
becomes:
end
The code:
becomes:
The code:
res
becomes:
res
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Replaced 55 occurances of
([$@]?\w+) += +(.*) +(if +\1.nil\?|if +! *\1|unless +\1|unless +defined\?\(\1\))$
with
\1 ||= \2
3 Examples:
The code:
@sync
becomes:
@sync
The code:
becomes:
The code:
if @yydebug
becomes:
if @yydebug
|