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 update_release(self, chart, release, namespace, dry_run=False, pre_actions=None, post_actions=None, disable_hooks=False, values=None, wait=False, timeout=None): ''' Update a Helm Release ''' rel_timeout = self.timeout if not timeout else timeout LOG.debug("wait: %s", wait) LOG.debug("timeout: %s", timeout) if values is None: values = Config(raw='') else: values = Config(raw=values) self._pre_update_actions(pre_actions, release, namespace, chart, disable_hooks, values) # build release install request try: stub = ReleaseServiceStub(self.channel) release_request = UpdateReleaseRequest(chart=chart, dry_run=dry_run, disable_hooks=disable_hooks, values=values, name=release, wait=wait, timeout=timeout) stub.UpdateRelease(release_request, rel_timeout + GRPC_EPSILON, metadata=self.metadata) except Exception: status = self.get_release_status(release) raise ex.ReleaseException(release, status, 'Upgrade') self._post_update_actions(post_actions, namespace)
def get_release_content(self, release, version=0): ''' :param release - name of release to test :param version - version of release status ''' try: stub = ReleaseServiceStub(self.channel) status_request = GetReleaseContentRequest( name=release, version=version) return stub.GetReleaseContent( status_request, self.timeout, metadata=self.metadata) except Exception: raise ex.GetReleaseContentException(release, version)
def list_releases(self): """ List Helm Releases """ releases = [] offset = None stub = ReleaseServiceStub(self._channel) while (offset is None or len(offset) > 0): req = ListReleasesRequest(limit=RELEASE_LIMIT, offset=offset) release_list = stub.ListReleases(req, self._timeout, metadata=self.metadata) for y in release_list: offset = str(y.next) releases.extend(y.releases) return releases
def list_releases(self): ''' List Helm Releases ''' releases = [] stub = ReleaseServiceStub(self.channel) req = ListReleasesRequest(limit=RELEASE_LIMIT, status_codes=[STATUS_DEPLOYED, STATUS_FAILED], sort_by='LAST_RELEASED', sort_order='DESC') release_list = stub.ListReleases(req, self.timeout, metadata=self.metadata) for y in release_list: releases.extend(y.releases) return releases
def update_release(self, chart, name, dry_run=False, disable_hooks=False, values=None, recreate=False, reset_values=False, reuse_values=False, force=False, timeout=REQUEST_TIMEOUT): """升级release Args: :params - chart - chart 元数据,由函数生成 :params - name - release name :params - dry_run - simulate an upgrade :params - values - 额外的values,用来进行value值替换 :params - disable_hooks - prevent hooks from running during rollback(bool) :params - recreate - performs pods restart for the resource if applicable(bool) :params - reset_values - when upgrading, reset the values to the ones built into the chart(bool) :params - reuse_values - when upgrading, reuse the last release's values and merge in any overrides from the command line via --set and -f. If '--reset-values' is specified, this is ignored.(bool) :params - force - 是否强制升级(bool) Returns: 返回升级release的grpc响应对象 """ values = Config(raw=yaml.safe_dump(values or {})) # build update release request stub = ReleaseServiceStub(self.channel) release_request = UpdateReleaseRequest(chart=chart, dry_run=dry_run, recreate=recreate, reset_values=reset_values, reuse_values=reuse_values, force=force, disable_hooks=disable_hooks, values=values, timeout=timeout, name=name) return stub.UpdateRelease(release_request, self.timeout, metadata=self.metadata)
def update_release(self, chart, release, namespace, dry_run=False, pre_actions=None, post_actions=None, disable_hooks=False, values=None, wait=False, timeout=None): ''' Update a Helm Release ''' LOG.debug("wait: %s", wait) LOG.debug("timeout: %s", timeout) if values is None: values = Config(raw='') else: values = Config(raw=values) self._pre_update_actions(pre_actions, release, namespace, chart, disable_hooks, values) # build release install request try: stub = ReleaseServiceStub(self.channel) release_request = UpdateReleaseRequest(chart=chart, dry_run=dry_run, disable_hooks=disable_hooks, values=values, name=release, wait=wait, timeout=timeout) stub.UpdateRelease(release_request, self.timeout, metadata=self.metadata) except Exception: raise tiller_exceptions.ReleaseInstallException(release, namespace) self._post_update_actions(post_actions, namespace)
def update_release(self, chart, dry_run, name, disable_hooks=False, values=None): ''' Update a Helm Release ''' if values is None: values = Config(raw='') else: values = Config(raw=values) # build release install request stub = ReleaseServiceStub(self.channel) release_request = UpdateReleaseRequest( chart=chart, dry_run=dry_run, disable_hooks=disable_hooks, values=values, name=name) return stub.UpdateRelease(release_request, self.timeout, metadata=self.metadata)
def install_release(self, chart, dry_run, name, namespace, values=None): ''' Create a Helm Release ''' if values is None: values = Config(raw='') else: values = Config(raw=values) # build release install request stub = ReleaseServiceStub(self.channel) release_request = InstallReleaseRequest( chart=chart, dry_run=dry_run, values=values, name=name, namespace=namespace) return stub.InstallRelease(release_request, self.timeout, metadata=self.metadata)
def install_release(self, chart, namespace, dry_run=False, name=None, values=None): """ Create a Helm Release """ values = Config(raw=yaml.safe_dump(values or {})) # build release install request stub = ReleaseServiceStub(self.channel) release_request = InstallReleaseRequest( chart=chart, dry_run=dry_run, values=values, name=name or '', namespace=namespace) return stub.InstallRelease(release_request, self.timeout, metadata=self.metadata)
def install_release(self, chart, namespace, disable_hooks=False, reuse_name=False, disable_crd_hook=False, timeout=REQUEST_TIMEOUT, dry_run=False, name=None, values=None): """安装release Args: :params - chart - chart 元数据,由函数生成 :params - name - release name,为空时随机生成 :params - namespace - kubernetes namespace :params - dry_run - simulate an install :params - values - 额外的values,用来进行value值替换 :params - disable_hooks - prevent hooks from running during install(bool) :params - disable_crd_hook - prevent CRD hooks from running, but run other hooks(bool) :params - reuse_name - re-use the given name, even if that name is already used. This is unsafe in production(bool) :params - timeout - time in seconds to wait for any individual Kubernetes operation (like Jobs for hooks) (default 300) Returns: 返回安装release的grpc响应对象 """ #values = Config(raw=yaml.safe_dump(values or {})) # build release install request stub = ReleaseServiceStub(self.channel) release_request = InstallReleaseRequest( chart=chart, disable_hooks=disable_hooks, reuse_name=reuse_name, disable_crd_hook=disable_crd_hook, dry_run=dry_run, timeout=timeout, values=values, name=name or '', 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 try: 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) except Exception: raise tiller_exceptions.ReleaseUninstallException(release)
def update_release(self, chart, dry_run, name, namespace, prefix, pre_actions=None, post_actions=None, disable_hooks=False, values=None, wait=False, timeout=None): ''' Update a Helm Release ''' LOG.debug("wait: %s", wait) LOG.debug("timeout: %s", timeout) if values is None: values = Config(raw='') else: values = Config(raw=values) self._pre_update_actions(pre_actions, namespace) # build release install request stub = ReleaseServiceStub(self.channel) release_request = UpdateReleaseRequest(chart=chart, dry_run=dry_run, disable_hooks=disable_hooks, values=values, name="{}-{}".format( prefix, name), wait=wait, timeout=timeout) stub.UpdateRelease(release_request, self.timeout, metadata=self.metadata) self._post_update_actions(post_actions, namespace)
def list_releases(self, status_codes=None, namespace=""): """ List Helm Releases Possible status codes can be seen in the status_pb2 in part of Helm gRPC definition """ releases = [] # Convert the string status codes to the their numerical values if status_codes: codes_enum = _STATUS.enum_types_by_name.get("Code") request_status_codes = [ codes_enum.values_by_name.get(code).number for code in status_codes ] else: request_status_codes = [] offset = None stub = ReleaseServiceStub(self._channel) while True: req = ListReleasesRequest(limit=RELEASE_LIMIT, offset=offset, namespace=namespace, status_codes=request_status_codes) release_list = stub.ListReleases(req, self._timeout, metadata=self.metadata) for y in release_list: offset = str(y.next) releases.extend(y.releases) # This handles two cases: # 1. If there are no releases, offset will not be set and will remain None # 2. If there were releases, once we've fetched all of them, offset will be "" if not offset: break return releases
def testing_release(self, release, timeout=300, cleanup=True): ''' :param release - name of release to test :param timeout - runtime before exiting :param cleanup - removes testing pod created :returns - results of test pod ''' try: stub = ReleaseServiceStub(self.channel) release_request = TestReleaseRequest(name=release, timeout=timeout, cleanup=cleanup) content = self.get_release_content(release) if not len(content.release.hooks): LOG.info('No test found') return False if content.release.hooks[0].events[0] == RUNTEST_SUCCESS: test = stub.RunReleaseTest(release_request, self.timeout, metadata=self.metadata) if test.running(): self.k8s.wait_get_completed_podphase(release) test.cancel() return self.get_release_status(release) except Exception: status = self.get_release_status(release) raise ex.ReleaseException(release, status, 'Test')
def uninstall_release(self, release, timeout=REQUEST_TIMEOUT, disable_hooks=False, purge=False): """deletes a helm chart from tiller Args: :params - release - helm chart release name :params - purge - deep delete of chart Returns: 返回卸载release的grpc响应对象 """ # build release install request stub = ReleaseServiceStub(self.channel) release_request = UninstallReleaseRequest(name=release, timeout=timeout, disable_hooks=disable_hooks, purge=purge) return stub.UninstallRelease(release_request, self.timeout, metadata=self.metadata)
def install_release(self, chart, release, namespace, dry_run=False, values=None, wait=False, timeout=None): ''' Create a Helm Release ''' rel_timeout = self.timeout if not timeout else timeout LOG.info("Wait: %s, Timeout: %s", wait, timeout) if values is None: values = Config(raw='') else: values = Config(raw=values) # build release install request try: stub = ReleaseServiceStub(self.channel) release_request = InstallReleaseRequest(chart=chart, dry_run=dry_run, values=values, name=release, namespace=namespace, wait=wait, timeout=timeout) return stub.InstallRelease(release_request, rel_timeout + GRPC_EPSILON, metadata=self.metadata) except Exception: status = self.get_release_status(release) raise ex.ReleaseException(release, status, 'Install')
def update_release(self, chart, dry_run, namespace, name=None, pre_actions=None, post_actions=None, disable_hooks=False, values=None): ''' Update a Helm Release ''' values = Config(raw=yaml.safe_dump(values or {})) self._pre_update_actions(pre_actions, namespace) # build release install request stub = ReleaseServiceStub(self.channel) release_request = UpdateReleaseRequest( chart=chart, dry_run=dry_run, disable_hooks=disable_hooks, values=values, name=name or '') stub.UpdateRelease(release_request, self.timeout, metadata=self.metadata) self._post_update_actions(post_actions, namespace)
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 try: stub = ReleaseServiceStub(self.channel) LOG.info( "Uninstall %s release with disable_hooks=%s, " "purge=%s flags", release, disable_hooks, purge) release_request = UninstallReleaseRequest( name=release, disable_hooks=disable_hooks, purge=purge) return stub.UninstallRelease(release_request, self.timeout, metadata=self.metadata) except Exception: status = self.get_release_status(release) raise ex.ReleaseException(release, status, 'Delete')
def install_release(self, chart, release, namespace, dry_run=False, values=None, wait=False, timeout=None): ''' Create a Helm Release ''' LOG.debug("wait: %s", wait) LOG.debug("timeout: %s", timeout) if values is None: values = Config(raw='') else: values = Config(raw=values) # build release install request try: stub = ReleaseServiceStub(self.channel) release_request = InstallReleaseRequest(chart=chart, dry_run=dry_run, values=values, name=release, namespace=namespace, wait=wait, timeout=timeout) return stub.InstallRelease(release_request, self.timeout, metadata=self.metadata) except Exception: raise tiller_exceptions.ReleaseInstallException(release, namespace)
def get_chart_templates(self, template_name, name, release_name, namespace, chart, disable_hooks, values): # returns some info LOG.info("Template( %s ) : %s ", template_name, name) stub = ReleaseServiceStub(self.channel) release_request = InstallReleaseRequest(chart=chart, dry_run=True, values=values, name=name, namespace=namespace, wait=False) templates = stub.InstallRelease(release_request, self.timeout, metadata=self.metadata) for template in yaml.load_all( getattr(templates.release, 'manifest', [])): if template_name == template.get('metadata', None).get('name', None): LOG.info(template_name) return template