mirror of
https://github.com/kairos-io/kairos-sdk.git
synced 2025-07-31 14:53:04 +00:00
75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
|
package bus
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"os"
|
||
|
|
||
|
"github.com/kairos-io/kairos-sdk/types"
|
||
|
"github.com/mudler/go-pluggable"
|
||
|
)
|
||
|
|
||
|
const EventDiscoveryPassword pluggable.EventType = "discovery.password"
|
||
|
|
||
|
const prefix = "kcrypt-discovery"
|
||
|
|
||
|
// extensionPaths is a list of paths where the bus will look for plugins.
|
||
|
var extensionPaths = []string{
|
||
|
"/sysroot/system/discovery",
|
||
|
"/system/discovery",
|
||
|
"/oem/kcrypt",
|
||
|
"/oem/system/discovery",
|
||
|
}
|
||
|
|
||
|
// Manager is the bus instance manager, which subscribes plugins to events emitted.
|
||
|
var Manager = NewBus()
|
||
|
|
||
|
func NewBus() *Bus {
|
||
|
return &Bus{
|
||
|
Manager: pluggable.NewManager([]pluggable.EventType{EventDiscoveryPassword}),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func Reload() {
|
||
|
Manager = NewBus()
|
||
|
Manager.Initialize()
|
||
|
}
|
||
|
|
||
|
type Bus struct {
|
||
|
*pluggable.Manager
|
||
|
registered bool
|
||
|
}
|
||
|
|
||
|
func (b *Bus) LoadProviders() {
|
||
|
wd, _ := os.Getwd()
|
||
|
b.Autoload(prefix, append(extensionPaths, wd)...).Register()
|
||
|
}
|
||
|
|
||
|
func (b *Bus) Initialize() {
|
||
|
if b.registered {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
level := "info"
|
||
|
if os.Getenv("BUS_DEBUG") == "true" {
|
||
|
level = "debug"
|
||
|
}
|
||
|
|
||
|
log := types.NewKairosLogger("kcrypt", level, false)
|
||
|
|
||
|
b.LoadProviders()
|
||
|
for i := range b.Events {
|
||
|
e := b.Events[i]
|
||
|
b.Response(e, func(p *pluggable.Plugin, r *pluggable.EventResponse) {
|
||
|
log.Logger.Debug().Str("from", p.Name).Str("at", p.Executable).Str("type", string(e)).Msg("Received event from provider")
|
||
|
if r.Errored() {
|
||
|
log.Logger.Error().Err(fmt.Errorf("%s", r.Error)).Str("from", p.Name).Str("at", p.Executable).Str("type", string(e)).Msg("Error in provider")
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
if r.State != "" {
|
||
|
log.Logger.Debug().Str("state", r.State).Str("from", p.Name).Str("at", p.Executable).Str("type", string(e)).Msg("Received event from provider")
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
b.registered = true
|
||
|
}
|