Outils pour utilisateurs

Outils du site


tech:generateur_de_conf_nagios

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
tech:generateur_de_conf_nagios [2025/04/24 02:33] Jean-Baptistetech:generateur_de_conf_nagios [2025/11/20 10:00] (Version actuelle) Jean-Baptiste
Ligne 1: Ligne 1:
 <!DOCTYPE markdown> <!DOCTYPE markdown>
-{{tag>Nagios Draft}}+{{tag>Nagios Ansible Jinja}}
  
 # Générateur de conf Nagios # Générateur de conf Nagios
  
-** Brouillon ** 
  
 object configuration files object configuration files
Ligne 132: Ligne 131:
  
 ''templates.cfg'' ''templates.cfg''
-~~~+~~~perl
 #define host { #define host {
 # #
Ligne 154: Ligne 153:
  
 ''linux.cfg'' ''linux.cfg''
-~~~+~~~perl
 define hostgroup { define hostgroup {
     hostgroup_name       linux-hosts     hostgroup_name       linux-hosts
Ligne 162: Ligne 161:
  
 ''windows.cfg'' ''windows.cfg''
-~~~+~~~perl
 define hostgroup { define hostgroup {
  
Ligne 180: Ligne 179:
 ## templates2.cfg ## templates2.cfg
  
-~~~c+~~~perl
  
  
Ligne 284: Ligne 283:
  
   tasks:   tasks:
 +    - name: Mkdir out/L
 +      ansible.builtin.file:
 +        path: out/L{{ line }}/
 +        state: directory
 +        mode: "0755"
 +
     - name: Copy cfg files     - name: Copy cfg files
       ansible.builtin.copy:       ansible.builtin.copy:
Ligne 323: Ligne 328:
  
 {% for HOST in hosts %} {% for HOST in hosts %}
-{% if ( HOST.__lines is not defined ) or ( line in HOST.__lines | map('string') ) %} +{% if ( HOST.__lines is not defined ) or ( line in HOST.__lines ) %} 
-# {{ HOST.__comment | d() }}+{% if HOST.__comment[line] is defined or ( HOST.__comment is defined and HOST.__comment is not mapping ) %} 
 +# {{ HOST.__comment[line] | d(HOST.__comment) | d() }
 +{% endif %}
 define host { define host {
 {% for k, v in HOST.items() %} {% for k, v in HOST.items() %}
 {% if not k | regex_search('__') %} {% if not k | regex_search('__') %}
- {{ k.ljust(20) }} {{ v }}+{% if ( v[line] is defined ) or ( v[line] is not defined and v is not mapping ) %} 
 + {{ k.ljust(20) }} {{ v[line] | d (v) }
 +{% endif %}
 {% endif %} {% endif %}
 {% endfor %} {% endfor %}
Ligne 343: Ligne 352:
  
 {% for HOSTGROUP in hostgroups %} {% for HOSTGROUP in hostgroups %}
-{% if ( HOSTGROUP.__lines is not defined ) or ( line in HOSTGROUP.__lines | map('string') ) %} +{% if ( HOSTGROUP.__lines is not defined ) or ( line in HOSTGROUP.__lines ) %} 
-# {{ HOSTGROUP.__comment | d() }}+{% if HOSTGROUP.__comment[line] is defined or ( HOSTGROUP.__comment is defined and HOSTGROUP.__comment is not mapping ) %} 
 +# {{ HOSTGROUP.__comment[line] | d(HOSTGROUP.__comment) | d() }
 +{% endif %}
 define hostgroup { define hostgroup {
 {% for k, v in HOSTGROUP.items() %} {% for k, v in HOSTGROUP.items() %}
 {% if not k | regex_search('__') %} {% if not k | regex_search('__') %}
- {{ k.ljust(20) }} {{ v }}+{% if ( v[line] is defined ) or ( v[line] is not defined and v is not mapping ) %} 
 + {{ k.ljust(20) }} {{ v[line] | d(v) }
 +{% endif %}
 {% endif %} {% endif %}
 {% endfor %} {% endfor %}
Ligne 363: Ligne 376:
  
 {% for SERVICE in services %} {% for SERVICE in services %}
-{% if ( SERVICE.__lines is not defined ) or ( line in SERVICE.__lines | map('string') ) %} +{% if ( SERVICE.__lines is not defined ) or ( line in SERVICE.__lines ) %} 
-# {{ SERVICE.__comment | d() }}+{% if SERVICE.__comment[line] is defined or ( SERVICE.__comment is defined and SERVICE.__comment is not mapping ) %} 
 +# {{ SERVICE.__comment[line] | d(SERVICE.__comment) | d() }
 +{% endif %}
 define service { define service {
 {% for k, v in SERVICE.items() %} {% for k, v in SERVICE.items() %}
 {% if not k | regex_search('__') %} {% if not k | regex_search('__') %}
- {{ k.ljust(20) }} {{ v }}+{% if ( v[line] is defined ) or ( v[line] is not defined and v is not mapping ) %} 
 + {{ k.ljust(20) }} {{ v[line] | d(v) }
 +{% endif %}
 {% endif %} {% endif %}
 {% endfor %} {% endfor %}
Ligne 377: Ligne 394:
 ~~~ ~~~
  
 +--------------
 +
 +# README
 +
 +# Nagios object configuration files generator
 +
 +Cet outil sert à générer les fichiers de configuration Nagios (object configuration files) en prenant les données dans des fichiers YAML et de les exploiter grâce à un template JINJA.
 +Les fichers .cfg en sortie seront à déposer dans nagios/etc/objects/
 +
 +
 +Avantage :
 +* Une seule configuration central qui peut être déclinée sur l'ensemble des lignes
 +* Evite d'avoir des disparités trop importantes d'une ligne à une autre
 +* Permet de mieux voir et comprendre les désparités
 +* Il devient facil et rapide de comparer la conf d'une ligne à une autre et donc les incohérences resortent mieux
 +* En cas de création d'une nouvelle ligne il est pertinent et facile de partir du tronc commun
 +* Plus besoin de merger la conf Nagios d'une ligne à une autre
 +
 +Inconvéniens:
 +* Précaution à prendre dans le cas où les fichiers finaux seraient modifiés à la mains sur les serveurs Nagios.
 +
 +
 +
 +## Usage 
 +
 +Les fichiers en entrée sont dans in/
 +Ils sont de deux types: 
 +  * cfg (nagios object configuration files). Ces fichiers ne seront pas transformés. Ces fichiers ne devraient pas ordinairement être modifiés.
 +  * yaml qui servirons à générer des fichiers .cfg
 +
 +Les fichiers cfg existant serons copiés tel quel
 +Ex
 +in/localhost.cfg => out/L12/localhost.cfg
 +in/contacts.cfg  => out/L12/contacts.cfg
 +
 +Chanque fichier yaml générera un fichier cfg.
 +Ex
 +in/printer.yaml => out/L12/printer.cfg
 +in/servers.yaml => out/L12/servers.cfg
 +
 +
 +Noter que chaque fichier cfg généré devra être inclue dans nagios.cfg pour être pris en compte par Nagios.
 +
 +Pour modifier la conf il faut :
 +1. Editer le fichier yaml approprié. Ex: servers.yaml. Prendre garde à la clause ''__lines'' pour restreindre la définition à une liste de ligne (défaut : toutes)
 +2. Lancer la commande ci-dessous. (Exemple avec la ligne 12)
 +3. Copier les fichiers out/L12/*.cfg dans nagios/etc/objects
 +4. S'assurer en cas de création d'un nouveau fichier yaml que celui-ce est bien appelé dans nagios.cfg
 +5. Vérifier la syntaxe (voir plus bas)
 +
 +Exemple pour la ligne 12
 +~~~bash
 +env LINE=12 ./play-templating-nagios-config.yml
 +~~~
 +
 +Le dossier out/L<line>/ contient tous les fichiers à placer dans nagios/etc/objects/
 +<line> correspond au numéro de la ligne
 +
 +Une fois les nouveaux fichiers en place il est recommandé de les vérifier
 +~~~bash
 +/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
 +~~~
 +
 +
 +## Compatibilité
 +
 +Compatible Nagios 3 et Nagios 4
 +
 +
 +## Limites
 +
 +Pour le moment seuls les types d'objects ci-dessous sont pris en charge :
 +* host
 +* hostgroup
 +* service
 +
 +Cepandent si d'autres types sévererait nécessaire il est aisé de modifier le fichier template.jinja 
  
tech/generateur_de_conf_nagios.1745454791.txt.gz · Dernière modification : de Jean-Baptiste

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki