Porting shell scripts to ruby erb templates, suggestions and advice?
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 ea开发者_开发问答ch 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.
The answer above seemed too complex, I would have simply done this in the erb template:
dc=<%= domain.split('.').join(',dc=') %>
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.
精彩评论