From e102ec11accb8f8a9f8a9b90741920a89a5e9139 Mon Sep 17 00:00:00 2001 From: Darshan Chaudhary Date: Wed, 10 Jun 2020 17:35:37 +0530 Subject: [PATCH] feat: Allow --local with automatic sync for --dry-run (#3675) * feat: Allow --local with automatic sync for --dry-run Signed-off-by: darshanime * feat: add e2e test for local sync with dry run Signed-off-by: darshanime --- cmd/argocd/commands/app.go | 4 ++-- server/application/application.go | 4 ++-- test/e2e/app_management_test.go | 21 +++++++++++++++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/cmd/argocd/commands/app.go b/cmd/argocd/commands/app.go index 74bc98e143..474230dcda 100644 --- a/cmd/argocd/commands/app.go +++ b/cmd/argocd/commands/app.go @@ -1483,8 +1483,8 @@ func NewApplicationSyncCommand(clientOpts *argocdclient.ClientOptions) *cobra.Co if local != "" { app, err := appIf.Get(context.Background(), &applicationpkg.ApplicationQuery{Name: &appName}) errors.CheckError(err) - if app.Spec.SyncPolicy != nil && app.Spec.SyncPolicy.Automated != nil { - log.Fatal("Cannot use local sync when Automatic Sync Policy is enabled") + if app.Spec.SyncPolicy != nil && app.Spec.SyncPolicy.Automated != nil && !dryRun { + log.Fatal("Cannot use local sync when Automatic Sync Policy is enabled except with --dry-run") } errors.CheckError(err) diff --git a/server/application/application.go b/server/application/application.go index 56e7d8dab8..33fbf1869a 100644 --- a/server/application/application.go +++ b/server/application/application.go @@ -1055,8 +1055,8 @@ func (s *Server) Sync(ctx context.Context, syncReq *application.ApplicationSyncR if err := s.enf.EnforceErr(ctx.Value("claims"), rbacpolicy.ResourceApplications, rbacpolicy.ActionOverride, appRBACName(*a)); err != nil { return nil, err } - if a.Spec.SyncPolicy != nil && a.Spec.SyncPolicy.Automated != nil { - return nil, status.Error(codes.FailedPrecondition, "Cannot use local sync when Automatic Sync Policy is enabled") + if a.Spec.SyncPolicy != nil && a.Spec.SyncPolicy.Automated != nil && !syncReq.DryRun { + return nil, status.Error(codes.FailedPrecondition, "Cannot use local sync when Automatic Sync Policy is enabled unless for dry run") } } if a.DeletionTimestamp != nil { diff --git a/test/e2e/app_management_test.go b/test/e2e/app_management_test.go index 7eeeb61072..de7b0fd488 100644 --- a/test/e2e/app_management_test.go +++ b/test/e2e/app_management_test.go @@ -6,6 +6,7 @@ import ( "math/rand" "os" "path" + "reflect" "regexp" "strings" "testing" @@ -687,6 +688,26 @@ func TestNoLocalSyncWithAutosyncEnabled(t *testing.T) { }) } +func TestLocalSyncDryRunWithAutosyncEnabled(t *testing.T) { + Given(t). + Path(guestbookPath). + When(). + Create(). + Sync(). + Then(). + And(func(app *Application) { + _, err := RunCli("app", "set", app.Name, "--sync-policy", "automated") + assert.NoError(t, err) + + appBefore := app.DeepCopy() + _, err = RunCli("app", "sync", app.Name, "--dry-run", "--local", guestbookPathLocal) + assert.NoError(t, err) + + appAfter := app.DeepCopy() + assert.True(t, reflect.DeepEqual(appBefore, appAfter)) + }) +} + func TestSyncAsync(t *testing.T) { Given(t). Path(guestbookPath).