Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
    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
Exemple #5
0
    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
Exemple #6
0
    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)
Exemple #7
0
    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)
Exemple #8
0
    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)
Exemple #9
0
    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)
Exemple #10
0
    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)
Exemple #11
0
    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)
Exemple #12
0
    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)
Exemple #13
0
    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)
Exemple #14
0
    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
Exemple #15
0
    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')
Exemple #16
0
    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)
Exemple #17
0
    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')
Exemple #18
0
    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)
Exemple #19
0
    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')
Exemple #20
0
    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)
Exemple #21
0
    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