Quelle est la meilleure façon dans Puppet d'ajouter un morceau de texte au fichier / etc / hosts?

8

Je voudrais également conserver la possibilité de modifier manuellement le fichier d'hôtes, au moins les 10 premières lignes.

#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

Avoir ces entrées d'hôtes au bas de / etc / hosts serait parfait. Quelle est la meilleure façon de procéder? Existe-t-il un meilleur moyen que d'écrire le manifeste de 8 lignes d'hôtes?

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

Il peut y avoir des groupes de serveurs qui nécessitent des adresses IP / noms d'hôtes différents dans leurs / etc / hôtes. J'utiliserais un modèle, mais cela signifie que les gens ne peuvent plus effectuer de modifications manuelles dans leur / etc / hosts car ils seraient écrasés par le modèle.

ujjain
la source

Réponses:

14

Honnêtement, utiliser la hostressource est le moyen le plus simple de le faire. Vous n'avez qu'à définir les hôtes que vous souhaitez contrôler par marionnette, et vous pouvez toujours éditer le reste du fichier à la main (même si Puppet tombe dans cet en-tête qui vous dit de ne pas le faire).

Le augeasmodule est excessif pour un fichier d'hôtes, car il ne fait que dupliquer la fonctionnalité de la hostressource (bien qu'il n'ajoute pas l'en-tête "ne pas modifier ce fichier").

Si vous voulez vraiment quelque chose de plus compliqué ou si vous voulez un contrôle précis sur le placement des lignes dans le fichier, utilisez le module concat avec une source locale pour l'un des fragments. Il y a un exemple pour ce genre de chose (en utilisant le fichier motd) dans la concatdocumentation.

Mais vraiment, utilisez simplement la hostressource pour les hôtes que vous souhaitez définir à partir de Puppet et modifiez les fichiers d'hôtes locaux pour tout ce dont vous avez besoin.

Notez également que vous pouvez écrire les définitions d'hôte de manière assez compacte dans 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
la source
Cette réponse est un peu meilleure que la mienne :-)
Cian
1

Utilisez la fonctionnalité d'augeaus intégrée à la marionnette. Tu veux quelque chose comme

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

Un cas où vous pouvez choisir d'utiliser augeas pour le fichier / etc / hosts, en plus des types de ressources d'hôtes - est pour les lignes d'adresse IP en double.

héberge très facilement le type de ressource autorise les lignes avec les mêmes adresses IP. (Google it; où sont des cas extrêmement obscurs où cela peut être une bonne idée.)

Mais si vous ne voulez pas d'adresses IP en double dans votre fichier / etc / hosts - alors augeas peut vous aider. hôtes n'est d'aucune aide pour cela.

pointe
la source
-1

Juste une méthode, sans code:

Utilisez des modèles ou tout ce qui met à jour un fichier /etc/hosts.puppetavec des lignes de début et de fin claires

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

192.168.0.1 host1
###PUPPETEND###

et avoir un script shell en tant que dépendance qui coupe ce segment /etc/hostset le remplace par le contenu de /etc/hosts.puppet.

Méfiez-vous que cela a une condition de concurrence lorsque les utilisateurs modifient le fichier et que le jeu de marionnettes le modifie. Sinon, demandez à vos utilisateurs de modifier un fichier /etc/hosts.useret de construire à /etc/hostspartir des deux fichiers chaque fois que l'un change.

Sven
la source