JeDDLaJ et les groupes de machines...

lundi 24 octobre 2005
par  G a.k.a Gérard Milhaud
popularité : 32%

Qu’entend-on par groupes de machines dans JeDDLaJ et comment fonctionnent-ils ? Quelles en sont les possibilités et les limitations ?

Définition

Un groupe JeDDLaJ est un ensemble de groupes JeDDLaJ et de machines isolées. Un groupe JeDDLaJ ne peut être vide, i.e. il contient au moins une machine isolée OU un groupe JeDDLaJ.

Une machine isolée d’un groupe JeDDLaJ G est une des machines de la base JeDDLaJ qui ne fait pas partie des groupes inclus dans G.

Ce qui peut se dire de manière (un peu...) plus formelle en syntaxe BNF :

On parlera indifféremment de sous-groupes et de groupes inclus. De même pour les surgroupes et les groupes incluant.

On parlera d’inclusion directe de G1 dans G pour un groupe G1 qui a été déclaré comme groupe inclus lors de la création/modification d’un groupe G.

On parlera d’inclusion indirecte de Gn dans G si il existe G1 directement inclus dans G tel que Gn est directement inclus dans G1, ou s’il existe G2 directement inclus dans G tel que Gn est indirectement inclus dans G2.

Enfin, notons qu’il existe dans JeDDLaJ un groupe particulier dénommé « Tous les ordinateurs » qui préexiste à la création de tout groupe JeDDLaJ. On ne peut le modifier, ni le supprimer. Il inclut tous les groupes JeDDLaJ et toutes les machines de la base JeDDLaJ. On ne peut, lors de la modification d’une machine, la supprimer de ce groupe.

Intérêt des groupes JeDDLaJ

La notion de groupe a été introduite dans JeDDLaJ afin de permettre de coller à la structure d’un parc informatique que l’on veut pouvoir diviser en ensemble de machines selon les bâtiments, les salles et/ou modèles de machines, machine sous tel OS, machines de telle population, etc.

La possibilité d’inclure des groupes dans d’autres groupes est intéressante pour pouvoir agir d’un seul coup sur un ensemble de groupes (i.e. toutes les salles du batiment 4, ou toutes les machines Linux de l’UFR, etc.).

L’introduction de machines isolées, appartenant au groupe indépendamment des groupes inclus est utile pour la gestion de cas particuliers (machines où Labview est installé = salle A13 + machine 7 de la salle B09).

Que peut-on faire à partir d’un groupe JeDDLaJ ?

Plusieurs opérations sont possibles :

- définir une configuration logicielle pour le groupe. On choisit d’ajouter OpenOffice.org et Gimp pour toute la salle C106. Ou de supprimer le logiciel de l’intervenant de la semaine dernière installé exceptionnellement sans la licence pour 4 jours sur toutes les machines Windows des étudiants.

Notez à ce sujet que l’on peut aller encore plus loin dans la sélection de machines, car à la page configuration logicielle — étape 1, il est possible de ne pas inclure dans la modification qui va être effectuée certaines machines du groupe sur lequel on agit (simplement en les désélectionnant).

Enfin, comme les opérations de création et de suppression de groupe sont extrêmement simples, il peut être intéressant de créer un groupe temporaire contenant toutes les machines sur lesquelles on veut faire une modification particulière, puis de détruire ce groupe une fois l’opération effectuée (i.e. une fois la page web de configuration logicielle validée ; inutile d’attendre que les machines soient effectivement modifiées car les modifications sont enregistrées dans la base au niveau des machines, sans notion de groupe...)

- appliquer un script de post-installation au groupe. On peut ainsi peaufiner une installation sur un ensemble de machines d’une seule opération.

- examiner un groupe : on voit d’un seul coup d’œil quels sont les sous-groupes, les surgroupes, les machines du groupe, ce qui est installé sur ces machines, examiner chacune d’entre-elles, etc.

- modifier un groupe : modification des groupes inclus, des machines isolées, du nom du groupe.

Choix d’implémentation importants au sujet des groupes

La connaissance des principes suivants permet de ne pas être surpris lors de l’utilisation des groupes dans JeDDLaJ.

Principe 1 : Au niveau SQL, un groupe contient toutes ses machines isolées et toutes les machines de ses groupes inclus.

Principe 2 : Seules les inclusions directes de groupes figurent dans la table SQL gpe_est_inclus_dans_gpe.


Le principe 1 s’explique pour des raisons d’efficacité : on veut que, par une seule requête sans dérouler une chaîne d’inclusion, on ait l’information de toutes les machines appartenant à une groupe.

Qu’implique-t-il dans votre vie de JeDDLaJeur ?

