From 53b959fa9f7b6357fc5fd9590f97c60751039a67 Mon Sep 17 00:00:00 2001 From: Sascha Stojanovic Date: Wed, 4 Dec 2024 15:00:51 +0100 Subject: [PATCH 01/10] BOSH-1615_prevent_reupload --- director/releases.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/director/releases.go b/director/releases.go index 3ec62361e..9f0dd3353 100644 --- a/director/releases.go +++ b/director/releases.go @@ -241,7 +241,7 @@ func (d DirectorImpl) ReleaseHasSource(releaseSlug ReleaseSlug) (bool, error) { } for _, pkg := range pkgs { - if pkg.BlobstoreID == "" { + if pkg.BlobstoreID == "" && len(pkg.CompiledPackages) == 0 { return false, nil } } From a58d3e5db11145cfaf5b7958aed942f2a0593689 Mon Sep 17 00:00:00 2001 From: Sascha Stojanovic Date: Thu, 19 Dec 2024 17:03:57 +0100 Subject: [PATCH 02/10] Prevent_reupload_of_releases --- cmd/deploy.go | 4 +++- cmd/deploy_test.go | 9 +++++++++ cmd/opts/opts.go | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/cmd/deploy.go b/cmd/deploy.go index 5d10832de..67f1358c8 100644 --- a/cmd/deploy.go +++ b/cmd/deploy.go @@ -79,7 +79,7 @@ func (c DeployCmd) Run(opts DeployOpts) error { if opts.FixReleases { bytes, err = c.releaseUploader.UploadReleasesWithFix(bytes) - } else { + } else if !opts.SkipDownloadReleases { bytes, err = c.releaseUploader.UploadReleases(bytes) } if err != nil { @@ -125,6 +125,8 @@ func setFlags(flags []string, opts DeployOpts) DeployOpts { opts.Recreate = true case "recreate-persistent-disks": opts.RecreatePersistentDisks = true + case "skip-download-release": + opts.SkipDownloadReleases = true } } diff --git a/cmd/deploy_test.go b/cmd/deploy_test.go index 18db567dc..ab1e361a2 100644 --- a/cmd/deploy_test.go +++ b/cmd/deploy_test.go @@ -209,6 +209,15 @@ var _ = Describe("DeployCmd", func() { Expect(bytes).To(Equal([]byte("after-upload-manifest-with-fix"))) }) + It("skips the upload of all releases in the corresponding deployment", func() { + deployOpts.SkipDownloadReleases = true + + err := act() + Expect(err).ToNot(HaveOccurred()) + Expect(releaseUploader.UploadReleasesWithFixCallCount()).To(Equal(0)) + Expect(releaseUploader.UploadReleasesCallCount()).To(Equal(0)) + }) + It("returns error and does not deploy if uploading releases fails", func() { deployOpts.Args.Manifest = opts.FileBytesArg{ Bytes: []byte(` diff --git a/cmd/opts/opts.go b/cmd/opts/opts.go index 1839e8ea4..fedaadf58 100644 --- a/cmd/opts/opts.go +++ b/cmd/opts/opts.go @@ -508,6 +508,7 @@ type DeployOpts struct { Fix bool `long:"fix" description:"Recreate an instance with an unresponsive agent instead of erroring"` FixReleases bool `long:"fix-releases" description:"Reupload releases in manifest and replace corrupt or missing jobs/packages"` SkipDrain []boshdir.SkipDrain `long:"skip-drain" value-name:"[INSTANCE-GROUP[/INSTANCE-ID]]" description:"Skip running drain and pre-stop scripts for specific instance groups" optional:"true" optional-value:"*"` + SkipDownloadReleases bool `long:"skip-download-releases" description:"Skips the download procedure for releases"` Canaries string `long:"canaries" description:"Override manifest values for canaries"` MaxInFlight string `long:"max-in-flight" description:"Override manifest values for max_in_flight"` From 8491488bda9b0c77dc4d190fc63ecc64ceff593d Mon Sep 17 00:00:00 2001 From: Sascha Stojanovic Date: Fri, 20 Dec 2024 11:58:50 +0100 Subject: [PATCH 03/10] Adding_Printline_Msg --- cmd/deploy.go | 10 +++++++++- cmd/deploy_test.go | 15 ++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/cmd/deploy.go b/cmd/deploy.go index 67f1358c8..7b93d85a8 100644 --- a/cmd/deploy.go +++ b/cmd/deploy.go @@ -79,7 +79,15 @@ func (c DeployCmd) Run(opts DeployOpts) error { if opts.FixReleases { bytes, err = c.releaseUploader.UploadReleasesWithFix(bytes) - } else if !opts.SkipDownloadReleases { + } else if opts.SkipDownloadReleases { + releases, err := c.deployment.Releases() + if err != nil { + return err + } + for _, release := range releases { + c.ui.PrintLinef("Release '%s/%s' already exists.", release.Name(), release.Version()) + } + } else { bytes, err = c.releaseUploader.UploadReleases(bytes) } if err != nil { diff --git a/cmd/deploy_test.go b/cmd/deploy_test.go index ab1e361a2..115de827a 100644 --- a/cmd/deploy_test.go +++ b/cmd/deploy_test.go @@ -2,8 +2,8 @@ package cmd_test import ( "errors" - "github.com/cppforlife/go-patch/patch" + "github.com/cppforlife/go-semi-semantic/version" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -23,6 +23,7 @@ var _ = Describe("DeployCmd", func() { releaseUploader *fakecmd.FakeReleaseUploader director *fakedir.FakeDirector command cmd.DeployCmd + release *fakedir.FakeRelease ) BeforeEach(func() { @@ -38,6 +39,13 @@ var _ = Describe("DeployCmd", func() { director = &fakedir.FakeDirector{} command = cmd.NewDeployCmd(ui, deployment, releaseUploader, director) + + release = &fakedir.FakeRelease{ + NameStub: func() string { return "ReleaseName" }, + VersionStub: func() version.Version { + return version.MustNewVersionFromString("1") + }, + } }) Describe("Run", func() { @@ -210,12 +218,17 @@ var _ = Describe("DeployCmd", func() { }) It("skips the upload of all releases in the corresponding deployment", func() { + var releases = []boshdir.Release{release} + + deployment.ReleasesReturns(releases, nil) + deployOpts.SkipDownloadReleases = true err := act() Expect(err).ToNot(HaveOccurred()) Expect(releaseUploader.UploadReleasesWithFixCallCount()).To(Equal(0)) Expect(releaseUploader.UploadReleasesCallCount()).To(Equal(0)) + Expect(ui.Said).To(ContainElement("Release 'ReleaseName/1' already exists.")) }) It("returns error and does not deploy if uploading releases fails", func() { From af153827ff3d874b82f348e6fc897b45f44de68b Mon Sep 17 00:00:00 2001 From: Sascha Stojanovic Date: Fri, 20 Dec 2024 12:01:17 +0100 Subject: [PATCH 04/10] Remove_wrong_adaption --- director/releases.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/director/releases.go b/director/releases.go index 9f0dd3353..3ec62361e 100644 --- a/director/releases.go +++ b/director/releases.go @@ -241,7 +241,7 @@ func (d DirectorImpl) ReleaseHasSource(releaseSlug ReleaseSlug) (bool, error) { } for _, pkg := range pkgs { - if pkg.BlobstoreID == "" && len(pkg.CompiledPackages) == 0 { + if pkg.BlobstoreID == "" { return false, nil } } From 7dc828a7dc907f414d6dee11cdab9da6d4fe5429 Mon Sep 17 00:00:00 2001 From: Sascha Stojanovic Date: Fri, 20 Dec 2024 14:32:42 +0100 Subject: [PATCH 05/10] Changed_Printline --- cmd/deploy.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/deploy.go b/cmd/deploy.go index 7b93d85a8..4a2b24019 100644 --- a/cmd/deploy.go +++ b/cmd/deploy.go @@ -85,7 +85,7 @@ func (c DeployCmd) Run(opts DeployOpts) error { return err } for _, release := range releases { - c.ui.PrintLinef("Release '%s/%s' already exists.", release.Name(), release.Version()) + c.ui.PrintLinef("Release-Check for '%s/%s' has been disabled.", release.Name(), release.Version()) } } else { bytes, err = c.releaseUploader.UploadReleases(bytes) From 559fa2fd17651843329cbfb2e317969d8038702b Mon Sep 17 00:00:00 2001 From: Sascha Stojanovic Date: Thu, 9 Jan 2025 10:44:17 +0100 Subject: [PATCH 06/10] Changed_Test_Msg --- cmd/deploy_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/deploy_test.go b/cmd/deploy_test.go index 115de827a..5413f0021 100644 --- a/cmd/deploy_test.go +++ b/cmd/deploy_test.go @@ -228,7 +228,7 @@ var _ = Describe("DeployCmd", func() { Expect(err).ToNot(HaveOccurred()) Expect(releaseUploader.UploadReleasesWithFixCallCount()).To(Equal(0)) Expect(releaseUploader.UploadReleasesCallCount()).To(Equal(0)) - Expect(ui.Said).To(ContainElement("Release 'ReleaseName/1' already exists.")) + Expect(ui.Said).To(ContainElement("Release-Check for 'ReleaseName/1' has been disabled.")) }) It("returns error and does not deploy if uploading releases fails", func() { From f434edd20b138f7b282a1cb0e6d1c91d70cf15ed Mon Sep 17 00:00:00 2001 From: Sascha Stojanovic Date: Wed, 15 Jan 2025 11:13:04 +0100 Subject: [PATCH 07/10] BOSH-1615_finalized --- cmd/deploy.go | 14 ++++---------- cmd/deploy_test.go | 17 ++--------------- cmd/opts/opts.go | 2 +- 3 files changed, 7 insertions(+), 26 deletions(-) diff --git a/cmd/deploy.go b/cmd/deploy.go index 4a2b24019..f3a6a1dab 100644 --- a/cmd/deploy.go +++ b/cmd/deploy.go @@ -79,14 +79,8 @@ func (c DeployCmd) Run(opts DeployOpts) error { if opts.FixReleases { bytes, err = c.releaseUploader.UploadReleasesWithFix(bytes) - } else if opts.SkipDownloadReleases { - releases, err := c.deployment.Releases() - if err != nil { - return err - } - for _, release := range releases { - c.ui.PrintLinef("Release-Check for '%s/%s' has been disabled.", release.Name(), release.Version()) - } + } else if opts.SkipUploadReleases { + c.ui.PrintLinef("Release-Check skipped.") } else { bytes, err = c.releaseUploader.UploadReleases(bytes) } @@ -133,8 +127,8 @@ func setFlags(flags []string, opts DeployOpts) DeployOpts { opts.Recreate = true case "recreate-persistent-disks": opts.RecreatePersistentDisks = true - case "skip-download-release": - opts.SkipDownloadReleases = true + case "skip-upload-releases": + opts.SkipUploadReleases = true } } diff --git a/cmd/deploy_test.go b/cmd/deploy_test.go index 5413f0021..b9c549a9e 100644 --- a/cmd/deploy_test.go +++ b/cmd/deploy_test.go @@ -3,7 +3,6 @@ package cmd_test import ( "errors" "github.com/cppforlife/go-patch/patch" - "github.com/cppforlife/go-semi-semantic/version" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -23,7 +22,6 @@ var _ = Describe("DeployCmd", func() { releaseUploader *fakecmd.FakeReleaseUploader director *fakedir.FakeDirector command cmd.DeployCmd - release *fakedir.FakeRelease ) BeforeEach(func() { @@ -39,13 +37,6 @@ var _ = Describe("DeployCmd", func() { director = &fakedir.FakeDirector{} command = cmd.NewDeployCmd(ui, deployment, releaseUploader, director) - - release = &fakedir.FakeRelease{ - NameStub: func() string { return "ReleaseName" }, - VersionStub: func() version.Version { - return version.MustNewVersionFromString("1") - }, - } }) Describe("Run", func() { @@ -218,17 +209,13 @@ var _ = Describe("DeployCmd", func() { }) It("skips the upload of all releases in the corresponding deployment", func() { - var releases = []boshdir.Release{release} - - deployment.ReleasesReturns(releases, nil) - - deployOpts.SkipDownloadReleases = true + deployOpts.SkipUploadReleases = true err := act() Expect(err).ToNot(HaveOccurred()) Expect(releaseUploader.UploadReleasesWithFixCallCount()).To(Equal(0)) Expect(releaseUploader.UploadReleasesCallCount()).To(Equal(0)) - Expect(ui.Said).To(ContainElement("Release-Check for 'ReleaseName/1' has been disabled.")) + Expect(ui.Said).To(ContainElement("Release-Check skipped.")) }) It("returns error and does not deploy if uploading releases fails", func() { diff --git a/cmd/opts/opts.go b/cmd/opts/opts.go index fedaadf58..8a1aadda7 100644 --- a/cmd/opts/opts.go +++ b/cmd/opts/opts.go @@ -508,7 +508,7 @@ type DeployOpts struct { Fix bool `long:"fix" description:"Recreate an instance with an unresponsive agent instead of erroring"` FixReleases bool `long:"fix-releases" description:"Reupload releases in manifest and replace corrupt or missing jobs/packages"` SkipDrain []boshdir.SkipDrain `long:"skip-drain" value-name:"[INSTANCE-GROUP[/INSTANCE-ID]]" description:"Skip running drain and pre-stop scripts for specific instance groups" optional:"true" optional-value:"*"` - SkipDownloadReleases bool `long:"skip-download-releases" description:"Skips the download procedure for releases"` + SkipUploadReleases bool `long:"skip-upload-releases" description:"Skips the download procedure for releases"` Canaries string `long:"canaries" description:"Override manifest values for canaries"` MaxInFlight string `long:"max-in-flight" description:"Override manifest values for max_in_flight"` From 40123a83d4bc899687f0ec6367cb208a32bbd551 Mon Sep 17 00:00:00 2001 From: Sascha Stojanovic Date: Fri, 17 Jan 2025 10:10:42 +0100 Subject: [PATCH 08/10] Adjust imports in deploy_test --- cmd/deploy_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd/deploy_test.go b/cmd/deploy_test.go index b9c549a9e..1cc886311 100644 --- a/cmd/deploy_test.go +++ b/cmd/deploy_test.go @@ -2,6 +2,7 @@ package cmd_test import ( "errors" + "github.com/cppforlife/go-patch/patch" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -215,7 +216,7 @@ var _ = Describe("DeployCmd", func() { Expect(err).ToNot(HaveOccurred()) Expect(releaseUploader.UploadReleasesWithFixCallCount()).To(Equal(0)) Expect(releaseUploader.UploadReleasesCallCount()).To(Equal(0)) - Expect(ui.Said).To(ContainElement("Release-Check skipped.")) + Expect(ui.Said).To(ContainElement("Release-Checkasdfasf skipped.")) }) It("returns error and does not deploy if uploading releases fails", func() { From ba6cf64885b83daac08544a7af384e3bc8f11f34 Mon Sep 17 00:00:00 2001 From: Sascha Stojanovic Date: Fri, 17 Jan 2025 10:12:46 +0100 Subject: [PATCH 09/10] Correct Unit-test --- cmd/deploy_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/deploy_test.go b/cmd/deploy_test.go index 1cc886311..28e884aa1 100644 --- a/cmd/deploy_test.go +++ b/cmd/deploy_test.go @@ -216,7 +216,7 @@ var _ = Describe("DeployCmd", func() { Expect(err).ToNot(HaveOccurred()) Expect(releaseUploader.UploadReleasesWithFixCallCount()).To(Equal(0)) Expect(releaseUploader.UploadReleasesCallCount()).To(Equal(0)) - Expect(ui.Said).To(ContainElement("Release-Checkasdfasf skipped.")) + Expect(ui.Said).To(ContainElement("Release-Check skipped.")) }) It("returns error and does not deploy if uploading releases fails", func() { From d0b001c5a9653c8636ab45bb1355321468b6a98e Mon Sep 17 00:00:00 2001 From: Sascha Stojanovic Date: Fri, 17 Jan 2025 14:59:43 +0100 Subject: [PATCH 10/10] description changed --- cmd/opts/opts.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/opts/opts.go b/cmd/opts/opts.go index 8a1aadda7..d22b0cea0 100644 --- a/cmd/opts/opts.go +++ b/cmd/opts/opts.go @@ -508,7 +508,7 @@ type DeployOpts struct { Fix bool `long:"fix" description:"Recreate an instance with an unresponsive agent instead of erroring"` FixReleases bool `long:"fix-releases" description:"Reupload releases in manifest and replace corrupt or missing jobs/packages"` SkipDrain []boshdir.SkipDrain `long:"skip-drain" value-name:"[INSTANCE-GROUP[/INSTANCE-ID]]" description:"Skip running drain and pre-stop scripts for specific instance groups" optional:"true" optional-value:"*"` - SkipUploadReleases bool `long:"skip-upload-releases" description:"Skips the download procedure for releases"` + SkipUploadReleases bool `long:"skip-upload-releases" description:"Skips the upload procedure for releases"` Canaries string `long:"canaries" description:"Override manifest values for canaries"` MaxInFlight string `long:"max-in-flight" description:"Override manifest values for max_in_flight"`