Skip to content

Commit ff071e5

Browse files
cezarsawpjunior
authored andcommitted
Allow deploys over versions not found in tsuru
For many reasons a deployment version may not exist in tsuru anymore. New deploys should not fail only because a previous version does not exist. Also ensure cleanups are only executed when safe and the deploy was successful.
1 parent 204f715 commit ff071e5

File tree

11 files changed

+367
-174
lines changed

11 files changed

+367
-174
lines changed

api/router.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ func appSetRoutable(w http.ResponseWriter, r *http.Request, t auth.Token) (err e
436436
defer func() { evt.Done(err) }()
437437
version, err := servicemanager.AppVersion.VersionByImageOrVersion(&a, args.Version)
438438
if err != nil {
439-
if _, ok := err.(appTypes.ErrInvalidVersion); ok {
439+
if appTypes.IsInvalidVersionError(err) {
440440
return &errors.HTTP{Code: http.StatusBadRequest, Message: err.Error()}
441441
}
442442
return err

provision/kubernetes/deploy.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,7 @@ type serviceManager struct {
697697

698698
var _ servicecommon.ServiceManager = &serviceManager{}
699699

700-
func (m *serviceManager) CleanupServices(a provision.App, deployedVersion appTypes.AppVersion, preserveOldVersions bool) error {
700+
func (m *serviceManager) CleanupServices(a provision.App, deployedVersion int, preserveOldVersions bool) error {
701701
depGroups, err := deploymentsDataForApp(m.client, a)
702702
if err != nil {
703703
return err
@@ -715,7 +715,7 @@ func (m *serviceManager) CleanupServices(a provision.App, deployedVersion appTyp
715715
multiErrors := tsuruErrors.NewMultiError()
716716
for _, depsData := range depGroups.versioned {
717717
for _, depData := range depsData {
718-
toKeep := depData.replicas > 0 && (preserveOldVersions || depData.version == deployedVersion.Version())
718+
toKeep := depData.replicas > 0 && (preserveOldVersions || depData.version == deployedVersion)
719719

720720
if toKeep {
721721
processInUse[depData.process] = struct{}{}
@@ -759,21 +759,21 @@ func (m *serviceManager) CleanupServices(a provision.App, deployedVersion appTyp
759759
return multiErrors.ToError()
760760
}
761761

762-
func (m *serviceManager) RemoveService(a provision.App, process string, version appTypes.AppVersion) error {
762+
func (m *serviceManager) RemoveService(a provision.App, process string, versionNumber int) error {
763763
multiErrors := tsuruErrors.NewMultiError()
764-
err := cleanupDeployment(m.client, a, process, version)
764+
err := cleanupDeployment(m.client, a, process, versionNumber)
765765
if err != nil && !k8sErrors.IsNotFound(err) {
766766
multiErrors.Add(err)
767767
}
768-
err = cleanupServices(m.client, a, process, version)
768+
err = cleanupServices(m.client, a, process, versionNumber)
769769
if err != nil {
770770
multiErrors.Add(err)
771771
}
772772
return multiErrors.ToError()
773773
}
774774

775-
func (m *serviceManager) CurrentLabels(a provision.App, process string, version appTypes.AppVersion) (*provision.LabelSet, error) {
776-
dep, err := deploymentForVersion(m.client, a, process, version)
775+
func (m *serviceManager) CurrentLabels(a provision.App, process string, versionNumber int) (*provision.LabelSet, error) {
776+
dep, err := deploymentForVersion(m.client, a, process, versionNumber)
777777
if err != nil {
778778
if k8sErrors.IsNotFound(err) {
779779
return nil, nil
@@ -1210,7 +1210,7 @@ func (m *serviceManager) ensureServices(a provision.App, process string, labels,
12101210
}
12111211

12121212
if len(svcPorts) == 0 {
1213-
err = cleanupServices(m.client, a, process, version)
1213+
err = cleanupServices(m.client, a, process, version.Version())
12141214
if err != nil {
12151215
return err
12161216
}

0 commit comments

Comments
 (0)