¿Cuál es la mejor manera en Puppet para agregar un fragmento de texto al archivo / etc / hosts?

8

También me gustaría mantener la capacidad de editar manualmente el archivo hosts, al menos las primeras 10 líneas.

#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

Tener estas entradas de hosts en la parte inferior de / etc / hosts, sería perfecto. ¿Cuál es la mejor manera de hacer esto? ¿Hay una mejor manera que escribir un manifiesto de 8 líneas de host?

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

Puede haber grupos de servidores que necesiten diferentes IP / nombres de host en sus / etc / hosts. Usaría una plantilla, pero eso significa que las personas ya no pueden hacer cambios manuales en sus / etc / hosts, ya que la plantilla los sobrescribiría.

ujjain
fuente

Respuestas:

14

Honestamente, usar el hostrecurso es la forma más simple de hacer esto. Solo tiene que definir los hosts que desea controlar con Puppet, y aún puede editar el resto del archivo a mano (a pesar de que Puppet cae en ese encabezado que le dice que no lo haga).

El augeasmódulo es excesivo para un archivo de hosts, ya que simplemente duplica la funcionalidad del hostrecurso (aunque no agrega el encabezado "no edite este archivo").

Si realmente desea algo más complicado o desea un control preciso sobre la ubicación de las líneas en el archivo, use el módulo concat con una fuente local para uno de los fragmentos. Hay un ejemplo para ese tipo de cosas (usando el archivo motd) en la concatdocumentación.

Pero realmente, solo use el hostrecurso para los hosts que desea definir desde Puppet y edite los archivos de hosts locales para cualquier otra cosa que necesite.

También tenga en cuenta que puede escribir las definiciones de host de manera bastante compacta en 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
fuente
Esta respuesta es bastante mejor que la mía :-)
Cian
1

Utilice la funcionalidad augeaus integrada en la marioneta. Quieres algo como

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

Un caso en el que puede elegir usar augeas para el archivo / etc / hosts, además de los tipos de recursos de hosts, es para líneas de direcciones IP duplicadas.

El tipo de recurso hosts con bastante felicidad permite líneas con las mismas direcciones IP. (Busca en Google; ¿dónde hay casos extremadamente oscuros cuando puede ser una buena idea?)

Pero si no desea direcciones IP duplicadas en su archivo / etc / hosts, entonces augeas puede ayudarlo. hosts no es de ayuda para eso.

espiga
fuente
-1

Solo un método, sin código:

Use plantillas o lo que sea que actualice un archivo /etc/hosts.puppetcon líneas claras de inicio y fin

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

192.168.0.1 host1
###PUPPETEND###

y tiene un script de shell como dependencia que corta este segmento /etc/hostsy lo reemplaza con el contenido de /etc/hosts.puppet.

Tenga en cuenta que esto tiene una condición de carrera cuando los usuarios editan el archivo y la ejecución de la marioneta lo cambia. Alternativamente, indique a sus usuarios que editen un archivo /etc/hosts.usery construyan a /etc/hostspartir de ambos archivos cada vez que uno cambie.

Sven
fuente