Puppet- ERB template- Pergunta sobre classes definidas

2

Os arquivos de modelo de fantoches são arquivos erb rails.

Eu quero a linha:

Include modsecurity.d/*.conf

A ser incluído no arquivo final se a classe mod_security estiver incluída.

Dos docs de fantoches: link -

And this snippet will print all the defined class in the catalog:

<% classes.each do |klass| -%>
The class <%= klass %> is defined
<% end -%>

Condicional:

<% if broadcast != "NONE" %>        broadcast <%= broadcast %> <% end %>

Eu sou novo na sintaxe. Definido significa o mesmo que o incluído? Para o condicional, como eu verificaria uma determinada classe, ou seja, se estivesse definida (mod_security) ...?

    
por Joshua Enfield 14.10.2010 / 20:58

2 respostas

3

Classes definidas significa que a classe está incluída. Apenas para ficar claro, o <% if broadcast ... bit não é a maneira de verificar a inclusão da classe broadcast, mas sim a sintaxe de uma condicional usando o valor da variável broadcast, a matriz classes contém os nomes de todas as classes definidas.

Isso seria como você verificaria a classe mod_security, por exemplo:

<% if classes.include?("mod_security") %>
conditional text
<% end %>

Editar:

Opa ... o método é chamado include? não inclui? Corrigido acima.

    
por 14.10.2010 / 22:18
3

Tenha cuidado ao fazer isso, pois se a classe está incluída na variável 'classes' depende de quando na execução do fantoche, esse modelo específico é avaliado e isso pode ser não-determinístico. É bem possível que seu template seja avaliado e, mais tarde, durante a execução, sua classe mod_security seja incluída e avaliada.

Duas maneiras de contornar isso:

  1. se você puder garantir que ele será adicionado por um classificador de nós externo, é seguro

  2. melhor ainda, faça um fato personalizado que verifique a presença de mod_security e use esse factname como sua variável condicional.

    Facter.add ("mod_security_version")    setcode faz        versão =% {rpm -qa | grep mod_security}        if version.empty?              versão = 0        fim        versão     fim  fim

Em seguida, no seu modelo:

<% if ! mod_security_version.eql?("0") %>
Include modsecurity.d/*.conf
<% end %>

Observe que isso precisa ser uma comparação de string (não mod_security_version != 0 ) porque todos os fatos facter são strings quando atingem o ERB.

    
por 29.01.2011 / 02:06