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/21 12:53] 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 90: Ligne 91:
   - service_description:   "SSH"   - service_description:   "SSH"
     use:                   "generic-service"     use:                   "generic-service"
-    hostgroup:             "linux-remote-servers"+    #hostgroup:             "linux-remote-servers
 +    hostgroup_name:        "generic-remote-hosts"
     check_command:         "check_ssh"                                                                                                                                                check_command:         "check_ssh"                                                                                                                                           
  
Ligne 126: Ligne 128:
  
  
-On choisit de ne pas changer le fichier templates.cfg mais de créer un templates2.cfg+On ajoute un template au fichier templates.cfg
  
-''templates2.cfg'' +''templates.cfg'' 
-~~~ +~~~perl 
-define host { +#define host { 
- +# 
-    name                         windows-tpl +   name                 tpl-host-windows 
-    use                             windows-server +   use                  windows-server 
-    hostgroups               windows-hosts +   hostgroups           windows-hosts 
-    register                      +   register             
-    }+   }
    
  
 define host { define host {
  
-    name                         linux-tpl +    name                 linux-remote-servers 
-    use                             linux-server +    use                  linux-server 
-    hostgroups               linux-hosts +    hostgroups           linux-hosts 
-    register                      0+    register             0
     }     }
  ~~~  ~~~
Ligne 151: Ligne 153:
  
 ''linux.cfg'' ''linux.cfg''
-~~~+~~~perl
 define hostgroup { define hostgroup {
- +    hostgroup_name       linux-hosts 
-    hostgroup_name          linux-hosts +    alias                Linux Hosts
-    alias                   Linux Hosts+
 } }
 ~~~ ~~~
  
 ''windows.cfg'' ''windows.cfg''
-~~~+~~~perl
 define hostgroup { define hostgroup {
  
-    hostgroup_name          windows-hosts +    hostgroup_name       windows-hosts 
-    alias                   Windows Hosts+    alias                Windows Hosts
 } }
 ~~~ ~~~
  
-Changer la définition des hosts 
-''use windows-server'' en 
-''use windows-tpl'' 
  
 Changer la définition des hosts Changer la définition des hosts
 ''use linux-server'' ''use linux-server''
-''use linux-tpl''+''use linux-remote-servers'' 
 + 
 + 
 + 
 + 
 +## templates2.cfg 
 + 
 +~~~perl 
 + 
 + 
 +############################################################################### 
 +
 +# HOST TEMPLATES 
 +
 +############################################################################### 
 + 
 + 
 +#define host { 
 +
 +#    name                            tpl-host-generic 
 +#    use                             generic-host 
 +#    hostgroups                      generic-remote-hosts 
 +#    register                        0 
 +#} 
 + 
 + 
 +define host { 
 + 
 +    name                            tpl-host-linux 
 +    use                             linux-server 
 +    hostgroups                      linux-hosts 
 +    register                        0 
 +
 + 
 + 
 +define host { 
 + 
 +    name                            tpl-host-windows 
 +    use                             windows-server 
 +    #hostgroups                      windows-servers 
 +    hostgroups                      windows-hosts 
 +    register                        0 
 +
 + 
 + 
 +define host { 
 + 
 +    name                            tpl-host-printer 
 +    use                             generic-printer 
 +    hostgroups                      printer-hosts   
 +    register                        0 
 +
 + 
 + 
 +define host { 
 + 
 +    name                            tpl-host-network 
 +    use                             generic-switch 
 +    hostgroups                      network-hosts 
 +    register                        0 
 +
 +~~~ 
 + 
 + 
 +-------------- 
 + 
 +##  
 + 
 +~~~ 
 +$ tree 
 +
 +├── README.md 
 +├── in 
 +│   ├── commands.cfg 
 +│   ├── contacts.cfg 
 +│   ├── localhost.cfg 
 +│   ├── printer.yaml 
 +│   ├── templates.cfg 
 +│   ├── templates2.cfg 
 +│   ├── timeperiods.cfg 
 +│   └── windows.yaml 
 +├── out 
 +├── play-templating-nagios-config.yml 
 +├── roles 
 +│   └── nagios_mk_objects_definition 
 +│       └── tasks 
 +│           └── main.yml 
 +└── template.jinja 
 +~~~ 
 + 
 +''play-templating-nagios-config.yml'' 
 +~~~yaml 
 +#! /usr/bin/env ansible-playbook 
 + 
 +--- 
 + 
 +- name: Generate Nagios objects definition conf files 
 +  gather_facts: false 
 +  hosts: localhost 
 + 
 +  vars: 
 +    line: "{{ lookup('env', 'LINE') }}" 
 + 
 +  pre_tasks: 
 +    - name: Assert check environment vars are correctly defined 
 +      ansible.builtin.assert: 
 +        that: 
 +          - line is defined and line != '' 
 +        msg: "Env var must be defined" 
 + 
 +  tasks: 
 +    - name: Mkdir out/L 
 +      ansible.builtin.file: 
 +        path: out/L{{ line }}/ 
 +        state: directory 
 +        mode: "0755" 
 + 
 +    - name: Copy cfg files 
 +      ansible.builtin.copy: 
 +        src: "{{ item }}" 
 +        dest: "out/L{{ line }}/{{ item | basename }}" 
 +        mode: "0644" 
 +      with_fileglob: in/*.cfg 
 + 
 +    - name: Loop on each yaml file 
 +      ansible.builtin.include_role: 
 +        name: nagios_mk_objects_definition 
 +      vars: 
 +        nagios_mk_objects_definition_config_file: "{{ item }}" 
 +      with_fileglob: in/*.yaml 
 +~~~ 
 + 
 +''roles/nagios_mk_objects_definition/tasks/main.yml'' 
 +~~~yaml 
 +--- 
 + 
 +- name: Include yaml config files 
 +  ansible.builtin.include_vars: 
 +    file: "{{ nagios_mk_objects_definition_config_file }}" 
 + 
 +- name: Templating jinja files 
 +  ansible.builtin.template: 
 +    src: template.jinja 
 +    dest: "out/L{{ line }}/{{ nagios_mk_objects_definition_config_file | basename | replace('.yaml', '.cfg') }}" 
 +    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.1745232815.txt.gz · Dernière modification : de Jean-Baptiste

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki