Hello community, here is the log from the commit of package kail for openSUSE:Factory checked in at 2020-01-24 14:20:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kail (Old) and /work/SRC/openSUSE:Factory/.kail.new.26092 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kail" Fri Jan 24 14:20:59 2020 rev:4 rq:766236 version:0.13.0 Changes: -------- --- /work/SRC/openSUSE:Factory/kail/kail.changes 2019-11-03 10:49:36.630367435 +0100 +++ /work/SRC/openSUSE:Factory/.kail.new.26092/kail.changes 2020-01-24 14:21:10.290619496 +0100 @@ -1,0 +2,7 @@ +Wed Jan 22 09:22:35 UTC 2020 - Thorsten Kukuk <[email protected]> + +- Update to version 0.13.0 + - Add job filter +- Update vendor.tar.gz + +------------------------------------------------------------------- Old: ---- kail-0.12.0.tar.gz New: ---- kail-0.13.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kail.spec ++++++ --- /var/tmp/diff_new_pack.QycbI8/_old 2020-01-24 14:21:12.794620376 +0100 +++ /var/tmp/diff_new_pack.QycbI8/_new 2020-01-24 14:21:12.798620377 +0100 @@ -1,7 +1,7 @@ # # spec file for package kail # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2020 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: kail -Version: 0.12.0 +Version: 0.13.0 Release: 0 Summary: Kubernetes log viewer License: MIT ++++++ kail-0.12.0.tar.gz -> kail-0.13.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kail-0.12.0/README.md new/kail-0.13.0/README.md --- old/kail-0.12.0/README.md 2019-10-16 20:02:58.000000000 +0200 +++ new/kail-0.13.0/README.md 2020-01-21 22:35:38.000000000 +0100 @@ -21,6 +21,7 @@ `--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 +`-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 `-c, --containers CONTAINER-NAME` | restrict which containers logs are shown for diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kail-0.12.0/cmd/kail/main.go new/kail-0.13.0/cmd/kail/main.go --- old/kail-0.12.0/cmd/kail/main.go 2019-10-16 20:02:58.000000000 +0200 +++ new/kail-0.13.0/cmd/kail/main.go 2020-01-21 22:35:38.000000000 +0100 @@ -41,6 +41,7 @@ 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() @@ -253,6 +254,10 @@ dsb = dsb.WithDeployment(ids...) } + if ids := parseIds("job", *flagJob); len(ids) > 0 { + dsb = dsb.WithJob(ids...) + } + if ids := parseIds("ing", *flagIng); len(ids) > 0 { dsb = dsb.WithIngress(ids...) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kail-0.12.0/ds.go new/kail-0.13.0/ds.go --- old/kail-0.12.0/ds.go 2019-10-16 20:02:58.000000000 +0200 +++ new/kail-0.13.0/ds.go 2020-01-21 22:35:38.000000000 +0100 @@ -7,6 +7,7 @@ "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/node" "github.com/boz/kcache/types/pod" "github.com/boz/kcache/types/replicaset" @@ -29,6 +30,7 @@ rssBase replicaset.Controller dssBase daemonset.Controller deploymentsBase deployment.Controller + jobsBase job.Controller ingressesBase ingress.Controller pods pod.Controller @@ -38,6 +40,7 @@ rss replicaset.Controller dss daemonset.Controller deployments deployment.Controller + jobs job.Controller ingresses ingress.Controller readych chan struct{} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kail-0.12.0/ds_builder.go new/kail-0.13.0/ds_builder.go --- old/kail-0.12.0/ds_builder.go 2019-10-16 20:02:58.000000000 +0200 +++ new/kail-0.13.0/ds_builder.go 2020-01-21 22:35:38.000000000 +0100 @@ -2,6 +2,7 @@ import ( "context" + "github.com/boz/kcache/types/job" logutil "github.com/boz/go-logutil" "github.com/boz/kcache/filter" @@ -31,6 +32,7 @@ WithRS(id ...nsname.NSName) DSBuilder WithDS(id ...nsname.NSName) DSBuilder WithDeployment(id ...nsname.NSName) DSBuilder + WithJob(id ...nsname.NSName) DSBuilder WithIngress(id ...nsname.NSName) DSBuilder Create(ctx context.Context, cs kubernetes.Interface) (DS, error) @@ -52,6 +54,7 @@ rss []nsname.NSName dss []nsname.NSName deployments []nsname.NSName + jobs []nsname.NSName ingresses []nsname.NSName } @@ -110,6 +113,11 @@ return b } +func (b *dsBuilder) WithJob(id ...nsname.NSName) DSBuilder { + b.jobs = append(b.jobs, id...) + return b +} + func (b *dsBuilder) WithIngress(id ...nsname.NSName) DSBuilder { b.ingresses = append(b.ingresses, id...) return b @@ -321,6 +329,26 @@ } } + if len(b.jobs) != 0 { + ds.jobsBase, err = job.NewController(ctx, log, cs, namespace) + if err != nil { + ds.closeAll() + return nil, log.Err(err, "job base controller") + } + + ds.jobs, err = ds.jobsBase.CloneWithFilter(filter.NSName(b.jobs...)) + if err != nil { + ds.closeAll() + return nil, log.Err(err, "job controller") + } + + ds.pods, err = join.JobPods(ctx, ds.jobs, ds.pods) + if err != nil { + ds.closeAll() + return nil, log.Err(err, "job join") + } + } + if len(b.ingresses) != 0 { ds.ingressesBase, err = ingress.NewController(ctx, log, cs, namespace) if err != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kail-0.12.0/go.mod new/kail-0.13.0/go.mod --- old/kail-0.12.0/go.mod 2019-10-16 20:02:58.000000000 +0200 +++ new/kail-0.13.0/go.mod 2020-01-21 22:35:38.000000000 +0100 @@ -5,7 +5,7 @@ require ( github.com/boz/go-lifecycle v0.1.0 github.com/boz/go-logutil v0.1.0 - github.com/boz/kcache v0.2.0 + github.com/boz/kcache v0.3.0 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 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kail-0.12.0/go.sum new/kail-0.13.0/go.sum --- old/kail-0.12.0/go.sum 2019-10-16 20:02:58.000000000 +0200 +++ new/kail-0.13.0/go.sum 2020-01-21 22:35:38.000000000 +0100 @@ -20,6 +20,8 @@ github.com/boz/go-logutil v0.1.0/go.mod h1:CXkIsoVfGPwOxTaTaS+xry4ohurGiGuT3A84vSzX9BM= github.com/boz/kcache v0.2.0 h1:C5ksTjWVHjCP/GTQFZvavZAzgBouQG4LjCX95b+yw3Q= github.com/boz/kcache v0.2.0/go.mod h1:hQl4JnUxZ9Dv46mY+9aEFu5mQdFSOEN7abv28NCUcIc= +github.com/boz/kcache v0.3.0 h1:g0Fe6j6C06pydQuCNf8bKh4u9z1kd0v/gq8WhwFVOQM= +github.com/boz/kcache v0.3.0/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= ++++++ vendor.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/Makefile new/vendor/github.com/boz/kcache/Makefile --- old/vendor/github.com/boz/kcache/Makefile 2019-10-29 11:53:26.467961934 +0100 +++ new/vendor/github.com/boz/kcache/Makefile 2020-01-22 10:21:19.439212203 +0100 @@ -29,6 +29,7 @@ genny -in=types/gen/template.go -out=types/replicationcontroller/generated.go -pkg=replicationcontroller gen 'ObjectType=*corev1.ReplicationController' genny -in=types/gen/template.go -out=types/replicaset/generated.go -pkg=replicaset gen 'ObjectType=*extv1beta1.ReplicaSet' genny -in=types/gen/template.go -out=types/deployment/generated.go -pkg=deployment gen 'ObjectType=*extv1beta1.Deployment' + genny -in=types/gen/template.go -out=types/job/generated.go -pkg=job gen 'ObjectType=*batchv1.Job' genny -in=types/gen/template.go -out=types/daemonset/generated.go -pkg=daemonset gen 'ObjectType=*extv1beta1.DaemonSet' goimports -w types/**/generated.go $(GO) build ./types/... @@ -44,6 +45,7 @@ ./types/gen/gen corev1.ReplicationController > types/replicationcontroller/generated_test.go ./types/gen/gen extv1beta1.ReplicaSet > types/replicaset/generated_test.go ./types/gen/gen extv1beta1.Deployment > types/deployment/generated_test.go + ./types/gen/gen batchv1.Job > types/job/generated_test.go ./types/gen/gen extv1beta1.DaemonSet > types/daemonset/generated_test.go $(GO) test ./types/... @@ -53,6 +55,7 @@ ./join/gen/gen RC replicationcontroller '*corev1.ReplicationController' Pod pod > ./join/generated_rc_pod.go ./join/gen/gen RS replicaset '*extv1beta1.ReplicaSet' Pod pod > ./join/generated_rs_pod.go ./join/gen/gen Deployment deployment '*extv1beta1.Deployment' Pod pod > ./join/generated_deployment_pod.go + ./join/gen/gen Job job '*batchv1.Job' Pod pod > ./join/generated_job_pod.go ./join/gen/gen DaemonSet daemonset '*extv1beta1.DaemonSet' Pod pod > ./join/generated_daemonset_pod.go ./join/gen/gen Ingress ingress '*extv1beta1.Ingress' Service service > ./join/generated_ingress_service.go $(GO) build ./join diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/join/fiximport.go new/vendor/github.com/boz/kcache/join/fiximport.go --- old/vendor/github.com/boz/kcache/join/fiximport.go 2019-10-29 11:53:26.467961934 +0100 +++ new/vendor/github.com/boz/kcache/join/fiximport.go 2020-01-22 10:21:19.439212203 +0100 @@ -1,6 +1,7 @@ package join import ( + batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" extv1beta1 "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -17,3 +18,4 @@ var _ extv1beta1.Ingress var _ extv1beta1.ReplicaSet var _ extv1beta1.DaemonSet +var _ batchv1.Job diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/join/generated_job_pod.go new/vendor/github.com/boz/kcache/join/generated_job_pod.go --- old/vendor/github.com/boz/kcache/join/generated_job_pod.go 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/github.com/boz/kcache/join/generated_job_pod.go 2020-01-22 10:21:19.439212203 +0100 @@ -0,0 +1,57 @@ +/* + * AUTO GENERATED - DO NOT EDIT BY HAND + */ + +package join + +import ( + "context" + + logutil "github.com/boz/go-logutil" + "github.com/boz/kcache/filter" + "github.com/boz/kcache/types/job" + "github.com/boz/kcache/types/pod" + batchv1 "k8s.io/api/batch/v1" +) + +func JobPodsWith(ctx context.Context, + srcController job.Controller, + dstController pod.Publisher, + filterFn func(...*batchv1.Job) filter.ComparableFilter) (pod.Controller, error) { + + log := logutil.FromContextOrDefault(ctx) + + dst, err := dstController.CloneForFilter() + if err != nil { + return nil, err + } + + update := func(_ *batchv1.Job) { + objs, err := srcController.Cache().List() + if err != nil { + log.Err(err, "join(job,pod: cache list") + return + } + dst.Refilter(filterFn(objs...)) + } + + handler := job.BuildHandler(). + OnInitialize(func(objs []*batchv1.Job) { dst.Refilter(filterFn(objs...)) }). + OnCreate(update). + OnUpdate(update). + OnDelete(update). + Create() + + monitor, err := job.NewMonitor(srcController, handler) + if err != nil { + dst.Close() + return nil, log.Err(err, "join(job,pod): monitor") + } + + go func() { + <-dst.Done() + monitor.Close() + }() + + return dst, nil +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/join/join.go new/vendor/github.com/boz/kcache/join/join.go --- old/vendor/github.com/boz/kcache/join/join.go 2019-10-29 11:53:26.467961934 +0100 +++ new/vendor/github.com/boz/kcache/join/join.go 2020-01-22 10:21:19.439212203 +0100 @@ -2,10 +2,10 @@ import ( "context" - "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" @@ -32,6 +32,11 @@ return DeploymentPodsWith(ctx, src, dst, deployment.PodsFilter) } +func JobPods(ctx context.Context, + src job.Controller, dst pod.Publisher) (pod.Controller, error) { + return JobPodsWith(ctx, src, dst, job.PodsFilter) +} + func DaemonSetPods(ctx context.Context, src daemonset.Controller, dst pod.Publisher) (pod.Controller, error) { return DaemonSetPodsWith(ctx, src, dst, daemonset.PodsFilter) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/types/daemonset/fiximport.go new/vendor/github.com/boz/kcache/types/daemonset/fiximport.go --- old/vendor/github.com/boz/kcache/types/daemonset/fiximport.go 2019-10-29 11:53:26.467961934 +0100 +++ new/vendor/github.com/boz/kcache/types/daemonset/fiximport.go 2020-01-22 10:21:19.439212203 +0100 @@ -1,6 +1,7 @@ package daemonset import ( + batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" extv1beta1 "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -17,3 +18,4 @@ var _ extv1beta1.Ingress var _ extv1beta1.ReplicaSet var _ extv1beta1.DaemonSet +var _ batchv1.Job diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/types/deployment/fiximport.go new/vendor/github.com/boz/kcache/types/deployment/fiximport.go --- old/vendor/github.com/boz/kcache/types/deployment/fiximport.go 2019-10-29 11:53:26.467961934 +0100 +++ new/vendor/github.com/boz/kcache/types/deployment/fiximport.go 2020-01-22 10:21:19.439212203 +0100 @@ -1,6 +1,7 @@ package deployment import ( + batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" extv1beta1 "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -17,3 +18,4 @@ var _ extv1beta1.Ingress var _ extv1beta1.ReplicaSet var _ extv1beta1.DaemonSet +var _ batchv1.Job diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/types/ingress/fiximport.go new/vendor/github.com/boz/kcache/types/ingress/fiximport.go --- old/vendor/github.com/boz/kcache/types/ingress/fiximport.go 2019-10-29 11:53:26.467961934 +0100 +++ new/vendor/github.com/boz/kcache/types/ingress/fiximport.go 2020-01-22 10:21:19.439212203 +0100 @@ -1,6 +1,7 @@ package ingress import ( + batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" extv1beta1 "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -17,3 +18,4 @@ var _ extv1beta1.Ingress var _ extv1beta1.ReplicaSet var _ extv1beta1.DaemonSet +var _ batchv1.Job diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/types/job/client.go new/vendor/github.com/boz/kcache/types/job/client.go --- old/vendor/github.com/boz/kcache/types/job/client.go 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/github.com/boz/kcache/types/job/client.go 2020-01-22 10:21:19.439212203 +0100 @@ -0,0 +1,13 @@ +package job + +import ( + "github.com/boz/kcache/client" + "k8s.io/client-go/kubernetes" +) + +const resourceName = "jobs" + +func NewClient(cs kubernetes.Interface, ns string) client.Client { + scope := cs.BatchV1() + return client.ForResource(scope.RESTClient(), resourceName, ns) +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/types/job/filter.go new/vendor/github.com/boz/kcache/types/job/filter.go --- old/vendor/github.com/boz/kcache/types/job/filter.go 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/github.com/boz/kcache/types/job/filter.go 2020-01-22 10:21:19.439212203 +0100 @@ -0,0 +1,42 @@ +package job + +import ( + "sort" + + "github.com/boz/kcache/filter" + "github.com/boz/kcache/nsname" + batchv1 "k8s.io/api/batch/v1" +) + +func PodsFilter(sources ...*batchv1.Job) filter.ComparableFilter { + + // make a copy and sort + srcs := make([]*batchv1.Job, len(sources)) + copy(srcs, sources) + + sort.Slice(srcs, func(i, j int) bool { + if srcs[i].Namespace != srcs[j].Namespace { + return srcs[i].Namespace < srcs[j].Namespace + } + return srcs[i].Name < srcs[j].Name + }) + + filters := make([]filter.Filter, 0, len(srcs)) + + for _, svc := range srcs { + + var sfilter filter.Filter + if sel := svc.Spec.Selector; sel != nil { + sfilter = filter.LabelSelector(sel) + } else { + sfilter = filter.Labels(svc.Spec.Template.Labels) + } + + nsfilter := filter.NSName(nsname.New(svc.GetNamespace(), "")) + + filters = append(filters, filter.And(nsfilter, sfilter)) + } + + return filter.Or(filters...) + +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/types/job/fiximport.go new/vendor/github.com/boz/kcache/types/job/fiximport.go --- old/vendor/github.com/boz/kcache/types/job/fiximport.go 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/github.com/boz/kcache/types/job/fiximport.go 2020-01-22 10:21:19.439212203 +0100 @@ -0,0 +1,21 @@ +package job + +import ( + corev1 "k8s.io/api/core/v1" + extv1beta1 "k8s.io/api/extensions/v1beta1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + batchv1 "k8s.io/api/batch/v1" +) + +var _ metav1.Object +var _ corev1.Pod +var _ corev1.Secret +var _ corev1.Service +var _ corev1.Event +var _ corev1.Node +var _ corev1.ReplicationController +var _ extv1beta1.Deployment +var _ extv1beta1.Ingress +var _ extv1beta1.ReplicaSet +var _ extv1beta1.DaemonSet +var _ batchv1.Job diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/types/job/generated.go new/vendor/github.com/boz/kcache/types/job/generated.go --- old/vendor/github.com/boz/kcache/types/job/generated.go 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/github.com/boz/kcache/types/job/generated.go 2020-01-22 10:21:19.439212203 +0100 @@ -0,0 +1,506 @@ +// This file was automatically generated by genny. +// Any changes will be lost if this file is regenerated. +// see https://github.com/cheekybits/genny + +package job + +import ( + "context" + "fmt" + + logutil "github.com/boz/go-logutil" + "github.com/boz/kcache" + "github.com/boz/kcache/client" + "github.com/boz/kcache/filter" + batchv1 "k8s.io/api/batch/v1" + extv1beta1 "k8s.io/api/extensions/v1beta1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes" +) + +var ( + ErrInvalidType = fmt.Errorf("invalid type") + adapter = _adapter{} +) + +var _ = extv1beta1.Deployment{} + +type Event interface { + Type() kcache.EventType + Resource() *batchv1.Job +} + +type CacheReader interface { + Get(ns string, name string) (*batchv1.Job, error) + List() ([]*batchv1.Job, error) +} + +type CacheController interface { + Cache() CacheReader + Ready() <-chan struct{} +} + +type Subscription interface { + CacheController + Events() <-chan Event + Close() + Done() <-chan struct{} +} + +type Publisher interface { + Subscribe() (Subscription, error) + SubscribeWithFilter(filter.Filter) (FilterSubscription, error) + SubscribeForFilter() (FilterSubscription, error) + Clone() (Controller, error) + CloneWithFilter(filter.Filter) (FilterController, error) + CloneForFilter() (FilterController, error) +} + +type Controller interface { + CacheController + Publisher + Done() <-chan struct{} + Close() + Error() error +} + +type FilterSubscription interface { + Subscription + Refilter(filter.Filter) error +} + +type FilterController interface { + Controller + Refilter(filter.Filter) error +} + +type BaseHandler interface { + OnCreate(*batchv1.Job) + OnUpdate(*batchv1.Job) + OnDelete(*batchv1.Job) +} + +type Handler interface { + BaseHandler + OnInitialize([]*batchv1.Job) +} + +type HandlerBuilder interface { + OnInitialize(func([]*batchv1.Job)) HandlerBuilder + OnCreate(func(*batchv1.Job)) HandlerBuilder + OnUpdate(func(*batchv1.Job)) HandlerBuilder + OnDelete(func(*batchv1.Job)) HandlerBuilder + Create() Handler +} + +type UnitaryHandler interface { + BaseHandler + OnInitialize(*batchv1.Job) +} + +type UnitaryHandlerBuilder interface { + OnInitialize(func(*batchv1.Job)) UnitaryHandlerBuilder + OnCreate(func(*batchv1.Job)) UnitaryHandlerBuilder + OnUpdate(func(*batchv1.Job)) UnitaryHandlerBuilder + OnDelete(func(*batchv1.Job)) UnitaryHandlerBuilder + Create() UnitaryHandler +} + +type _adapter struct{} + +func (_adapter) adaptObject(obj metav1.Object) (*batchv1.Job, error) { + if obj, ok := obj.(*batchv1.Job); ok { + return obj, nil + } + return nil, ErrInvalidType +} + +func (a _adapter) adaptList(objs []metav1.Object) ([]*batchv1.Job, error) { + var ret []*batchv1.Job + for _, orig := range objs { + adapted, err := a.adaptObject(orig) + if err != nil { + continue + } + ret = append(ret, adapted) + } + return ret, nil +} + +func newCache(parent kcache.CacheReader) CacheReader { + return &cache{parent} +} + +type cache struct { + parent kcache.CacheReader +} + +func (c *cache) Get(ns string, name string) (*batchv1.Job, error) { + obj, err := c.parent.Get(ns, name) + switch { + case err != nil: + return nil, err + case obj == nil: + return nil, nil + default: + return adapter.adaptObject(obj) + } +} + +func (c *cache) List() ([]*batchv1.Job, error) { + objs, err := c.parent.List() + if err != nil { + return nil, err + } + return adapter.adaptList(objs) +} + +type event struct { + etype kcache.EventType + resource *batchv1.Job +} + +func wrapEvent(evt kcache.Event) (Event, error) { + obj, err := adapter.adaptObject(evt.Resource()) + if err != nil { + return nil, err + } + return event{evt.Type(), obj}, nil +} + +func (e event) Type() kcache.EventType { + return e.etype +} + +func (e event) Resource() *batchv1.Job { + return e.resource +} + +type subscription struct { + parent kcache.Subscription + cache CacheReader + outch chan Event +} + +func newSubscription(parent kcache.Subscription) *subscription { + s := &subscription{ + parent: parent, + cache: newCache(parent.Cache()), + outch: make(chan Event, kcache.EventBufsiz), + } + go s.run() + return s +} + +func (s *subscription) run() { + defer close(s.outch) + for pevt := range s.parent.Events() { + evt, err := wrapEvent(pevt) + if err != nil { + continue + } + select { + case s.outch <- evt: + default: + } + } +} + +func (s *subscription) Cache() CacheReader { + return s.cache +} + +func (s *subscription) Ready() <-chan struct{} { + return s.parent.Ready() +} + +func (s *subscription) Events() <-chan Event { + return s.outch +} + +func (s *subscription) Close() { + s.parent.Close() +} + +func (s *subscription) Done() <-chan struct{} { + return s.parent.Done() +} + +func NewController(ctx context.Context, log logutil.Log, cs kubernetes.Interface, ns string) (Controller, error) { + client := NewClient(cs, ns) + return BuildController(ctx, log, client) +} + +func BuildController(ctx context.Context, log logutil.Log, client client.Client) (Controller, error) { + parent, err := kcache.NewController(ctx, log, client) + if err != nil { + return nil, err + } + return newController(parent), nil +} + +func newController(parent kcache.Controller) *controller { + return &controller{parent, newCache(parent.Cache())} +} + +type controller struct { + parent kcache.Controller + cache CacheReader +} + +func (c *controller) Close() { + c.parent.Close() +} + +func (c *controller) Ready() <-chan struct{} { + return c.parent.Ready() +} + +func (c *controller) Done() <-chan struct{} { + return c.parent.Done() +} + +func (c *controller) Error() error { + return c.parent.Error() +} + +func (c *controller) Cache() CacheReader { + return c.cache +} + +func (c *controller) Subscribe() (Subscription, error) { + parent, err := c.parent.Subscribe() + if err != nil { + return nil, err + } + return newSubscription(parent), nil +} + +func (c *controller) SubscribeWithFilter(f filter.Filter) (FilterSubscription, error) { + parent, err := c.parent.SubscribeWithFilter(f) + if err != nil { + return nil, err + } + return newFilterSubscription(parent), nil +} + +func (c *controller) SubscribeForFilter() (FilterSubscription, error) { + parent, err := c.parent.SubscribeForFilter() + if err != nil { + return nil, err + } + return newFilterSubscription(parent), nil +} + +func (c *controller) Clone() (Controller, error) { + parent, err := c.parent.Clone() + if err != nil { + return nil, err + } + return newController(parent), nil +} + +func (c *controller) CloneWithFilter(f filter.Filter) (FilterController, error) { + parent, err := c.parent.CloneWithFilter(f) + if err != nil { + return nil, err + } + return newFilterController(parent), nil +} + +func (c *controller) CloneForFilter() (FilterController, error) { + parent, err := c.parent.CloneForFilter() + if err != nil { + return nil, err + } + return newFilterController(parent), nil +} + +type filterController struct { + controller + filterParent kcache.FilterController +} + +func newFilterController(parent kcache.FilterController) FilterController { + return &filterController{ + controller: controller{parent, newCache(parent.Cache())}, + filterParent: parent, + } +} + +func (c *filterController) Refilter(f filter.Filter) error { + return c.filterParent.Refilter(f) +} + +type filterSubscription struct { + subscription + filterParent kcache.FilterSubscription +} + +func newFilterSubscription(parent kcache.FilterSubscription) FilterSubscription { + return &filterSubscription{ + subscription: *newSubscription(parent), + filterParent: parent, + } +} + +func (s *filterSubscription) Refilter(f filter.Filter) error { + return s.filterParent.Refilter(f) +} + +func NewMonitor(publisher Publisher, handler Handler) (kcache.Monitor, error) { + phandler := kcache.BuildHandler(). + OnInitialize(func(objs []metav1.Object) { + aobjs, _ := adapter.adaptList(objs) + handler.OnInitialize(aobjs) + }). + OnCreate(func(obj metav1.Object) { + aobj, _ := adapter.adaptObject(obj) + handler.OnCreate(aobj) + }). + OnUpdate(func(obj metav1.Object) { + aobj, _ := adapter.adaptObject(obj) + handler.OnUpdate(aobj) + }). + OnDelete(func(obj metav1.Object) { + aobj, _ := adapter.adaptObject(obj) + handler.OnDelete(aobj) + }).Create() + + switch obj := publisher.(type) { + case *controller: + return kcache.NewMonitor(obj.parent, phandler) + case *filterController: + return kcache.NewMonitor(obj.parent, phandler) + default: + panic(fmt.Sprintf("Invalid publisher type: %T is not a *controller", publisher)) + } +} + +func ToUnitary(log logutil.Log, delegate UnitaryHandler) Handler { + return BuildHandler(). + OnInitialize(func(objs []*batchv1.Job) { + if count := len(objs); count > 1 { + log.Warnf("initialized with invalid count: %v", count) + return + } + if count := len(objs); count == 0 { + log.Debugf("initialized with empty result, ignoring") + return + } + delegate.OnInitialize(objs[0]) + }). + OnCreate(func(obj *batchv1.Job) { + delegate.OnCreate(obj) + }). + OnUpdate(func(obj *batchv1.Job) { + delegate.OnUpdate(obj) + }). + OnDelete(func(obj *batchv1.Job) { + delegate.OnDelete(obj) + }).Create() +} + +func BuildHandler() HandlerBuilder { + return &handlerBuilder{} +} + +func BuildUnitaryHandler() UnitaryHandlerBuilder { + return &unitaryHandlerBuilder{} +} + +type baseHandler struct { + onCreate func(*batchv1.Job) + onUpdate func(*batchv1.Job) + onDelete func(*batchv1.Job) +} + +type handler struct { + baseHandler + onInitialize func([]*batchv1.Job) +} +type handlerBuilder handler + +type unitaryHandler struct { + baseHandler + onInitialize func(*batchv1.Job) +} +type unitaryHandlerBuilder unitaryHandler + +func (hb *handlerBuilder) OnInitialize(fn func([]*batchv1.Job)) HandlerBuilder { + hb.onInitialize = fn + return hb +} + +func (hb *handlerBuilder) OnCreate(fn func(*batchv1.Job)) HandlerBuilder { + hb.onCreate = fn + return hb +} + +func (hb *handlerBuilder) OnUpdate(fn func(*batchv1.Job)) HandlerBuilder { + hb.onUpdate = fn + return hb +} + +func (hb *handlerBuilder) OnDelete(fn func(*batchv1.Job)) HandlerBuilder { + hb.onDelete = fn + return hb +} + +func (hb *handlerBuilder) Create() Handler { + return handler(*hb) +} + +func (h handler) OnInitialize(objs []*batchv1.Job) { + if h.onInitialize != nil { + h.onInitialize(objs) + } +} + +func (hb *unitaryHandlerBuilder) OnInitialize(fn func(*batchv1.Job)) UnitaryHandlerBuilder { + hb.onInitialize = fn + return hb +} + +func (hb *unitaryHandlerBuilder) OnCreate(fn func(*batchv1.Job)) UnitaryHandlerBuilder { + hb.onCreate = fn + return hb +} + +func (hb *unitaryHandlerBuilder) OnUpdate(fn func(*batchv1.Job)) UnitaryHandlerBuilder { + hb.onUpdate = fn + return hb +} + +func (hb *unitaryHandlerBuilder) OnDelete(fn func(*batchv1.Job)) UnitaryHandlerBuilder { + hb.onDelete = fn + return hb +} + +func (hb *unitaryHandlerBuilder) Create() UnitaryHandler { + return unitaryHandler(*hb) +} + +func (h unitaryHandler) OnInitialize(obj *batchv1.Job) { + if h.onInitialize != nil { + h.onInitialize(obj) + } +} + +func (h baseHandler) OnCreate(obj *batchv1.Job) { + if h.onCreate != nil { + h.onCreate(obj) + } +} + +func (h baseHandler) OnUpdate(obj *batchv1.Job) { + if h.onUpdate != nil { + h.onUpdate(obj) + } +} + +func (h baseHandler) OnDelete(obj *batchv1.Job) { + if h.onDelete != nil { + h.onDelete(obj) + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/types/node/fiximport.go new/vendor/github.com/boz/kcache/types/node/fiximport.go --- old/vendor/github.com/boz/kcache/types/node/fiximport.go 2019-10-29 11:53:26.467961934 +0100 +++ new/vendor/github.com/boz/kcache/types/node/fiximport.go 2020-01-22 10:21:19.439212203 +0100 @@ -1,6 +1,7 @@ package node import ( + batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" extv1beta1 "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -17,3 +18,4 @@ var _ extv1beta1.Ingress var _ extv1beta1.ReplicaSet var _ extv1beta1.DaemonSet +var _ batchv1.Job diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/types/pod/fiximport.go new/vendor/github.com/boz/kcache/types/pod/fiximport.go --- old/vendor/github.com/boz/kcache/types/pod/fiximport.go 2019-10-29 11:53:26.467961934 +0100 +++ new/vendor/github.com/boz/kcache/types/pod/fiximport.go 2020-01-22 10:21:19.439212203 +0100 @@ -1,6 +1,7 @@ package pod import ( + batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" extv1beta1 "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -17,3 +18,4 @@ var _ extv1beta1.Ingress var _ extv1beta1.ReplicaSet var _ extv1beta1.DaemonSet +var _ batchv1.Job diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/types/replicaset/fiximport.go new/vendor/github.com/boz/kcache/types/replicaset/fiximport.go --- old/vendor/github.com/boz/kcache/types/replicaset/fiximport.go 2019-10-29 11:53:26.471961934 +0100 +++ new/vendor/github.com/boz/kcache/types/replicaset/fiximport.go 2020-01-22 10:21:19.439212203 +0100 @@ -1,6 +1,7 @@ package replicaset import ( + batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" extv1beta1 "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -17,3 +18,4 @@ var _ extv1beta1.Ingress var _ extv1beta1.ReplicaSet var _ extv1beta1.DaemonSet +var _ batchv1.Job diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/types/replicationcontroller/fiximport.go new/vendor/github.com/boz/kcache/types/replicationcontroller/fiximport.go --- old/vendor/github.com/boz/kcache/types/replicationcontroller/fiximport.go 2019-10-29 11:53:26.471961934 +0100 +++ new/vendor/github.com/boz/kcache/types/replicationcontroller/fiximport.go 2020-01-22 10:21:19.439212203 +0100 @@ -1,6 +1,7 @@ package replicationcontroller import ( + batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" extv1beta1 "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -17,3 +18,4 @@ var _ extv1beta1.Ingress var _ extv1beta1.ReplicaSet var _ extv1beta1.DaemonSet +var _ batchv1.Job diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/boz/kcache/types/service/fiximport.go new/vendor/github.com/boz/kcache/types/service/fiximport.go --- old/vendor/github.com/boz/kcache/types/service/fiximport.go 2019-10-29 11:53:26.471961934 +0100 +++ new/vendor/github.com/boz/kcache/types/service/fiximport.go 2020-01-22 10:21:19.443212216 +0100 @@ -1,6 +1,7 @@ package service import ( + batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" extv1beta1 "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -17,3 +18,4 @@ var _ extv1beta1.Ingress var _ extv1beta1.ReplicaSet var _ extv1beta1.DaemonSet +var _ batchv1.Job diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt --- old/vendor/modules.txt 2019-10-29 11:53:26.667961928 +0100 +++ new/vendor/modules.txt 2020-01-22 10:21:19.555212562 +0100 @@ -56,7 +56,7 @@ # github.com/boz/go-logutil v0.1.0 github.com/boz/go-logutil github.com/boz/go-logutil/logrus -# github.com/boz/kcache v0.2.0 +# github.com/boz/kcache v0.3.0 github.com/boz/kcache github.com/boz/kcache/filter github.com/boz/kcache/join @@ -64,6 +64,7 @@ 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/node github.com/boz/kcache/types/pod github.com/boz/kcache/types/replicaset @@ -231,6 +232,7 @@ gopkg.in/yaml.v2 # k8s.io/api v0.0.0-20190515023547-db5a9d1c40eb k8s.io/api/core/v1 +k8s.io/api/batch/v1 k8s.io/api/extensions/v1beta1 k8s.io/api/authentication/v1 k8s.io/api/autoscaling/v1 @@ -245,7 +247,6 @@ k8s.io/api/authorization/v1beta1 k8s.io/api/autoscaling/v2beta1 k8s.io/api/autoscaling/v2beta2 -k8s.io/api/batch/v1 k8s.io/api/batch/v1beta1 k8s.io/api/batch/v2alpha1 k8s.io/api/certificates/v1beta1
