diff --git a/pkg/app/pipedv1/plugin/kubernetes/deployment/determine.go b/pkg/app/pipedv1/plugin/kubernetes/deployment/determine.go index a074abcb7f..8b18eee84c 100644 --- a/pkg/app/pipedv1/plugin/kubernetes/deployment/determine.go +++ b/pkg/app/pipedv1/plugin/kubernetes/deployment/determine.go @@ -249,3 +249,19 @@ func determineStrategy(olds, news []provider.Manifest, workloadRefs []config.K8s return model.SyncStrategy_QUICK_SYNC, "Quick sync by applying all manifests" } + +// determineStrategySDK decides the sync strategy and summary message based on the given manifests. +// TODO: rewrite this function to determineStrategy after the current determineStrategy is removed. +func determineStrategySDK(olds, news []provider.Manifest, workloadRefs []config.K8sResourceReference, logger *zap.Logger) (strategy sdk.SyncStrategy, summary string) { + mStrategy, summary := determineStrategy(olds, news, workloadRefs, logger) + + var s sdk.SyncStrategy + switch mStrategy { + case model.SyncStrategy_QUICK_SYNC: + s = sdk.SyncStrategyQuickSync + case model.SyncStrategy_PIPELINE: + s = sdk.SyncStrategyQuickSync + } + + return s, summary +} diff --git a/pkg/app/pipedv1/plugin/kubernetes/deployment/plugin.go b/pkg/app/pipedv1/plugin/kubernetes/deployment/plugin.go index 6755c87302..8bf4baafb6 100644 --- a/pkg/app/pipedv1/plugin/kubernetes/deployment/plugin.go +++ b/pkg/app/pipedv1/plugin/kubernetes/deployment/plugin.go @@ -361,9 +361,36 @@ func (p *Plugin) DetermineVersions(ctx context.Context, _ *sdk.ConfigNone, _ *sd }, nil } -// FIXME -func (p *Plugin) DetermineStrategy(context.Context, *sdk.ConfigNone, *sdk.Client, *sdk.DetermineStrategyInput) (*sdk.DetermineStrategyResponse, error) { - return &sdk.DetermineStrategyResponse{}, nil +func (p *Plugin) DetermineStrategy(ctx context.Context, _ *sdk.ConfigNone, _ *sdk.Client, input *sdk.DetermineStrategyInput) (*sdk.DetermineStrategyResponse, error) { + logger := input.Logger + loader := provider.NewLoader(toolregistry.NewRegistry(input.Client.ToolRegistry())) + + cfg, err := config.DecodeYAML[*kubeconfig.KubernetesApplicationSpec](input.Request.TargetDeploymentSource.ApplicationConfig) + if err != nil { + logger.Error("Failed while decoding application config", zap.Error(err)) + return nil, err + } + + runnings, err := p.loadManifests(ctx, &input.Request.Deployment, cfg.Spec, &input.Request.RunningDeploymentSource, loader) + + if err != nil { + logger.Error("Failed while loading running manifests", zap.Error(err)) + return nil, err + } + + targets, err := p.loadManifests(ctx, &input.Request.Deployment, cfg.Spec, &input.Request.TargetDeploymentSource, loader) + + if err != nil { + logger.Error("Failed while loading target manifests", zap.Error(err)) + return nil, err + } + + strategy, summary := determineStrategySDK(runnings, targets, cfg.Spec.Workloads, logger) + + return &sdk.DetermineStrategyResponse{ + Strategy: strategy, + Summary: summary, + }, nil } func (p *Plugin) BuildQuickSyncStages(ctx context.Context, _ *sdk.ConfigNone, input *sdk.BuildQuickSyncStagesInput) (*sdk.BuildQuickSyncStagesResponse, error) { diff --git a/pkg/app/pipedv1/plugin/kubernetes/provider/manifest_test.go b/pkg/app/pipedv1/plugin/kubernetes/provider/manifest_test.go index 9aa2aa2de4..8389af1e9e 100644 --- a/pkg/app/pipedv1/plugin/kubernetes/provider/manifest_test.go +++ b/pkg/app/pipedv1/plugin/kubernetes/provider/manifest_test.go @@ -20,10 +20,11 @@ import ( "time" "github.com/google/go-cmp/cmp" - "github.com/pipe-cd/pipecd/pkg/plugin/sdk" "github.com/stretchr/testify/assert" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" + + "github.com/pipe-cd/pipecd/pkg/plugin/sdk" ) func TestManifest_AddStringMapValues(t *testing.T) {