Skip to content

Commit

Permalink
support statefulset (#58)
Browse files Browse the repository at this point in the history
  • Loading branch information
shonge committed Sep 18, 2020
1 parent 58d7816 commit a29ca9b
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 35 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ Flag | Selection
`--rc NAME` | match pods belonging to the given replication controller
`--rs NAME` | match pods belonging to the given replica set
`-d, --deploy NAME` | match pods belonging to the given deployment
`--sts NAME` | match pods belonging to the given statefulset
`-j, --job NAME` | match pods belonging to the given job
`--node NODE-NAME` | match pods running on the given node
`--ing NAME` | match pods belonging to services targeted by the given ingress
Expand Down
29 changes: 17 additions & 12 deletions cmd/kail/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,18 +32,19 @@ var (
var (
flagIgnore = kingpin.Flag("ignore", "ignore selector").PlaceHolder("SELECTOR").Default("kail.ignore=true").Strings()

flagLabel = kingpin.Flag("label", "label").Short('l').PlaceHolder("SELECTOR").Strings()
flagPod = kingpin.Flag("pod", "pod").Short('p').PlaceHolder("NAME").Strings()
flagNs = kingpin.Flag("ns", "namespace").Short('n').PlaceHolder("NAME").Strings()
flagIgnoreNs = kingpin.Flag("ignore-ns", "ignore namespace").PlaceHolder("NAME").Default("kube-system").Strings()
flagSvc = kingpin.Flag("svc", "service").PlaceHolder("NAME").Strings()
flagRc = kingpin.Flag("rc", "replication controller").PlaceHolder("NAME").Strings()
flagRs = kingpin.Flag("rs", "replica set").PlaceHolder("NAME").Strings()
flagDs = kingpin.Flag("ds", "daemonset").PlaceHolder("NAME").Strings()
flagDeployment = kingpin.Flag("deploy", "deployment").Short('d').PlaceHolder("NAME").Strings()
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()
flagLabel = kingpin.Flag("label", "label").Short('l').PlaceHolder("SELECTOR").Strings()
flagPod = kingpin.Flag("pod", "pod").Short('p').PlaceHolder("NAME").Strings()
flagNs = kingpin.Flag("ns", "namespace").Short('n').PlaceHolder("NAME").Strings()
flagIgnoreNs = kingpin.Flag("ignore-ns", "ignore namespace").PlaceHolder("NAME").Default("kube-system").Strings()
flagSvc = kingpin.Flag("svc", "service").PlaceHolder("NAME").Strings()
flagRc = kingpin.Flag("rc", "replication controller").PlaceHolder("NAME").Strings()
flagRs = kingpin.Flag("rs", "replica set").PlaceHolder("NAME").Strings()
flagDs = kingpin.Flag("ds", "daemonset").PlaceHolder("NAME").Strings()
flagDeployment = kingpin.Flag("deploy", "deployment").Short('d').PlaceHolder("NAME").Strings()
flagStatefulSet = kingpin.Flag("sts", "statefulset").PlaceHolder("NAME").Strings()
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()

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

Expand Down Expand Up @@ -254,6 +255,10 @@ func createDSBuilder() kail.DSBuilder {
dsb = dsb.WithDeployment(ids...)
}

if ids := parseIds("sts", *flagStatefulSet); len(ids) > 0 {
dsb = dsb.WithStatefulSet(ids...)
}

if ids := parseIds("job", *flagJob); len(ids) > 0 {
dsb = dsb.WithJob(ids...)
}
Expand Down
23 changes: 14 additions & 9 deletions ds.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"github.com/boz/kcache/types/replicaset"
"github.com/boz/kcache/types/replicationcontroller"
"github.com/boz/kcache/types/service"
"github.com/boz/kcache/types/statefulset"
)

type DS interface {
Expand All @@ -30,18 +31,20 @@ type datastore struct {
rssBase replicaset.Controller
dssBase daemonset.Controller
deploymentsBase deployment.Controller
statefulsetBase statefulset.Controller
jobsBase job.Controller
ingressesBase ingress.Controller

pods pod.Controller
services service.Controller
nodes node.Controller
rcs replicationcontroller.Controller
rss replicaset.Controller
dss daemonset.Controller
deployments deployment.Controller
jobs job.Controller
ingresses ingress.Controller
pods pod.Controller
services service.Controller
nodes node.Controller
rcs replicationcontroller.Controller
rss replicaset.Controller
dss daemonset.Controller
deployments deployment.Controller
statefulsets statefulset.Controller
jobs job.Controller
ingresses ingress.Controller

readych chan struct{}
donech chan struct{}
Expand Down Expand Up @@ -117,6 +120,7 @@ func (ds *datastore) controllers() []cacheController {
ds.rssBase,
ds.dssBase,
ds.deploymentsBase,
ds.statefulsetBase,
ds.ingressesBase,
ds.pods,
ds.services,
Expand All @@ -125,6 +129,7 @@ func (ds *datastore) controllers() []cacheController {
ds.rss,
ds.dss,
ds.deployments,
ds.statefulsets,
ds.ingresses,
}

Expand Down
55 changes: 42 additions & 13 deletions ds_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package kail

import (
"context"

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

logutil "github.com/boz/go-logutil"
Expand All @@ -15,6 +16,7 @@ import (
"github.com/boz/kcache/types/replicaset"
"github.com/boz/kcache/types/replicationcontroller"
"github.com/boz/kcache/types/service"
"github.com/boz/kcache/types/statefulset"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/client-go/kubernetes"
Expand All @@ -32,6 +34,7 @@ type DSBuilder interface {
WithRS(id ...nsname.NSName) DSBuilder
WithDS(id ...nsname.NSName) DSBuilder
WithDeployment(id ...nsname.NSName) DSBuilder
WithStatefulSet(id ...nsname.NSName) DSBuilder
WithJob(id ...nsname.NSName) DSBuilder
WithIngress(id ...nsname.NSName) DSBuilder

Expand All @@ -43,19 +46,20 @@ func NewDSBuilder() DSBuilder {
}

type dsBuilder struct {
ignore []labels.Selector
selectors []labels.Selector
pods []nsname.NSName
namespaces []string
ignoreNS []string
services []nsname.NSName
nodes []string
rcs []nsname.NSName
rss []nsname.NSName
dss []nsname.NSName
deployments []nsname.NSName
jobs []nsname.NSName
ingresses []nsname.NSName
ignore []labels.Selector
selectors []labels.Selector
pods []nsname.NSName
namespaces []string
ignoreNS []string
services []nsname.NSName
nodes []string
rcs []nsname.NSName
rss []nsname.NSName
dss []nsname.NSName
deployments []nsname.NSName
statefulsets []nsname.NSName
jobs []nsname.NSName
ingresses []nsname.NSName
}

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

func (b *dsBuilder) WithStatefulSet(id ...nsname.NSName) DSBuilder {
b.statefulsets = append(b.statefulsets, id...)
return b
}

func (b *dsBuilder) WithJob(id ...nsname.NSName) DSBuilder {
b.jobs = append(b.jobs, id...)
return b
Expand Down Expand Up @@ -329,6 +338,26 @@ func (b *dsBuilder) Create(ctx context.Context, cs kubernetes.Interface) (DS, er
}
}

if len(b.statefulsets) != 0 {
ds.statefulsetBase, err = statefulset.NewController(ctx, log, cs, namespace)
if err != nil {
ds.closeAll()
return nil, log.Err(err, "statefulset base controller")
}

ds.statefulsets, err = ds.statefulsetBase.CloneWithFilter(filter.NSName(b.statefulsets...))
if err != nil {
ds.closeAll()
return nil, log.Err(err, "statefulset controller")
}

ds.pods, err = join.StatefulSetPods(ctx, ds.statefulsets, ds.pods)
if err != nil {
ds.closeAll()
return nil, log.Err(err, "statefulset join")
}
}

if len(b.jobs) != 0 {
ds.jobsBase, err = job.NewController(ctx, log, cs, namespace)
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ go 1.13
require (
github.com/boz/go-lifecycle v0.1.0
github.com/boz/go-logutil v0.1.0
github.com/boz/kcache v0.4.0
github.com/boz/kcache v0.4.1-0.20200916082658-69f5988adb8d
github.com/dgrijalva/jwt-go v0.0.0-20170608005149-a539ee1a749a // indirect
github.com/fatih/color v1.7.0
github.com/googleapis/gnostic v0.0.0-20170807220725-57b029087370 // indirect
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ github.com/boz/kcache v0.3.0 h1:g0Fe6j6C06pydQuCNf8bKh4u9z1kd0v/gq8WhwFVOQM=
github.com/boz/kcache v0.3.0/go.mod h1:hQl4JnUxZ9Dv46mY+9aEFu5mQdFSOEN7abv28NCUcIc=
github.com/boz/kcache v0.4.0 h1:zM55IqBD2eDHSG0W8nIb0vYmh/L7Q8lHkPYhYfiqeIM=
github.com/boz/kcache v0.4.0/go.mod h1:hQl4JnUxZ9Dv46mY+9aEFu5mQdFSOEN7abv28NCUcIc=
github.com/boz/kcache v0.4.1-0.20200916082658-69f5988adb8d h1:ULH+DBFNbq7TD5MfYeJ/qTmpct3wv0fWl2d0RW0cPGU=
github.com/boz/kcache v0.4.1-0.20200916082658-69f5988adb8d/go.mod h1:hQl4JnUxZ9Dv46mY+9aEFu5mQdFSOEN7abv28NCUcIc=
github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw=
github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e h1:V9a67dfYqPLAvzk5hMQOXYJlZ4SLIXgyKIE+ZiHzgGQ=
github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e/go.mod h1:9IOqJGCPMSc6E5ydlp5NIonxObaeu/Iub/X03EKPVYo=
Expand Down

0 comments on commit a29ca9b

Please sign in to comment.