Commit 7032064d authored by Guillaume Lucas's avatar Guillaume Lucas

[Centreon-glpi] On ajoute des templates aux machines en fonction des tags

Les machines (équipements réseau et ordinateurs) et une liste de tags sont
remontées depuis l'inventaire GLPI. Chaque tag de la liste est en fait
le nom d'un template existant dans Centreon qu'il faut ajouter à la machine.
parent 58e93e55
......@@ -160,11 +160,11 @@ try {
$networkFilter = $filters;
$networkFilter['itemtype'] = 'NetworkEquipment';
$matchedResult = $glpiClient->listObjects($networkFilter);
foreach ($matchedResult as $result) {
foreach ($matchedResult as $result)
{
// On remonte l'IP d'administration de cet équipement réseau
$hostInfo = $glpiClient->getNetworkports('id' => $result['id'],
'itemtype' => 'NetworkEquipment'));
$hostInfo = $glpiClient->getNetworkports(array('id' => $result['id'],
'itemtype' => 'NetworkEquipment'));
// On vérifie que l'IP remontée est valide
$address = "";
......@@ -181,9 +181,43 @@ try {
}
}
// On ajoute cet équipement réseau à Centreon si il n'existe pas (nom) et s'il a une adresse IP d'administration valide
if (!isset($centreonHosts[$result['name']]) && !empty($address)) {
$clapiCommand = $clapiCommandPrefix." -o HOST -a ADD -v \"".$result['name'].";".$result['name'].";".$address.";".$hostTemplates[$ruleInfo['host_template_id']].";".$instances[$ruleInfo['instance_id']].";".implode("|", $hgs)."\"";
// Gestion des tags remontés depuis GLPI qui indiquent les templates à utiliser
$tabTags = array();
$tabTags = $glpiClient->getTags(array('id' => $result['id'],
'itemtype' => 'NetworkEquipment'));
// On parcourt la structure particulière retournée par GLPI/Webservices
foreach ($tabTags as $ligneTags)
{
if (isset($ligneTags['tags']))
$listeTags = $ligneTags['tags'];
}
/* Si aucun tag n'est associé à cet équipement réseau, on prend celui
indiqué dans la règle d'import qui a matchée cet équipement */
if (!isset($listeTags) || empty($listeTags))
$listeTags = $hostTemplates[$ruleInfo['host_template_id']];
/* On vérifie la cohérence de la liste de tags.
Si un tag ne correspond pas à un template défini dans Centreon,
on s'arrête pour cet équipement : CLAPI le refusera */
$verifTemplate = true;
$tags = explode('|', $listeTags);
foreach($tags as $tag)
{
if(!in_array($tag, $hostTemplates))
{
output("[ERROR] Machine : ".$result['name']." - Le template « ".$tag." » n'existe pas.");
$verifTemplate = false;
}
}
/* On ajoute cet équipement réseau à Centreon si il n'existe pas déjà (nom),
s'il a une adresse IP d'administration valide et si tous ses templates existent */
if (!isset($centreonHosts[$result['name']]) && !empty($address) && $verifTemplate) {
$clapiCommand = $clapiCommandPrefix." -o HOST -a ADD -v \"".$result['name'].";".$result['name'].";".$address.";".$listeTags.";".$instances[$ruleInfo['instance_id']].";".implode("|", $hgs)."\"";
exec($clapiCommand);
exec($clapiCommandPrefix." -o HOST -a APPLYTPL -v ".$result['name']);
if (count($hcs)) {
......@@ -195,7 +229,9 @@ try {
$centreonHosts[$result['name']] = $address;
output("Added ".$result['name']." - (Rule: ".$ruleName.")");
$pollersToRestart[$ruleInfo['instance_id']] = $instances[$ruleInfo['instance_id']];
} elseif ($centreonHosts[$result['name']] != $address) {
/* Si l'équipement existe déjà dans Centreon mais que son IP n'est pas la même que dans GLPI,
mais que ses templates sont valides, alors on met à jour l'IP de cet équipement */
} elseif (isset($centreonHosts[$result['name']]) && $centreonHosts[$result['name']] != $address && $verifTemplate) {
$clapiCommand = $clapiCommandPrefix." -o HOST -a SETPARAM -v \"".$result['name'].";address;".$address."\"";
exec($clapiCommand);
output("Updated IP address of ".$result['name']);
......@@ -225,9 +261,45 @@ try {
}
}
}
}
if (!isset($centreonHosts[$result['name']]) && $address) {
$clapiCommand = $clapiCommandPrefix." -o HOST -a ADD -v \"".$result['name'].";".$result['name'].";".$address.";".$hostTemplates[$ruleInfo['host_template_id']].";".$instances[$ruleInfo['instance_id']].";".implode("|", $hgs)."\"";
}
// Gestion des tags remontés depuis GLPI qui indiquent les templates à utiliser
unset($listeTags);
$tabTags = array();
$tabTags = $glpiClient->getTags(array('id' => $result['id'],
'itemtype' => 'Computer'));
// On parcourt la structure particulière retournée par GLPI/Webservices
foreach ($tabTags as $ligneTags)
{
if (isset($ligneTags['tags']))
$listeTags = $ligneTags['tags'];
}
/* Si aucun tag n'est associé à cet ordinateur, on prend celui
indiqué dans la règle d'import qui a matchée cet ordinateur */
if (!isset($listeTags) || empty($listeTags))
$listeTags = $hostTemplates[$ruleInfo['host_template_id']];
/* On vérifie la cohérence de la liste de tags.
Si un tag ne correspond pas à un template défini dans Centreon, on arrête là. */
$verifTemplate = true;
$tags = explode('|', $listeTags);
foreach($tags as $tag)
{
if(!in_array($tag, $hostTemplates))
{
output("[ERROR] Machine : ".$result['name']." - Le template « ".$tag." » n'existe pas.");
$verifTemplate = false;
}
}
/* On ajoute cet ordinateur à Centreon s'il n'existe pas déjà (nom),
s'il a une adresse IP d'administration valide et si tous ses templates existent */
if (!isset($centreonHosts[$result['name']]) && $address && $verifTemplate) {
$clapiCommand = $clapiCommandPrefix." -o HOST -a ADD -v \"".$result['name'].";".$result['name'].";".$address.";".$listeTags.";".$instances[$ruleInfo['instance_id']].";".implode("|", $hgs)."\"";
exec($clapiCommand);
exec($clapiCommandPrefix." -o HOST -a APPLYTPL -v ".$result['name']);
if (count($hcs)) {
......@@ -239,7 +311,9 @@ try {
$centreonHosts[$result['name']] = $address;
output("Added ".$result['name']." - (Rule: ".$ruleName.")");
$pollersToRestart[$ruleInfo['instance_id']] = $instances[$ruleInfo['instance_id']];
} elseif ($centreonHosts[$result['name']] != $address) {
/* Si l'ordinateur existe déjà dans Centreon mais que son IP n'est pas la même que dans GLPI,
mais que ses templates sont valides, alors on met à jour l'IP de cet ordinateur */
} elseif (isset($centreonHosts[$result['name']]) && $centreonHosts[$result['name']] != $address && $verifTemplate) {
$clapiCommand = $clapiCommandPrefix." -o HOST -a SETPARAM -v \"".$result['name'].";address;".$address."\"";
exec($clapiCommand);
output("Updated IP address of ".$result['name']);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment