Création d'un plugin OCS inventory


Pour commencer, récupérer le plugin d'exemple :

https://github.com/PluginsOCSInventory-NG/example

Maintenant définissez vos critères.
Les informations retournées par le plugin seront stocker en base, il faut donc savoir combien de colonnes seront nécessaires

  • Definisez le nombre de colonnes souhaitez
    • Cela dépend de ce que votre script remontra. Exemple: si votre plugin affiche la liste des utilisateurs vous n'aurez besoin que d'une colonne, mais si vous souhaitez afficher s'il est admin il en faudra deux
  • Choisir un nom et le garder à vie ou pas

J'ai pris l'exemple de mon plugin sur GIT :
https://github.com/Yoyox78/OCS-Inventory-Plugin-DCUState

Chaque occurence contenant Example ou exemple sera à remplacer par Dcustate ou dcustate dans mon cas.
Dans votre cas, il faudra mettre le nom que vous avez choisi pour votre plugin, je ne détaille que les parties à modifier des fichiers

APACHE

Ce dossier sert lors de l’enregistrement sur le serveur de communication

MAP.pm

C’est le fichier de liaison entre le serveur de communication et la base de données

Dans mon cas j’ai 4 colonnes

# Lorsque vous modifiez cette ligne pensez à mettre la première lettre en majuscule (Dcustate dans mon cas), sinon ça ne fonctionnera pas
package Apache::Ocsinventory::Plugins::Dcustate::Map;

# Indiquez le nom de votre script
$DATA_MAP{dcustate} = {

# Indiquez quel champ servira pour l’ordre de rangement, dans mon cas c’est le champ date
sortBy => 'DATE',

# Dans cette partie, vous devez indiquer vos champs, attention le dernier champ n'a pas de (,) à la fin
   fields => {
      DATE => {},
      TYPE => {},
      NAME => {},
      URGENCY => {}
    }

dcustate.conf

Il indique au serveur de charger le fichier Map.pm du plugin

Lorsque vous modifiez cette ligne pensez à mettre la première lettre en majuscules (Dcustate dans mon cas), sinon ça ne fonctionnera pas
PerlModule Apache::Ocsinventory::Plugins::Dcustate::Map;

cd_dcustate

La convention de nommage exige que le nom du fichier commence par "cd_" ("cd" signifie "computer details").

# Donner le nom du plugin ou un petit détail sur sont utilitée.
print_item_header("dcustate");

# Donner le nom du plugin
$form_name = "dcustate";

# Comme précédemment, mettre les noms des champs choisis ainsi que des descriptions qui apparaîtront en tant qu'entête des colonnes
$list_fields = array(
                    'Date de vérification' => 'DATE',
                    'Type de périphérique' => 'TYPE',
                    'Nom du package' => 'NAME',
                    'Niveau de criticitée' => 'URGENCY'
                    );

language

  • fr_FR
    • fr_FR.txt
  • en_GB
    • en_GB.txt

Dans les deux fichiers, indiquer un numéro choisi et le nom du plugin

Attention à vérifier les numéros utilisés par les autres plugins OCS pour ne pas avoir de doublons :
https://plugins.ocsinventory-ng.org/

Pour cela vérifier dans le fichier hook.xml la ligne suivante de chaque plugin utilisé
<translation>50300</translation>

.travis.yml

Aucune modification à faire dans ce fichier si vous l'avez

hook.xml

Dans cette partie vous indiquez les langues que vous avez créées, (création des dossiers et fichiers dans language)

<value>en_GB</value>
<value>fr_FR</value>

Indiquez le nom donné plus haut pour le fichier et dossier cd_ (mettre le nom du plugin)
<identifier>cd_wustate</identifier>

Indiquez le nombre présent dans les fichiers language
<translation>50300</translation>

Cette partie permet d'indiquer dans quel onglet de l'ordinateur il faut ajouter ce plugin
Mettez tout dans other (pour garder tous les plugins au même endroit)
D’autres possibilités sont envisageables : https://github.com/PluginsOCSInventory-NG/example/blob/master/hook.xml

<category>other</category>

Indiquez le nom du plugin
<available>dcustate</available>

infos.json

Stock des informations générales sur le plugin, comme le nom, l'auteur, la version, etc. Elles seront affichées sur https://plugins.ocsinventory-ng.org/.
Indiquez votre nom, le nom du plugin, à quoi il sert dans toutes les langues choisies

install.php

Remplissez les lignes suivantes, elles permettront de créer, supprimer et mettre à jour la table en BDD suivant si vous installez, supprimés, ou mettez à jour
Remplacer le nom de mon plugin par le vôtre
function extension_install_dcustate()

Cette partie permet la suppression et création de table

$commonObject -> sqlQuery("DROP TABLE IF EXISTS `dcustate`;");
 "CREATE TABLE `dcustate` (

Indiquez les champs mis dans map.pm et cd_dcustate

`DATE` VARCHAR(255) DEFAULT NULL,
`TYPE` VARCHAR(255) DEFAULT NULL,
`NAME` VARCHAR(255) DEFAULT NULL,
`URGENCY` VARCHAR(255) DEFAULT NULL,

Supprime la base, si elle existe

function extension_delete_dcustate()
$commonObject -> sqlQuery("DROP TABLE IF EXISTS `dcustate`");

Permet la mise à jours de la BDD

function extension_upgrade_dcustate()

preview.png

Faire un joli dessin qui représente votre plugin

agent / Windows

Créez votre script qui ne retournera que les informations souhaitées en XML
Voici un exemple de retour, respectez bien ce que vous avez défini précédemment dans les fichiers
dans notre cas, on retrouve bien

  • DATE
  • TYPE
  • NAME
  • URGENCY
        $xml += "<DCUSTATE>`n"
        $xml += "<DATE>$(Get-Date -Format "dd/MM/yyyy_HH:mm")</DATE>`n"
        $xml += "<TYPE>" + $i.type + "</TYPE>`n"
        $xml += "<NAME>" + $i.name + "</NAME>`n"
        $xml += "<URGENCY>" + $i.urgency + "</URGENCY>`n"
        $xml += "</DCUSTATE>`n"

Finition

Zipper votre dossier complet en .zip