diff --git a/pkg/navi/config.go b/pkg/navi/config.go index 733080a..4c27e31 100644 --- a/pkg/navi/config.go +++ b/pkg/navi/config.go @@ -49,6 +49,7 @@ func ReadInConfig(root string) error { return err } + // Hot swap R = instance return nil diff --git a/pkg/navi/warden.go b/pkg/navi/warden.go index 594b781..75d2964 100644 --- a/pkg/navi/warden.go +++ b/pkg/navi/warden.go @@ -3,14 +3,19 @@ package navi import "code.smartsheep.studio/goatworks/roadsign/pkg/warden" func InitializeWarden(regions []*Region) { + pool := make([]*warden.AppInstance, 0) + for _, region := range regions { for _, application := range region.Applications { - warden.InstancePool = append(warden.InstancePool, &warden.AppInstance{ + pool = append(pool, &warden.AppInstance{ Manifest: application, }) } } - + + // Hot swap + warden.InstancePool = pool + for _, instance := range warden.InstancePool { instance.Wake() } diff --git a/pkg/sideload/reload.go b/pkg/sideload/reload.go new file mode 100644 index 0000000..521bad3 --- /dev/null +++ b/pkg/sideload/reload.go @@ -0,0 +1,18 @@ +package sideload + +import ( + "code.smartsheep.studio/goatworks/roadsign/pkg/navi" + "github.com/gofiber/fiber/v2" + "github.com/spf13/viper" +) + +func doReload(c *fiber.Ctx) error { + if err := navi.ReadInConfig(viper.GetString("paths.configs")); err != nil { + return fiber.NewError(fiber.StatusInternalServerError, err.Error()) + } + if c.QueryBool("warden", false) { + navi.InitializeWarden(navi.R.Regions) + } + + return c.SendStatus(fiber.StatusOK) +} diff --git a/pkg/sideload/server.go b/pkg/sideload/server.go index 1ecbc95..43c04a7 100644 --- a/pkg/sideload/server.go +++ b/pkg/sideload/server.go @@ -52,6 +52,8 @@ func InitSideload() *fiber.App { cgi.Get("/regions/cfg/:id", getRegionConfig) cgi.Get("/applications", getApplications) cgi.Get("/applications/logs/:id", getApplicationLogs) + + cgi.Post("/reload", doReload) } webhooks := app.Group("/webhooks").Name("WebHooks")