Vous êtes sur la page 1sur 71

Solutions de gestion de parc informatique

Prsentation de lagent
Implmentation de lagent

FusionInventory

Guillaume Rousse
<guillomovitch@gmail.com>

Journes francophones de Perl 2011

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Prsentation de lagent
Implmentation de lagent

Sommaire

1 Solutions de gestion de parc informatique

2 Prsentation de lagent
Caractristiques
Capacits
Objectifs

3 Implmentation de lagent
Un lourd hritage
Stratgie de test

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Prsentation de lagent
Implmentation de lagent

Avancement

1 Solutions de gestion de parc informatique

2 Prsentation de lagent
Caractristiques
Capacits
Objectifs

3 Implmentation de lagent
Un lourd hritage
Stratgie de test

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Prsentation de lagent
Implmentation de lagent

GLPI

Objectifs
Application web de gestion de parc
inventaire
helpdesk

Dtails
application PHP
modulaire

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Prsentation de lagent
Implmentation de lagent

GLPI

Objectifs
Application web de gestion de parc
inventaire
helpdesk

Dtails
application PHP
modulaire

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Prsentation de lagent
Implmentation de lagent

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

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Prsentation de lagent
Implmentation de lagent

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

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Prsentation de lagent
Implmentation de lagent

Tracker

Objectifs
Inventaire automatis pour GLPI de matriels sans agent
dcouverte matriel
interrogation distante

Dtails
plugin GLPI PHP
agent Perl

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Prsentation de lagent
Implmentation de lagent

Tracker

Objectifs
Inventaire automatis pour GLPI de matriels sans agent
dcouverte matriel
interrogation distante

Dtails
plugin GLPI PHP
agent Perl

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Prsentation de lagent
Implmentation de lagent

Avant-hier

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Prsentation de lagent
Implmentation de lagent

FusionInventory

Objectifs
Agent multifonction pour GLPI
fusion de lagent OCS Unix et de lagent tracker
modulaire

Dtails
plugin GLPI PHP
agent Perl multi-plateformes

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Prsentation de lagent
Implmentation de lagent

FusionInventory

Objectifs
Agent multifonction pour GLPI
fusion de lagent OCS Unix et de lagent tracker
modulaire

Dtails
plugin GLPI PHP
agent Perl multi-plateformes

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Prsentation de lagent
Implmentation de lagent

Hier

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Prsentation de lagent
Implmentation de lagent

volution du plugin GLPI

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

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Prsentation de lagent
Implmentation de lagent

Capture dcran du plugin GLPI

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Prsentation de lagent
Implmentation de lagent

Aujourdhui

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs

Avancement

1 Solutions de gestion de parc informatique

2 Prsentation de lagent
Caractristiques
Capacits
Objectifs

3 Implmentation de lagent
Un lourd hritage
Stratgie de test

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs

Avancement

1 Solutions de gestion de parc informatique

2 Prsentation de lagent
Caractristiques
Capacits
Objectifs

3 Implmentation de lagent
Un lourd hritage
Stratgie de test

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs

Modularit

Composants
moteur
taches

Taches
inventaire local
wake on lan
dcouverte rseau
inventaire distant
dploiement logiciel

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs

Modularit

Composants
moteur
taches

Taches
inventaire local
wake on lan
dcouverte rseau
inventaire distant
dploiement logiciel

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs

Versatilit

Mode dexcution
processus temporaire
processus rsidant (daemon Unix, service Windows)

Mode de collecte du rsultat


stockage local
envoi au serveur

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs

Versatilit

Mode dexcution
processus temporaire
processus rsidant (daemon Unix, service Windows)

Mode de collecte du rsultat


stockage local
envoi au serveur

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

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

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

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs

Avancement

1 Solutions de gestion de parc informatique

2 Prsentation de lagent
Caractristiques
Capacits
Objectifs

3 Implmentation de lagent
Un lourd hritage
Stratgie de test

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

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

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

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

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs

Inventaire distant

Principe
SNMP
utilisation dun modle descriptif

Matriel rseau
ports utiliss
quipements branchs

Imprimantes
compteurs dimpression
niveaux dencre

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs

Inventaire distant

Principe
SNMP
utilisation dun modle descriptif

Matriel rseau
ports utiliss
quipements branchs

Imprimantes
compteurs dimpression
niveaux dencre

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs

Inventaire distant

Principe
SNMP
utilisation dun modle descriptif

Matriel rseau
ports utiliss
quipements branchs

Imprimantes
compteurs dimpression
niveaux dencre

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs

Dploiement logiciel

Principe
tlchargement dune charge utile
excution

Intrt
tlchargement pair pair
excution immdiate
utilisation des critres de slection de GLPI

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs

Dploiement logiciel

Principe
tlchargement dune charge utile
excution

Intrt
tlchargement pair pair
excution immdiate
utilisation des critres de slection de GLPI

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs

Avancement

1 Solutions de gestion de parc informatique

2 Prsentation de lagent
Caractristiques
Capacits
Objectifs

3 Implmentation de lagent
Un lourd hritage
Stratgie de test

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique Caractristiques
Prsentation de lagent Capacits
Implmentation de lagent Objectifs

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

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Avancement

1 Solutions de gestion de parc informatique

2 Prsentation de lagent
Caractristiques
Capacits
Objectifs

3 Implmentation de lagent
Un lourd hritage
Stratgie de test

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Avancement

1 Solutions de gestion de parc informatique

2 Prsentation de lagent
Caractristiques
Capacits
Objectifs

3 Implmentation de lagent
Un lourd hritage
Stratgie de test

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

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 ( ) ;

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Extraction des logiciels installs sous HPUX

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 " "

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Export de fonctions

FusionInventory::Agent::Task::Inventory
my $backendSharedFuncs = {
can_run => sub {
...
},
};

foreach my $package ( @packages ) {


foreach my $func ( keys %{$backendSharedFuncs } ) {
$package>{$func } = $backendSharedFuncs>{$func } ;
}
}

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 des performances


mmoisation
indexation

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 des performances


mmoisation
indexation

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 des performances


mmoisation
indexation

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

1 Solutions de gestion de parc informatique

2 Prsentation de lagent
Caractristiques
Capacits
Objectifs

3 Implmentation de lagent
Un lourd hritage
Stratgie de test

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

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

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

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

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Tester des interactions client-serveur


Serveur de test
Test::Apache2 :(
Net::Server::HTTP :(
HTTP::Server::Simple :)

Fonctionnalit additionelles
HTTP::Server::Simple::Authen
IO::Socket::SSL
HTTP::Proxy

Utilisation de vritable serveur


serveur public ou priv
test obligatoire ou conditionel
Guillaume Rousse FusionInventory
Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Tester des interactions client-serveur


Serveur de test
Test::Apache2 :(
Net::Server::HTTP :(
HTTP::Server::Simple :)

Fonctionnalit additionelles
HTTP::Server::Simple::Authen
IO::Socket::SSL
HTTP::Proxy

Utilisation de vritable serveur


serveur public ou priv
test obligatoire ou conditionel
Guillaume Rousse FusionInventory
Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Tester des interactions client-serveur


Serveur de test
Test::Apache2 :(
Net::Server::HTTP :(
HTTP::Server::Simple :)

Fonctionnalit additionelles
HTTP::Server::Simple::Authen
IO::Socket::SSL
HTTP::Proxy

Utilisation de vritable serveur


serveur public ou priv
test obligatoire ou conditionel
Guillaume Rousse FusionInventory
Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Tester lanalyse du rsultat dune commande

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 ) ;
}
}

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Tester lanalyse du rsultat dune commande

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 ) ;
}
}

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Adapter le code au test


Code intermdiaire
$ i n v e n t o r y >addItems ( $_ ) foreach g e t I t e m s ( ) ;

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

Adapter le code au test


Code intermdiaire
$ i n v e n t o r y >addItems ( $_ ) foreach g e t I t e m s ( ) ;

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

Utiliser une couche dabstraction


getFileHandle
sub g e t F i l e H a n d l e {
my %params = @_;

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 ;
}

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Problme de disponibilit du rsultat

Commandes et fichiers exotiques


lsvpd sur AIX
machinfo sur HPUX
/proc/cpuinfo sur Linux Alpha

Campagnes de collecte dchantillons


rpertoire resources
besoin dorganisation (tri, tracabilit, ...)

Problme sous Windows


base de registre
WMI

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Problme de disponibilit du rsultat

Commandes et fichiers exotiques


lsvpd sur AIX
machinfo sur HPUX
/proc/cpuinfo sur Linux Alpha

Campagnes de collecte dchantillons


rpertoire resources
besoin dorganisation (tri, tracabilit, ...)

Problme sous Windows


base de registre
WMI

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Problme de disponibilit du rsultat

Commandes et fichiers exotiques


lsvpd sur AIX
machinfo sur HPUX
/proc/cpuinfo sur Linux Alpha

Campagnes de collecte dchantillons


rpertoire resources
besoin dorganisation (tri, tracabilit, ...)

Problme sous Windows


base de registre
WMI

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Tester la rponse un environnement

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 ) :
() ;
}

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Tester la rponse un environnement

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 ) :
() ;
}

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Adapter son code

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 ) :
() ;
}

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Utiliser une couche dabstraction

canRun
sub canRun {
my ( $wanted ) = @_;

r e t u r n x $wanted ;
}

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Redfinir des fonctions

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 ;
}

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Redfinir des fonctions

mockGetFileHandle
sub mockGetFileHandle {
my (%params ) = @_;

my $ o l d = \& 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 ;

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 ;
}

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Simuler un environnement

Code
package F u s i o n I n v e n t o r y : : Test : : MockSystem : : Debian ;

use F u s i o n I n v e n t o r y : : Test : : MockSystem ;

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

Guillaume Rousse FusionInventory


Solutions de gestion de parc informatique
Un lourd hritage
Prsentation de lagent
Stratgie de test
Implmentation de lagent

Simuler un environnement

Code
package F u s i o n I n v e n t o r y : : Test : : MockSystem : : Debian ;

use F u s i o n I n v e n t o r y : : Test : : MockSystem ;

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

Guillaume Rousse FusionInventory

Vous aimerez peut-être aussi