Refactor tiller commands to handle methods

This is a refactor to any methods in the api and cli to move tiller
operations to a separate handler function to make them uniform
with the rest of the code

Change-Id: Iddd45f9f979307f54ad5bd54c3ee005547dd0909
This commit is contained in:
Michael Beaver 2019-02-01 14:31:35 -06:00
parent 9a7c1f4006
commit b458c3f675
6 changed files with 94 additions and 83 deletions

View File

@ -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()

View File

@ -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)

View File

@ -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):
'''

View File

@ -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

View File

@ -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()

View File

@ -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)