Using a variable in another variable name

399 views
Skip to first unread message

Ti Leggett

unread,
Feb 21, 2013, 11:27:17 AM2/21/13
to puppet...@googlegroups.com
In a template, is there a way to use a variable to reference another variable name? For instance, let's say I have a variable 'interface', and in my template I want to reference @ipaddress_$interface so that when interface = 'eth0' I get the value of @ipaddress_eth0, but when interface = 'eth1' I get the value of @ipaddress_eth1.

windowsrefund

unread,
Feb 21, 2013, 11:51:15 AM2/21/13
to puppet...@googlegroups.com

<%= eval "macaddress_" + my_lan1 %>

That will return the appropriate fact based on the value of my_lan1

Ti Leggett

unread,
Feb 21, 2013, 11:58:50 AM2/21/13
to puppet...@googlegroups.com
Many thanks!

On Feb 21, 2013, at 10:51 AM, windowsrefund <window...@gmail.com> wrote:

>
> <%= eval "macaddress_" + my_lan1 %>
>
> That will return the appropriate fact based on the value of my_lan1
>
> --
> 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 puppet-users...@googlegroups.com.
> To post to this group, send email to puppet...@googlegroups.com.
> Visit this group at http://groups.google.com/group/puppet-users?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

Nick Fagerlund

unread,
Feb 21, 2013, 7:50:21 PM2/21/13
to puppet...@googlegroups.com
Other options:

<%= scope.lookupvar("macaddress_#{my_lan1}") %>

Also, the stdlib module has a function useful for doing this outside of templates:

https://github.com/puppetlabs/puppetlabs-stdlib/blob/master/lib/puppet/parser/functions/getvar.rb

Ti Leggett

unread,
Feb 26, 2013, 11:16:28 AM2/26/13
to puppet...@googlegroups.com
Is there a good way to check that the fact in question actually exists prior to doing an eval? Doing the below when there is no 'my_lan1' fact produces an error.

On Feb 21, 2013, at 10:51 AM, windowsrefund <window...@gmail.com> wrote:

>
> <%= eval "macaddress_" + my_lan1 %>
>
> That will return the appropriate fact based on the value of my_lan1
>

Ti Leggett

unread,
Feb 26, 2013, 4:11:58 PM2/26/13
to puppet...@googlegroups.com
Nevermind. Figured this out:

<% if defined?( eval "macaddress_" + my_lan1 -%>
...
<% end -%>

Adrien Thebo

unread,
Feb 26, 2013, 8:15:38 PM2/26/13
to puppet...@googlegroups.com
Using the scope.lookupvar or getvar functions would be greatly preferable; using `eval` in this context is Really Bad (TM) and could produce some extremely bad behavior depending on the value of my_lan1.
--
Adrien Thebo | Puppet Labs

Ti Leggett

unread,
Feb 27, 2013, 9:32:39 AM2/27/13
to puppet...@googlegroups.com
Can you provide an example of using those safer functions in this case?
Reply all
Reply to author
Forward
0 new messages