Skip to content

Commit

Permalink
feat: regex filter pod name
Browse files Browse the repository at this point in the history
Signed-off-by: Extreme <[email protected]>
  • Loading branch information
Forget-C authored and chandanpasunoori committed Jan 22, 2024
1 parent 419f57a commit 7a852ec
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 2 deletions.
5 changes: 5 additions & 0 deletions cmd/kail/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ var (
flagJob = kingpin.Flag("job", "job").Short('j').PlaceHolder("NAME").Strings()
flagNode = kingpin.Flag("node", "node").PlaceHolder("NAME").Strings()
flagIng = kingpin.Flag("ing", "ingress").PlaceHolder("NAME").Strings()
flagRegex = kingpin.Flag("regex", "regex to filter pod name").PlaceHolder("REGEX").String()

flagContext = kingpin.Flag("context", "kubernetes context").PlaceHolder("CONTEXT-NAME").String()

Expand Down Expand Up @@ -288,6 +289,10 @@ func createDSBuilder() kail.DSBuilder {
dsb = dsb.WithIngress(ids...)
}

if flagRegex != nil && *flagRegex != "" {
dsb = dsb.WithRegex(*flagRegex)
}

return dsb
}

Expand Down
22 changes: 20 additions & 2 deletions ds_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,14 @@ package kail
import (
"context"

"github.com/boz/kcache/types/job"

logutil "github.com/boz/go-logutil"
"github.com/boz/kcache/filter"
"github.com/boz/kcache/join"
"github.com/boz/kcache/nsname"
"github.com/boz/kcache/types/daemonset"
"github.com/boz/kcache/types/deployment"
"github.com/boz/kcache/types/ingress"
"github.com/boz/kcache/types/job"
"github.com/boz/kcache/types/pod"
"github.com/boz/kcache/types/replicaset"
"github.com/boz/kcache/types/replicationcontroller"
Expand All @@ -37,6 +36,7 @@ type DSBuilder interface {
WithStatefulSet(id ...nsname.NSName) DSBuilder
WithJob(id ...nsname.NSName) DSBuilder
WithIngress(id ...nsname.NSName) DSBuilder
WithRegex(s string) DSBuilder

Create(ctx context.Context, cs kubernetes.Interface) (DS, error)
}
Expand All @@ -60,6 +60,7 @@ type dsBuilder struct {
statefulsets []nsname.NSName
jobs []nsname.NSName
ingresses []nsname.NSName
regex string
}

func (b *dsBuilder) WithIgnore(selector ...labels.Selector) DSBuilder {
Expand Down Expand Up @@ -132,6 +133,11 @@ func (b *dsBuilder) WithIngress(id ...nsname.NSName) DSBuilder {
return b
}

func (b *dsBuilder) WithRegex(s string) DSBuilder {
b.regex = s
return b
}

func (b *dsBuilder) Create(ctx context.Context, cs kubernetes.Interface) (DS, error) {
log := logutil.FromContextOrDefault(ctx)

Expand Down Expand Up @@ -178,6 +184,18 @@ func (b *dsBuilder) Create(ctx context.Context, cs kubernetes.Interface) (DS, er
return nil, log.Err(err, "labels filter")
}
}
if len(b.regex) != 0 {
regexFilter, err := NameRegexFileter(b.regex)
if err != nil {
ds.closeAll()
return nil, log.Err(err, "regex filter")
}
ds.pods, err = ds.pods.CloneWithFilter(regexFilter)
if err != nil {
ds.closeAll()
return nil, log.Err(err, "regex filter")
}
}

if len(b.selectors) != 0 {
filters := make([]filter.Filter, 0, len(b.selectors))
Expand Down
26 changes: 26 additions & 0 deletions filter.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package kail

import (
"regexp"
"sort"

"github.com/boz/kcache/filter"
"github.com/boz/kcache/nsname"
"k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

type ContainerFilter interface {
Expand Down Expand Up @@ -71,3 +74,26 @@ func SourcesForPod(

return id, sources
}

func NameRegexFileter(regex string) (filter.Filter, error) {
compile, err := regexp.Compile(regex)
if err != nil {
return nil, err
}
return nameRegexFilter{compile}, nil
}

type nameRegexFilter struct {
regex *regexp.Regexp
}

func (f nameRegexFilter) Accept(obj metav1.Object) bool {
return f.regex.MatchString(obj.GetName())
}

func (f nameRegexFilter) Equals(other filter.Filter) bool {
if other, ok := other.(nameRegexFilter); ok {
return f.regex.String() == other.regex.String()
}
return false
}

0 comments on commit 7a852ec

Please sign in to comment.