Académique Documents
Professionnel Documents
Culture Documents
Prsentation de lagent
Implmentation de lagent
FusionInventory
Guillaume Rousse
<guillomovitch@gmail.com>
Sommaire
2 Prsentation de lagent
Caractristiques
Capacits
Objectifs
3 Implmentation de lagent
Un lourd hritage
Stratgie de test
Avancement
2 Prsentation de lagent
Caractristiques
Capacits
Objectifs
3 Implmentation de lagent
Un lourd hritage
Stratgie de test
GLPI
Objectifs
Application web de gestion de parc
inventaire
helpdesk
Dtails
application PHP
modulaire
GLPI
Objectifs
Application web de gestion de parc
inventaire
helpdesk
Dtails
application PHP
modulaire
OCS-NG
Objectifs
Solution autonome de gestion de parc
inventaire
dploiement logiciel
Dtails
Cot serveur : Cot agent :
interface agent Perl agent Windows C
interface utilisateur PHP agent Unix Perl
OCS-NG
Objectifs
Solution autonome de gestion de parc
inventaire
dploiement logiciel
Dtails
Cot serveur : Cot agent :
interface agent Perl agent Windows C
interface utilisateur PHP agent Unix Perl
Tracker
Objectifs
Inventaire automatis pour GLPI de matriels sans agent
dcouverte matriel
interrogation distante
Dtails
plugin GLPI PHP
agent Perl
Tracker
Objectifs
Inventaire automatis pour GLPI de matriels sans agent
dcouverte matriel
interrogation distante
Dtails
plugin GLPI PHP
agent Perl
Avant-hier
FusionInventory
Objectifs
Agent multifonction pour GLPI
fusion de lagent OCS Unix et de lagent tracker
modulaire
Dtails
plugin GLPI PHP
agent Perl multi-plateformes
FusionInventory
Objectifs
Agent multifonction pour GLPI
fusion de lagent OCS Unix et de lagent tracker
modulaire
Dtails
plugin GLPI PHP
agent Perl multi-plateformes
Hier
Branches
2.2.x
compatibilit GLPI 0.72.x
2.3.x
compatibilit GLPI 0.78.x, gestion des inventaires
2.4.x (en beta)
compatibilit GLPI 0.80.x
Aujourdhui
Avancement
2 Prsentation de lagent
Caractristiques
Capacits
Objectifs
3 Implmentation de lagent
Un lourd hritage
Stratgie de test
Avancement
2 Prsentation de lagent
Caractristiques
Capacits
Objectifs
3 Implmentation de lagent
Un lourd hritage
Stratgie de test
Modularit
Composants
moteur
taches
Taches
inventaire local
wake on lan
dcouverte rseau
inventaire distant
dploiement logiciel
Modularit
Composants
moteur
taches
Taches
inventaire local
wake on lan
dcouverte rseau
inventaire distant
dploiement logiciel
Versatilit
Mode dexcution
processus temporaire
processus rsidant (daemon Unix, service Windows)
Versatilit
Mode dexcution
processus temporaire
processus rsidant (daemon Unix, service Windows)
Portabilit
Cible des rsultats
distribution
excution
Excution
Windows Solaris
Linux
HPUX
MacOS
BSD AIX
Distribution
sources installeur interactif
paquetages archive autonome
Guillaume Rousse FusionInventory
Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs
Portabilit
Cible des rsultats
distribution
excution
Excution
Windows Solaris
Linux
HPUX
MacOS
BSD AIX
Distribution
sources installeur interactif
paquetages archive autonome
Guillaume Rousse FusionInventory
Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs
Portabilit
Cible des rsultats
distribution
excution
Excution
Windows Solaris
Linux
HPUX
MacOS
BSD AIX
Distribution
sources installeur interactif
paquetages archive autonome
Guillaume Rousse FusionInventory
Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs
Interoprabilit
Serveur OCS
compatibilit : version serveur 1.x
fonctionalits :
inventaire local
dploiement logiciel
Serveur GLPI
version serveur 0.72 :
dcouverte rseau
inventaire distant
version serveur 0.78 : fonctionalits compltes
Interoprabilit
Serveur OCS
compatibilit : version serveur 1.x
fonctionalits :
inventaire local
dploiement logiciel
Serveur GLPI
version serveur 0.72 :
dcouverte rseau
inventaire distant
version serveur 0.78 : fonctionalits compltes
Avancement
2 Prsentation de lagent
Caractristiques
Capacits
Objectifs
3 Implmentation de lagent
Un lourd hritage
Stratgie de test
Inventaire local
Composants matriels
CPU, mmoire, etc...
bus USB, PCI, SCSI
priphriques connects
Composants logiciels
systme dexploitation
liste de paquetages
Configuration
paramtre rseau
paramtre affichage
variables denvironnement
Guillaume Rousse FusionInventory
Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs
Inventaire local
Composants matriels
CPU, mmoire, etc...
bus USB, PCI, SCSI
priphriques connects
Composants logiciels
systme dexploitation
liste de paquetages
Configuration
paramtre rseau
paramtre affichage
variables denvironnement
Guillaume Rousse FusionInventory
Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs
Inventaire local
Composants matriels
CPU, mmoire, etc...
bus USB, PCI, SCSI
priphriques connects
Composants logiciels
systme dexploitation
liste de paquetages
Configuration
paramtre rseau
paramtre affichage
variables denvironnement
Guillaume Rousse FusionInventory
Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs
Dcouverte rseau
Principe
balayage dune plage rseau
identification des lments trouvs
Balayage
nmap
NetBIOS
SNMP
Identification
SNMP
attribution dun modle descriptif
Dcouverte rseau
Principe
balayage dune plage rseau
identification des lments trouvs
Balayage
nmap
NetBIOS
SNMP
Identification
SNMP
attribution dun modle descriptif
Dcouverte rseau
Principe
balayage dune plage rseau
identification des lments trouvs
Balayage
nmap
NetBIOS
SNMP
Identification
SNMP
attribution dun modle descriptif
Inventaire distant
Principe
SNMP
utilisation dun modle descriptif
Matriel rseau
ports utiliss
quipements branchs
Imprimantes
compteurs dimpression
niveaux dencre
Inventaire distant
Principe
SNMP
utilisation dun modle descriptif
Matriel rseau
ports utiliss
quipements branchs
Imprimantes
compteurs dimpression
niveaux dencre
Inventaire distant
Principe
SNMP
utilisation dun modle descriptif
Matriel rseau
ports utiliss
quipements branchs
Imprimantes
compteurs dimpression
niveaux dencre
Dploiement logiciel
Principe
tlchargement dune charge utile
excution
Intrt
tlchargement pair pair
excution immdiate
utilisation des critres de slection de GLPI
Dploiement logiciel
Principe
tlchargement dune charge utile
excution
Intrt
tlchargement pair pair
excution immdiate
utilisation des critres de slection de GLPI
Avancement
2 Prsentation de lagent
Caractristiques
Capacits
Objectifs
3 Implmentation de lagent
Un lourd hritage
Stratgie de test
Versions
Branches
2.0.x version initiale
2.1.x branche stable
ajout du support Windows, nettoyage syntaxique
2.2.x branche dveloppement
nettoyage architecture, maintien de la compatibilit OCS
3.x branche exprimentale
changement architecture, abandon de la compatibilit OCS
Version stable
2.1.9
Avancement
2 Prsentation de lagent
Caractristiques
Capacits
Objectifs
3 Implmentation de lagent
Un lourd hritage
Stratgie de test
Avancement
2 Prsentation de lagent
Caractristiques
Capacits
Objectifs
3 Implmentation de lagent
Un lourd hritage
Stratgie de test
Support syslog
FusionInventory::LoggerBackend::Syslog
setlogsock ( unix ) ;
openlog ( " f u s i o n i n v e n t o r yagent " , cons , p i d , $ENV{ USER } ) ;
s y s l o g ( debug , s y s l o g backend enabled ) ;
closelog ( ) ;
FusionInventory::Agent::Task::Inventory::OS::HPUX::Software
@ s o f t L i s t = s w l i s t | grep v ^ PH | grep v ^# | t r s " \ t " " " | t r s " "
Export de fonctions
FusionInventory::Agent::Task::Inventory
my $backendSharedFuncs = {
can_run => sub {
...
},
};
Grand chantier
Nettoyage du code
syntaxe
structuration
architecture
Amlioration fonctionnelles
interface REST
remplacement de XML par JSON
modle conceptuel homogne
Guillaume Rousse FusionInventory
Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent
Grand chantier
Nettoyage du code
syntaxe
structuration
architecture
Amlioration fonctionnelles
interface REST
remplacement de XML par JSON
modle conceptuel homogne
Guillaume Rousse FusionInventory
Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent
Grand chantier
Nettoyage du code
syntaxe
structuration
architecture
Amlioration fonctionnelles
interface REST
remplacement de XML par JSON
modle conceptuel homogne
Guillaume Rousse FusionInventory
Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent
Avancement
2 Prsentation de lagent
Caractristiques
Capacits
Objectifs
3 Implmentation de lagent
Un lourd hritage
Stratgie de test
Suite de tests
tat actuel
1330 tests, 76 fichiers
couverture trs htrogne
Problmes
tester des interactions client-serveur
tester lanalyse du rsultat dune commande
tester la rponse un environnement
Suite de tests
tat actuel
1330 tests, 76 fichiers
couverture trs htrogne
Problmes
tester des interactions client-serveur
tester lanalyse du rsultat dune commande
tester la rponse un environnement
Fonctionnalit additionelles
HTTP::Server::Simple::Authen
IO::Socket::SSL
HTTP::Proxy
Fonctionnalit additionelles
HTTP::Server::Simple::Authen
IO::Socket::SSL
HTTP::Proxy
Fonctionnalit additionelles
HTTP::Server::Simple::Authen
IO::Socket::SSL
HTTP::Proxy
Objectif
tester le code qui analyse le rsultat dune commande
Code initial
my @output = command ;
foreach my $ l i n e ( @output ) {
i f ( $ l i n e =~ / ^ f o o : ( . ) / ) {
$ i n v e n t o r y >addItem ( $1 ) ;
}
}
Objectif
tester le code qui analyse le rsultat dune commande
Code initial
my @output = command ;
foreach my $ l i n e ( @output ) {
i f ( $ l i n e =~ / ^ f o o : ( . ) / ) {
$ i n v e n t o r y >addItem ( $1 ) ;
}
}
sub g e t I t e m s {
my @output = command ;
my @items ;
foreach my $ l i n e ( @output ) {
push @items , $1 i f $ l i n e =~ / ^ f o o : ( . ) / ;
}
r e t u r n @items
}
Code final
$ i n v e n t o r y >addItems ( $_ ) foreach g e t I t e m s ( command => command ) ;
sub g e t I t e m s {
my $handle = g e t F i l e H a n d l e (@_) ;
while (my $ l i n e = <$handle >) {
push @items , $1 i f $ l i n e =~ / ^ f o o : ( . ) / ;
}
close $handle ;
r e t u r n @items ;
}
Guillaume Rousse FusionInventory
Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent
sub g e t I t e m s {
my @output = command ;
my @items ;
foreach my $ l i n e ( @output ) {
push @items , $1 i f $ l i n e =~ / ^ f o o : ( . ) / ;
}
r e t u r n @items
}
Code final
$ i n v e n t o r y >addItems ( $_ ) foreach g e t I t e m s ( command => command ) ;
sub g e t I t e m s {
my $handle = g e t F i l e H a n d l e (@_) ;
while (my $ l i n e = <$handle >) {
push @items , $1 i f $ l i n e =~ / ^ f o o : ( . ) / ;
}
close $handle ;
r e t u r n @items ;
}
Guillaume Rousse FusionInventory
Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent
my $handle ;
SWITCH : {
i f ( $params { f i l e } ) {
i f ( ! open $handle , < , $params { f i l e } ) {
$params { l o g g e r }> e r r o r ( " Can t open f i l e $params { f i l e } : $ERRNO" ) ;
return ;
}
l a s t SWITCH ;
}
i f ( $params { command } ) {
i f ( ! open $handle , | , $params { command } . " 2 >/ dev / n u l l " ) {
$params { l o g g e r }> e r r o r ( " Can t run command $params { command } : $ERRNO" ) ;
return ;
}
l a s t SWITCH ;
}
die " n e i t h e r command nor f i l e parameter g i v e n " ;
}
r e t u r n $handle ;
}
Objectif
tester le code qui slectionne la commande utiliser
Code initial
my @packages =
x / b i n / rpm ? getRPMPackagesList ( command => rpm qa ) :
x / b i n / dpkg ? getDPKGPackagesList ( command => dpkg l ) :
x / b i n / equery ? getEqueryPackagesList ( command => equery l i s t i ) :
() ;
}
Objectif
tester le code qui slectionne la commande utiliser
Code initial
my @packages =
x / b i n / rpm ? getRPMPackagesList ( command => rpm qa ) :
x / b i n / dpkg ? getDPKGPackagesList ( command => dpkg l ) :
x / b i n / equery ? getEqueryPackagesList ( command => equery l i s t i ) :
() ;
}
Code final
my @packages =
canRun ( / b i n / rpm ) ? getRPMPackagesList ( command => rpm qa ) :
canRun ( / b i n / dpkg ) ? getDPKGPackagesList ( command => dpkg l ) :
canRun ( / b i n / equery ) ? getEqueryPackagesList ( command => equery l i s t i ) :
() ;
}
canRun
sub canRun {
my ( $wanted ) = @_;
r e t u r n x $wanted ;
}
mockGetRun
sub mockCanRun {
my (%params ) = @_;
my $new = sub {
my $wanted = $_ [ 0 ] ;
r e t u r n $params { commands}>{$wanted } ;
};
no warnings r e d e f i n e ;
F u s i o n I n v e n t o r y : : Agent : : Tools : : canRun = $new ;
}
mockGetFileHandle
sub mockGetFileHandle {
my (%params ) = @_;
my $new = sub {
my (% o p t i o n s ) = @_;
my $ f i l e = $params { commands}>{$wanted } ;
if ( $file ) {
p r i n t STDERR " f i l e $ f i l e d e l i v e r e d \ n " ;
r e t u r n $old >(@_, f i l e => $ f i l e ) ;
} else {
p r i n t STDERR " n o t h i n g d e l i v e r e d \ n " ;
return ;
}
};
no warnings r e d e f i n e ;
F u s i o n I n v e n t o r y : : Agent : : Tools : : g e t F i l e H a n d l e = $new ;
}
Simuler un environnement
Code
package F u s i o n I n v e n t o r y : : Test : : MockSystem : : Debian ;
mockSystem (
commands => {
dpkg => r e s o u r c e s / packaging / dpkg
},
f i l e s => {
/ e t c / d e b i a n _ v e r s i o n => r e s o u r c e s / r e l e a s e / debian
}
);
Utilisation
$> perl -MFusionInventory::Test::MockSystem::Debian
fusioninventory
Simuler un environnement
Code
package F u s i o n I n v e n t o r y : : Test : : MockSystem : : Debian ;
mockSystem (
commands => {
dpkg => r e s o u r c e s / packaging / dpkg
},
f i l e s => {
/ e t c / d e b i a n _ v e r s i o n => r e s o u r c e s / r e l e a s e / debian
}
);
Utilisation
$> perl -MFusionInventory::Test::MockSystem::Debian
fusioninventory