2010-07-21 5 views
1

Я использую Puppet для автоматизации управления конфигурацией на хостах.Портирование сценариев оболочки на рубиновые шаблоны, советы и рекомендации?

Можно использовать шаблоны Еврорадио для создания конфигурационных файлов различных сервисов, таких как Apache, Postfix и т.д. на различные хосты

До сих пор мы использовали скрипты полного SED, AWK, Grep фильтры и такие, и теперь Мне нужно перенести этот код в шаблоны ruby ​​erb.

Давайте перейдем к кодирующей части:

<%# 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 ? 

Итак, теперь мне нужно знать о куче вещей. Во-первых, как я могу ссылаться на x, y и z в остальной части шаблона?

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

Во-вторых, как добавить строку типа "dc =" перед возвратом каждого из значений split?

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

Хорошо, так что я не ищу точные ответы здесь, но если кто-то может сказать мне, по крайней мере, с чего начать изучение этих вещей, что было бы здорово. Дело в том, что мне нужно сделать это в ближайшее время, так что работа с кукольным телом не застопорилась в офисе. Сказав, что, конечно, я готов дать время для изучения этого, просто нужно знать точные ресурсы (книги/учебники и т. Д.) Для начала. Приветствия.

+0

для записи, «сценарии оболочки полного SED, AWK, Grep фильтров и такие» очень популярны здесь на SO. Поэтому, если вы хотите продолжить этот маршрут, на любой хороший вопрос по любому из них ответят около 5 человек в первую минуту. Лично я люблю Ruby, и я думаю, что Puppet выглядит потрясающе. –

ответ

1

Просто помните, что <% получает прямо на Рубин. Таким образом, код не будет major = <%=x%> в пределах <%, но только major = x.

Что касается коды постоянного тока, это будет не сжатый кодом, но я не играю в гольф кода:

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

IRB является вашим другом. Также я рекомендую прочитать хотя бы эти - http://ruby-doc.org/core/classes/Array.html, http://ruby-doc.org/core/classes/Hash.html - которые намного интереснее, чем чтение документов API на любом другом языке, который я видел.

+0

Спасибо, Дэниэл, помните об этом. Что касается irb, я смущаюсь, сохраняя код erb отдельно от рубинового кода, как вы упомянули в отношении <%). Но да, я часто пытаюсь использовать irb. :) Спасибо за ссылки. – alcy

2

Ответ выше казался слишком сложным, я бы просто сделал это в шаблоне Еврорадио:

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

Ах, спасибо ikenticus. Это будет помнить для будущего использования. ;) – alcy