[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:
parent
8cfbc69d3d
commit
6355fee383
|
@ -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):
|
||||||
'''
|
'''
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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')
|
||||||
|
|
Loading…
Reference in New Issue