Qual è il modo migliore in Puppet per aggiungere un pezzo di testo al file / etc / hosts?


8

Vorrei anche mantenere la possibilità di modificare manualmente il file hosts, almeno le prime 10 righe.

#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

Avere queste voci di host nella parte inferiore di / etc / hosts, sarebbe perfetto. Qual è il modo migliore per farlo? C'è un modo migliore che scrivere manifest di 8 righe host?

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

Potrebbero esserci gruppi di server che necessitano di IP / nomi host diversi nei loro / etc / hosts. Vorrei utilizzare un modello, ma ciò significa che le persone non possono più apportare modifiche manuali ai loro / etc / hosts in quanto verrebbero sovrascritte dal modello.

Risposte:


14

Onestamente, l'uso della hostrisorsa è il modo più semplice per farlo. Devi solo definire gli host che desideri siano controllati da Puppet e puoi comunque modificare manualmente il resto del file (anche se Puppet cade nell'intestazione che ti dice di non farlo).

Il augeasmodulo è eccessivo per un file hosts, perché duplica solo la funzionalità della hostrisorsa (sebbene non venga aggiunto nell'intestazione "non modificare questo file").

Se vuoi davvero qualcosa di più complicato o vuoi un controllo accurato sul posizionamento delle linee nel file, usa il modulo concat con una sorgente locale per uno dei frammenti. C'è un esempio di questo genere di cose (usando il file motd) nella concatdocumentazione.

Ma davvero, basta usare la hostrisorsa per gli host che si desidera definire da Puppet e modificare i file degli host locali per qualsiasi altra cosa di cui si abbia bisogno.

Si noti inoltre che è possibile scrivere le definizioni host in modo abbastanza compatto in 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';
}

Questa risposta è un po 'migliore della mia :-)
Cian,

1

Usa la funzionalità augeaus integrata nel pupazzo. Vuoi qualcosa di simile

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

0

Un caso in cui è possibile scegliere di utilizzare augeas per il file / etc / hosts, oltre ai tipi di risorse host, è per le righe duplicate dell'indirizzo IP.

host tipo di risorsa abbastanza felicemente consente le linee con gli stessi indirizzi IP. (Google it; dove sono casi estremamente oscuri in cui potrebbe essere una buona idea.)

Ma se non vuoi duplicati di indirizzi IP nel tuo file / etc / hosts - allora agosto può aiutarti. host non è di aiuto per questo.


-1

Solo un metodo, senza codice:

Usa il modello o qualunque cosa aggiorni un file /etc/hosts.puppetcon chiare linee di inizio e fine

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

192.168.0.1 host1
###PUPPETEND###

e hanno uno script di shell come dipendenza che taglia questo segmento /etc/hostse lo sostituisce con il contenuto di /etc/hosts.puppet.

Attenzione che questo ha una condizione di competizione quando gli utenti modificano il file e la sequenza di marionette lo modifica. In alternativa, chiedi ai tuoi utenti di modificare un file /etc/hosts.usere costruire /etc/hostsentrambi i file ogni volta che uno cambia.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.