fusioninventory - zarb.orgguillomovitch/presentations/fpw2011.pdfcompatibilité glpi 0.78.x, gestion...

Post on 16-May-2020

15 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

FusionInventory

Guillaume Rousse<guillomovitch@gmail.com>

Journées francophones de Perl 2011

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Sommaire

1 Solutions de gestion de parc informatique

2 Présentation de l’agentCaractéristiquesCapacitésObjectifs

3 Implémentation de l’agentUn lourd héritageStratégie de test

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Avancement

1 Solutions de gestion de parc informatique

2 Présentation de l’agentCaractéristiquesCapacitésObjectifs

3 Implémentation de l’agentUn lourd héritageStratégie de test

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

GLPI

ObjectifsApplication web de gestion de parc

inventairehelpdesk

Détailsapplication PHPmodulaire

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

GLPI

ObjectifsApplication web de gestion de parc

inventairehelpdesk

Détailsapplication PHPmodulaire

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

OCS-NG

ObjectifsSolution autonome de gestion de parc

inventairedéploiement logiciel

Détails

Coté serveur :interface agent Perlinterface utilisateur PHP

Coté agent :

agent Windows C

agent Unix Perl

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

OCS-NG

ObjectifsSolution autonome de gestion de parc

inventairedéploiement logiciel

Détails

Coté serveur :interface agent Perlinterface utilisateur PHP

Coté agent :

agent Windows C

agent Unix Perl

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Tracker

ObjectifsInventaire automatisé pour GLPI de matériels sans agent

découverte matérielinterrogation distante

Détailsplugin GLPI PHPagent Perl

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Tracker

ObjectifsInventaire automatisé pour GLPI de matériels sans agent

découverte matérielinterrogation distante

Détailsplugin GLPI PHPagent Perl

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Avant-hier

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

FusionInventory

ObjectifsAgent multifonction pour GLPI

fusion de l’agent OCS Unix et de l’agent trackermodulaire

Détailsplugin GLPI PHPagent Perl multi-plateformes

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

FusionInventory

ObjectifsAgent multifonction pour GLPI

fusion de l’agent OCS Unix et de l’agent trackermodulaire

Détailsplugin GLPI PHPagent Perl multi-plateformes

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Hier

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Évolution du plugin GLPI

Branches2.2.xcompatibilité GLPI 0.72.x2.3.xcompatibilité GLPI 0.78.x, gestion des inventaires2.4.x (en beta)compatibilité GLPI 0.80.x

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Capture d’écran du plugin GLPI

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Aujourd’hui

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Avancement

1 Solutions de gestion de parc informatique

2 Présentation de l’agentCaractéristiquesCapacitésObjectifs

3 Implémentation de l’agentUn lourd héritageStratégie de test

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Avancement

1 Solutions de gestion de parc informatique

2 Présentation de l’agentCaractéristiquesCapacitésObjectifs

3 Implémentation de l’agentUn lourd héritageStratégie de test

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Modularité

Composantsmoteurtaches

Tachesinventaire localwake on landécouverte réseauinventaire distantdéploiement logiciel

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Modularité

Composantsmoteurtaches

Tachesinventaire localwake on landécouverte réseauinventaire distantdéploiement logiciel

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Versatilité

Mode d’exécutionprocessus temporaireprocessus résidant (daemon Unix, service Windows)

Mode de collecte du résultatstockage localenvoi au serveur

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Versatilité

Mode d’exécutionprocessus temporaireprocessus résidant (daemon Unix, service Windows)

Mode de collecte du résultatstockage localenvoi au serveur

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Portabilité

Cible des résultatsdistributionexécution

Exécution

WindowsLinuxMacOSBSD

Solaris

HPUX

AIX

Distribution

sourcespaquetages

installeur interactifarchive autonome

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Portabilité

Cible des résultatsdistributionexécution

Exécution

WindowsLinuxMacOSBSD

Solaris

HPUX

AIX

Distribution

sourcespaquetages

installeur interactifarchive autonome

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Portabilité

Cible des résultatsdistributionexécution

Exécution

WindowsLinuxMacOSBSD

Solaris

HPUX

AIX

Distribution

sourcespaquetages

installeur interactifarchive autonome

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Interopérabilité

Serveur OCScompatibilité : version serveur 1.xfonctionalités :

inventaire localdéploiement logiciel

Serveur GLPIversion serveur 0.72 :

découverte réseauinventaire distant

version serveur 0.78 : fonctionalités complètes

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Interopérabilité

Serveur OCScompatibilité : version serveur 1.xfonctionalités :

inventaire localdéploiement logiciel

