@@ -10,8 +10,6 @@ import (
1010 "reflect"
1111 "strings"
1212
13- "k8s.io/apimachinery/pkg/api/errors"
14-
1513 "github.com/spf13/pflag"
1614 "helm.sh/helm/v3/pkg/action"
1715 "helm.sh/helm/v3/pkg/chart"
@@ -25,6 +23,7 @@ import (
2523 v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2624 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
2725 "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
26+ "k8s.io/apimachinery/pkg/api/errors"
2827 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2928 "k8s.io/apimachinery/pkg/util/yaml"
3029 "k8s.io/cli-runtime/pkg/genericclioptions"
@@ -274,20 +273,25 @@ func (c *HelmClient) ListReleases(opts ListOptions) ([]*release.Release, error)
274273 filterByName = true
275274 filter = strings .ToLower (opts .Filter )
276275 }
277- for _ , v := range rels {
278- if filterByName && ! strings .Contains (strings .ToLower (v .Name ), filter ) {
279- continue
280- }
281276
282- t , ok := v .Config [walkAroundCustomTagKey ]
283- if ! ok {
277+ // TODO: go routine it ?
278+ for _ , rel := range rels {
279+ if filterByName && ! strings .Contains (strings .ToLower (rel .Name ), filter ) {
284280 continue
285281 }
286- tag := strings .TrimSpace (t .(string ))
287- if tag != opts .Selector {
288- continue
282+
283+ for key , val := range opts .Selectors {
284+ sel , ok := rel .Config [key ]
285+ if ! ok {
286+ continue
287+ }
288+
289+ if strings .TrimSpace (sel .(string )) != val {
290+ continue
291+ }
289292 }
290- rr = append (rr , v )
293+
294+ rr = append (rr , rel )
291295 }
292296 return rr , nil
293297}
@@ -302,24 +306,28 @@ func (c *HelmClient) GetRelease(name string) (*release.Release, error) {
302306 return c .getRelease (name )
303307}
304308
305- // Transparent returns the transparent value if not existed, returns ""
306- func (c * HelmClient ) Transparent (releaseName string ) string {
307- r , err := c .getRelease (releaseName )
308- if err != nil {
309- return ""
310- }
311- return c .TransparentWithRelease (r )
309+ func toAnnotationKey (origin string ) string {
310+ return fmt .Sprintf (fmtAnnoationKey , origin )
312311}
313312
314- // TransparentWithRelease returns the transparent value bind to the release if not existed, returns ""
315- func (c * HelmClient ) TransparentWithRelease (rel * release.Release ) string {
316- if v , ok := rel .Config [transparentKey ]; ! ok {
313+ // AnnotationWithRelease get the annoation from release by key
314+ func (c * HelmClient ) AnnotationWithRelease (rel * release.Release , key string ) string {
315+ if v , ok := rel .Config [toAnnotationKey ( key ) ]; ! ok {
317316 return ""
318317 } else {
319318 return v .(string )
320319 }
321320}
322321
322+ // Annotation get the Annotation with the key from the release
323+ func (c * HelmClient ) Annotation (releaseName , key string ) string {
324+ r , err := c .getRelease (releaseName )
325+ if err != nil {
326+ return ""
327+ }
328+ return c .AnnotationWithRelease (r , key )
329+ }
330+
323331// RollbackRelease implicitly rolls back a release to the last revision.
324332func (c * HelmClient ) RollbackRelease (spec * ChartSpec ) error {
325333 return c .rollbackRelease (spec )
0 commit comments