- quand vous modifiez un groupe G, si vous supprimez/ajoutez un groupe G1 des groupes inclus de G, toutes les machines de G1 sont supprimées/ajoutées à G bien sûr, mais aussi à tous ses surgroupes, directs... et indirects.
- de la même manière, lorque vous modifiez une machine en indiquant qu’elle ne fait plus partie d’un groupe G, ou qu’elle fait désormais partie du groupe G2, alors elle est ajoutée à tous les groupes dont elle fait nouvellement partie et à tous leurs surgroupes directs et indirects ET elle est supprimée de tous les groupes dont elle ne fait désormais plus partie ainsi que de tous leurs surgroupes directs et indirects.


Le principe 2, par contre, nécessite une petite explication :

Si on faisait figurer aussi les inclusions indirectes, on perdrait l’information de savoir si G1 est inclus directement dans G ou non. Ce qui est ennuyeux...

Développons. Soit G1 inclus directement dans G2 et G2 inclus directement dans G3. Si on faisait figurer toutes les inclusions dans la base SQL, on aurait G1 et G2 inclus dans G3. Bien. Imaginons maintenant que le JeDDLaJeur modifie G3 en indiquant que G1 ne fait plus partie de ses groupes inclus. Alors on supprime de G3 les machines de G1 (principe 1). Là est le problème : G3 contient toujours G2, qui contient G1, donc supprimer les machines de G1 du groupe G3 amène à une incohérence...

En ne faisant figurer que les inclusions directes, ce problème disparaît.

En fait, ce que nous venons de voir est un cas particulier d’un problème plus général : il faut éviter de se trouver dans une configuration du treillis des groupes pour laquelle il existe plus d’un chemin d’inclusion pour aller d’un groupe G à un groupe G’.

Double chemin d'inclusion de groupes

On a alors, pour chaque chemin d’inclusion de G à G’, un surgroupe direct de G’ qui est aussi un sous-groupe direct (ou indirect) de G. Alors la modification d’un de ces surgroupes directs de G’ par suppression de G’ comme groupe inclus fait que les machines de G’ sont supprimées de G alors qu’elles devraient encore y figurer selon l’autre chemin d’inclusion...

Un problème du même ordre se pose pour les machines isolées car rien n’indique, dans la base SQL, qu’une machine appartient à un groupe parce qu’elle appartient à un groupe inclus, ou parce qu’elle a été déclarée comme machine isolée.

En effet, soit la situation suivante : un groupe G contient la machine M1 comme machine isolée. Un de ses groupes inclus G1 directs ou indirects contient aussi M1.

PNG - 4 ko
Multiples inclusions de machine isolée : Cas a.
SITUATION INTERDITE N°2a

Cas a. : G1 est un groupe inclus direct.

PNG - 4 ko
Multiples inclusions de machine isolée : Cas a.
SITUATION INTERDITE N°2a

Alors si on modifie G1 en supprimant M1 de ses machines, alors M1 sera supprimée de G1 et de tous ses surgroupes (principe 1), en particulier G. Donc G ne contient plus M1 alors qu’elle avait été explicitement déclarée machine isolée de G. Incohérence.

Cas b. G1 est un groupe inclus indirect de G.

PNG - 5.2 ko
Multiples inclusions d’une machine isolée : cas b.
SITUATION INTERDITE N°2b

On retombe dans la même situation car il existe alors G2 surgroupe de G1 et sous-groupe de G et la suppression de G1 de ses groupes inclus implique que les machines de G1 sont supprimées de G2 et de tous ses surgroupes dont G.

Qu’implique donc finalement le principe 2 dans votre vie de JeDDLaJeur ?

- Comme on vient de le voir, il est interdit dans JeDDLaJ de constituer un treillis de groupes pour lequel il existe plus d’un chemin d’inclusion pour aller d’un groupe G à un groupe G’.

Or, JeDDLaJ, dans sa version 1.0, ne sait pas encore vérifier dans tous les cas que votre treillis de groupes respecte cette règle suite à une création de groupe et surtout suite à une modification de groupe : donc soyez prudents. Le comportement de JeDDLaJ si cette règle n’est pas respecté peut être... surprenant...

Cela dit, l’expérience tend à prouver qu’une situation de violation de cette règle n’est pas facile à produire lorsque l’on modélise un parc informatique... Mais en s’appliquant, on doit pouvoir y arriver...

- Comme on l’a vu aussi, il est interdit dans JeDDLaJ de créer une situation où une machine M déclarée machine isolée d’un groupe G appartient aussi à un des sous-groupes directs ou indirects de G.

Ici encore, lacune de JeDDLaJ dans sa version 1.0, il ne vous protège pas de la création d’une telle situation (en fait vous êtes protégés lors de la création du groupe, mais pas lors de la modification car alors rien ne vous empêche d’inclure dans un groupe une machine isolée d’un surgroupe). Donc encore une fois, la prudence est de mise...

