[Puppet Users] Re: Hiera arry into ERB template

2014-04-17 Thread Sans
Thanks guys for the explanation; worked just fine.
Is there any other good hiera documentation apart from the one in 
Puppetlab doc?

-San




On Wednesday, April 16, 2014 6:59:27 PM UTC+1, jcbollinger wrote:

 On Wednesday, April 16, 2014 11:31:53 AM UTC-5, Sans wrote:

 Hi there,

 Trying to figure out how to use  hiera-array in my template. So, this is 
 what I have in .yaml file:



 No, you are just trying to use an array.  Your template can't tell where 
 the array came from or how it was constructed.

  



 my_coll_list:
 - mon502.local
 - mon522.local


 and in my nodes.pp, I have this:

 $my_colloctors = hiera_array('my_coll_list')





 You probably do not want to use hiera_array() for that.  Use plain hiera() 
 instead.  The former traverses your entire hierarchy, returning an array 
 whose elements are the values matching the specified key at each level.  
 The latter returns the value associated with the requested key at the 
 highest-priority level of your hierarchy that provides one, as whatever 
 data type is modeled by the data (an array, in your example).

  

 then in one of my ERB templates, I using that like this:

 COLLECTORS = %= @my_colloctors % 



 if i understood correctly, according the Puppet documentation, using *array 
 merge lookup,* I was expecting a result like this: COLLECTORS = 
 ['mon502.local', 'mon522.local']
 but what I'm getting is: COLLECTORS = mon502.localmon522.local

  

1. You are confusing the Puppet DSL representation of an array with 
its (Ruby) stringification.  The latter is what your template will 
 produce, 
and it is simply the concatenation of the string values of the array 
elements.
2. The Puppet DSL form of the value of $my_colloctors that you 
actually have is in all likelihood [['mon502.local', 'mon522.local']].  
That is, an array whose only element is an array of your colloctors 
(whatever those are).  See my previous comments about hiera_array() vs. 
hiera().

  


 What am I missing here?



 If you really do want to collect collectors from multiple levels of your 
 hierarchy, then you will need to flatten the result.  Additionally, you 
 will need to format it into your template yourself.  There are many ways to 
 do that, but one would be something like this:

 COLLECTORS = [%= @my_collectors.map { |c| '#{c.to_s}'}.join(', ') %]


 John



-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/eff94c7e-1651-4c2f-a850-b723ed7406ee%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[Puppet Users] Re: Hiera arry into ERB template

2014-04-16 Thread jcbollinger
On Wednesday, April 16, 2014 11:31:53 AM UTC-5, Sans wrote:

 Hi there,

 Trying to figure out how to use  hiera-array in my template. So, this is 
 what I have in .yaml file:



No, you are just trying to use an array.  Your template can't tell where 
the array came from or how it was constructed.

 



 my_coll_list:
 - mon502.local
 - mon522.local


 and in my nodes.pp, I have this:

 $my_colloctors = hiera_array('my_coll_list')





You probably do not want to use hiera_array() for that.  Use plain hiera() 
instead.  The former traverses your entire hierarchy, returning an array 
whose elements are the values matching the specified key at each level.  
The latter returns the value associated with the requested key at the 
highest-priority level of your hierarchy that provides one, as whatever 
data type is modeled by the data (an array, in your example).

 

 then in one of my ERB templates, I using that like this:

 COLLECTORS = %= @my_colloctors % 



 if i understood correctly, according the Puppet documentation, using *array 
 merge lookup,* I was expecting a result like this: COLLECTORS = 
 ['mon502.local', 'mon522.local']
 but what I'm getting is: COLLECTORS = mon502.localmon522.local

  

   1. You are confusing the Puppet DSL representation of an array with its 
   (Ruby) stringification.  The latter is what your template will produce, and 
   it is simply the concatenation of the string values of the array elements.
   2. The Puppet DSL form of the value of $my_colloctors that you actually 
   have is in all likelihood [['mon502.local', 'mon522.local']].  That is, 
   an array whose only element is an array of your colloctors (whatever those 
   are).  See my previous comments about hiera_array() vs. hiera().
   
 


 What am I missing here?



If you really do want to collect collectors from multiple levels of your 
hierarchy, then you will need to flatten the result.  Additionally, you 
will need to format it into your template yourself.  There are many ways to 
do that, but one would be something like this:

COLLECTORS = [%= @my_collectors.map { |c| '#{c.to_s}'}.join(', ') %]


John

-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/e23021a9-0844-4cdb-946c-04f78a7aafe6%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.