Skip to content

💡 [REQUEST] - PluginManager : factoriser la plomberie commune des plugins (Log, Cron, event, autoSync/Suspend, flags) #2323

Description

@shikanime

Description

Actuellement, la logique transversale des plugins (apply aka handleCron/handleUpsert, destroy aka handleDelete, gestion des flags, autoSync/suspend, Cron, event, Log) est dupliquée dans chaque plugin (gitlab, harbor, keycloak, vault, argocd, nexus, sonarqube…). Cette duplication devient critique : la fonctionnalité autoSync/suspend sur un nombre variable de plugins et la gestion des flags de plugin (cf. #2281) répètent exactement la même plomberie à chaque implémentation.

L'objectif est d'introduire un PluginManager qui abstrait l'ensemble de cette plomberie, sur le modèle d'un Module/Controller NestJS, afin que chaque plugin ne déclare plus que ses intents (apply / destroy) et délègue tout le cycle de vie (Log, Cron, event, autoSync/Suspend, flags) au gestionnaire.

PRs liées

⚠️ Aucune solution de mutualisation du code dupliqué de #2281 (gestion des flags, autoSync/suspend) n'a encore été commitée. Ce ticket trace l'abstraction à concevoir.

Exemples simples

Cible (esquisse issue de la réflexion avec Kevin, non figée) :

// gitlab.plugin.ts
@Plugin("gitlab")
class GitLabPlugin {
  @Apply()
  async apply(): PluginResult {
    // do stuff
  }

  @Destroy()
  async destroy(): PluginResult {
    // do stuff
  }
}

// main.service.ts
@Module({
  providers: [PluginManager.forRoot({ /* config */ }), GitLabPlugin],
})
class MainModule {}

PluginManager reprend une structure similaire à un Controller/Module mais n'est pas encore figé.

Spécifications techniques

  • PluginManager.forRoot({ ... }) enregistre et initialise les plugins fournis comme providers du module.
  • Décorateurs @Plugin(name), @Apply(), @Destroy() pour déclarer le cycle de vie du plugin.
  • Le PluginManager abstrait et centralise :
  • Suppression de la duplication actuelle : chaque plugin ne doit plus implémenter sa propre boucle Cron/event/Log/autoSync/Suspend.
  • La conception (PluginManager) reste à valider avec l'équipe (réflexion en cours avec Kevin).

Définition du fini

  • Le PluginManager abstrait la plomberie commune (Log, Cron, event, autoSync/Suspend, flags).
  • Les plugins existants (gitlab, harbor, keycloak, vault, argocd, nexus, sonarqube…) migrent vers le nouveau modèle sans régression de comportement.
  • Les tests liés à cette fonctionnalité ont été ajoutés.
  • La documentation liée à cette fonctionnalité a été ajoutée (cf. https://github.com/cloud-pi-native/documentation).
  • La communication avec les autres équipes impliquées par cette fonctionnalité a été faite.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requesttechTechnical issuetechnical debtRésoud de la dette technique

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions