On 2014-11-09 22:57, Brandon Metcalf wrote:


On Thursday, September 11, 2014 12:56:50 PM UTC-5, Henrik Lindberg wrote:

    On 2014-11-09 16:04, Brandon Metcalf wrote:
     >
     > On Sunday, September 7, 2014 9:39:56 AM UTC-5, Felix.Frank wrote:
     >
     >     On 09/06/2014 11:09 PM, Spencer Krum wrote:
     >      >
     >      > $java_home = $java_home_var
     >      >
     >      > Barring that, this is the correct way to use a template:
     >      >
     >      > $java_home = inline_template('<%= @java_home_var %>')
     >
     >     Well, yes, but I got the impression that the OP has a
    *variable name*
     >     stored in $java_home_var and needs way to retrieve it inside a
     >     template..
     >
     >     Granted, such things should be done in a parser function, but
    the error
     >     message is very confusing nontheless.
     >
     >
     > That is correct.  $java_home_var does contain a variable name..
      Using a
     > variable name in a variable is almost always the wrong approach,
    but I
     > couldn't find a better way to do this.  Could you explain how
    this could
     > be accomplished with a parser function?
     >
    Before taking that route - where does the $java_home_var come from ?
    Is it a fact? Does it refer to the name of another fact?


It looks like

$java_home_var = "${java_class}::java_home"

which is a variable in other classes depending on the value of $java_class.


I asked because the facts are available in a $facts hash, which makes it easy to construct the name and look it up.

In Puppet 4.0, (and in 3.7.0 with future parser) you can reference parameters via the [] operator on the Class type - e.g:

    Class['class_name']['java_home']

and then no function is required.

If you are not on the latest version, and do not want to run with --parser future, you have to write a function. Say something like this:

    Puppet::Parser::Functions.newfunction(:javahome, :arity => 1,
      :type => :rvalue, :doc => "The javahome does this..."") do |args|

      lookup_qualified_variable(args[0], 'java_home', {} )
    end

The lookup_qualified_variable is not marked as public API though, and
may not be available in older puppet versions. In which case you have to interpolate the qualified name, and use that:

    lookupvar("::#{args[0]}::java_home")

There may be a lookupvar(name) function available already in some module
if you do not want to write and maintain your own function.

(Note that functions in 3x and older versions are evaluated as methods on the Scope class, so anything you call (like lookupvar) is a call to a method on scope. Just saying so you know where the lookupvar and lookup_qualified_variable comes from).

Regards
- henrik

--

Visit my Blog "Puppet on the Edge"
http://puppet-on-the-edge.blogspot.se/

--
You received this message because you are subscribed to the Google Groups "Puppet 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/lut9to%24mai%241%40ger.gmane.org.
For more options, visit https://groups.google.com/d/optout.

Reply via email to