Use watcher and get rid of RefreshState()
This change uses the database watcher to watch for changes to the github entities, credentials and controller info. Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
This commit is contained in:
parent
38127af747
commit
daaca0bd8f
23 changed files with 452 additions and 462 deletions
158
runner/runner.go
158
runner/runner.go
|
|
@ -100,23 +100,16 @@ func (p *poolManagerCtrl) CreateRepoPoolManager(ctx context.Context, repo params
|
|||
p.mux.Lock()
|
||||
defer p.mux.Unlock()
|
||||
|
||||
creds, err := p.store.GetGithubCredentials(ctx, repo.CredentialsID, true)
|
||||
entity, err := repo.GetEntity()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "fetching credentials")
|
||||
return nil, errors.Wrap(err, "getting entity")
|
||||
}
|
||||
|
||||
cfgInternal, err := p.getInternalConfig(ctx, creds, repo.GetBalancerType())
|
||||
instanceTokenGetter, err := auth.NewInstanceTokenGetter(p.config.JWTAuth.Secret)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "fetching internal config")
|
||||
return nil, errors.Wrap(err, "creating instance token getter")
|
||||
}
|
||||
entity := params.GithubEntity{
|
||||
Owner: repo.Owner,
|
||||
Name: repo.Name,
|
||||
ID: repo.ID,
|
||||
WebhookSecret: repo.WebhookSecret,
|
||||
EntityType: params.GithubEntityTypeRepository,
|
||||
}
|
||||
poolManager, err := pool.NewEntityPoolManager(ctx, entity, cfgInternal, providers, store)
|
||||
poolManager, err := pool.NewEntityPoolManager(ctx, entity, instanceTokenGetter, providers, store)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "creating repo pool manager")
|
||||
}
|
||||
|
|
@ -124,36 +117,6 @@ func (p *poolManagerCtrl) CreateRepoPoolManager(ctx context.Context, repo params
|
|||
return poolManager, nil
|
||||
}
|
||||
|
||||
func (p *poolManagerCtrl) UpdateRepoPoolManager(ctx context.Context, repo params.Repository) (common.PoolManager, error) {
|
||||
p.mux.Lock()
|
||||
defer p.mux.Unlock()
|
||||
|
||||
poolMgr, ok := p.repositories[repo.ID]
|
||||
if !ok {
|
||||
return nil, errors.Wrapf(runnerErrors.ErrNotFound, "repository %s/%s pool manager not loaded", repo.Owner, repo.Name)
|
||||
}
|
||||
|
||||
creds, err := p.store.GetGithubCredentials(ctx, repo.CredentialsID, true)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "fetching credentials")
|
||||
}
|
||||
|
||||
internalCfg, err := p.getInternalConfig(ctx, creds, repo.GetBalancerType())
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "fetching internal config")
|
||||
}
|
||||
|
||||
newState := params.UpdatePoolStateParams{
|
||||
WebhookSecret: repo.WebhookSecret,
|
||||
InternalConfig: &internalCfg,
|
||||
}
|
||||
|
||||
if err := poolMgr.RefreshState(newState); err != nil {
|
||||
return nil, errors.Wrap(err, "updating repo pool manager")
|
||||
}
|
||||
return poolMgr, nil
|
||||
}
|
||||
|
||||
func (p *poolManagerCtrl) GetRepoPoolManager(repo params.Repository) (common.PoolManager, error) {
|
||||
if repoPoolMgr, ok := p.repositories[repo.ID]; ok {
|
||||
return repoPoolMgr, nil
|
||||
|
|
@ -183,21 +146,16 @@ func (p *poolManagerCtrl) CreateOrgPoolManager(ctx context.Context, org params.O
|
|||
p.mux.Lock()
|
||||
defer p.mux.Unlock()
|
||||
|
||||
creds, err := p.store.GetGithubCredentials(ctx, org.CredentialsID, true)
|
||||
entity, err := org.GetEntity()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "fetching credentials")
|
||||
return nil, errors.Wrap(err, "getting entity")
|
||||
}
|
||||
cfgInternal, err := p.getInternalConfig(ctx, creds, org.GetBalancerType())
|
||||
|
||||
instanceTokenGetter, err := auth.NewInstanceTokenGetter(p.config.JWTAuth.Secret)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "fetching internal config")
|
||||
return nil, errors.Wrap(err, "creating instance token getter")
|
||||
}
|
||||
entity := params.GithubEntity{
|
||||
Owner: org.Name,
|
||||
ID: org.ID,
|
||||
WebhookSecret: org.WebhookSecret,
|
||||
EntityType: params.GithubEntityTypeOrganization,
|
||||
}
|
||||
poolManager, err := pool.NewEntityPoolManager(ctx, entity, cfgInternal, providers, store)
|
||||
poolManager, err := pool.NewEntityPoolManager(ctx, entity, instanceTokenGetter, providers, store)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "creating org pool manager")
|
||||
}
|
||||
|
|
@ -205,35 +163,6 @@ func (p *poolManagerCtrl) CreateOrgPoolManager(ctx context.Context, org params.O
|
|||
return poolManager, nil
|
||||
}
|
||||
|
||||
func (p *poolManagerCtrl) UpdateOrgPoolManager(ctx context.Context, org params.Organization) (common.PoolManager, error) {
|
||||
p.mux.Lock()
|
||||
defer p.mux.Unlock()
|
||||
|
||||
poolMgr, ok := p.organizations[org.ID]
|
||||
if !ok {
|
||||
return nil, errors.Wrapf(runnerErrors.ErrNotFound, "org %s pool manager not loaded", org.Name)
|
||||
}
|
||||
|
||||
creds, err := p.store.GetGithubCredentials(ctx, org.CredentialsID, true)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "fetching credentials")
|
||||
}
|
||||
internalCfg, err := p.getInternalConfig(ctx, creds, org.GetBalancerType())
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "fetching internal config")
|
||||
}
|
||||
|
||||
newState := params.UpdatePoolStateParams{
|
||||
WebhookSecret: org.WebhookSecret,
|
||||
InternalConfig: &internalCfg,
|
||||
}
|
||||
|
||||
if err := poolMgr.RefreshState(newState); err != nil {
|
||||
return nil, errors.Wrap(err, "updating repo pool manager")
|
||||
}
|
||||
return poolMgr, nil
|
||||
}
|
||||
|
||||
func (p *poolManagerCtrl) GetOrgPoolManager(org params.Organization) (common.PoolManager, error) {
|
||||
if orgPoolMgr, ok := p.organizations[org.ID]; ok {
|
||||
return orgPoolMgr, nil
|
||||
|
|
@ -263,22 +192,16 @@ func (p *poolManagerCtrl) CreateEnterprisePoolManager(ctx context.Context, enter
|
|||
p.mux.Lock()
|
||||
defer p.mux.Unlock()
|
||||
|
||||
creds, err := p.store.GetGithubCredentials(ctx, enterprise.CredentialsID, true)
|
||||
entity, err := enterprise.GetEntity()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "fetching credentials")
|
||||
}
|
||||
cfgInternal, err := p.getInternalConfig(ctx, creds, enterprise.GetBalancerType())
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "fetching internal config")
|
||||
return nil, errors.Wrap(err, "getting entity")
|
||||
}
|
||||
|
||||
entity := params.GithubEntity{
|
||||
Owner: enterprise.Name,
|
||||
ID: enterprise.ID,
|
||||
WebhookSecret: enterprise.WebhookSecret,
|
||||
EntityType: params.GithubEntityTypeEnterprise,
|
||||
instanceTokenGetter, err := auth.NewInstanceTokenGetter(p.config.JWTAuth.Secret)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "creating instance token getter")
|
||||
}
|
||||
poolManager, err := pool.NewEntityPoolManager(ctx, entity, cfgInternal, providers, store)
|
||||
poolManager, err := pool.NewEntityPoolManager(ctx, entity, instanceTokenGetter, providers, store)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "creating enterprise pool manager")
|
||||
}
|
||||
|
|
@ -286,35 +209,6 @@ func (p *poolManagerCtrl) CreateEnterprisePoolManager(ctx context.Context, enter
|
|||
return poolManager, nil
|
||||
}
|
||||
|
||||
func (p *poolManagerCtrl) UpdateEnterprisePoolManager(ctx context.Context, enterprise params.Enterprise) (common.PoolManager, error) {
|
||||
p.mux.Lock()
|
||||
defer p.mux.Unlock()
|
||||
|
||||
poolMgr, ok := p.enterprises[enterprise.ID]
|
||||
if !ok {
|
||||
return nil, errors.Wrapf(runnerErrors.ErrNotFound, "enterprise %s pool manager not loaded", enterprise.Name)
|
||||
}
|
||||
|
||||
creds, err := p.store.GetGithubCredentials(ctx, enterprise.CredentialsID, true)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "fetching credentials")
|
||||
}
|
||||
internalCfg, err := p.getInternalConfig(ctx, creds, enterprise.GetBalancerType())
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "fetching internal config")
|
||||
}
|
||||
|
||||
newState := params.UpdatePoolStateParams{
|
||||
WebhookSecret: enterprise.WebhookSecret,
|
||||
InternalConfig: &internalCfg,
|
||||
}
|
||||
|
||||
if err := poolMgr.RefreshState(newState); err != nil {
|
||||
return nil, errors.Wrap(err, "updating repo pool manager")
|
||||
}
|
||||
return poolMgr, nil
|
||||
}
|
||||
|
||||
func (p *poolManagerCtrl) GetEnterprisePoolManager(enterprise params.Enterprise) (common.PoolManager, error) {
|
||||
if enterprisePoolMgr, ok := p.enterprises[enterprise.ID]; ok {
|
||||
return enterprisePoolMgr, nil
|
||||
|
|
@ -340,24 +234,6 @@ func (p *poolManagerCtrl) GetEnterprisePoolManagers() (map[string]common.PoolMan
|
|||
return p.enterprises, nil
|
||||
}
|
||||
|
||||
func (p *poolManagerCtrl) getInternalConfig(_ context.Context, creds params.GithubCredentials, poolBalancerType params.PoolBalancerType) (params.Internal, error) {
|
||||
controllerInfo, err := p.store.ControllerInfo()
|
||||
if err != nil {
|
||||
return params.Internal{}, errors.Wrap(err, "fetching controller info")
|
||||
}
|
||||
|
||||
return params.Internal{
|
||||
ControllerID: controllerInfo.ControllerID.String(),
|
||||
InstanceCallbackURL: controllerInfo.CallbackURL,
|
||||
InstanceMetadataURL: controllerInfo.MetadataURL,
|
||||
BaseWebhookURL: controllerInfo.WebhookURL,
|
||||
ControllerWebhookURL: controllerInfo.ControllerWebhookURL,
|
||||
JWTSecret: p.config.JWTAuth.Secret,
|
||||
PoolBalancerType: poolBalancerType,
|
||||
GithubCredentialsDetails: creds,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type Runner struct {
|
||||
mux sync.Mutex
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue