[feature] adding-delete-cleanup-functions (#45)

* clean up will remove charts that are not maintained by the armada yaml
* uninstall chart
This commit is contained in:
Alexis Rivera DeLa Torre 2017-04-17 14:14:20 -05:00 committed by Alan Meadows
parent 8cfbc69d3d
commit 6355fee383
3 changed files with 52 additions and 4 deletions

View File

@ -39,6 +39,8 @@ class Armada(object):
# extract known charts on tiller right now
known_releases = self.tiller.list_charts()
prefix = self.config.get('armada').get('release_prefix')
for release in known_releases:
LOG.debug("Release %s, Version %s found on tiller", release[0],
release[1])
@ -95,12 +97,17 @@ class Armada(object):
self.args.dry_run,
chart.release_name,
chart.namespace,
prefix,
values=yaml.safe_dump(values))
LOG.debug("Cleaning up chart source in %s",
chartbuilder.source_directory)
chartbuilder.source_cleanup()
if self.args.enable_chart_cleanup:
self.tiller.chart_cleanup(prefix, self.config['armada']['charts'],
known_releases)
def show_diff(self, chart, installed_chart,
installed_values, target_chart, target_values):
'''

View File

@ -1,9 +1,11 @@
from hapi.services.tiller_pb2 import ReleaseServiceStub, ListReleasesRequest, \
InstallReleaseRequest, UpdateReleaseRequest
InstallReleaseRequest, UpdateReleaseRequest, UninstallReleaseRequest
from hapi.chart.config_pb2 import Config
from k8s import K8s
import grpc
from logutil import LOG
from k8s import K8s
TILLER_PORT = 44134
TILLER_VERSION = b'2.1.3'
TILLER_TIMEOUT = 300
@ -110,7 +112,8 @@ class Tiller(object):
return stub.UpdateRelease(release_request, self.timeout,
metadata=self.metadata)
def install_release(self, chart, dry_run, name, namespace, values=None):
def install_release(self, chart, dry_run, name, namespace, prefix,
values=None):
'''
Create a Helm Release
'''
@ -126,8 +129,44 @@ class Tiller(object):
chart=chart,
dry_run=dry_run,
values=values,
name=name,
name="{}-{}".format(prefix, name),
namespace=namespace)
return stub.InstallRelease(release_request,
self.timeout,
metadata=self.metadata)
def uninstall_release(self, release, disable_hooks=False, purge=True):
'''
:params - release - helm chart release name
:params - purge - deep delete of chart
deletes a helm chart from tiller
'''
# build release install request
stub = ReleaseServiceStub(self.channel)
release_request = UninstallReleaseRequest(name=release,
disable_hooks=disable_hooks,
purge=purge)
return stub.UninstallRelease(release_request,
self.timeout,
metadata=self.metadata)
def chart_cleanup(self, prefix, charts, known_releases):
'''
:params charts - list of yaml charts
:params known_release - list of releases in tiller
:result - will remove any chart that is not present in yaml
'''
def release_prefix(prefix, chart):
return "{}-{}".format(prefix, chart["chart"]["release_name"])
valid_charts = [release_prefix(prefix, chart) for chart in charts]
actual_charts = [x.name for x in self.list_releases()]
chart_diff = list(set(actual_charts) - set(valid_charts))
for chart in chart_diff:
if chart.startswith(prefix):
LOG.debug("Release: %s will be removed", chart)
self.uninstall_release(chart)

View File

@ -14,6 +14,8 @@ def parse_args():
help='Path to YAML File or Directory')
ap.add_argument('--debug', action='store_true', default=False,
required=False, help='Enable debug logging')
ap.add_argument('--enable-chart-cleanup', action='store_true',
default=False, required=False, help='Clean up enviroment')
ap.add_argument('-d', '--dry-run', action='store_true', default=False,
required=False, help='Enable dry-run flag on all Tiller'
'Calls')