Como chamar um filetemplate de boneco duas vezes com parâmetros diferentes sem usar define?

7

Eu tento criar dois arquivos diferentes com um modelo, porque eles só diferem por uma linha.

file 
{
    "/tmp/bootstrap-raid.sh":
    content => template("pxe/bootstrap.sh.erb"),
}

file 
{
    "/tmp/bootstrap-noraid.sh":
    content => template("pxe/bootstrap.sh.erb"),
}

bootstrap.sh.erb:

<% if ??? == "???" %>
-r yes \
<% else %> 
-r no \
<% end %>

Eu não posso passar uma variável definindo duas vezes como $raid=yes file{} $raid=no file{} , então eu tentei definir a variável dentro de cada file{} sem esforço. então pensei em usar o targetfilename dentro do template como <% if filename == "/tmp/bootstrap-raid.sh" %> , o que também não é possível.

como trabalhar, chame um modelo duas vezes com diferentes "parâmetros"

meu alvo é não definir e chamar uma função extra no arquivo de manifesto ou criar dois modelos. alguma idéia?

existem variáveis default predefinidas em um template como o nome do arquivo de destino, o templatename, ...?

edite: Outro exemplo seria ter dois arquivos php.ini, como no debian, um para a linha de comando e outro para o servidor web. Eu quero apenas trocar o limite de memória. mas cada servidor precisa dos dois arquivos php.ini. Eu estou procurando uma maneira de passar um parâmetro codificado para o arquivo de modelo ou uma maneira que eu possa if/then/else com base no targetfilename. Claro que sei que sou capaz de criar uma nova definição, que posso chamar duas vezes. mas estou procurando um caminho mais fácil.

    
por c33s 18.10.2011 / 05:19

2 respostas

1

Você não pode obter o nome do recurso (ao que parece), mas você pode obter a classe. Por exemplo:

class bootstrap-raid {
    file {
        "/tmp/bootstrap-raid.sh":
        content => template("/root/bootstrap.sh.erb"),
    }
}
class bootstrap-noraid {
    file {
        "/tmp/bootstrap-noraid.sh":
        content => template("/root/bootstrap.sh.erb"),
    }
}

E para o modelo:

<% if name == "bootstrap-raid" %>
-r yes \
<% else %> 
-r no \
<% end %>

Há também title disponível, o que geralmente significa a mesma coisa (pelo menos, nunca os vi diferirem).

    
por 18.10.2011 / 17:01
7

Talvez você deva fazer isso com uma definição?

class bootstrap {
 define conf ( $israid= undef ) {
  $loc = $name
  file {
    "$loc":
      content => template(blah.erb);
  }
 }
}       

ligue para

include bootstrap
  bootstrap::conf {
    "/loc":
      israid => '-r yes \';
    }
  bootstrap::conf {
    "/otherloc":
      israid => '-r no \';
    }

seu modelo precisará manipular a variável israid , você pode simplesmente usar uma inclusão e manter a lógica fora do modelo (ou pelo menos menos lógica lá

 <%= israid %>
    
por 18.10.2011 / 05:37