Fantastic. (For those who don't know, Nick's the tech writer at Puppet Labs.)
On Jan 21, 2011, at 5:25 PM, nfagerlund wrote: > 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"]). > > Signed-off-by: nfagerlund <[email protected]> > --- > lib/puppet/parser/functions/defined.rb | 47 +++++++++++++++++++++++++++---- > 1 files changed, 41 insertions(+), 6 deletions(-) > > diff --git a/lib/puppet/parser/functions/defined.rb > b/lib/puppet/parser/functions/defined.rb > index 90632af..c3efc5f 100644 > --- a/lib/puppet/parser/functions/defined.rb > +++ b/lib/puppet/parser/functions/defined.rb > @@ -1,10 +1,45 @@ > # Test whether a given class or definition is defined > -Puppet::Parser::Functions::newfunction(:defined, :type => :rvalue, :doc => > "Determine whether a given > - type is defined, either as a native type or a defined type, or whether a > class is defined. > - This is useful for checking whether a class is defined and only including > it if it is. > - This function can also test whether a resource has been defined, using > resource references > - (e.g., `if defined(File['/tmp/myfile']) { ... }`). This function is > unfortunately > - dependent on the parse order of the configuration when testing whether a > resource is defined.") do |vals| > +Puppet::Parser::Functions::newfunction(:defined, :type => :rvalue, :doc => > "Determine whether > + a given type, class, resource, or node is defined, and return > + true or false. Accepts class names, type names, resource references, and > node > + references. > + > + The `defined` function checks both native and defined types, including > types > + provided as plugins via modules. Types are checked using their names: > + > + defined(\"file\") > + defined(\"customtype\") > + > + Classes are also checked using their names: > + > + defined(\"foo\") > + defined(\"foo::bar\") > + > + Unlike classes and types, resource definitions are checked using resource > + references, e.g. `defined( File['/tmp/myfile'] )`. Checking whether a given > + resource defined is, unfortunately, dependent on the parse order of the > + configuration, and the following code will not work: > + > + if defined(File['/tmp/foo']) { > + notify(\"This configuration includes the /tmp/foo file.\") > + } > + file {\"/tmp/foo\": > + ensure => present, > + } > + > + However, this order requirement refers to parse order only, and ordering of > + resources in the configuration graph (e.g. with `begin` or `require`) does > not > + affect the behavior of `defined`. > + > + You can also use `defined` to check whether a node is defined using syntax > + resembling a resource reference, like `Node[\"testnode.domain.com\"]`. > This usage > + is not necessarily recommended, and is included here only in the spirit of > + completeness. Checking for node definitions behaves differently from the > other > + uses of `defined`: it will only return true if a definition for the > specified > + node (the name of which must match exactly) exists in the manifest **AND** > the > + specified node matches the node whose configuration is being compiled > (either > + directly or through node inheritance). The `define` function cannot be > used to > + introspect information returned by an external node classifier. ") do > |vals| > result = false > vals = [vals] unless vals.is_a?(Array) > vals.each do |val| > -- > 1.7.3.3 > > -- > You received this message because you are subscribed to the Google Groups > "Puppet Developers" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/puppet-dev?hl=en. > -- Should I say "I believe in physics", or "I know that physics is true"? -- Ludwig Wittgenstein, On Certainty, 602. --------------------------------------------------------------------- Luke Kanies -|- http://puppetlabs.com -|- +1(615)594-8199 -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en.
