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/23 17:49] 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 63: Ligne 62:
     alias:                 "Server 1"     alias:                 "Server 1"
     address:               "192.168.1.10"     address:               "192.168.1.10"
 +    __comment:             "Server One"
 +    __lines:               [3, 12]
  
   - host_name:             "hplj2605dn"   - host_name:             "hplj2605dn"
Ligne 130: Ligne 131:
  
 ''templates.cfg'' ''templates.cfg''
-~~~+~~~perl
 #define host { #define host {
 # #
Ligne 152: Ligne 153:
  
 ''linux.cfg'' ''linux.cfg''
-~~~+~~~perl
 define hostgroup { define hostgroup {
     hostgroup_name       linux-hosts     hostgroup_name       linux-hosts
Ligne 160: Ligne 161:
  
 ''windows.cfg'' ''windows.cfg''
-~~~+~~~perl
 define hostgroup { define hostgroup {
  
Ligne 178: Ligne 179:
 ## templates2.cfg ## templates2.cfg
  
-~~~c+~~~perl
  
  
Ligne 282: 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:
         src: "{{ item }}"         src: "{{ item }}"
-        dest: "out/{{ item | basename }}"+        dest: "out/L{{ line }}/{{ item | basename }}"
         mode: "0644"         mode: "0644"
       with_fileglob: in/*.cfg       with_fileglob: in/*.cfg
Ligne 308: Ligne 315:
   ansible.builtin.template:   ansible.builtin.template:
     src: template.jinja     src: template.jinja
-    dest: "out/{{ nagios_mk_objects_definition_config_file | basename | replace('.yaml', '.cfg') }}"+    dest: "out/L{{ line }}/{{ nagios_mk_objects_definition_config_file | basename | replace('.yaml', '.cfg') }}"
     mode: "0644"     mode: "0644"
 ~~~ ~~~
  
 +''template.jinja''
 +~~~jinja
 +###############################################################################
 +#
 +# HOST DEFINITIONS
 +#
 +###############################################################################
 +
 +{% for HOST in hosts %}
 +{% if ( HOST.__lines is not defined ) or ( line in HOST.__lines ) %}
 +{% 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 {
 +{% for k, v in HOST.items() %}
 +{% if not k | regex_search('__') %}
 +{% 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 %}
 +{% endfor %}
 +}
 +
 +{% endif %}
 +{% endfor %}
 +
 +###############################################################################
 +#
 +# HOST GROUP DEFINITIONS
 +#
 +###############################################################################
 +
 +{% for HOSTGROUP in hostgroups %}
 +{% if ( HOSTGROUP.__lines is not defined ) or ( line in HOSTGROUP.__lines ) %}
 +{% 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 {
 +{% for k, v in HOSTGROUP.items() %}
 +{% if not k | regex_search('__') %}
 +{% 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 %}
 +{% endfor %}
 +}
 +
 +{% endif %}
 +{% endfor %}
 +
 +###############################################################################
 +#
 +# SERVICE DEFINITIONS
 +#
 +###############################################################################
 +
 +{% for SERVICE in services %}
 +{% if ( SERVICE.__lines is not defined ) or ( line in SERVICE.__lines ) %}
 +{% 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 {
 +{% for k, v in SERVICE.items() %}
 +{% if not k | regex_search('__') %}
 +{% 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 %}
 +{% endfor %}
 +}
 +
 +{% endif %}
 +{% endfor %}
 +~~~
 +
 +--------------
 +
 +# 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.1745423385.txt.gz · Dernière modification : de Jean-Baptiste

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki