On Thursday, September 11, 2014 6:15:16 PM UTC-5, Henrik Lindberg wrote:
>
> On 2014-12-09 1:06, Henrik Lindberg wrote: 
> > 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'] 
> > 
> I should have added, that this works if java_home is a parameter of the 
> class only, not if it is a variable set inside of the class body - 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 
> > 
>

OK, thanks very much for your help. 

-- 
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/cc79482d-9edc-480a-b4e3-642e41b6dafb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to