Mais bon, cette situation certes possible ne devrait pas vous arriver dans la réalité. Ajouter à un sous-groupe une machine d’un surgroupe, puis modifier le surgroupe pour qu’il n’inclut plus le sous-groupe semble une manip. à même de faire douter de la santé mentale de celui qui la réalise...

- Lorque l’on crée ou modifie un groupe G, on choisit ses groupes inclus. Parmi les groupes choisis G1, G2,.., Gn, JeDDLaJ supprimera automatiquement tous les groupes Gi (1<=i<=n) tel qu’il existe Gj (1<=j<=n) qui inclut directement ou indirectement Gi. En clair, JeDDLaJ supprime automatiquement les inclusions indirectes pour respecter le principe 2.

PNG - 18.9 ko
Suppression des inclusions indirectes

Ne soyez donc pas surpris en constatant les éventuels deltas entre ce que vous avez cliqué et ce que vous pouvez observer en examinant les groupes.

Futur

Soit supprimer les limitations vues ci-dessus, soit les faire détecter par JeDDLaJ.


Illustration des possibilités actuelles de non-respect de la limitation de multiples chemins d’inclusion pour les groupes.

On notera (G1,G2,...,Gn) pour signifier que G1 inclut G2 qui inclut...qui inclut Gn..

Soit la situation suivante. On a (BIG,X), (X,X1), (BIG,GROS), (GROS,C), (BIG2,GROS). C’est une situation autorisée.

PNG - 5.8 ko
Jusqu’ici tout va bien...

Passage à une situation interdite par création du groupe SUPERBIG tel que (SUPERBIG,BIG) et (SUPERBIG,BIG2).

PNG - 8.1 ko
Là, ça va plus...

En effet on a alors (SUPERBIG,BIG,GROS) et (SUPERBIG,BIG2,GROS).

Autre passage à une situation interdite par modification du groupe GROS : on ajoute (GROS,X1).

PNG - 6 ko
Là non plus, ça va pas...

En effet, on a alors (BIG,X,X1) et (BIG,GROS,X1).

Pour éviter ça, deux options :

- 1. vérifier, avant la validation de chaque création/modification de groupe, que l’on n’est pas en situation interdite.

Ce qui signifie, en cas de création de groupe, qu’on ne doit pas avoir la situation suivante :

« Parmi les groupes inclus directs du groupe créé, il y en a au moins deux qui incluent directement le même groupe. »

En cas de modification de groupe (G), c’est la situation suivante qu’il faut savoir détecter pour l’interdire :

« Il existe un chemin d’inclusion qui part d’un surgroupe de G, qui passe par un des sous-groupes (l’ensemble des sous-groupes à considérer est celui APRÈS la modification en cours) de G et qui ne passe pas par G. »

Un peu de PHP en prévision...

- 2. l’autre option consiste à autoriser les boucles dans le treillis des groupes. Pour cela, il faut stocker dans la base non pas les inclusions de groupes, mais les chemins d’inclusion. Ainsi, quand on modifie un groupe en supprimant une inclusion, on peut demander de quel chemin on la supprime.

Cet option obligerait à des modifications plus profondes... À suivre...


Illustration des possibilités actuelles de non-respect de la limitation d’inclusion d’une machine isolée d’un surgroupe par un sous-groupe.

On a M1 machine isolée de G et (G,G2).

PNG - 2.9 ko
Pas de problème sur ce coup...

Si on modifie G2 en y incluant M1, on est en situation interdite...

PNG - 3.1 ko
Caramba, encore raté !

Pour régler ce problème, une option simple est d’interdire lors de la modification du groupe G la possibilité de choisir comme machine isolée de G les machines des surgroupes de G.

Mais ceci implique une perte de souplesse. Est-elle souhaitable ??? À suivre aussi...


Brèves

12 février 2009 - JeDDLaJ passe sur SourceSup à partir de la version 1.6IBE+

La communauté JeDDLaJ manquait jusqu’alors cruellement de certains services et moyens de (...)

12 février 2009 - 11/2/2009 : La version 1.6 IBE+ est disponible !!!

Ça y est. Après tant de mois (18 à peu près...) de gestation, d’hésitations, de :wq et autres (...)

12 février 2009 - JeDDLaJ gagne le concours DEVA => nouvelles fonctionnalités pour vous !!!

JOIE !!! BONHEUR !!! FIERTÉ !!!
JeDDLaJ remporte le concours DEVA (DEVeloppements (...)

9 juillet 2007 - Précision importante sur la compatibilité MySQL 5 de JeDDLaJ 1.4IBE

Dans le cas d’un serveur Rembo sous Windows, 2 moyens pour pouvoir utiliser MySQL 5 :
soit (le (...)

9 juillet 2007 - Déjà le SP1 pour JeDDLaJ 1.4IBE : désormais TPMfOSd-ready !!!

Description
Ce service pack n’apporte principalement qu’une amélioration... mais de taille... (...)