1

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.

Mohit Chawla
  • 219
  • 2
  • 11
  • for the record, "shell scripts full of sed, awk, grep filters and such" are hugely popular here on SO. So if you wanted to continue that route, any good question on any of those gets answered by about 5 people in the first minute. Personally, I love Ruby and I think Puppet looks awesome. – Dan Rosenstark Jul 21 '10 at 05:07

2 Answers2

2

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

dc=<%= domain.split('.').join(',dc=') %>
Tombart
  • 30,520
  • 16
  • 123
  • 136
ikenticus
  • 21
  • 1
1

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.

Dan Rosenstark
  • 68,471
  • 58
  • 283
  • 421
  • 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. – Mohit Chawla Jul 21 '10 at 05:07