From 541728fa22f21e6d7d9b4419ab8282d5d1f48a21 Mon Sep 17 00:00:00 2001
From: Nianyu Shen <xiaoyu9964@gmail.com>
Date: Fri, 27 Sep 2024 00:52:34 -0700
Subject: [PATCH] feat: add support for extra plugins in cluster provider
 (#504)

* feat: add support for extra plugins in cluster provider

Signed-off-by: Nianyu Shen <xiaoyu9964@gmail.com>

* add cluster reset event

Signed-off-by: Nianyu Shen <xiaoyu9964@gmail.com>

---------

Signed-off-by: Nianyu Shen <xiaoyu9964@gmail.com>
---
 clusterplugin/plugin.go | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/clusterplugin/plugin.go b/clusterplugin/plugin.go
index a3c62cb..b95997a 100644
--- a/clusterplugin/plugin.go
+++ b/clusterplugin/plugin.go
@@ -13,6 +13,8 @@ import (
 
 const clusterProviderCloudConfigFile = "/usr/local/cloud-config/cluster.kairos.yaml"
 
+const EventClusterReset pluggable.EventType = "cluster.reset"
+
 // ClusterProvider returns a yip configuration that configures a Kubernetes engine.  The yip config may use any elemental
 // stages after initramfs.
 type ClusterProvider func(cluster Cluster) yip.YipConfig
@@ -79,11 +81,16 @@ func (p ClusterPlugin) onBoot(event *pluggable.Event) pluggable.EventResponse {
 	return response
 }
 
-func (p ClusterPlugin) Run() error {
-	return pluggable.NewPluginFactory(
-		pluggable.FactoryPlugin{
+func (p ClusterPlugin) Run(extraPlugins ...pluggable.FactoryPlugin) error {
+	plugins := []pluggable.FactoryPlugin{
+		{
 			EventType:     bus.EventBoot,
 			PluginHandler: p.onBoot,
 		},
-	).Run(pluggable.EventType(os.Args[1]), os.Stdin, os.Stdout)
+	}
+	plugins = append(plugins, extraPlugins...)
+
+	f := pluggable.NewPluginFactory(plugins...)
+
+	return f.Run(pluggable.EventType(os.Args[1]), os.Stdin, os.Stdout)
 }