Serveur GLPIversion serveur 0.72 :

découverte réseauinventaire distant

version serveur 0.78 : fonctionalités complètes

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Avancement

1 Solutions de gestion de parc informatique

2 Présentation de l’agentCaractéristiquesCapacitésObjectifs

3 Implémentation de l’agentUn lourd héritageStratégie de test

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Inventaire local

Composants matérielsCPU, mémoire, etc...bus USB, PCI, SCSIpériphériques connectés

Composants logiciels

système d’exploitationliste de paquetages

Configuration

paramètre réseauparamètre affichagevariables d’environnement

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Inventaire local

Composants matérielsCPU, mémoire, etc...bus USB, PCI, SCSIpériphériques connectés

Composants logiciels

système d’exploitationliste de paquetages

Configuration

paramètre réseauparamètre affichagevariables d’environnement

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Inventaire local

Composants matérielsCPU, mémoire, etc...bus USB, PCI, SCSIpériphériques connectés

Composants logiciels

système d’exploitationliste de paquetages

Configuration

paramètre réseauparamètre affichagevariables d’environnement

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Découverte réseau

Principebalayage d’une plage réseauidentification des éléments trouvés

BalayagenmapNetBIOSSNMP

IdentificationSNMPattribution d’un modèle descriptif

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Découverte réseau

Principebalayage d’une plage réseauidentification des éléments trouvés

BalayagenmapNetBIOSSNMP

IdentificationSNMPattribution d’un modèle descriptif

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Découverte réseau

Principebalayage d’une plage réseauidentification des éléments trouvés

BalayagenmapNetBIOSSNMP

IdentificationSNMPattribution d’un modèle descriptif

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Inventaire distant

PrincipeSNMPutilisation d’un modèle descriptif

Matériel réseauports utiliséséquipements branchés

Imprimantescompteurs d’impressionniveaux d’encre

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Inventaire distant

PrincipeSNMPutilisation d’un modèle descriptif

Matériel réseauports utiliséséquipements branchés

Imprimantescompteurs d’impressionniveaux d’encre

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Inventaire distant

PrincipeSNMPutilisation d’un modèle descriptif

Matériel réseauports utiliséséquipements branchés

Imprimantescompteurs d’impressionniveaux d’encre

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Déploiement logiciel

Principetéléchargement d’une charge utileexécution

Intérêttéléchargement pair à pairexécution immédiateutilisation des critères de sélection de GLPI

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Déploiement logiciel

Principetéléchargement d’une charge utileexécution

Intérêttéléchargement pair à pairexécution immédiateutilisation des critères de sélection de GLPI

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Avancement

1 Solutions de gestion de parc informatique

2 Présentation de l’agentCaractéristiquesCapacitésObjectifs

3 Implémentation de l’agentUn lourd héritageStratégie de test

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

CaractéristiquesCapacitésObjectifs

Versions

Branches2.0.x version initiale2.1.x branche stableajout du support Windows, nettoyage syntaxique2.2.x branche développementnettoyage architecture, maintien de la compatibilité OCS3.x branche expérimentalechangement architecture, abandon de la compatibilité OCS

Version stable2.1.9

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Avancement

1 Solutions de gestion de parc informatique

2 Présentation de l’agentCaractéristiquesCapacitésObjectifs

3 Implémentation de l’agentUn lourd héritageStratégie de test

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Avancement

1 Solutions de gestion de parc informatique

2 Présentation de l’agentCaractéristiquesCapacitésObjectifs

3 Implémentation de l’agentUn lourd héritageStratégie de test

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Support syslog

FusionInventory::LoggerBackend::Syslog

set logsock ( ’ un ix ’ ) ;openlog ( " fus ion inven to ry−agent " , ’ cons , p id ’ , $ENV{ ’USER ’ } ) ;sys log ( ’ debug ’ , ’ sys log backend enabled ’ ) ;c lose log ( ) ;

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Extraction des logiciels installés sous HPUX

FusionInventory::Agent::Task::Inventory::OS::HPUX::Software

@sof tL is 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 informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

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 informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Grand chantier

Nettoyage du codesyntaxestructurationarchitecture

Amélioration des performancesmémoisationindexation

Amélioration fonctionnellesinterface RESTremplacement de XML par JSONmodèle conceptuel homogène

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Grand chantier

Nettoyage du codesyntaxestructurationarchitecture

Amélioration des performancesmémoisationindexation

Amélioration fonctionnellesinterface RESTremplacement de XML par JSONmodèle conceptuel homogène

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Grand chantier

Nettoyage du codesyntaxestructurationarchitecture

Amélioration des performancesmémoisationindexation

