From 7f9db2e4139ef95dfa2d6724dbb3849bc2418091 Mon Sep 17 00:00:00 2001 From: Gabriel Adrian Samfira Date: Fri, 14 Jun 2024 20:24:45 +0000 Subject: [PATCH] Send notify on update controller Signed-off-by: Gabriel Adrian Samfira --- database/common/watcher.go | 2 +- database/sql/controller.go | 70 ++++++++++++++++++++++---------------- database/sql/pools.go | 11 +++--- 3 files changed, 49 insertions(+), 34 deletions(-) diff --git a/database/common/watcher.go b/database/common/watcher.go index 4903e4ab..69bf9788 100644 --- a/database/common/watcher.go +++ b/database/common/watcher.go @@ -15,7 +15,7 @@ const ( InstanceEntityType DatabaseEntityType = "instance" JobEntityType DatabaseEntityType = "job" ControllerEntityType DatabaseEntityType = "controller" - GithubCredentialsEntityType DatabaseEntityType = "github_credentials" + GithubCredentialsEntityType DatabaseEntityType = "github_credentials" // #nosec G101 GithubEndpointEntityType DatabaseEntityType = "github_endpoint" ) diff --git a/database/sql/controller.go b/database/sql/controller.go index 8d6c3477..c5b900f3 100644 --- a/database/sql/controller.go +++ b/database/sql/controller.go @@ -22,6 +22,7 @@ import ( "gorm.io/gorm" runnerErrors "github.com/cloudbase/garm-provider-common/errors" + "github.com/cloudbase/garm/database/common" "github.com/cloudbase/garm/params" ) @@ -82,38 +83,49 @@ func (s *sqlDatabase) InitController() (params.ControllerInfo, error) { }, nil } -func (s *sqlDatabase) UpdateController(info params.UpdateControllerParams) (params.ControllerInfo, error) { - var dbInfo ControllerInfo - q := s.conn.Model(&ControllerInfo{}).First(&dbInfo) - if q.Error != nil { - if errors.Is(q.Error, gorm.ErrRecordNotFound) { - return params.ControllerInfo{}, errors.Wrap(runnerErrors.ErrNotFound, "fetching controller info") +func (s *sqlDatabase) UpdateController(info params.UpdateControllerParams) (paramInfo params.ControllerInfo, err error) { + defer func() { + if err == nil { + s.sendNotify(common.ControllerEntityType, common.UpdateOperation, paramInfo) } - return params.ControllerInfo{}, errors.Wrap(q.Error, "fetching controller info") + }() + var dbInfo ControllerInfo + err = s.conn.Transaction(func(tx *gorm.DB) error { + q := tx.Model(&ControllerInfo{}).First(&dbInfo) + if q.Error != nil { + if errors.Is(q.Error, gorm.ErrRecordNotFound) { + return errors.Wrap(runnerErrors.ErrNotFound, "fetching controller info") + } + return errors.Wrap(q.Error, "fetching controller info") + } + + if err := info.Validate(); err != nil { + return errors.Wrap(err, "validating controller info") + } + + if info.MetadataURL != nil { + dbInfo.MetadataURL = *info.MetadataURL + } + + if info.CallbackURL != nil { + dbInfo.CallbackURL = *info.CallbackURL + } + + if info.WebhookURL != nil { + dbInfo.WebhookBaseURL = *info.WebhookURL + } + + q = tx.Save(&dbInfo) + if q.Error != nil { + return errors.Wrap(q.Error, "saving controller info") + } + return nil + }) + if err != nil { + return params.ControllerInfo{}, errors.Wrap(err, "updating controller info") } - if err := info.Validate(); err != nil { - return params.ControllerInfo{}, errors.Wrap(err, "validating controller info") - } - - if info.MetadataURL != nil { - dbInfo.MetadataURL = *info.MetadataURL - } - - if info.CallbackURL != nil { - dbInfo.CallbackURL = *info.CallbackURL - } - - if info.WebhookURL != nil { - dbInfo.WebhookBaseURL = *info.WebhookURL - } - - q = s.conn.Save(&dbInfo) - if q.Error != nil { - return params.ControllerInfo{}, errors.Wrap(q.Error, "saving controller info") - } - - paramInfo, err := dbControllerToCommonController(dbInfo) + paramInfo, err = dbControllerToCommonController(dbInfo) if err != nil { return params.ControllerInfo{}, errors.Wrap(err, "converting controller info") } diff --git a/database/sql/pools.go b/database/sql/pools.go index 4d33343d..01d1afc4 100644 --- a/database/sql/pools.go +++ b/database/sql/pools.go @@ -379,9 +379,13 @@ func (s *sqlDatabase) DeleteEntityPool(_ context.Context, entity params.GithubEn return nil } -func (s *sqlDatabase) UpdateEntityPool(_ context.Context, entity params.GithubEntity, poolID string, param params.UpdatePoolParams) (params.Pool, error) { - var updatedPool params.Pool - err := s.conn.Transaction(func(tx *gorm.DB) error { +func (s *sqlDatabase) UpdateEntityPool(_ context.Context, entity params.GithubEntity, poolID string, param params.UpdatePoolParams) (updatedPool params.Pool, err error) { + defer func() { + if err == nil { + s.sendNotify(common.PoolEntityType, common.UpdateOperation, updatedPool) + } + }() + err = s.conn.Transaction(func(tx *gorm.DB) error { pool, err := s.getEntityPool(tx, entity.EntityType, entity.ID, poolID, "Tags", "Instances") if err != nil { return errors.Wrap(err, "fetching pool") @@ -396,7 +400,6 @@ func (s *sqlDatabase) UpdateEntityPool(_ context.Context, entity params.GithubEn if err != nil { return params.Pool{}, err } - s.sendNotify(common.PoolEntityType, common.UpdateOperation, updatedPool) return updatedPool, nil }