summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser
Commit message (Collapse)AuthorAgeFilesLines
* Merge branch 'tickets/2.6.x/5564' into 2.6.nextPaul Berry2011-02-011-3/+6
|\ | | | | | | | | * tickets/2.6.x/5564: Fixed #5564 - Added some more fqdn_rand documentation
| * Fixed #5564 - Added some more fqdn_rand documentationJames Turnbull2011-02-011-3/+6
| | | | | | | | Reviewed-by: Paul Berry <paul@puppetlabs.com>
* | Merge branch 'ticket/2.6.next/5045' into 2.6.nextMatt Robinson2011-02-011-3/+18
|\ \ | | | | | | | | | | | | | | | | | | * ticket/2.6.next/5045: (#5045) Cleaning up some tests and code (#5045) External node classifiers should be able to specify params for classes (#5045) Adds support to resource/type to also accept a param hash
| * | (#5045) Cleaning up some tests and codeMatt Robinson2011-01-241-1/+1
| | | | | | | | | | | | | | | | | | | | | Renamed some variables to be clearer, made tests use less stubbing, added some additional tests and got rid of some unecessary logic. Paired-with: Dan Bode
| * | (#5045) External node classifiers should be able to specify params for classesDan Bode2011-01-241-3/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It facilitates the support for param classes from the ENC. It adds support for classes to be passed as a hash to the evaluate_classes method. If a hash of classes is specified, it also evaluates duplicates. I also had to convert the hash to an array for tags to be applied correctly. Reviewed-by: Matt Robinson
* | | (#5944) Remove documentation of define() when used on nodes, as it is not a ↵nfagerlund2011-01-251-21/+3
| | | | | | | | | | | | | | | | | | supported use of this function. Final patch in this series reviewed by Dan Bode.
* | | (#5944) Further edits of inline defined() documentation.nfagerlund2011-01-251-25/+30
| | | | | | | | | | | | Fixing use of define/declare; editing for clarity.
* | | (#5944) Improve documentation of defined() functionnfagerlund2011-01-251-6/+41
|/ / | | | | | | The differences in the way defined() handles different types of entities weren't well-explained. Documentation was also added for the behavior of defined(Node["somenode.domain.com"]).
* | maint: Prune #inspect methods on various objectsJesse Wolfe2011-01-031-0/+4
| | | | | | | | | | | | | | | | | | | | Ruby's default #inspect method can lead to printing factorial-order output for large graphs of objects. Since we have large graphs of objects, this is not optimal. This patch replaces a few well-connected objects' #inspect methods with methods that produce reduced output, and are thus much faster. Paired-With: Nick Lewis <nick@puppetlabs.com>
* | maint: Fix tests that don't run on their ownMatt Robinson2010-12-161-0/+1
|/ | | | | | | | | | | | | | | From the spec directory I found all the specs that fail when run on their own. for TEST in `find . -name "*.rb" -type f`; do spec $TEST > /dev/null 2>&1 if [[ $? != 0 ]]; then echo $TEST fi done All of them were cases of missing requires. Paired-with: Nick Lewis <nick@puppetlabs.com>
* Fix for #5298 -- Collections need to do type lookupMarkus Roberts2010-11-161-1/+2
| | | | | | | | | | | | | When the responsibility for type-name resolution was moved to the AST nodes in commit 449315a2c705df2396852462a1d1e14774b9f117, at least one instance was missed: the space ship operator Myclass <<| tag == foo |>> fails unless Myclass has been previously loaded. This commit adds the lookup to AST::Collection nodes in the same way it was added to the other node types. Note that I haven't audited the other note types for similar cases.
* Step towards [5298] -- cleanup indentation, etc. in AST::CollectionMarkus Roberts2010-11-161-51/+33
| | | | My code smell routines bobbled this one, so I'm fixing it manually.
* Fix #4921 - race condition in Parser Functions creationBrice Figureau2010-11-121-2/+4
| | | | | | | The autoloading is not thread safe, which means two threads could both autoload the same function at the same time. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
* Fix #5252 - line number mis-attribution during parsingBrice Figureau2010-11-111-3/+3
| | | | | | | | | | | | | | | It is a resurgence of #2366 that appeared because of the commit 8971d8. Before this commit, for associating documentation comments, we were preferring line numbers coming from the parser currently reducing rule, instead of the current lexer line number (which can be in advance of several tokens due to the nature of LALR parsers). We now merge the ast line number before fetching the comment from the lexer. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
* Fix #5127 - error when accessing array elementsBrice Figureau2010-11-101-2/+10
| | | | | | | | | | | Accesing an array with an integer index (ie $array[1]) is producing a ruby error: can't convert String into Integer This is because the array index is not properly converted to an number before the array element lookup is performed. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
* (#4534/#4778) -- Normalize parameterized classesPaul Berry2010-10-272-5/+6
| | | | | | | | | | | | | | | | | | | This is a reconciliation/melding of Paul's (#4534) Class inheritance with parameterized classes is no longer ignored and Markus's Fix for #4778 -- evaluate parameterized classes when they are instantiated Extracted the code from Resource::Type#mk_plain_resource that evaluates parents and tags the catalog, and moved that into a new method called instantiate_resource. Instantiate_resource is now also called from Parser::Ast::Resource#evaluate, so that the notation "class { classname: }" now executes this code too. Likewise adds class evaluation so that it behaves the same (with regard to lazy / strict evaluation) as include classname
* Fix for #5022 -- Escaped newlines should be elidedMarkus Roberts2010-10-181-1/+2
| | | | | | | | | | | This was a regression, not covered by a test; previously the string "foo\ bar" would be interpreded as "foobar" but this was changed to "foo\\\nbar" in 2.6.x with my string interpolation refactor. This change restores the behaviour.
* Fixed documentation typoJames Turnbull2010-10-011-1/+1
|
* Fixes #4792 (Duplicate definition since 2.6.1 upgrade)Paul Berry2010-09-301-0/+1
| | | | | | | | | | | | | | | The evaluate_definitions method was first figuring out which resources needed to be evaluated (using unevaluated_resources), and then evaluating them one by one. As a result, if evaluating one resource triggered another resource to be evaluated, the latter resource could get evaluated twice. This bug could occur, for example, if both resources were classes that were included into the node by an external node classifier, and if the first of the two classes included the second. Modified Resource#evaluate to be idempotent. Also added an integration test to verify the fix.
* Fix for #4804 -- escaped backslashes in interpolated stringsMarkus Roberts2010-09-281-1/+1
| | | | | | | | Part of the ongoing refinement / cleanup of the string interpolation semantics. When scanning for an unescaped string terminator we now also allow an 0 or more pairs of backslashes (that is, escaped backslashes) before the terminator. Thanks to Jacob for the test I should have added.
* (#4860) Add regression tests that would have caught bad params methodMatt Robinson2010-09-281-5/+1
| | | | | This is another case where our test objects were overly mocked so they didn't alert us to problems with our implementation.
* [#4692] undefined variables cause :undef to be passed to functionsPaul Berry2010-09-221-1/+1
| | | | | | | | | | The :undef symbol, which we use internally to distinguish between undefined variables and variables whose value is the empty string, is being leaked in calls to functions (e.g. "split"). This is a departure from 0.25.x behavior, where undefined variables evaluated to "". This patch restores the 0.25.x behavior.
* [#4716] ResourceTypeAPI exposes implementation details that are likely to changePaul Berry2010-09-221-1/+3
| | | | | | | | | | | | | | | | | | | | | | Made the following modifications to ResourceTypeAPI: (1) returned nil from “define”, “hostclass”, and “node”. (2) renamed “mk_resource_type” and “munge_type_arguments” to “__mk_resource_type__” and “__munge_type_arguments__” to discourage customers from calling them. (3) Made ResourceTypeAPI a class rather than a module, and changed the parser to evaluate the contents of pure ruby manifests using a instances of this class. (4) Changed ResourceTypeAPI to insert newly instantiated types into Thread.current[:known_resource_types] rather than the default environment's known_resource_types. This effectively backports the fix for issue #4657 to 2.6.x. Also backported the new spec tests from #4657.
* [#4771] Import of manifests with the same name only happens oncePaul Berry2010-09-232-49/+51
| | | | | | | | | | | | | | | The function import_if_possible, which was supposed to be responsible for making sure that no two threads tried to import the same file at the same time, was not making this decision based on the full pathname of the file, since it was being invoked before pathnames were resolved. As a result, if we attempted to import two distinct files with the same name at the same time (either in two threads or in a single thread due to recursion), one of the files would not always get imported. Fixed this problem by moving the thread-safety logic to happen after filenames are resolved to absolute paths. This made it possible to simplify the thread-safety logic significantly.
* Minimal fix for #4631 -- set implicit classes as in 0.25.xMarkus Roberts2010-09-231-0/+7
| | | | | | | This is a minimal fix for #4631 by reversing one part of the refactor for #1903 commit 0d4fd60c7c143cc1f4e4b0f99f359c09cbfbf21e. It fixes the immediate issue (implicit classes not being added to resources) but leaves open several other questions which are defered to #4687.
* Fixed versioncmp function typoJames Turnbull2010-09-161-1/+1
|
* Documentation updates for Markdown conversionJames Turnbull2010-09-141-3/+3
|
* Fix for #4693 -- implicit stages should never be serializedMarkus Roberts2010-09-071-1/+1
| | | | | | | | | | | My fix for #4542 was overly enthusiastic about assuring that all resources had a stage, resulting in stages designations being serialized for resources in manifests which did not use resources (everything was in implicit main). This broke 0.25.x compatibility, as all catalogs now refered to stages. This patch scales back the change for #4542 slightly, supressing the setting of main on the puppetmaster and relying on the default behaviour on the client (for 2.6.x and later, treat it as main; for 0.25.x, do nothing).
* Fixed extlookup documentation and spacingJames Turnbull2010-08-312-143/+134
|
* Fix for #4542 -- included classes weren't assigned proper stagesMarkus Roberts2010-08-241-13/+6
| | | | | | This commit unifies the code paths on which classes are added, alters the default stage to respect the stage of the parent if any, and assures that the resource is notified if its stage is assigned (turning an implicit stage into an explicit one).
* Rewrote functions documentation to MarkdownJames Turnbull2010-08-1111-48/+50
|
* Fixes #4485 -- single quoted strings should not treat \n as new lineMarkus Roberts2010-08-051-11/+11
| | | | | | | | | | | | This is the rest of the change for #4303; James and I discussed various ways the solution to that ticket needed to be extended but, as neither of us committed code, nothing changed. This is the least implact extension, which mimics the behaviour of prior versions. It leaves open the question: should '\\x' start with a single or double backslash? If, as now, '\\x' starts with a double backslash (i.e. single quote is the only escapable characterin single quoted strings) a string ending in a backslash can not be represented in a single quoted string.
* [#4404] Remove requirement for source on Parser::Resource::ParamNick Lewis2010-08-041-1/+1
| | | | | | | | Stage[main] is created without an associated source, to which Parser::Resource::Param objects. This patch observes that the source attribute of both Parser::Resource and Parser::Resource::Param seem not to be used anywhere, and removes the requirement that it be supplied.
* added md5 support as requested in ↵Alice Kærast2010-08-031-0/+5
| | | | http://serverfault.com/questions/166199/puppet-md5-sum-of-string
* [#4381] extlookup shouldn't trigger reparses of .pp filesJesse Wolfe2010-08-031-3/+0
| | | | | | | extlookup was adding its data files to the list of watched source files. This causes the .pp manifests to be re-parsed whenever the .csv files change, which is no longer necessary, as the .csv files are already reparsed on every function call.
* [#4370] Fixes extlookup precedence getting overwritten between runsMatt Robinson2010-08-033-12/+7
| | | | | | | | | | | | | | | We found the gsub! in extlookup was actually modifying the value for extlookup_precedence, so the next node to call it just got the interpolated value from the first run. We did two things in the code to prevent this: 1. We returned a dup of the ast string object so that modifying it wouldn’t change puppet’s state. We didn’t do this for all possible return values because we depend on using the original ast array object to do array concatenation 2. We fixed extlookup to not do a destructive gsub Reviewed by: Jesse Wolfe
* [#4423] repair parameterized class instantiationJesse Wolfe2010-08-033-17/+25
| | | | | | My earlier #4397 patch was not aware of the parameterized class instantiation syntax, and failed on manifests that instantiate parameterized classes.
* [#4423] class { shouldn't get stored on the namespace stackJesse Wolfe2010-08-031-1/+1
| | | | | | | The new syntax for instantiating parameterized classes was confusing the lexer's notion of namespaces. This is a simple fix to prevent that syntax from polluting the namespaces.
* [#4397]+[#4344] Move type-name resolution out of Puppet::Resource into the ↵Jesse Wolfe2010-08-034-10/+41
| | | | | | | | | | | | | | | | | | AST resources. Move type-name resolution out of Puppet::Resource into the AST resources. Move find_resource_type out of Puppet::Resource into Scope Thus, never pass unqualified type names to Puppet::Resource objects. Thus, Puppet::Resource objects don't need the namespace property, and Puppet::Resource objects never consult the harddrive to look for .pp files that might contain their type definitions, Thus, performance is improved. Also removes the temporary fix for #4257 that caused #4397 (The code was too eager to look for a class in the topscope) Paired-With: Paul Berry <paul@puppetlabs.com> Signed-off-by: Jesse Wolfe <jes5199@gmail.com>
* [#4344] Fix for failing templates when module name matches file in local dir.Paul Berry2010-08-031-1/+1
| | | | | | | | | When the name of a module matches the name of a file in the local directory, puppet agent would sometimes try to read that file and interpret it as puppet code. This happened because files.rb was unintentionally permitting puppet files without an extension. Fixed by changing the glob pattern to only permit ".pp" and ".rb" extensions.
* Fix #4461 - attempt to fix another performance issueBrice Figureau2010-08-031-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | During a profiling of a 2.6.1rc1 puppet master, I found that we spend a lot of time and efforts in Puppet::Util::Autoload#module_directories. Since this method is doing a bunch of filesystem access, this process is slow. In fact each time we were evaluating a resource or trying to find if a given resource was a builtin type we ended up scanning the whole module directories for the given environment. This patch attempts to fix this performance issue by caching the module_directories output for the either the time of the compilation or an agent configurer run (since this stuff looks like to be shared for both compilation and catalog evaluation). With this patch, my compilation time for 2k resources went from 5.91s to 3.71s (second run each time to allievate parsing time).. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com> Edited to fix a typo [#4434] Signed-off-by: Jesse Wolfe <jes5199@gmail.com>
* extlookup() is a builtinJesse Wolfe2010-07-251-0/+173
| | | | | | This patch promotes extlookup() to being a builtin function. It also adds test and makes some minor tweaks to the code. The behavior of extlookup has been left unchanged.
* Fixed #4304 - Changed logging level for auto import messageJames Turnbull2010-07-251-1/+1
|
* Fix for #4303 -- reverting to old escaping in '-stringsMarkus Roberts2010-07-251-5/+4
| | | | | Single quoted used to allow escape on single quotes and pass all other characters through without comment; now the do again.
* Tweak to fix for #4302--dangling ref to known_resource_typesMarkus Roberts2010-07-251-6/+5
| | | | | | | | | | | | | | | | Since we were clearing the thread variable containing the compiler's reference to it's environment's known resource types at the start of each compile the reference remaining at the end of a compilation could never be used and was thus just garbage that we were arbitrarily retaining. This patch moves the clearing of the thread var to the _end_ of compilation so that it's always nil except in the middle of a compile. This raises an interesting question; should the ref just live on the compiler object and we could dispense with the thread-var? It might require things that now only know about the environment to need a ref to the compiler and introduce other thread issues (e.g. we might just end up needing a :current_compiler thread variable, for no net gain in simplicity).
* Fix #4302 - Compilation speed regression compared to 2.6Brice Figureau2010-07-251-0/+5
| | | | | | | | | | | | | | | | | | | | | Each time the compiler was accessing the loaded types, we were checking if the manifests had changed. This incurred a large performance cost compared to 0.25 and introduced race conditions if manifests changed while a thread was in the middle of a compilation. This tentative fix, based on Brice's, makes sure each thread will get access to the same loaded types collection for the durration of a compilation, even if the manifests change. We now only check for changed files at the start of a compilation or if the environment changes, and we maintain a per environment thread lock so that only one thread at a time can be reloading any particular environment (and the need-check is done inside the synchronize block so that only the first will actually load it). As long as the manifests don't change, the threads will share the same collection, so there is only duplication in memory for a brief window surrounding a change. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com> Second-author: Markus Roberts <markus@puppetlabs.com>
* [#4242] Fixed recursion due to parents including their childrenNick Lewis2010-07-251-2/+1
| | | | | | | | | | | | | | | 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.
* [#4269] Undef variables interpolate to empty stringNick Lewis2010-07-191-1/+1
| | | | | This fixes double-quoted strings to interpolate undef variables as an empty string. This is the behavior present in 0.25.x.
* [#4270] Force inherited classes to load into the correct environmentJesse Wolfe2010-07-191-1/+1
| | | | | | | | | 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.
* [#4287] Fix the undefined evaluate_match error when comparing functionsMatt Robinson2010-07-192-14/+14
| | | | | | | | | | | | | | 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>