Перенос сценариев оболочки в шаблоны ruby ​​erb, предложения и советы?

Я использую Puppet для автоматизации управления конфигурацией на хостах.

Он может использовать шаблоны erb для настройки файлов конфигурации различных служб, таких как 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=" перед каждым возвращаемым значением разделения?

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

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


person Mohit Chawla    schedule 21.07.2010    source источник
comment
для справки, сценарии оболочки, полные фильтров sed, awk, grep и тому подобного, чрезвычайно популярны здесь, на SO. Так что, если вы хотите продолжить этот маршрут, на любой хороший вопрос по любому из них ответят около 5 человек в первую минуту. Лично мне нравится Ruby, и я думаю, что Puppet выглядит потрясающе.   -  person Dan Rosenstark    schedule 21.07.2010


Ответы (2)


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

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

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

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

person Dan Rosenstark    schedule 21.07.2010
comment
Даниил, спасибо, буду иметь в виду. Что касается irb, я запутался, разделяя код erb и код ruby, как вы упомянули относительно ‹%). Но да, я пытаюсь часто использовать irb. :) Спасибо и за ссылки. - person Mohit Chawla; 21.07.2010

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

dc=<%= domain.split('.').join(',dc=') %>
person ikenticus    schedule 28.07.2010
comment
А, спасибо ikenticus. Буду иметь это в виду для будущего использования. ;) - person Mohit Chawla; 29.07.2010