feat: [CDE-278]: Ensure infra is in provisioned state before triggering stop or delete, or before fectching logs. (#2616)

* feat: [CDE-278]: Ensure infra is in provisioned state before triggering stop or delete, or before fectching logs.
This commit is contained in:
Dhruv Dhruv 2024-08-29 13:38:54 +00:00 committed by Harness
parent cc22b367d5
commit d50945fd60
2 changed files with 47 additions and 31 deletions

View File

@ -120,17 +120,11 @@ func (o orchestrator) TriggerStopGitspace(
"cannot get the infraProviderResource with ID %d: %w", gitspaceConfig.InfraProviderResourceID, err) "cannot get the infraProviderResource with ID %d: %w", gitspaceConfig.InfraProviderResourceID, err)
} }
requiredGitspacePorts, err := o.getPortsRequiredForGitspace(gitspaceConfig) infra, err := o.getProvisionedInfra(ctx, infraProviderResource, gitspaceConfig)
if err != nil { if err != nil {
return fmt.Errorf("cannot get the ports required for gitspace during start: %w", err) return fmt.Errorf(
} "unable to find provisioned infra while triggering stop for gitspace instance %s: %w",
gitspaceConfig.GitspaceInstance.Identifier, err)
infra, err := o.infraProvisioner.Find(ctx, *infraProviderResource, gitspaceConfig, requiredGitspacePorts)
if infra.Storage == "" {
log.Warn().Msgf("couldn't find the storage for resource ID %d", gitspaceConfig.InfraProviderResourceID)
}
if err != nil {
return fmt.Errorf("cannot find the provisioned infra: %w", err)
} }
err = o.stopGitspaceContainer(ctx, gitspaceConfig, *infra) err = o.stopGitspaceContainer(ctx, gitspaceConfig, *infra)
@ -225,14 +219,11 @@ func (o orchestrator) TriggerDeleteGitspace(
"cannot get the infraProviderResource with ID %d: %w", gitspaceConfig.InfraProviderResourceID, err) "cannot get the infraProviderResource with ID %d: %w", gitspaceConfig.InfraProviderResourceID, err)
} }
requiredGitspacePorts, err := o.getPortsRequiredForGitspace(gitspaceConfig) infra, err := o.getProvisionedInfra(ctx, infraProviderResource, gitspaceConfig)
if err != nil { if err != nil {
return fmt.Errorf("cannot get the ports required for gitspace during start: %w", err) return fmt.Errorf(
} "unable to find provisioned infra while triggering delete for gitspace instance %s: %w",
gitspaceConfig.GitspaceInstance.Identifier, err)
infra, err := o.infraProvisioner.Find(ctx, *infraProviderResource, gitspaceConfig, requiredGitspacePorts)
if err != nil {
return fmt.Errorf("cannot find the provisioned infra: %w", err)
} }
err = o.stopAndRemoveGitspaceContainer(ctx, gitspaceConfig, *infra) err = o.stopAndRemoveGitspaceContainer(ctx, gitspaceConfig, *infra)
@ -529,24 +520,13 @@ func (o orchestrator) getPortsRequiredForGitspace(
} }
func (o orchestrator) GetGitspaceLogs(ctx context.Context, gitspaceConfig types.GitspaceConfig) (string, error) { func (o orchestrator) GetGitspaceLogs(ctx context.Context, gitspaceConfig types.GitspaceConfig) (string, error) {
infraProviderResource, err := o.infraProviderResourceStore.Find(ctx, gitspaceConfig.InfraProviderResourceID) infra, err := o.getProvisionedInfra(ctx, nil, gitspaceConfig)
if err != nil { if err != nil {
return "", fmt.Errorf( return "", fmt.Errorf(
"cannot get the infraProviderResource with ID %d: %w", gitspaceConfig.InfraProviderResourceID, err) "unable to find provisioned infra while fetching logs for gitspace instance %s: %w",
gitspaceConfig.GitspaceInstance.Identifier, err)
} }
requiredGitspacePorts, err := o.getPortsRequiredForGitspace(gitspaceConfig)
if err != nil {
return "", fmt.Errorf("cannot get the ports required for gitspace during get logs: %w", err)
}
infra, err := o.infraProvisioner.Find(ctx, *infraProviderResource, gitspaceConfig, requiredGitspacePorts)
if infra.Storage == "" {
return "", fmt.Errorf("couldn't find the storage for resource ID %d", gitspaceConfig.InfraProviderResourceID)
}
if err != nil {
return "", fmt.Errorf("cannot find the provisioned infra: %w", err)
}
// NOTE: Currently we use a static identifier as the Gitspace user. // NOTE: Currently we use a static identifier as the Gitspace user.
gitspaceConfig.GitspaceUser.Identifier = harnessUser gitspaceConfig.GitspaceUser.Identifier = harnessUser
logs, err := o.containerOrchestrator.StreamLogs(ctx, gitspaceConfig, *infra) logs, err := o.containerOrchestrator.StreamLogs(ctx, gitspaceConfig, *infra)
@ -556,3 +536,38 @@ func (o orchestrator) GetGitspaceLogs(ctx context.Context, gitspaceConfig types.
return logs, nil return logs, nil
} }
func (o orchestrator) getProvisionedInfra(
ctx context.Context,
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)
}
infra, err := o.infraProvisioner.Find(ctx, *infraProviderResource, gitspaceConfig, requiredGitspacePorts)
if err != nil {
return nil, fmt.Errorf("cannot find the provisioned infra: %w", err)
}
if infra.Status != enum.InfraStatusProvisioned {
return nil, fmt.Errorf("expected infra state is provisioned, actual state is: %s", infra.Status)
}
if infra.Storage == "" {
log.Warn().Msgf("couldn't find the storage for resource ID %d", gitspaceConfig.InfraProviderResourceID)
}
return infra, nil
}

View File

@ -19,6 +19,7 @@ package main
import ( import (
"context" "context"
"github.com/harness/gitness/app/api/controller/aiagent" "github.com/harness/gitness/app/api/controller/aiagent"
"github.com/harness/gitness/app/api/controller/capabilities" "github.com/harness/gitness/app/api/controller/capabilities"
checkcontroller "github.com/harness/gitness/app/api/controller/check" checkcontroller "github.com/harness/gitness/app/api/controller/check"