Amélioration fonctionnellesinterface RESTremplacement de XML par JSONmodèle conceptuel homogène

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Avancement

1 Solutions de gestion de parc informatique

2 Présentation de l’agentCaractéristiquesCapacitésObjectifs

3 Implémentation de l’agentUn lourd héritageStratégie de test

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Suite de tests

État actuel1330 tests, 76 fichierscouverture très hétérogène

Problèmestester des interactions client-serveurtester l’analyse du résultat d’une commandetester la réponse à un environnement

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Suite de tests

État actuel1330 tests, 76 fichierscouverture très hétérogène

Problèmestester des interactions client-serveurtester l’analyse du résultat d’une commandetester la réponse à un environnement

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Tester des interactions client-serveur

Serveur de testTest::Apache2 :(Net::Server::HTTP :(HTTP::Server::Simple :)

Fonctionnalité additionellesHTTP::Server::Simple::AuthenIO::Socket::SSLHTTP::Proxy

Utilisation de véritable serveurserveur public ou privétest obligatoire ou conditionel

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Tester des interactions client-serveur

Serveur de testTest::Apache2 :(Net::Server::HTTP :(HTTP::Server::Simple :)

Fonctionnalité additionellesHTTP::Server::Simple::AuthenIO::Socket::SSLHTTP::Proxy

Utilisation de véritable serveurserveur public ou privétest obligatoire ou conditionel

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Tester des interactions client-serveur

Serveur de testTest::Apache2 :(Net::Server::HTTP :(HTTP::Server::Simple :)

Fonctionnalité additionellesHTTP::Server::Simple::AuthenIO::Socket::SSLHTTP::Proxy

Utilisation de véritable serveurserveur public ou privétest obligatoire ou conditionel

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Tester l’analyse du résultat d’une commande

Objectiftester le code qui analyse le résultat d’une commande

Code initial

my @output = ‘command ‘ ;foreach my $ l i n e ( @output ) {

i f ( $ l i n e =~ / ^ foo : ( . ∗ ) / ) {$ inventory−>addItem ( $1 ) ;

}}

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Tester l’analyse du résultat d’une commande

Objectiftester le code qui analyse le résultat d’une commande

Code initial

my @output = ‘command ‘ ;foreach my $ l i n e ( @output ) {

i f ( $ l i n e =~ / ^ foo : ( . ∗ ) / ) {$ inventory−>addItem ( $1 ) ;

}}

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Adapter le code au test

Code intermédiaire

$inventory−>addItems ( $_ ) foreach get I tems ( ) ;

sub get I tems {my @output = ‘command ‘ ;my @items ;foreach my $ l i n e ( @output ) {

push @items , $1 i f $ l i n e =~ / ^ foo : ( . ∗ ) / ;}return @items

}

Code final

$inventory−>addItems ( $_ ) foreach get I tems (command => ’command ’ ) ;

sub get I tems {my $handle = getF i leHandle (@_) ;while (my $ l i n e = <$handle >) {

push @items , $1 i f $ l i n e =~ / ^ foo : ( . ∗ ) / ;}close $handle ;return @items ;

}Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Adapter le code au test

Code intermédiaire

$inventory−>addItems ( $_ ) foreach get I tems ( ) ;

sub get I tems {my @output = ‘command ‘ ;my @items ;foreach my $ l i n e ( @output ) {

push @items , $1 i f $ l i n e =~ / ^ foo : ( . ∗ ) / ;}return @items

}

Code final

$inventory−>addItems ( $_ ) foreach get I tems (command => ’command ’ ) ;

sub get I tems {my $handle = getF i leHandle (@_) ;while (my $ l i n e = <$handle >) {

push @items , $1 i f $ l i n e =~ / ^ foo : ( . ∗ ) / ;}close $handle ;return @items ;

}Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Utiliser une couche d’abstraction

getFileHandle

sub getF i leHandle {my %params = @_;

my $handle ;

SWITCH: {i f ( $params { f i l e } ) {

i f ( ! open $handle , ’ < ’ , $params { f i l e } ) {$params { logger}−>e r r o r ( "Can ’ t open f i l e $params { f i l e } : $ERRNO" ) ;return ;

}l as t SWITCH;

}i f ( $params {command } ) {

i f ( ! open $handle , ’−| ’ , $params {command} . " 2 >/dev / n u l l " ) {$params { logger}−>e r r o r ( "Can ’ t run command $params {command } : $ERRNO" ) ;return ;

}l as t SWITCH;

}die " n e i t h e r command nor f i l e parameter given " ;

}

return $handle ;}

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Problème de disponibilité du résultat

Commandes et fichiers exotiqueslsvpd sur AIXmachinfo sur HPUX/proc/cpuinfo sur Linux Alpha

Campagnes de collecte d’échantillons

répertoire resourcesbesoin d’organisation (tri, tracabilité, ...)

Problème sous Windowsbase de registreWMI

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Problème de disponibilité du résultat

Commandes et fichiers exotiqueslsvpd sur AIXmachinfo sur HPUX/proc/cpuinfo sur Linux Alpha

Campagnes de collecte d’échantillons

répertoire resourcesbesoin d’organisation (tri, tracabilité, ...)

Problème sous Windowsbase de registreWMI

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Problème de disponibilité du résultat

Commandes et fichiers exotiqueslsvpd sur AIXmachinfo sur HPUX/proc/cpuinfo sur Linux Alpha

Campagnes de collecte d’échantillons

répertoire resourcesbesoin d’organisation (tri, tracabilité, ...)

Problème sous Windowsbase de registreWMI

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Tester la réponse à un environnement

Objectiftester le code qui sélectionne la commande à utiliser

Code initial

my @packages =−x ’ / b in / rpm ’ ? getRPMPackagesList (command => ’ rpm −qa ’ ) :−x ’ / b in / dpkg ’ ? getDPKGPackagesList (command => ’ dpkg − l ’ ) :−x ’ / b in / equery ’ ? getEqueryPackagesList (command => ’ equery l i s t − i ’ ) :

( ) ;}

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Tester la réponse à un environnement

Objectiftester le code qui sélectionne la commande à utiliser

Code initial

my @packages =−x ’ / b in / rpm ’ ? getRPMPackagesList (command => ’ rpm −qa ’ ) :−x ’ / b in / dpkg ’ ? getDPKGPackagesList (command => ’ dpkg − l ’ ) :−x ’ / b in / equery ’ ? getEqueryPackagesList (command => ’ equery l i s t − i ’ ) :

( ) ;}

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Adapter son code

Code final

my @packages =canRun ( ’ / b in / rpm ’ ) ? getRPMPackagesList (command => ’ rpm −qa ’ ) :canRun ( ’ / b in / dpkg ’ ) ? getDPKGPackagesList (command => ’ dpkg − l ’ ) :canRun ( ’ / b in / equery ’ ) ? getEqueryPackagesList (command => ’ equery l i s t − i ’ ) :

( ) ;}

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Utiliser une couche d’abstraction

