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

View File

@ -1,9 +1,11 @@
from hapi.services.tiller_pb2 import ReleaseServiceStub, ListReleasesRequest, \ from hapi.services.tiller_pb2 import ReleaseServiceStub, ListReleasesRequest, \
InstallReleaseRequest, UpdateReleaseRequest InstallReleaseRequest, UpdateReleaseRequest, UninstallReleaseRequest
from hapi.chart.config_pb2 import Config from hapi.chart.config_pb2 import Config
from k8s import K8s
import grpc import grpc
from logutil import LOG
from k8s import K8s
TILLER_PORT = 44134 TILLER_PORT = 44134
TILLER_VERSION = b'2.1.3' TILLER_VERSION = b'2.1.3'
TILLER_TIMEOUT = 300 TILLER_TIMEOUT = 300
@ -110,7 +112,8 @@ class Tiller(object):
return stub.UpdateRelease(release_request, self.timeout, return stub.UpdateRelease(release_request, self.timeout,
metadata=self.metadata) 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 Create a Helm Release
''' '''
@ -126,8 +129,44 @@ class Tiller(object):
chart=chart, chart=chart,
dry_run=dry_run, dry_run=dry_run,
values=values, values=values,
name=name, name="{}-{}".format(prefix, name),
namespace=namespace) namespace=namespace)
return stub.InstallRelease(release_request, return stub.InstallRelease(release_request,
self.timeout, self.timeout,
metadata=self.metadata) 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') help='Path to YAML File or Directory')
ap.add_argument('--debug', action='store_true', default=False, ap.add_argument('--debug', action='store_true', default=False,
required=False, help='Enable debug logging') 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, ap.add_argument('-d', '--dry-run', action='store_true', default=False,
required=False, help='Enable dry-run flag on all Tiller' required=False, help='Enable dry-run flag on all Tiller'
'Calls') 'Calls')