You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(lifecycle): enrichir la doc des cycles de vie
- Ajouter la notion d’états par défaut (O/I/M) et d’états personnalisés via states.yml
- Documenter la structure rules/*.yml : sources, rules, trigger (jours/minutes/secondes), dateKey, mutation, target
- Expliquer la planification des triggers via SESAME_LIFECYCLE_TRIGGER_CRON
- Mentionner ignoreLifecycle, bonnes pratiques et dépannage
- Ajouter un exemple Mermaid de flux
- Ajuster les instructions de montage docker-compose et chemins conteneur
description: Gestion du cycle de vie des identités
5
4
---
6
5
7
6
# Gestion du cycle de vie
8
7
9
-
Sesame comprend une fonctionnalité de gestion du cycle de vie des identités. Elle permet de gérer les transitions de statut automatiquement selon des règles établies.
8
+
Sésame comprend une gestion de cycle de vie des identités. Elle permet de déclencher automatiquement des changements d’état (lifecycle) selon des règles déclaratives et/ou des délais (triggers).
10
9
11
10
## Activation
12
-
Par défaut le cycle de vie n'est pas actif. Pour l'activer il suffit d'ajouter un point de montage pour le conteneur sesame-orchestrator
13
-
* Dans docker-compose section **sesame-orchestrator** -> **volumes** ajouter
Par défaut, l’orchestrateur sait gérer le cycle de vie dès lors que le répertoire de configuration est présent dans le conteneur. Montez votre dossier de configuration hôte dans le conteneur.
12
+
13
+
- Dans docker-compose, section « sesame-orchestrator » → « volumes », ajoutez au choix :
- ou pour monter toute la configuration de l’orchestrateur (recommandé) :
20
+
21
+
```
22
+
- ./configs/sesame-orchestrator:/data/configs
23
+
```
24
+
25
+
- Redémarrez votre conteneur :
26
+
18
27
```
19
28
docker compose up -d
20
29
```
21
30
22
31
## Configuration
23
-
La configuration se fait à l'aide de fichiers yml situé dans le volume (./configs/sesame-orchestrator/lifecycle)
32
+
La configuration se fait à l’aide de fichiers YAML dans le volume monté. L’orchestrateur copie automatiquement des fichiers par défaut si le répertoire est vide.
- Règles de cycle de vie : `/data/configs/lifecycle/rules/*.yml` (tous les fichiers YAML du dossier sont pris en compte par ordre alphabétique)
38
+
39
+
Remarque : au premier démarrage, si le dossier `/data/configs/lifecycle` est vide, l’orchestrateur y copiera les fichiers présents dans `defaults/lifecycle` (et `defaults/lifecycle/rules`).
40
+
41
+
### États du cycle de vie
42
+
43
+
Il existe des états par défaut et des états personnalisables :
44
+
45
+
- États par défaut (toujours disponibles) :
46
+
- O : Officiel — supannRessourceEtat : {COMPTE} O SupannActif
47
+
- I : Inactif — supannRessourceEtat : {COMPTE} I SupannInactif
48
+
- M : Manuel — supannRessourceEtat : {COMPTE} M SupannManuel
24
49
25
-
### Noms des fichiers
26
-
Les noms de fichiers dans le répertoire **./configs/sesame-orchestrator/lifecycle**. Les fichiers seront traités par ordre alphabétique.
50
+
- États personnalisés (optionnels) : vous pouvez en définir dans `states.yml`. Chaque état personnalisé doit :
51
+
- avoir une clé d’une seule lettre qui n’entre pas en conflit avec O, I, M ;
52
+
- avoir un label et une description ;
53
+
- optionnellement une icône (ex. `mdi-account-clock`) et une couleur hexadécimale.
27
54
55
+
Exemple de `states.yml` pour ajouter « W = En attente » et « D = Supprimé » :
56
+
57
+
```yml
58
+
states:
59
+
- key: 'W'
60
+
label: 'En attente'
61
+
description: 'supannRessourceEtat : {COMPTE} W SupannAttente'
62
+
icon: 'mdi-timer-sand'
63
+
color: '#f0ad4e'
64
+
- key: 'D'
65
+
label: 'Supprimé'
66
+
description: 'Compte marqué comme supprimé (soft delete)'
67
+
icon: 'mdi-delete'
68
+
color: '#d9534f'
69
+
```
70
+
71
+
Astuce : l’API expose les états disponibles (par défaut + personnalisés) : `GET /lifecycle/states` et `GET /lifecycle/states/custom`.
28
72
29
73
### Structure d'un fichier cycle de vie
30
74
31
-
#### **Forme 1** : sélection des identités par une régle
75
+
Les fichiers de règles doivent être placés dans `/data/configs/lifecycle/rules/` et se terminent par `.yml` ou `.yaml`. Chaque fichier peut contenir un bloc `identities` composé d’une liste de règles.
76
+
77
+
Champs disponibles pour chaque règle :
78
+
79
+
-`sources` : liste d’états sources sur lesquels la règle s’applique (ex. `['I', 'W']`).
80
+
-`rules` : filtre MongoDB (objet) pour sélectionner les identités concernées.
81
+
-`trigger` : délai avant transition. Peut être :
82
+
- un nombre (interprété en jours),
83
+
- une chaîne avec unité : `d` (jours), `m` (minutes), `s` (secondes). Ex. `90d`, `10m`, `45s`.
84
+
-`dateKey` : attribut date de référence pour le `trigger` (défaut : `lastSync`). Peut être remplacé, par ex. `initInfo.initDate`.
85
+
-`mutation` : objet appliqué en `$set` avant le changement d’état (permet de modifier des champs de l’identité).
86
+
-`target` : état cible.
87
+
88
+
Important :
89
+
90
+
- Une règle doit définir au moins `rules` ou `trigger`.
91
+
- Les règles avec `rules` (sans `trigger`) sont traitées immédiatement lorsqu’une identité passe dans l’état source.
92
+
- Les règles avec `trigger` sont traitées de manière périodique par un cron (voir plus bas).
93
+
94
+
#### Forme 1 : sélection des identités par une règle immédiate
32
95
```yml
33
96
identities:
34
97
- sources: ['I', 'W']
@@ -37,26 +100,14 @@ identities:
37
100
}
38
101
target: D
39
102
```
40
-
* **identities** : le fichier doit avoir toujour cette clé en point d'entrée
41
-
* **sources** : tableau de declenchement selon le statut sous la forme [ status1, status2, ... ]. Dans l'exemple ci dessus ce lifecyle sera déclencher sur le status I (Inactive) ou W(En Attente)
103
+
Explication :
42
104
43
-
Rappel des statuts :
105
+
- `sources` : la règle se déclenche depuis I (Inactif) ou W (En attente).
106
+
- `rules` : filtre MongoDB ; ici seules les identités avec `inetOrgPerson.employeeType = 'TAIGA'` sont ciblées.
107
+
- `target` : l’état cible est D (Supprimé). Assurez-vous que D est défini dans `states.yml`.
44
108
45
-
| Lettre | statut |
46
-
|--------|-------------|
47
-
| O | Officiel |
48
-
| I | Inactive |
49
-
| M | Manuel |
50
109
51
-
* **rules** : Requète mongo de selection des identités concernées (voir la documentation Mongo. Vous pouvez tester directement la règle avec un editeur Mongo)
52
-
53
-
Dans cet exemple seul les identités venant de Taiga seront concernées
54
-
55
-
* **target** : statut resultant
56
-
Dans cet exemple toutes les identités qui auront le statut Inactive ou En attente seront passé en statut Supprimé
57
-
58
-
59
-
#### **Forme 2** : séléction par trigger
110
+
#### Forme 2 : sélection par trigger (délai)
60
111
61
112
```yml
62
113
identities:
@@ -68,12 +119,13 @@ identities:
68
119
target: D
69
120
70
121
```
71
-
La balise **rules** est remplacée par la balise **trigger** . Elle permet de definir un delai entre 2 statuts
122
+
Explication :
72
123
73
-
* trigger : nombre representant une periode (jour) d'attente entre les deux statuts
74
-
Dans l'exemple ci dessus les identitées etant inactive seront supprimées apres un delai de 36 jours de leur passage en inactive
124
+
- `trigger` : défini à `36d` signifie 36 jours. Vous pouvez utiliser un nombre (jours), ou `Xd`, `Ym`, `Zs`.
125
+
- `dateKey` (optionnel) : par défaut `lastSync`. Vous pouvez le changer, par ex. `dateKey: 'initInfo.initDate'`.
126
+
- Traitement : ces règles sont évaluées périodiquement par un cron (voir ci-dessous).
75
127
76
-
#### **Avec une mutation** de l'enregistrement
128
+
#### Avec une mutation de l’enregistrement
77
129
```yml
78
130
identities:
79
131
- sources: ['I', 'W']
@@ -85,5 +137,43 @@ identities:
85
137
}
86
138
target: D
87
139
```
88
-
Il est possible d'ajouter une mutation de l'enregistrement avant le passage au statut cible
89
-
Dans l'exemple ci dessus le champ inetOrgPerson.cn sera modifié avant le passage au statut D
140
+
`mutation`permet d’appliquer un `$set` des champs avant le passage à l’état cible. Ici, `inetOrgPerson.cn` sera modifié avant de passer à D.
141
+
142
+
### Planification des triggers (cron)
143
+
144
+
Les règles avec `trigger` sont exécutées par une tâche planifiée. Le cron est configurable par variable d’environnement :
145
+
146
+
- `SESAME_LIFECYCLE_TRIGGER_CRON` : expression cron (défaut : `*/5 * * * *`, toutes les 5 minutes)
147
+
148
+
Exemples d’expressions :
149
+
150
+
- toutes les heures : `0 * * * *`
151
+
- chaque nuit à 2h30 : `30 2 * * *`
152
+
153
+
### Ignorer le cycle de vie pour une identité
154
+
155
+
Une identité peut être exclue des traitements de cycle de vie en positionnant son champ `ignoreLifecycle` à `true`. Dans ce cas, elle n’est pas prise en compte par les règles, qu’elles soient immédiates ou à délai.
156
+
157
+
### Bonnes pratiques
158
+
159
+
- Déclarez d’abord vos états personnalisés dans `states.yml` avant de les utiliser dans les règles (ex. `W`, `D`).
160
+
- Utilisez des clés d’un seul caractère et évitez tout conflit avec O/I/M.
161
+
- Placez vos règles dans des fichiers séparés et nommez-les de façon à maîtriser l’ordre alphabétique de traitement.
162
+
- Testez vos filtres `rules` dans un client MongoDB pour valider la sélection attendue.
163
+
- Précisez `dateKey` lorsque le point de référence temporel n’est pas `lastSync`.
164
+
165
+
### Dépannage
166
+
167
+
- Au premier démarrage, si le répertoire est vide, des fichiers par défaut sont copiés automatiquement dans `/data/configs/lifecycle`.
168
+
- En cas d’erreur de validation YAML, les logs indiquent le fichier et la cause (schéma invalidé). Corrigez la structure (clés manquantes, types incorrects, etc.).
169
+
- Vérifiez que les états référencés dans `sources`/`target` existent (défaut ou `states.yml`).
0 commit comments