Qual é a melhor maneira no Puppet de adicionar um pedaço de texto ao arquivo / etc / hosts?

8

Eu também gostaria de manter a capacidade de editar manualmente o arquivo hosts, pelo menos as 10 primeiras linhas.

#Public IP's - eth0
192.168.1.103   front-01
192.168.1.106   front-02

#Private IP's - eth1
192.169.40.201  priv0-0
192.169.40.202  priv0-1
192.169.40.207  priv1-0
192.169.40.208  priv1-1

#Virtual IP's - eth0:1
192.169.50.202  vip-01
192.169.50.205  vip-02

Ter essas entradas de hosts na parte inferior do / etc / hosts seria perfeito. Qual é a melhor maneira de fazer isso? Existe uma maneira melhor do que escrever 8 linhas de hosts manifestas?

# create a simple hostname and ip host entry
host { 'front-01':
    ip => '192.168.1.103',
}

Pode haver grupos de servidores que precisam de IPs / nomes de host diferentes em seus / etc / hosts. Eu usaria um modelo, mas isso significa que as pessoas não podem mais fazer alterações manuais em seus / etc / hosts, pois seriam substituídas pelo modelo.

ujjain
fonte

Respostas:

14

Honestamente, usar o hostrecurso é a maneira mais simples de fazer isso. Você só precisa definir os hosts que deseja controlar pelo fantoche e ainda pode editar o restante do arquivo manualmente (mesmo que o Puppet caia no cabeçalho que diz para você não).

O augeasmódulo é um exagero para um arquivo hosts, porque apenas duplica a funcionalidade do hostrecurso (embora não adicione no cabeçalho "não edite este arquivo").

Se você realmente deseja algo mais complicado ou deseja um bom controle sobre o posicionamento das linhas no arquivo, use o módulo concat com uma fonte local para um dos fragmentos. Há um exemplo para esse tipo de coisa (usando o arquivo motd) na concatdocumentação.

Mas, na verdade, basta usar o hostrecurso para os hosts que você deseja definir no Puppet e editar os arquivos dos hosts locais para qualquer outra coisa que você precisar.

Observe também que você pode escrever as definições de host de maneira bastante compacta no Puppet:

host {
  # Public IPs - eth0
  'front-01': ip => '192.168.1.103';
  'front-02': ip => '192.168.1.106';

  # Private IPs - eth1
  'priv0-0': ip => '192.169.40.201';
  'priv0-1': ip => '192.169.40.202';
  'priv1-0': ip => '192.169.40.207';
  'priv1-1': ip => '192.169.40.208';

  # Virtual IPs - eth0:1
  'vip-01': ip => '192.169.50.202';
  'vip-02': ip => '192.169.50.205';
}
asciiphil
fonte
Esta resposta é um pouco melhor que o meu :-)
Cian
1

Use a funcionalidade augeaus incorporada ao fantoche. Você quer algo como

augeas {
  context => "files/etc/hosts"
  changes => [
    "set <ip address> <name>",
  ],
}
Cian
fonte
0

Um caso em que você pode optar por usar augeas para o arquivo / etc / hosts, além dos tipos de recursos de hosts - é para linhas de endereço IP duplicadas.

hospeda o tipo de recurso bastante felizmente permite linhas com os mesmos endereços IP. (Google it; onde há casos extremamente obscuros quando pode ser uma boa ideia.)

Mas se você não deseja endereços IP duplicados no arquivo / etc / hosts - os augeas podem ajudá-lo. hosts não ajuda em nada.

Espinho
fonte
-1

Apenas um método, sem código:

Use modelos ou o que quer que atualize um arquivo /etc/hosts.puppetcom linhas de início e fim claras

###PUPPETSTART###
## Users: Lines between START and END will be deleted, put your own entries below 

192.168.0.1 host1
###PUPPETEND###

e tenha um script de shell como dependência que corta esse segmento /etc/hostse o substitui pelo conteúdo de /etc/hosts.puppet.

Observe que isso tem uma condição de corrida quando os usuários editam o arquivo e a execução do fantoche o altera. Como alternativa, instrua seus usuários a editar um arquivo /etc/hosts.usere /etc/hostscriar ambos os arquivos sempre que houver alterações.

Sven
fonte