Skip to content
This repository was archived by the owner on May 6, 2020. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions rootfs/api/models/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,7 @@ def _scale_pods(self, scale_types):
self.log(err, logging.ERROR)
raise ServiceUnavailable(err) from e

def deploy(self, release, force_deploy=False):
def deploy(self, release, force_deploy=False, rollback_on_failure=True): # noqa
"""
Deploy a new release to this application

Expand Down Expand Up @@ -569,8 +569,22 @@ def deploy(self, release, force_deploy=False):
) for scale_type, kwargs in deploys.items()
]

async_run(tasks)
try:
async_run(tasks)
except KubeException as e:
if rollback_on_failure:
err = 'There was a problem deploying {}. Rolling back process types to release {}.'.format(version, "v{}".format(release.previous().version)) # noqa
# This goes in the log before the rollback starts
self.log(err, logging.ERROR)
# revert all process types to old release
self.deploy(release.previous(), force_deploy=True, rollback_on_failure=False)
# let it bubble up
raise DeisException('{}\n{}'.format(err, str(e))) from e

# otherwise just re-raise
raise
except Exception as e:
# This gets shown to the end user
err = '(app::deploy): {}'.format(e)
self.log(err, logging.ERROR)
raise ServiceUnavailable(err) from e
Expand Down
7 changes: 0 additions & 7 deletions rootfs/scheduler/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -181,15 +181,8 @@ def deploy(self, namespace, name, image, entrypoint, command, **kwargs): # noqa
namespace, name, image, entrypoint, command, **kwargs
)
except KubeException as e:
# rollback to the previous Deployment
kwargs['rollback'] = True
self.deployment.update(
namespace, name, image, entrypoint, command, **kwargs
)

raise KubeException(
'There was a problem while deploying {} of {}-{}. '
'Going back to the previous release. '
"Additional information:\n{}".format(version, namespace, app_type, str(e))
) from e

Expand Down