How to parse same template with differen values each time

29 views
Skip to first unread message

Jordan Cabral

unread,
Nov 20, 2013, 8:56:01 AM11/20/13
to puppet...@googlegroups.com
Hi,
I need to parse the a template, with different values, to generate different config files in each country I need to config.
The template is used inside a define, this define is used one time for each country.
I need that each time y execute this define, the vars used by the template have different values, depending on the parameter "country"

I cant find a nice solution for this (like using Hiera).
Actually I use a custom function that loads a key/value file on my scope each time y execute de define, and I change the key/value file using the parameter "country".

Example:

define tomcat::context(
    $path,
    $country,
){

    //My custom function I want to replace
    dynamicVariableCreator("context_${country}.conf")

    //This template needs to generate different content for each country
    file {"${path}_${country}.xml":
       content => template("context"),
       ensure  => present,
    }

}

Thanks

Felix Frank

unread,
Nov 20, 2013, 11:16:50 AM11/20/13
to puppet...@googlegroups.com
Hi,

you can use a hash, either from hiera or in your manifest.

$config = {
"country1" => { "option1" => "value1", "option2" => ... },
"country2" => { "option1" => ... }
...
}

In the template, you can access it like this e.g.

<% data = config[country] -%>
...
<ListenAddress="<%= data["option3"] %>">
...

Careful, this is untested example code.

HTH,
Felix

On 11/20/2013 02:56 PM, Jordan Cabral wrote:
> Hi,
> I need to parse the a template, with different values, to generate
> different config files in each country I need to config.
> The template is used inside a define, this define is used one time for
> each country.
> I need that each time y execute this define, the vars used by the
> template have different values, depending on the parameter "country"
>
> I cant find a nice solution for this (like using Hiera).
> Actually I use a custom function that loads a key/value file on my scope
> each time y execute de define, and I change the key/value file using the
> parameter "country".
>
> _Example:_
>
> define tomcat::context(
> $path,
> $country,
> ){
>
> *//My custom function I want to replace*

Jordan Cabral

unread,
Nov 20, 2013, 1:31:35 PM11/20/13
to puppet...@googlegroups.com
I tried that, but in that way I cant override internal vars of the hash (option1) in different files of the hiera hierarchy,
because I need to ask to hiera for the entire hash.

Felix Frank

unread,
Nov 20, 2013, 4:55:33 PM11/20/13
to puppet...@googlegroups.com
Yes, that's a limitation you get from relying on hashes in your
hierarchy. Tough call.

Of course, you *could* override the entire hash where necessary. Or, you
could cut out the top level of the hash and make each hash key a hiera
key instead:

countrydata_us:
option1:
option2:
...
countrydata_uk:
option1:
...
...

This way you may get away with overriding only select countries.

But I suggest you share more information about your data model,
especially wrt. your hierarchical overriding needs. Perhaps we can find
a more sensible approach for the problem as a whole.

Cheers,
Felix
Reply all
Reply to author
Forward
0 new messages