Файлы шаблонов марионетки - это файлы направляющих erb.
Мне нужна строка:
Include modsecurity.d/*.conf
Будет включен в окончательный файл, если включен класс mod_security.
Из марионеточных документов: http://docs.puppetlabs.com/guides/templating.html -
И этот фрагмент напечатает весь определенный класс в каталоге:
<% classes.each do |klass| -%>
The class <%= klass %> is defined
<% end -%>
Условный:
<% if broadcast != "NONE" %> broadcast <%= broadcast %> <% end %>
Я новичок в синтаксисе. Определено означает то же, что и включено? Для условного выражения, как мне проверить конкретный класс, т.е. если isdefined (mod_security) ...?
Будьте осторожны, потому что включение класса в переменную "классы" зависит от когда в марионеточном прогоне оценивается этот конкретный шаблон, и это может быть недетерминированным. Вполне возможно, что ваш шаблон будет оценен, а затем во время запуска ваш класс mod_security будет включен и оценен.
Два способа обойти это:
если вы можете гарантировать, что он будет добавлен классификатором внешнего узла, это безопасно
еще лучше, создайте собственный факт, который проверяет наличие mod_security, и используйте это имя факта в качестве условной переменной.
Facter.add ("mod_security_version") do setcode do version =% {rpm -qa | grep mod_security} если version.empty? версия = 0 конец версия конец конец
Затем в вашем шаблоне:
<% if ! mod_security_version.eql?("0") %>
Include modsecurity.d/*.conf
<% end %>
Обратите внимание, что это должно быть сравнение строк (не mod_security_version != 0
), потому что все фактические данные являются строками, как только они попадают в ERB.
Определенные классы действительно означают, что класс включен. Чтобы было ясно, <% if broadcast ...
bit - это не способ проверить включение широковещательного класса, а скорее синтаксис условного выражения с использованием значения широковещательной переменной, массив классов содержит имена всех определенных классов.
Вот как вы могли бы проверить, например, класс mod_security:
<% if classes.include?("mod_security") %> conditional text <% end %>
Редактировать:
Упс ... метод называется include? не включает ?. Исправлено выше.