Existe uma maneira de entregar um arquivo personalizado para um servidor via fantoche

6

Eu tenho várias máquinas que estou gerenciando via fantoche. As máquinas estão em locais físicos diferentes. Cada local tem um número de localização específico.

Eu tenho um arquivo de configuração que precisa ter o número de local correto.

Portanto, o conteúdo do /etc/abc.conf é assim:

this=that
location=$LOCATION_NUMBER
bananas=tasty

Quando o arquivo é enviado para a máquina, eu preciso de $ LOCATION_NUMBER para realmente ser o número do local.

Posso gerenciar esse arquivo com fantoches e como?

Se eu exportar um fac-símile para LOCATION_NUMBER, o puppet pode escrever o número de local correto quando ele enviar o arquivo para a máquina?

Obrigado.

    
por Ed Manet 23.03.2012 / 15:25

2 respostas

11

O que você está procurando fazer é chamado de modelo. É uma característica central do Puppet e muito útil. Você escreve um arquivo no formato eRB que pode usar variáveis Ruby e Facter para construir um arquivo. Aqui está um exemplo:

file { '/etc/my_config_file':
  ensure => present,
  owner => 'root',
  group => 'root',
  mode => 0700,
  content => template('module/my_config_file.erb'),
}

Agora, na hierarquia de módulos em templates/ ( não files/ ), coloque um arquivo my_config_file.erb :

this=that
location=<%= LOCATION_NUMBER %>
bananas=tasty

O formato <%= %> diz para executar algum código Ruby e retornar o resultado. Nesse caso, todos os fatos estão disponíveis como variáveis locais, como ipaddress , lsbmajdistrelease ou LOCATION_NUMBER (seu fato personalizado). Você também pode usar qualquer outro código Ruby que não retorne diretamente um resultado dentro de <% %> , como if declarações:

<% if LOCATION_NUMBER == 7 %>
custom_config=true
<% else %>
custom_config=false
<% end %>

Editar : Ao reler essa resposta, gostaria de sugerir que você não use letras maiúsculas para o nome do seu Fato. Em Ruby, uma variável que começa com uma letra maiúscula é imutável. Embora não tenha certeza de que isso seja realmente um problema, isso vai contra as convenções.

    
por 23.03.2012 / 15:34
0

Além disso, você pode armazenar a variável $ LOCATION_NUMBER como um parâmetro a ser retornado por um ENC . Você usa o ENC para que hosts em um determinado local (ou domínio), ou grupo ou nome do host, obtenham uma variável específica. Existem vários ENCs bons e gratuitos pré-construídos e disponíveis, incluindo Dashboard e The Foreman.

    
por 28.03.2012 / 22:36