diff --git a/armada/api/controller/armada.py b/armada/api/controller/armada.py index d21b8f03..73a3e074 100644 --- a/armada/api/controller/armada.py +++ b/armada/api/controller/armada.py @@ -69,29 +69,13 @@ class Apply(api.BaseResource): "or application/json") try: with self.get_tiller(req, resp) as tiller: - - armada = Armada( - documents, - disable_update_pre=req.get_param_as_bool( - 'disable_update_pre'), - disable_update_post=req.get_param_as_bool( - 'disable_update_post'), - enable_chart_cleanup=req.get_param_as_bool( - 'enable_chart_cleanup'), - dry_run=req.get_param_as_bool('dry_run'), - force_wait=req.get_param_as_bool('wait'), - timeout=req.get_param_as_int('timeout'), - tiller=tiller, - target_manifest=req.get_param('target_manifest')) - - msg = armada.sync() - + msg = self.handle(req, documents, tiller) resp.body = json.dumps({ 'message': msg, }) - resp.content_type = 'application/json' resp.status = falcon.HTTP_200 + except exceptions.ManifestException as e: self.return_error(resp, falcon.HTTP_400, message=str(e)) except Exception as e: @@ -99,3 +83,17 @@ class Apply(api.BaseResource): err_message = 'Failed to apply manifest: {}'.format(e) self.error(req.context, err_message) self.return_error(resp, falcon.HTTP_500, message=err_message) + + def handle(self, req, documents, tiller): + armada = Armada( + documents, + disable_update_pre=req.get_param_as_bool('disable_update_pre'), + disable_update_post=req.get_param_as_bool('disable_update_post'), + enable_chart_cleanup=req.get_param_as_bool('enable_chart_cleanup'), + dry_run=req.get_param_as_bool('dry_run'), + force_wait=req.get_param_as_bool('wait'), + timeout=req.get_param_as_int('timeout'), + tiller=tiller, + target_manifest=req.get_param('target_manifest')) + + return armada.sync() diff --git a/armada/api/controller/rollback.py b/armada/api/controller/rollback.py index 38468d9c..78bc933d 100644 --- a/armada/api/controller/rollback.py +++ b/armada/api/controller/rollback.py @@ -30,27 +30,28 @@ class Rollback(api.BaseResource): @policy.enforce('armada:rollback_release') def on_post(self, req, resp, release): try: - dry_run = req.get_param_as_bool('dry_run') - with self.get_tiller(req, resp) as tiller: - - tiller.rollback_release( - release, - req.get_param_as_int('version') or 0, - wait=req.get_param_as_bool('wait'), - timeout=req.get_param_as_int('timeout') or 0, - force=req.get_param_as_bool('force'), - recreate_pods=req.get_param_as_bool('recreate_pods')) - + msg = self.handle(req, release, tiller) resp.body = json.dumps({ - 'message': ('(dry run) ' if dry_run else '') + - 'Rollback of {} complete.'.format(release), + 'message': msg, }) - - resp.content_type = 'application/json' - resp.status = falcon.HTTP_200 + resp.content_type = 'application/json' + resp.status = falcon.HTTP_200 except Exception as e: self.logger.exception('Caught unexpected exception') err_message = 'Failed to rollback release: {}'.format(e) self.error(req.context, err_message) self.return_error(resp, falcon.HTTP_500, message=err_message) + + def handle(self, req, release, tiller): + dry_run = req.get_param_as_bool('dry_run') + tiller.rollback_release( + release, + req.get_param_as_int('version') or 0, + wait=req.get_param_as_bool('wait'), + timeout=req.get_param_as_int('timeout') or 0, + force=req.get_param_as_bool('force'), + recreate_pods=req.get_param_as_bool('recreate_pods')) + + return ('(dry run) ' if dry_run else '') + \ + 'Rollback of {} complete.'.format(release) diff --git a/armada/api/controller/test.py b/armada/api/controller/test.py index c2467cc9..594b6ff7 100644 --- a/armada/api/controller/test.py +++ b/armada/api/controller/test.py @@ -37,10 +37,7 @@ class TestReleasesReleaseNameController(api.BaseResource): @policy.enforce('armada:test_release') def on_get(self, req, resp, release): with self.get_tiller(req, resp) as tiller: - cleanup = req.get_param_as_bool('cleanup') - - test_handler = Test({}, release, tiller, cleanup=cleanup) - success = test_handler.test_release_for_success() + success = self.handle(req, release, tiller) if success: msg = { @@ -57,6 +54,11 @@ class TestReleasesReleaseNameController(api.BaseResource): resp.status = falcon.HTTP_200 resp.content_type = 'application/json' + def handle(self, req, release, tiller): + cleanup = req.get_param_as_bool('cleanup') + test_handler = Test({}, release, tiller, cleanup=cleanup) + return test_handler.test_release_for_success() + class TestReleasesManifestController(api.BaseResource): ''' diff --git a/armada/api/controller/tiller.py b/armada/api/controller/tiller.py index 631b9297..3f9669df 100644 --- a/armada/api/controller/tiller.py +++ b/armada/api/controller/tiller.py @@ -34,19 +34,7 @@ class Status(api.BaseResource): ''' try: with self.get_tiller(req, resp) as tiller: - - LOG.debug( - 'Tiller (Status) at: %s:%s, namespace=%s, ' - 'timeout=%s', tiller.tiller_host, tiller.tiller_port, - tiller.tiller_namespace, tiller.timeout) - - message = { - 'tiller': { - 'state': tiller.tiller_status(), - 'version': tiller.tiller_version() - } - } - + message = self.handle(tiller) resp.status = falcon.HTTP_200 resp.body = json.dumps(message) resp.content_type = 'application/json' @@ -56,6 +44,19 @@ class Status(api.BaseResource): self.error(req.context, err_message) self.return_error(resp, falcon.HTTP_500, message=err_message) + def handle(self, tiller): + LOG.debug('Tiller (Status) at: %s:%s, namespace=%s, ' + 'timeout=%s', tiller.tiller_host, tiller.tiller_port, + tiller.tiller_namespace, tiller.timeout) + + message = { + 'tiller': { + 'state': tiller.tiller_status(), + 'version': tiller.tiller_version() + } + } + return message + class Release(api.BaseResource): @@ -65,18 +66,10 @@ class Release(api.BaseResource): ''' try: with self.get_tiller(req, resp) as tiller: - - LOG.debug( - 'Tiller (Release) at: %s:%s, namespace=%s, ' - 'timeout=%s', tiller.tiller_host, tiller.tiller_port, - tiller.tiller_namespace, tiller.timeout) - - releases = {} - for release in tiller.list_releases(): - releases.setdefault(release.namespace, []) - releases[release.namespace].append(release.name) - - resp.body = json.dumps({'releases': releases}) + releases = self.handle(tiller) + resp.body = json.dumps({ + 'releases': releases, + }) resp.content_type = 'application/json' resp.status = falcon.HTTP_200 @@ -84,3 +77,14 @@ class Release(api.BaseResource): err_message = 'Unable to find Tiller Releases: {}'.format(e) self.error(req.context, err_message) self.return_error(resp, falcon.HTTP_500, message=err_message) + + def handle(self, tiller): + LOG.debug('Tiller (Release) at: %s:%s, namespace=%s, ' + 'timeout=%s', tiller.tiller_host, tiller.tiller_port, + tiller.tiller_namespace, tiller.timeout) + + releases = {} + for release in tiller.list_releases(): + releases.setdefault(release.namespace, []) + releases[release.namespace].append(release.name) + return releases diff --git a/armada/cli/apply.py b/armada/cli/apply.py index 209b960f..6333cfa9 100644 --- a/armada/cli/apply.py +++ b/armada/cli/apply.py @@ -204,20 +204,8 @@ class ApplyManifest(CliAction): tiller_port=self.tiller_port, tiller_namespace=self.tiller_namespace, dry_run=self.dry_run) as tiller: - armada = Armada( - documents, - disable_update_pre=self.disable_update_pre, - disable_update_post=self.disable_update_post, - enable_chart_cleanup=self.enable_chart_cleanup, - dry_run=self.dry_run, - set_ovr=self.set, - force_wait=self.wait, - timeout=self.timeout, - tiller=tiller, - values=self.values, - target_manifest=self.target_manifest) - resp = armada.sync() + resp = self.handle(documents, tiller) self.output(resp) else: if len(self.values) > 0: @@ -245,3 +233,18 @@ class ApplyManifest(CliAction): resp = client.post_apply( manifest=documents, set=self.set, query=query) self.output(resp.get('message')) + + def handle(self, documents, tiller): + armada = Armada( + documents, + disable_update_pre=self.disable_update_pre, + disable_update_post=self.disable_update_post, + enable_chart_cleanup=self.enable_chart_cleanup, + dry_run=self.dry_run, + set_ovr=self.set, + force_wait=self.wait, + timeout=self.timeout, + tiller=tiller, + values=self.values, + target_manifest=self.target_manifest) + return armada.sync() diff --git a/armada/cli/rollback.py b/armada/cli/rollback.py index 89bf9f2c..5285e760 100644 --- a/armada/cli/rollback.py +++ b/armada/cli/rollback.py @@ -116,16 +116,19 @@ class Rollback(CliAction): tiller_namespace=self.tiller_namespace, dry_run=self.dry_run) as tiller: - response = tiller.rollback_release( - self.release, - self.version, - wait=self.wait, - timeout=self.timeout, - force=self.force, - recreate_pods=self.recreate_pods) + response = self.handle(tiller) self.output(response) + def handle(self, tiller): + return tiller.rollback_release( + self.release, + self.version, + wait=self.wait, + timeout=self.timeout, + force=self.force, + recreate_pods=self.recreate_pods) + def output(self, response): self.logger.info(('(dry run) ' if self.dry_run else '') + 'Rollback of %s complete.', self.release)