Ces règles permettent, lors de l'import, de mettre en relation un champ de l'API VMWare avec une propriété ou une donnée de Shinken en fonction du type de l'élément ( hôte, modèle d'hôte, etc ... ).
Comme pour les règles d'application des modèles, les règles de mapping sont écrites au format JSON.
La source VMWare ne concerne que les hôtes, donc les fichiers sources commenceront toujours par "hosts"
Elle doit respecter le format suivant :
Une propriété est une information nécessaire au moteur Shinken. Pour utiliser une propriété Shinken, vous devez utiliser le nom de cette propriété défini pour l'import des fichiers ( voir la liste des clés d'import présente dans la page Syntaxe des fichiers d'imports ). |
Une donnée est une valeur qui va être ajoutée en complément des propriétés. Pour utiliser une donnée, il faut lui donner un nom en la faisant commencer par underscore "_", par exemple "_OS_TYPE". |
Il existe 4 règles de mapping définies :
|
|
La source VMWare peux fournir des champs dont les valeurs sont des listes ( par exemple le champ "shinken.tags" ).
Pour faire correspondre une valeur de liste dans un champs de Shinken nous proposons un nouveau mot clé : "VALUES"
Une VM possède la liste de tags suivants : LINUX, FR, DATACENTER_42 Le mapping suivant :
Va permettre de créer un hôte avec comme données :
|
La syntaxe de la condition dans "VALUES(condition)" est la suivante
| Signification | Syntaxe | Description | Exemple |
|---|---|---|---|
| Index | nombre | Récupère l'élément à l'index indiqué. L’index doit être un nombre appartenant à l’ensemble des entiers naturels, incluant 0. Cette règle admet une seule exception afin de rendre possible de choisir le dernier élément d’une liste, en utilisant l’index -1. L’index 0 récupérera le premier élément de la liste, 1 le deuxième, 2 le troisième, etc... |
|
| Contient | =texte | La condition signifie que l'élément choisi doit CONTENIR le texte. |
|
| Commence par | =^texte | Si l'expression commence par le caractère "^", la condition signifie que l'élément choisi doit COMMENCER par le texte |
|
| Termine par | =texte$ | Si l'expression termine par le caractère "$" la condition signifie que l'élément choisi doit TERMINER par le texte. |
|
| Est strictement égal | =^texte$ | Si l'expression commence par "^" ET términe par "$", la condition signifie que l'élément choisi doit être l'expression EXACTE |
|
| Inversion | =!^texte$ | Ajouter un "!" avant une autre expression provoque l'effet inverse de celle-ci : • =!texte --> L'élément choisit ne contient pas "texte" • =!^texte --> L'élément choisit ne commence pas par "texte" • =!texte$ --> L'élément choisit ne termine pas par "texte" • =!^texte$ --> L'élément choisit n'est pas strictement égal à "texte" |
|
Les conditions sur le texte ne font pas la distinction entre les majuscules et les minuscules.
Exemple : la règle suivante pourra récupérer la valeur "Bordeaux
shinken.tags>VALUES(=BoRdeaUx)
Grâce à la règle TRANSFORM il est possible de transformer du texte.
La syntaxe de TRANSFORM est la suivante :
TRANSFORM(transformation1,transformation2,transformation3) |
TRANSFORM permet d'indiquer plusieurs transformations, nous séparons ces dernières par des virgules.
Attention à ne pas mettre d'espace avant ou après une virgule, autrement il sera pris en compte dans la transformation. Il n'y a actuellement pas de limite sur le nombre de transformations autorisées.
Pour écrire une transformation, il faut séparer le texte à transformer par "=>" du texte désiré ( désigné ci-après par le mot "séparateur" ) : TEXTE1=>TEXTE2
Voici un exemple de syntaxe avec 2 transformations :
TRANSFORM(BORDEAUX=>BDX,PARIS=>PAR) |
TRANSFORM permet également de supprimer du texte en laissant vide la partie à droite du séparateur ( => ) censée contenir la modification à apporter au texte.
TRANSFORM(DEAUX=>,IS=>) |
Exemple avec une machine possédant les tags suivants :
| ENV |
|
Et le mapping suivant :
{
"hosts": {
"shinken.tags_by_category.ENV>VALUES(=$production)>TRANSFORM(Production=>Prod,Bordeaux=>bdx)": "_TRANSFORM_OPERATION",
}
} |
La data _TRANSFORM_OPERATION contiendra donc la valeur suivante :
['Prod_bdx']
Lorsque TRANSFORM est appelé sur une liste de valeurs ( Exemple : shinken.tags ), il va appliquer la ou les transformations demandées sur chaque élément de la liste individuellement.
Exemple avec une machine possédant les balises ( tags ) suivantes :
| OS |
|
| ENV |
|
Et le mapping suivant :
{
"hosts": {
"shinken.tags_by_category.ENV>VALUES(=production)>TRANSFORM(Production=>Prod,Preproduction=>Preprod,Bordeaux=>bdx)": "_TRANSFORM_OPERATION",
}
} |
La data _TRANSFORM_OPERATION contiendra donc les valeurs suivantes :
['Prod_bdx', 'Preprod_bdx']
Maintenant si l'on veut modifier chacun des tags de la catégorie "OS" pour le faire précéder de "OS_":
CentOS deviendrait OS_CentOSAlma deviendrait OS_AlmamacOS deviendrait OS_macOSDans ce cas, il faut employer $CURRENT$, ce mot clé prendra la valeur de la balise en train d'être modifiée.
La règle de mapping pour effectuer cette opération est la suivante :
"shinken.tags_by_category.OS>TRANSFORM($CURRENT$=>OS_$CURRENT$)": "_TRANSFORMED_OS" |
C'est comme si on réécrivait la règle pour chaque balise :
Il est possible de concaténer plusieurs valeurs de l'API VMWare pour former la valeur d'une propriété d'un élément de Shinken. Cela est possible grâce à la règle : CONCAT.
Exemple : Une VM possédant les listes de tags suivantes :
| OS | Linux |
| ENV | Production |
| LOCATION | Bordeaux |
Et nous voulons les informations de la manière suivante dans la donnée nommée _MACHINE_INFOS :
"Production - Linux - Bordeaux"
La syntaxe se fera de la manière suivante dans le fichier de Mapping.
{
"hosts": {
"CONCAT($shinken.tags.OS.VALUES(0)$ - $shinken.tags.ENV.VALUES(0)$ - $shinken.tags.LOCATION.VALUES(0)$)": "_MACHINE_INFOS",
}
} |
À noter que nous utilisons ici le caractère $ pour indiquer à CONCAT d'aller chercher les valeurs que nous souhaitons faire apparaître.
Si vous voulez faire apparaître le caractère $ dans la chaîne qui sera générée, il faut le doubler. Exemple : Pour faire la chaîne suivante dans la même donnée que dans l'exemple précédent : "Production $ Linux - Bordeaux" Le fichier de mapping ressemblera à ceci :
|
CONCAT peut aussi récupérer les valeurs de n'importe quel nom de champ.
Exemple : Avec le fichier de configuration de la source VMWare suivant :
{
"hosts": {
"name": "host_name",
"shinken.ipAddress" : "address"
"shinken.machine_type": "_MACHINE_TYPE",
"CONCAT($name$ - $ipAddress$)": "_MACHINE_INFOS",
}
} |
et les valeurs :
La donnée _MACHINE_INFOS vaudra :
"Ubuntu-Preprod - 192.168.1.42"
Si un champ est vide, alors CONCAT ne fournira pas de valeur pour ce champ.
Exemple, avec les mêmes données que l'exemple précédent, sauf que "name" n'a aucune valeur, la donnée _MACHINE_INFOS vaudra :
" - 192.168.1.42"
Comme pour la règle TRANSFORM évoquée plus haut, il est également possible d'appliquer une opération de concaténation sur une liste, à l'aide du mon clé CONCAT_ON_ALL.
De la même manière que lorsque l'on applique l'opération TRANSFORM sur une liste, nous pouvons utiliser $VALUE$ avec CONCAT_ON_ALL pour récupérer la valeur de l'élément sur lequel l'opération est en train d'être effectuée.
Exemple :
Une VM possédant les listes de tags suivantes :
| OS |
|
Et le fichier de mapping suivant :
{
"hosts": {
"name": "host_name",
"shinken.ipAddress" : "address"
"shinken.machine_type": "_MACHINE_TYPE",
}
} |
Si on l'on souhaite associer le nom de la machine à chaque OS, on peut ajouter la règle suivante au fichier de mapping :
"shinken.tags_by_category.OS>CONCAT_ON_ALL($name$ has OS: $VALUE$)": "_MACHINE_OS" |
Cela génèrera une liste d'éléments qui sera présente dans la data "_MACHINE_OS" :
['MyHost has tag Prod', 'MyHost has tag Preprod', 'MyHost has tag Test'] |
Il n'est actuellement pas possible d'utiliser les autres règles de mapping avec le CONCAT_ON_ALL mais cela sera possible dans une prochaine version.
Les mappings peuvent être surchargés en créant un mapping avec le nom de la clé que l'on veut désactiver.
Désactivation du champ shinken.machine_type
|
|
Pour ajouter une règle utilisateur d'application des modèles, il faut éditer le chemin suivant :
/etc/shinken-user/source-data/source-data-[nom de la source]/configuration/mapping/user_mapping_rules_vm.json /etc/shinken-user/source-data/source-data-[nom de la source]/configuration/mapping/user_mapping_rules_esx.json |
/etc/shinken-user/source-data/source-data-synchronizer-collector-vmware/configuration/mapping/user_mapping_rules_vm.json |
Pour visualiser la liste des mapping définie pour cette source, rendez-vous dans l'onglet "Mapping vers les propriétés de Shinken".
Dans cet onglet, vous trouverez les chemins des fichiers de définition des règles mapping des utilisateurs pour l'ESX et les Machines virtuelles du serveur ESX ( 1 ).
Dans l'entête de la liste, vous trouverez aussi le bouton de rafraîchissement de la liste des mappings ( 2 ).
La liste des mappings ( 3 ) comporte à la fois les mappings définis par l'utilisateur ( ligne bleue ) et les mappings par défaut ( ligne grise ).
La liste affiche pour chaque mapping une série de colonnes :
Certaines des règles de mapping défini par "Défaut" ont une valeur définie dans les champs "Clé de la source" et la "Description", mais aucune valeur dans les champs " Clé Shinken" et " Nom de propriété dans l'interface ".
Ces mappings peuvent être surchargés dans l'un des fichiers de mapping utilisateur ( 1 ).
En bas à droite ( 4 ) se trouve le bouton pour afficher l'aide de la page ( Raccourci sur la touche F1 ).
Dans les exemples suivants , nous surchargeons les règles de mapping de " config.guestFullName" et " config.guestId " qui ne sont pas liées à une propriété Shinken.
Pour ce faire, il vous suffit de créer, dans l'un des fichiers de mapping utilisateur ( 1 ), une règle possédant la même clé que celle que vous voulez surcharger ( 5 ).
Avant :
Après :