canRun

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

return −x $wanted ;}

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Redéfinir des fonctions

mockGetRun

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

my $new = sub {my $wanted = $_ [ 0 ] ;return $params {commands}−>{$wanted } ;

} ;

no warnings ’ rede f i ne ’ ;∗Fus ionInventory : : Agent : : Tools : : canRun = $new ;

}

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Redéfinir des fonctions

mockGetFileHandle

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

my $old = \& Fus ionInventory : : Agent : : Tools : : ge tF i leHandle ;

my $new = sub {my (%opt ions ) = @_;

my $ f i l e = $params {commands}−>{$wanted } ;

i f ( $ f i l e ) {pr in t STDERR " f i l e ’ $ f i l e ’ de l i ve red \ n " ;return $old−>(@_, f i l e => $ f i l e ) ;

} else {pr in t STDERR " noth ing de l i ve red \ n " ;return ;

}} ;

no warnings ’ rede f i ne ’ ;∗Fus ionInventory : : Agent : : Tools : : ge tF i leHandle = $new ;

}

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Simuler un environnement

Code

package Fus ionInventory : : Test : : MockSystem : : Debian ;

use Fus ionInventory : : Test : : MockSystem ;

mockSystem (commands => {

’ dpkg ’ => ’ resources / packaging / dpkg ’} ,f i l e s => {

’ / e tc / debian_vers ion ’ => ’ resources / re lease / debian ’}

) ;

Utilisation$> perl -MFusionInventory::Test::MockSystem::Debian \

fusioninventory

Guillaume Rousse FusionInventory

Solutions de gestion de parc informatiquePrésentation de l’agent

Implémentation de l’agent

Un lourd héritageStratégie de test

Simuler un environnement

Code

package Fus ionInventory : : Test : : MockSystem : : Debian ;

use Fus ionInventory : : Test : : MockSystem ;

mockSystem (commands => {

’ dpkg ’ => ’ resources / packaging / dpkg ’} ,f i l e s => {

’ / e tc / debian_vers ion ’ => ’ resources / re lease / debian ’}

) ;

Utilisation$> perl -MFusionInventory::Test::MockSystem::Debian \

fusioninventory

Guillaume Rousse FusionInventory

top related