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.