Création utilisateurs Zabbix

De Wiki de Jordan LE NUFF
< Technique‎ | PHP‎ | Scripts
Révision datée du 20 septembre 2019 à 08:22 par Jordan (discussion | contributions) (Page créée avec « ==Présentation== Cette page a pour objet de présenter un script PHP permettant de créer automatiquement des utilisateurs précédemment récupérés depuis un Active Di... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche

Présentation

Cette page a pour objet de présenter un script PHP permettant de créer automatiquement des utilisateurs précédemment récupérés depuis un Active Directory dans Zabbix.

Script

Le script, pouvant se nommer SynchADusers_zabbix.php, contient, à ce jour, le contenu suivant :

<?php

// Inclusion du script get_ADusers.php pour récupérer les utilisateurs depuis l'AD
include('./get_ADusers.php');

// Groupes AD dont les utilisateurs devront être récupérés
$groups = array(
	'GG_DSI_ADMINS',
	'GG_DSI_ADMINS_TOOLS',
);

// Appel du script pour récupérér les utilisateurs AD
$ADusers = get_ADusers($groups);

///////////////////////////////
// Déclaration des variables //
///////////////////////////////

// Variable contenant la liste des utilisateurs Zabbix
$ZBXusers = array();

//////////////////////////////////////
// Fin de déclaration des variables //
//////////////////////////////////////


////////////////
// Paramètres //
////////////////

// Password par défaut (non utilisé dans l'outil car LDAP)
$defautl_password = "2f0a4ec693d34d90e50982d77bb2bfd7";

// Serveur MySQL
$mysql_server = "localhost";

// Utilisateur MySQL
$mysql_username = "zabbix_user";

// Mot de passe utilisateur MySQL
$mysql_password = "xxxxxxxxxxxxxxx";

// Base de données MySQL
$mysql_dbname = "zabbix_db";

// Port MySQL
$mysql_port = "3306";

// Socket MySQL
$mysql_socket = "/local/mysql/current/mysql.sock";

// ID du groupe Exploitation dans Zabbix (pourra être récupéré dynamiquement ultèrieurement)
$ZBXgroupId = "13";

////////////////////////
// Fin des paramètres //
////////////////////////


///////////////////////////////////////
// Ouverture de la connexion à MySQL //
///////////////////////////////////////

// Etablissement de la connexion au serveur MySQL
$mysql_cnx = new mysqli($mysql_server, $mysql_username, $mysql_password, $mysql_dbname, $mysql_port, $mysql_socket);


// Si présence d'erreur
if ($mysql_cnx->connect_errno)
{
	echo "Error: Échec d'établir une connexion MySQL, voici pourquoi : \n";
	echo "Errno: " . $mysql_cnx->connect_errno . "\n";
	echo "Error: " . $mysql_cnx->connect_error . "\n";
	die;
}

////////////////////////////////////////////////
// Fin de l'ouverture de la connexion à MySQL //
////////////////////////////////////////////////


//////////////////////////////////////////
// Récupération des utilisateurs Zabbix //
//////////////////////////////////////////

// Requête MySQL pour récupérer la liste des utilisateurs existants dans Zabbix
$mysql_query = "SELECT * FROM zabbix_db.users";

// Lancement de la requête et arrêt si erreur
if (!$mysql_result = $mysql_cnx->query($mysql_query)) {
    echo "Error: Notre requête a échoué lors de l'exécution et voici pourquoi :\n";
    echo "Query: " . $mysql_query . "\n";
    echo "Errno: " . $mysql_cnx->errno . "\n";
    echo "Error: " . $mysql_cnx->error . "\n";
    die;
}

// Si aucun résultat
if ($mysql_result->num_rows === 0) {
    echo "Aucun résultat retourné.";
    die;
}

// Pour chaque utilisateur trouvé
while ($ZBXuser = $mysql_result->fetch_assoc())
	// Ajout de cet utilisateur dans un tableau
	$ZBXusers[] = $ZBXuser;

// Vidage des résultats
$mysql_result->free();

/////////////////////////////////////////////////
// Fin de récupération des utilisateurs Zabbix //
/////////////////////////////////////////////////

///////////////
// Fonctions //
///////////////

// L'arrêt du SELECT si erreur est toujours géré de la même manière
function stopSelectIfError($mysql_query) {
	// Récupération de la connexion
	global $mysql_cnx;

	// Lancement de la requête et arrêt si erreur
	if (!$mysql_result = $mysql_cnx->query($mysql_query)) {
		echo "Error: Notre requête a échoué lors de l'exécution et voici pourquoi :\n";
		echo "Query: " . $mysql_query . "\n";
		echo "Errno: " . $mysql_cnx->errno . "\n";
		echo "Error: " . $mysql_cnx->error . "\n";
		die;
	}
	
	//Renvoi du résultat
	return $mysql_result;
}

// L'arrêt de l'INSERT si erreur est toujours géré de la même manière
function stopInsertIfError($mysql_query) {
	// Récupération de la connexion
	global $mysql_cnx;

	// Lancement de la requête et arrêt si erreur
	if (!$mysql_cnx->query($mysql_query)) {
		echo "Error: Notre requête a échoué lors de l'exécution et voici pourquoi :\n";
		echo "Query: " . $mysql_query . "\n";
		echo "Errno: " . $mysql_cnx->errno . "\n";
		echo "Error: " . $mysql_cnx->error . "\n";
		die;
	}
}

// La table des utilisateurs n'étant pas en AUTO_INCREMENT, il faut créer une fonction pour récupérer l'id
function getUserIdDispo() {	
	// Récupération de la connexion
	global $mysql_cnx;
	
	// Requête pour récupérer le dernier id utilisé
	$mysql_query = "SELECT MAX(userid) AS last_userid FROM zabbix_db.users";

	// Lancement de la requête et arrêt si erreur
	$mysql_result = stopSelectIfError($mysql_query);

	// Récupération du résultat
	$row = $mysql_result->fetch_assoc();
	//Renvoi du résultat
	return $row['last_userid'] + 1;
}

// La table des groupes n'étant pas en AUTO_INCREMENT, il faut créer une fonction pour récupérer l'id
function getUsersGroupsIdDispo() {
	// Récupération de la connexion
	global $mysql_cnx;
	
	// Requête pour récupérer le dernier id utilisé
	$mysql_query = "SELECT MAX(id) AS last_users_groupsid FROM zabbix_db.users_groups";

	// Lancement de la requête et arrêt si erreur
	$mysql_result = stopSelectIfError($mysql_query);
	
	$row = $mysql_result->fetch_assoc();
	return $row['last_users_groupsid'] + 1;
}

///////////////////////
// Fin des fonctions //
///////////////////////


//////////////////////////////
// Traitement des résultats //
//////////////////////////////

// Pour chaque utilisateur de l'AD
foreach($ADusers as $ADuser)
	// Si l'utilisateur possède tous les champs requis (cn, name, surname, mail (optionnel))
	if ((isset($ADuser['cn']) && isset($ADuser['name']) && isset($ADuser['surname']) && isset($ADuser['mail'])))
	{
		// Si l'utilisateur n'existe pas déjà dans Zabbix
		if (!in_array($ADuser['cn'], array_column($ZBXusers, 'alias')))
		{
			// Récupération du prochain id utilisateur disponible
			$userIdDispo = getUserIdDispo();
			// Récupération du prochain id groupe disponible
			$usersGroupsIdDispo = getUsersGroupsIdDispo();

			// Requête pour ajouter l'utilisateur dans Zabbix
			$mysql_query = "INSERT INTO zabbix_db.users VALUES ('$userIdDispo', '".$ADuser['cn']."', '".$ADuser['name']."', '".$ADuser['surname']."', '$defautl_password', '', '1', '0', 'en_GB', '30s', '1', 'default', '0', '', '0', '50')";

			// Exécution de la requête
			stopInsertIfError($mysql_query);
			
			// Récupération de l'id de l'utilisateur précédemment créé
			$last_userid = getUserIdDispo() - 1;

			// Requête pour ajouter l'utilisateur dans le groupe Zabbix désiré
			$mysql_query = "INSERT INTO zabbix_db.users_groups VALUES ('$usersGroupsIdDispo', '$ZBXgroupId', '$last_userid')";

			// Exécution de la requête
			stopInsertIfError($mysql_query);
		}
	}

/////////////////////////////////////
// Fin du traitement des résultats //
/////////////////////////////////////

// Fermeture de la connexion au serveur MySQL
$mysql_cnx->close();

?>