views:

67

answers:

2

I am using Puppet for automating configuration management across hosts.

It can use erb templates to set up configuration files of various services like apache, postfix etc. across different hosts

Till now we were using shell scripts full of sed, awk, grep filters and such, and now I need to port that code to ruby erb templates.

Let's get to the coding part:

<%# domain gets its value from Facter, lets assume it to be abc.def.com
x,y,z=<%= domain.split(".").join(",")%>

<%# x,y and z get the values abc,def,com respectively, right ?

So, now I need to know about a bunch of things. First, how can I refer to x, y and z in the rest of the template ?

 <%# these don't work:
    major = <%= x %>
    minor= <%= y %>
    major = #{x}
    minor=$x

Secondly, how do I append a string like "dc=" before each of the split values returned ?

<%# I need something like this (yup, guessed it right, I am trying to generate slapd.conf      
dc=abc,dc=def,dc=com

Alright, so I am not looking for exact answers here, but if someone could tell me at least where to begin learning about these things, that would be great. Thing is, I need to get this done soon, so that work with Puppet isn't stalled at office. Having said that though, of course, I am ready to give time to learning this, just need to know the exact resources (books/tutorials etc) to start with. Cheers.

+1  A: 

Just remember that the <% gets your straight into Ruby. So the code would not be major = <%=x%> within a <% but just major = x.

As for the dc code, this wouldn't be the tightest code, but I don't play code golf:

  "a.b.c".split('.').collect {|thing| "dc=#{thing}" }.join(',')

irb is your friend. Also I recommend reading at least these -- http://ruby-doc.org/core/classes/Array.html, http://ruby-doc.org/core/classes/Hash.html -- which are a lot more fun than reading the API docs in any other language I've seen.

Yar
Thanks Daniel, will keep that in mind. As far as irb is concerned, I get confused keeping erb code separate fro ruby code as you mentioned regarding <%). But yes, I am trying to use irb frequently. :)Thanks for the links as well.
alcy
Apparent from the comment itself, I am confused. Oh well. :)
alcy
Sure thing @alcy, good luck with the conversion project. If you can get paid and add some organization to the infrastructure at the same time, AND learn a new language... that's a good job, basically.
Yar
Heh, thanks for the wishes Daniel.
alcy
Oops, I forgot to do that ! Done. ;)
alcy
+1  A: 

The answer above seemed too complex, I would have simply done this in the erb template:

dc=<%= domain.split('.').join(',dc=') %>

ikenticus
Ah, thanks ikenticus. Will keep that in mind for future use. ;)
alcy