feat: [CDE-202]: infra provider resource cache (#2637)

* feat: [CDE-202]: infra provider resource cache
* feat: [CDE-202]: infra provider resource cache
* feat: [CDE-202]: infra provider resource cache
* feat: [CDE-202]: infra provider resource cache
* feat: [CDE-202]: infra provider resource cache
* feat: [CDE-202]: infra provider resource cache
* feat: [CDE-202]: infra provider resource cache
* feat: [CDE-202]: infra provider resource cache
* feat: [CDE-202]: infra provider resource cache
* feat: [CDE-202]: infra provider resource cache
CODE-2402
Ansuman Satapathy 2024-09-03 09:59:29 +00:00 committed by Harness
parent 636f6a9847
commit 5cfd41ae1a
17 changed files with 168 additions and 109 deletions

View File

@ -149,20 +149,19 @@ func (c *Controller) Create(
DisplayName: principal.DisplayName,
ID: &principalID}
gitspaceConfig = &types.GitspaceConfig{
Identifier: identifier,
Name: in.Name,
IDE: in.IDE,
InfraProviderResourceID: infraProviderResource.ID,
InfraProviderResourceIdentifier: infraProviderResource.Identifier,
State: enum.GitspaceStateUninitialized,
SpaceID: space.ID,
SpacePath: space.Path,
Created: now,
Updated: now,
SSHTokenIdentifier: in.SSHTokenIdentifier,
CodeRepo: codeRepo,
GitspaceUser: user,
Identifier: identifier,
Name: in.Name,
IDE: in.IDE,
State: enum.GitspaceStateUninitialized,
SpaceID: space.ID,
SpacePath: space.Path,
Created: now,
Updated: now,
SSHTokenIdentifier: in.SSHTokenIdentifier,
CodeRepo: codeRepo,
GitspaceUser: user,
}
gitspaceConfig.InfraProviderResource = *infraProviderResource
err = c.gitspaceConfigStore.Create(ctx, gitspaceConfig)
if err != nil {
return fmt.Errorf("failed to create gitspace config for : %q %w", identifier, err)
@ -209,7 +208,7 @@ func (c *Controller) autoCreateDefaultResource(ctx context.Context, parentSpace
Updated: now,
}
defaultResource := types.InfraProviderResource{
Identifier: defaultResourceIdentifier,
UID: defaultResourceIdentifier,
Name: "Standard Docker Resource",
InfraProviderConfigIdentifier: defaultDockerConfig.Identifier,
InfraProviderType: enum.InfraProviderTypeDocker,

View File

@ -40,7 +40,7 @@ func (c *Controller) Find(
return nil, fmt.Errorf("failed to authorize: %w", err)
}
res, err := c.gitspaceSvc.Find(ctx, space.ID, space.Path, identifier)
res, err := c.gitspaceSvc.Find(ctx, space.ID, identifier)
if err != nil {
return nil, fmt.Errorf("failed to find gitspace: %w", err)
}

View File

@ -112,7 +112,7 @@ func mapToResourceEntity(in []ResourceInput, parentSpace types.Space, now int64)
var resources []types.InfraProviderResource
for _, res := range in {
infraProviderResource := types.InfraProviderResource{
Identifier: res.Identifier,
UID: res.Identifier,
InfraProviderType: res.InfraProviderType,
Name: res.Name,
SpaceID: parentSpace.ID,

View File

@ -86,12 +86,6 @@ func (o orchestrator) TriggerStartGitspace(
ctx context.Context,
gitspaceConfig types.GitspaceConfig,
) error {
infraProviderResource, err := o.infraProviderResourceStore.Find(ctx, gitspaceConfig.InfraProviderResourceID)
if err != nil {
return fmt.Errorf("cannot get the infraprovider resource for ID %d: %w",
gitspaceConfig.InfraProviderResourceID, err)
}
requiredGitspacePorts, err := o.getPortsRequiredForGitspace(gitspaceConfig)
if err != nil {
return fmt.Errorf("cannot get the ports required for gitspace during start: %w", err)
@ -99,12 +93,13 @@ func (o orchestrator) TriggerStartGitspace(
o.emitGitspaceEvent(ctx, gitspaceConfig, enum.GitspaceEventTypeInfraProvisioningStart)
err = o.infraProvisioner.TriggerProvision(ctx, *infraProviderResource, gitspaceConfig, requiredGitspacePorts)
err = o.infraProvisioner.TriggerProvision(ctx, gitspaceConfig.InfraProviderResource,
gitspaceConfig, requiredGitspacePorts)
if err != nil {
o.emitGitspaceEvent(ctx, gitspaceConfig, enum.GitspaceEventTypeInfraProvisioningFailed)
return fmt.Errorf(
"cannot trigger provision infrastructure for ID %d: %w", gitspaceConfig.InfraProviderResourceID, err)
"cannot trigger provision infrastructure for ID %s: %w", gitspaceConfig.InfraProviderResource.UID, err)
}
return nil
@ -114,13 +109,7 @@ func (o orchestrator) TriggerStopGitspace(
ctx context.Context,
gitspaceConfig types.GitspaceConfig,
) error {
infraProviderResource, err := o.infraProviderResourceStore.Find(ctx, gitspaceConfig.InfraProviderResourceID)
if err != nil {
return fmt.Errorf(
"cannot get the infraProviderResource with ID %d: %w", gitspaceConfig.InfraProviderResourceID, err)
}
infra, err := o.getProvisionedInfra(ctx, infraProviderResource, gitspaceConfig)
infra, err := o.getProvisionedInfra(ctx, &gitspaceConfig.InfraProviderResource, gitspaceConfig)
if err != nil {
return fmt.Errorf(
"unable to find provisioned infra while triggering stop for gitspace instance %s: %w",
@ -134,12 +123,12 @@ func (o orchestrator) TriggerStopGitspace(
o.emitGitspaceEvent(ctx, gitspaceConfig, enum.GitspaceEventTypeInfraStopStart)
err = o.infraProvisioner.TriggerStop(ctx, *infraProviderResource, *infra)
err = o.infraProvisioner.TriggerStop(ctx, gitspaceConfig.InfraProviderResource, *infra)
if err != nil {
o.emitGitspaceEvent(ctx, gitspaceConfig, enum.GitspaceEventTypeInfraStopFailed)
return fmt.Errorf(
"cannot trigger stop infrastructure with ID %d: %w", gitspaceConfig.InfraProviderResourceID, err)
"cannot trigger stop infrastructure with ID %s: %w", gitspaceConfig.InfraProviderResource.UID, err)
}
return nil
@ -213,13 +202,7 @@ func (o orchestrator) TriggerDeleteGitspace(
ctx context.Context,
gitspaceConfig types.GitspaceConfig,
) error {
infraProviderResource, err := o.infraProviderResourceStore.Find(ctx, gitspaceConfig.InfraProviderResourceID)
if err != nil {
return fmt.Errorf(
"cannot get the infraProviderResource with ID %d: %w", gitspaceConfig.InfraProviderResourceID, err)
}
infra, err := o.getProvisionedInfra(ctx, infraProviderResource, gitspaceConfig)
infra, err := o.getProvisionedInfra(ctx, &gitspaceConfig.InfraProviderResource, gitspaceConfig)
if err != nil {
return fmt.Errorf(
"unable to find provisioned infra while triggering delete for gitspace instance %s: %w",
@ -233,12 +216,12 @@ func (o orchestrator) TriggerDeleteGitspace(
o.emitGitspaceEvent(ctx, gitspaceConfig, enum.GitspaceEventTypeInfraDeprovisioningStart)
err = o.infraProvisioner.TriggerDeprovision(ctx, *infraProviderResource, gitspaceConfig, *infra)
err = o.infraProvisioner.TriggerDeprovision(ctx, gitspaceConfig.InfraProviderResource, gitspaceConfig, *infra)
if err != nil {
o.emitGitspaceEvent(ctx, gitspaceConfig, enum.GitspaceEventTypeInfraDeprovisioningFailed)
return fmt.Errorf(
"cannot trigger deprovision infrastructure with ID %d: %w", gitspaceConfig.InfraProviderResourceID, err)
"cannot trigger deprovision infrastructure with ID %s: %w", gitspaceConfig.InfraProviderResource.UID, err)
}
return nil
@ -319,7 +302,7 @@ func (o orchestrator) ResumeStartGitspace(
o.emitGitspaceEvent(ctx, gitspaceConfig, enum.GitspaceEventTypeInfraProvisioningFailed)
return *gitspaceInstance, fmt.Errorf(
"cannot provision infrastructure for ID %d: %w", gitspaceConfig.InfraProviderResourceID, err)
"cannot provision infrastructure for ID %s: %w", gitspaceConfig.InfraProviderResource.UID, err)
}
if provisionedInfra.Status != enum.InfraStatusProvisioned {
@ -451,7 +434,7 @@ func (o orchestrator) ResumeStopGitspace(
o.emitGitspaceEvent(ctx, gitspaceConfig, enum.GitspaceEventTypeInfraStopFailed)
return instanceState, fmt.Errorf(
"cannot stop provisioned infrastructure with ID %d: %w", gitspaceConfig.InfraProviderResourceID, err)
"cannot stop provisioned infrastructure with ID %s: %w", gitspaceConfig.InfraProviderResource.UID, err)
}
if stoppedInfra.Status != enum.InfraStatusDestroyed &&
@ -485,7 +468,7 @@ func (o orchestrator) ResumeDeleteGitspace(
if err != nil {
o.emitGitspaceEvent(ctx, gitspaceConfig, enum.GitspaceEventTypeInfraDeprovisioningFailed)
return instanceState, fmt.Errorf(
"cannot deprovision infrastructure with ID %d: %w", gitspaceConfig.InfraProviderResourceID, err)
"cannot deprovision infrastructure with ID %s: %w", gitspaceConfig.InfraProviderResource.UID, err)
}
if deprovisionedInfra.Status != enum.InfraStatusDestroyed {
@ -542,15 +525,6 @@ func (o orchestrator) getProvisionedInfra(
infraProviderResource *types.InfraProviderResource,
gitspaceConfig types.GitspaceConfig,
) (*types.Infrastructure, error) {
if infraProviderResource == nil {
var err error
infraProviderResource, err = o.infraProviderResourceStore.Find(ctx, gitspaceConfig.InfraProviderResourceID)
if err != nil {
return nil, fmt.Errorf(
"cannot get the infraProviderResource with ID %d: %w", gitspaceConfig.InfraProviderResourceID, err)
}
}
requiredGitspacePorts, err := o.getPortsRequiredForGitspace(gitspaceConfig)
if err != nil {
return nil, fmt.Errorf("cannot get the ports required for gitspace: %w", err)
@ -566,7 +540,7 @@ func (o orchestrator) getProvisionedInfra(
}
if infra.Storage == "" {
log.Warn().Msgf("couldn't find the storage for resource ID %d", gitspaceConfig.InfraProviderResourceID)
log.Warn().Msgf("couldn't find the storage for resource ID %s", gitspaceConfig.InfraProviderResource.UID)
}
return infra, nil

View File

@ -28,7 +28,6 @@ import (
func (c *Service) Find(
ctx context.Context,
spaceID int64,
spacePath string,
identifier string,
) (*types.GitspaceConfig, error) {
var gitspaceConfigResult *types.GitspaceConfig
@ -37,12 +36,6 @@ func (c *Service) Find(
if err != nil {
return fmt.Errorf("failed to find gitspace config: %w", err)
}
infraProviderResource, err := c.infraProviderSvc.FindResource(ctx, gitspaceConfig.InfraProviderResourceID)
if err != nil {
return fmt.Errorf("failed to find infra provider resource for gitspace config: %w", err)
}
gitspaceConfig.SpacePath = spacePath
gitspaceConfig.InfraProviderResourceIdentifier = infraProviderResource.Identifier
instance, err := c.gitspaceInstanceStore.FindLatestByGitspaceConfigID(ctx, gitspaceConfig.ID, gitspaceConfig.SpaceID)
if err != nil && !errors.Is(err, store.ErrResourceNotFound) {
return err

View File

@ -35,7 +35,7 @@ func (s *Service) handleGitspaceInfraEvent(
payload := event.Payload
config, fetchErr := s.getConfig(
ctx, payload.Infra.SpaceID, payload.Infra.SpacePath, payload.Infra.GitspaceConfigIdentifier)
ctx, payload.Infra.SpaceID, payload.Infra.GitspaceConfigIdentifier)
if fetchErr != nil {
return fetchErr
}
@ -96,10 +96,9 @@ func (s *Service) handleGitspaceInfraEvent(
func (s *Service) getConfig(
ctx context.Context,
spaceID int64,
spacePath string,
identifier string,
) (*types.GitspaceConfig, error) {
config, err := s.gitspaceSvc.Find(ctx, spaceID, spacePath, identifier)
config, err := s.gitspaceSvc.Find(ctx, spaceID, identifier)
if err != nil {
return nil, fmt.Errorf(
"failed to find gitspace config during infra event handling, identifier %s: %w", identifier, err)

View File

@ -86,7 +86,7 @@ func (c *Service) createResources(ctx context.Context, resources []types.InfraPr
}
err = c.infraProviderResourceStore.Create(ctx, resource)
if err != nil {
return fmt.Errorf("failed to create infraprovider resource for : %q %w", resource.Identifier, err)
return fmt.Errorf("failed to create infraprovider resource for : %q %w", resource.UID, err)
}
}
return nil

View File

@ -59,7 +59,7 @@ func (c *Service) UpdateResource(ctx context.Context, resource types.InfraProvid
if err != nil {
return err
}
infraProviderResource, err := c.FindResourceByIdentifier(ctx, space.ID, resource.Identifier)
infraProviderResource, err := c.FindResourceByIdentifier(ctx, space.ID, resource.UID)
if err != nil {
return err
}

View File

@ -28,4 +28,7 @@ type (
// RepoGitInfoCache caches repository IDs to values GitUID.
RepoGitInfoCache cache.Cache[int64, *types.RepositoryGitInfo]
// InfraProviderResourceCache caches infraprovider resourceIDs to infraprovider resource.
InfraProviderResourceCache cache.ExtendedCache[int64, *types.InfraProviderResource]
)

View File

@ -29,6 +29,7 @@ var WireSet = wire.NewSet(
ProvidePrincipalInfoCache,
ProvidePathCache,
ProvideRepoGitInfoCache,
ProvideInfraProviderResourceCache,
)
// ProvidePrincipalInfoCache provides a cache for storing types.PrincipalInfo objects.
@ -48,3 +49,8 @@ func ProvidePathCache(
func ProvideRepoGitInfoCache(getter store.RepoGitInfoView) store.RepoGitInfoCache {
return cache.New[int64, *types.RepositoryGitInfo](getter, 15*time.Minute)
}
// ProvideInfraProviderResourceCache provides a cache for storing types.InfraProviderResource objects.
func ProvideInfraProviderResourceCache(getter store.InfraProviderResourceView) store.InfraProviderResourceCache {
return cache.NewExtended[int64, *types.InfraProviderResource](getter, 5*time.Minute)
}

View File

@ -134,6 +134,13 @@ type (
FindMany(ctx context.Context, ids []int64) ([]*types.PrincipalInfo, error)
}
// InfraProviderResourceView defines helper utility for fetching types.InfraProviderResource objects.
// It uses the same underlying data storage as InfraProviderResourceStore.
InfraProviderResourceView interface {
Find(ctx context.Context, id int64) (*types.InfraProviderResource, error)
FindMany(ctx context.Context, ids []int64) ([]*types.InfraProviderResource, error)
}
// SpacePathStore defines the path data storage for spaces.
SpacePathStore interface {
// InsertSegment inserts a space path segment to the table.

View File

@ -16,6 +16,7 @@ package database
import (
"context"
"fmt"
"strings"
"github.com/harness/gitness/app/store"
@ -84,16 +85,22 @@ type gitspaceConfig struct {
var _ store.GitspaceConfigStore = (*gitspaceConfigStore)(nil)
// NewGitspaceConfigStore returns a new GitspaceConfigStore.
func NewGitspaceConfigStore(db *sqlx.DB, pCache store.PrincipalInfoCache) store.GitspaceConfigStore {
func NewGitspaceConfigStore(
db *sqlx.DB,
pCache store.PrincipalInfoCache,
rCache store.InfraProviderResourceCache,
) store.GitspaceConfigStore {
return &gitspaceConfigStore{
db: db,
pCache: pCache,
rCache: rCache,
}
}
type gitspaceConfigStore struct {
db *sqlx.DB
pCache store.PrincipalInfoCache
rCache store.InfraProviderResourceCache
}
func (s gitspaceConfigStore) Count(ctx context.Context, filter *types.GitspaceFilter) (int64, error) {
@ -174,7 +181,7 @@ func (s gitspaceConfigStore) Create(ctx context.Context, gitspaceConfig *types.G
gitspaceConfig.Identifier,
gitspaceConfig.Name,
gitspaceConfig.IDE,
gitspaceConfig.InfraProviderResourceID,
gitspaceConfig.InfraProviderResource.ID,
gitspaceConfig.CodeRepo.AuthType,
gitspaceConfig.CodeRepo.AuthID,
gitspaceConfig.CodeRepo.Type,
@ -233,7 +240,7 @@ func mapToInternalGitspaceConfig(config *types.GitspaceConfig) *gitspaceConfig {
Identifier: config.Identifier,
Name: config.Name,
IDE: config.IDE,
InfraProviderResourceID: config.InfraProviderResourceID,
InfraProviderResourceID: config.InfraProviderResource.ID,
CodeAuthType: config.CodeRepo.AuthType,
CodeAuthID: config.CodeRepo.AuthID,
CodeRepoIsPrivate: config.CodeRepo.IsPrivate,
@ -313,16 +320,15 @@ func (s *gitspaceConfigStore) mapToGitspaceConfig(
AuthID: in.CodeAuthID,
}
var res = &types.GitspaceConfig{
ID: in.ID,
Identifier: in.Identifier,
Name: in.Name,
InfraProviderResourceID: in.InfraProviderResourceID,
IDE: in.IDE,
SpaceID: in.SpaceID,
Created: in.Created,
Updated: in.Updated,
SSHTokenIdentifier: in.SSHTokenIdentifier,
CodeRepo: codeRepo,
ID: in.ID,
Identifier: in.Identifier,
Name: in.Name,
IDE: in.IDE,
SpaceID: in.SpaceID,
Created: in.Created,
Updated: in.Updated,
SSHTokenIdentifier: in.SSHTokenIdentifier,
CodeRepo: codeRepo,
GitspaceUser: types.GitspaceUser{
ID: in.CreatedBy.Ptr(),
Identifier: in.UserUID},
@ -334,6 +340,12 @@ func (s *gitspaceConfigStore) mapToGitspaceConfig(
res.GitspaceUser.Email = author.Email
}
}
if resource, err := s.rCache.Get(ctx, in.InfraProviderResourceID); err == nil {
res.InfraProviderResource = *resource
} else {
return nil, fmt.Errorf("couldn't set resource to the config in DB: %s", in.Identifier)
}
return res, nil
}

View File

@ -25,6 +25,7 @@ import (
"github.com/harness/gitness/types"
"github.com/harness/gitness/types/enum"
"github.com/Masterminds/squirrel"
"github.com/guregu/null"
"github.com/jmoiron/sqlx"
"github.com/pkg/errors"
@ -103,7 +104,7 @@ func (s infraProviderResourceStore) List(ctx context.Context, infraProviderConfi
if err := db.SelectContext(ctx, dst, sql, args...); err != nil {
return nil, database.ProcessSQLErrorf(ctx, err, "Failed to list infraprovider resources")
}
return s.mapToInfraProviderResources(ctx, *dst)
return mapToInfraProviderResources(ctx, *dst)
}
func (s infraProviderResourceStore) Find(ctx context.Context, id int64) (*types.InfraProviderResource, error) {
@ -121,7 +122,7 @@ func (s infraProviderResourceStore) Find(ctx context.Context, id int64) (*types.
if err := db.GetContext(ctx, dst, sql, args...); err != nil {
return nil, database.ProcessSQLErrorf(ctx, err, "Failed to find infraprovider resource %d", id)
}
return s.mapToInfraProviderResource(ctx, dst)
return mapToInfraProviderResource(ctx, dst)
}
func (s infraProviderResourceStore) FindByIdentifier(
@ -143,7 +144,7 @@ func (s infraProviderResourceStore) FindByIdentifier(
if err := db.GetContext(ctx, dst, sql, args...); err != nil {
return nil, database.ProcessSQLErrorf(ctx, err, "Failed to find infraprovider resource %s", identifier)
}
return s.mapToInfraProviderResource(ctx, dst)
return mapToInfraProviderResource(ctx, dst)
}
func (s infraProviderResourceStore) Create(
@ -183,7 +184,7 @@ func (s infraProviderResourceStore) Create(
db := dbtx.GetAccessor(ctx, s.db)
if err = db.QueryRowContext(ctx, sql, args...).Scan(&infraProviderResource.ID); err != nil {
return database.ProcessSQLErrorf(
ctx, err, "infra provider resource create failed %s", infraProviderResource.Identifier)
ctx, err, "infra provider resource create failed %s", infraProviderResource.UID)
}
return nil
}
@ -195,7 +196,7 @@ func (s infraProviderResourceStore) Update(
dbinfraProviderResource, err := s.mapToInternalInfraProviderResource(ctx, infraProviderResource)
if err != nil {
return fmt.Errorf(
"failed to map to DB Obj for infraprovider resource %s", infraProviderResource.Identifier)
"failed to map to DB Obj for infraprovider resource %s", infraProviderResource.UID)
}
stmt := database.Builder.
Update(infraProviderResourceTable).
@ -214,7 +215,7 @@ func (s infraProviderResourceStore) Update(
db := dbtx.GetAccessor(ctx, s.db)
if _, err := db.ExecContext(ctx, sql, args...); err != nil {
return database.ProcessSQLErrorf(
ctx, err, "Failed to update infraprovider resource %s", infraProviderResource.Identifier)
ctx, err, "Failed to update infraprovider resource %s", infraProviderResource.UID)
}
return nil
}
@ -236,7 +237,7 @@ func (s infraProviderResourceStore) DeleteByIdentifier(ctx context.Context, spac
return nil
}
func (s infraProviderResourceStore) mapToInfraProviderResource(_ context.Context,
func mapToInfraProviderResource(_ context.Context,
in *infraProviderResource) (*types.InfraProviderResource, error) {
openTofuParamsMap := make(map[string]string)
marshalErr := json.Unmarshal(in.OpenTofuParams, &openTofuParamsMap)
@ -244,7 +245,7 @@ func (s infraProviderResourceStore) mapToInfraProviderResource(_ context.Context
return nil, marshalErr
}
return &types.InfraProviderResource{
Identifier: in.Identifier,
UID: in.Identifier,
InfraProviderConfigID: in.InfraProviderConfigID,
ID: in.ID,
InfraProviderType: in.InfraProviderType,
@ -271,7 +272,7 @@ func (s infraProviderResourceStore) mapToInternalInfraProviderResource(_ context
return nil, marshalErr
}
return &infraProviderResource{
Identifier: in.Identifier,
Identifier: in.UID,
InfraProviderConfigID: in.InfraProviderConfigID,
InfraProviderType: in.InfraProviderType,
Name: in.Name,
@ -290,15 +291,65 @@ func (s infraProviderResourceStore) mapToInternalInfraProviderResource(_ context
}, nil
}
func (s infraProviderResourceStore) mapToInfraProviderResources(ctx context.Context,
func mapToInfraProviderResources(ctx context.Context,
resources []infraProviderResource) ([]*types.InfraProviderResource, error) {
var err error
res := make([]*types.InfraProviderResource, len(resources))
for i := range resources {
res[i], err = s.mapToInfraProviderResource(ctx, &resources[i])
res[i], err = mapToInfraProviderResource(ctx, &resources[i])
if err != nil {
return nil, err
}
}
return res, nil
}
var _ store.InfraProviderResourceView = (*InfraProviderResourceView)(nil)
// NewInfraProviderResourceView returns a new InfraProviderResourceView.
// It's used by the infraprovider resource cache.
func NewInfraProviderResourceView(db *sqlx.DB) *InfraProviderResourceView {
return &InfraProviderResourceView{
db: db,
}
}
type InfraProviderResourceView struct {
db *sqlx.DB
}
func (i InfraProviderResourceView) Find(ctx context.Context, id int64) (*types.InfraProviderResource, error) {
stmt := database.Builder.
Select(infraProviderResourceSelectColumns).
From(infraProviderResourceTable).
Where(infraProviderResourceIDColumn+" = $1", id)
sql, args, err := stmt.ToSql()
if err != nil {
return nil, errors.Wrap(err, "Failed to convert squirrel builder to sql")
}
dst := new(infraProviderResource)
db := dbtx.GetAccessor(ctx, i.db)
if err := db.GetContext(ctx, dst, sql, args...); err != nil {
return nil, database.ProcessSQLErrorf(ctx, err, "Failed to find infraprovider resource %d", id)
}
return mapToInfraProviderResource(ctx, dst)
}
func (i InfraProviderResourceView) FindMany(ctx context.Context, ids []int64) ([]*types.InfraProviderResource, error) {
stmt := database.Builder.
Select(infraProviderResourceSelectColumns).
From(infraProviderResourceTable).
Where(squirrel.Eq{infraProviderTemplateIDColumn: ids})
sql, args, err := stmt.ToSql()
if err != nil {
return nil, errors.Wrap(err, "Failed to convert squirrel builder to sql")
}
dst := new([]infraProviderResource)
db := dbtx.GetAccessor(ctx, i.db)
if err := db.GetContext(ctx, dst, sql, args...); err != nil {
return nil, database.ProcessSQLErrorf(ctx, err, "Failed to find infraprovider resources")
}
return mapToInfraProviderResources(ctx, *dst)
}

View File

@ -33,6 +33,7 @@ var WireSet = wire.NewSet(
ProvideUserGroupStore,
ProvideUserGroupReviewerStore,
ProvidePrincipalInfoView,
ProvideInfraProviderResourceView,
ProvideSpacePathStore,
ProvideSpaceStore,
ProvideRepoStore,
@ -114,6 +115,11 @@ func ProvidePrincipalInfoView(db *sqlx.DB) store.PrincipalInfoView {
return NewPrincipalInfoView(db)
}
// ProvideInfraProviderResourceView provides a principal info store.
func ProvideInfraProviderResourceView(db *sqlx.DB) store.InfraProviderResourceView {
return NewInfraProviderResourceView(db)
}
// ProvideSpacePathStore provides a space path store.
func ProvideSpacePathStore(
db *sqlx.DB,
@ -170,8 +176,12 @@ func ProvideInfraProviderResourceStore(db *sqlx.DB) store.InfraProviderResourceS
}
// ProvideGitspaceConfigStore provides a gitspace config store.
func ProvideGitspaceConfigStore(db *sqlx.DB, pCache store.PrincipalInfoCache) store.GitspaceConfigStore {
return NewGitspaceConfigStore(db, pCache)
func ProvideGitspaceConfigStore(
db *sqlx.DB,
pCache store.PrincipalInfoCache,
rCache store.InfraProviderResourceCache,
) store.GitspaceConfigStore {
return NewGitspaceConfigStore(db, pCache, rCache)
}
// ProvideGitspaceInstanceStore provides a gitspace instance store.

View File

@ -275,7 +275,9 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro
if err != nil {
return nil, err
}
gitspaceConfigStore := database.ProvideGitspaceConfigStore(db, principalInfoCache)
infraProviderResourceView := database.ProvideInfraProviderResourceView(db)
infraProviderResourceCache := cache.ProvideInfraProviderResourceCache(infraProviderResourceView)
gitspaceConfigStore := database.ProvideGitspaceConfigStore(db, principalInfoCache, infraProviderResourceCache)
gitspaceInstanceStore := database.ProvideGitspaceInstanceStore(db)
infraProviderResourceStore := database.ProvideInfraProviderResourceStore(db)
infraProviderConfigStore := database.ProvideInfraProviderConfigStore(db)

View File

@ -19,20 +19,19 @@ import (
)
type GitspaceConfig struct {
ID int64 `json:"-"`
Identifier string `json:"identifier"`
Name string `json:"name"`
IDE enum.IDEType `json:"ide"`
State enum.GitspaceStateType `json:"state"`
InfraProviderResourceID int64 `json:"-"`
InfraProviderResourceIdentifier string `json:"resource_identifier"`
SpaceID int64 `json:"-"`
IsDeleted bool `json:"-"`
GitspaceInstance *GitspaceInstance `json:"instance"`
SpacePath string `json:"space_path"`
Created int64 `json:"created"`
Updated int64 `json:"updated"`
SSHTokenIdentifier string `json:"ssh_token_identifier"`
ID int64 `json:"-"`
Identifier string `json:"identifier"`
Name string `json:"name"`
IDE enum.IDEType `json:"ide"`
State enum.GitspaceStateType `json:"state"`
SpaceID int64 `json:"-"`
IsDeleted bool `json:"-"`
GitspaceInstance *GitspaceInstance `json:"instance"`
SpacePath string `json:"space_path"`
Created int64 `json:"created"`
Updated int64 `json:"updated"`
SSHTokenIdentifier string `json:"ssh_token_identifier"`
InfraProviderResource InfraProviderResource `json:"resource"`
CodeRepo
GitspaceUser
}

View File

@ -33,7 +33,7 @@ type InfraProviderConfig struct {
type InfraProviderResource struct {
ID int64 `json:"-"`
Identifier string `json:"identifier"`
UID string `json:"identifier"`
Name string `json:"name"`
InfraProviderConfigID int64 `json:"-"`
InfraProviderConfigIdentifier string `json:"config_identifier"`
@ -56,6 +56,10 @@ type InfraProviderResource struct {
Updated int64 `json:"updated"`
}
func (i *InfraProviderResource) Identifier() int64 {
return i.ID
}
type InfraProviderTemplate struct {
ID int64 `json:"-"`
Identifier string `json:"identifier"`