mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-10 12:32:03 +00:00
Update lister-gen
- Remove "zz_generated." prefix from generated lister file names - Add support for expansion interfaces
This commit is contained in:
parent
27118fe23a
commit
9154db0542
@ -13,6 +13,7 @@ load(
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = [
|
||||
"expansion.go",
|
||||
"lister.go",
|
||||
"tags.go",
|
||||
],
|
||||
|
65
cmd/libs/go2idl/lister-gen/generators/expansion.go
Normal file
65
cmd/libs/go2idl/lister-gen/generators/expansion.go
Normal file
@ -0,0 +1,65 @@
|
||||
/*
|
||||
Copyright 2016 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package generators
|
||||
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"k8s.io/gengo/generator"
|
||||
"k8s.io/gengo/types"
|
||||
)
|
||||
|
||||
// expansionGenerator produces a file for a expansion interfaces.
|
||||
type expansionGenerator struct {
|
||||
generator.DefaultGen
|
||||
packagePath string
|
||||
types []*types.Type
|
||||
}
|
||||
|
||||
// We only want to call GenerateType() once per group.
|
||||
func (g *expansionGenerator) Filter(c *generator.Context, t *types.Type) bool {
|
||||
return t == g.types[0]
|
||||
}
|
||||
|
||||
func (g *expansionGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||
sw := generator.NewSnippetWriter(w, c, "$", "$")
|
||||
for _, t := range g.types {
|
||||
if _, err := os.Stat(filepath.Join(g.packagePath, strings.ToLower(t.Name.Name+"_expansion.go"))); os.IsNotExist(err) {
|
||||
sw.Do(expansionInterfaceTemplate, t)
|
||||
namespaced := !extractBoolTagOrDie("nonNamespaced", t.SecondClosestCommentLines)
|
||||
if namespaced {
|
||||
sw.Do(namespacedExpansionInterfaceTemplate, t)
|
||||
}
|
||||
}
|
||||
}
|
||||
return sw.Error()
|
||||
}
|
||||
|
||||
var expansionInterfaceTemplate = `
|
||||
// $.|public$ListerExpansion allows custom methods to be added to
|
||||
// $.|public$Lister.
|
||||
type $.|public$ListerExpansion interface {}
|
||||
`
|
||||
|
||||
var namespacedExpansionInterfaceTemplate = `
|
||||
// $.|public$NamespaceListerExpansion allows custom methods to be added to
|
||||
// $.|public$NamespaeLister.
|
||||
type $.|public$NamespaceListerExpansion interface {}
|
||||
`
|
@ -114,19 +114,35 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
|
||||
internalGVPkg = strings.Join(parts[0:len(parts)-1], "/")
|
||||
}
|
||||
|
||||
var typesToGenerate []*types.Type
|
||||
for _, t := range p.Types {
|
||||
// filter out types which dont have genclient=true.
|
||||
if extractBoolTagOrDie("genclient", t.SecondClosestCommentLines) == false {
|
||||
continue
|
||||
}
|
||||
typesToGenerate = append(typesToGenerate, t)
|
||||
}
|
||||
orderer := namer.Orderer{Namer: namer.NewPrivateNamer(0)}
|
||||
typesToGenerate = orderer.OrderTypes(typesToGenerate)
|
||||
|
||||
packagePath := filepath.Join(arguments.OutputPackagePath, strings.ToLower(gv.Group.NonEmpty()), strings.ToLower(gv.Version.NonEmpty()))
|
||||
packageList = append(packageList, &generator.DefaultPackage{
|
||||
PackageName: strings.ToLower(gv.Version.NonEmpty()),
|
||||
PackagePath: filepath.Join(arguments.OutputPackagePath, strings.ToLower(gv.Group.NonEmpty()), strings.ToLower(gv.Version.NonEmpty())),
|
||||
PackagePath: packagePath,
|
||||
HeaderText: boilerplate,
|
||||
GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) {
|
||||
for _, t := range p.Types {
|
||||
// filter out types which dont have genclient=true.
|
||||
if extractBoolTagOrDie("genclient", t.SecondClosestCommentLines) == false {
|
||||
continue
|
||||
}
|
||||
generators = append(generators, &expansionGenerator{
|
||||
DefaultGen: generator.DefaultGen{
|
||||
OptionalName: "expansion_generated",
|
||||
},
|
||||
packagePath: filepath.Join(arguments.OutputBase, packagePath),
|
||||
types: typesToGenerate,
|
||||
})
|
||||
|
||||
for _, t := range typesToGenerate {
|
||||
generators = append(generators, &listerGenerator{
|
||||
DefaultGen: generator.DefaultGen{
|
||||
OptionalName: arguments.OutputFileBaseName + "." + strings.ToLower(t.Name.Name),
|
||||
OptionalName: strings.ToLower(t.Name.Name),
|
||||
},
|
||||
outputPackage: arguments.OutputPackagePath,
|
||||
groupVersion: gv,
|
||||
@ -248,6 +264,7 @@ type $.type|public$Lister interface {
|
||||
List(selector labels.Selector) (ret []*$.type|raw$, err error)
|
||||
// $.type|publicPlural$ returns an object that can list and get $.type|publicPlural$.
|
||||
$.type|publicPlural$(namespace string) $.type|public$NamespaceLister
|
||||
$.type|public$ListerExpansion
|
||||
}
|
||||
`
|
||||
|
||||
@ -258,6 +275,7 @@ type $.type|public$Lister interface {
|
||||
List(selector labels.Selector) (ret []*$.type|raw$, err error)
|
||||
// Get retrieves the $.type|public$ from the index for a given name.
|
||||
Get(name string) (*$.type|raw$, error)
|
||||
$.type|public$ListerExpansion
|
||||
}
|
||||
`
|
||||
|
||||
@ -314,6 +332,7 @@ type $.type|public$NamespaceLister interface {
|
||||
List(selector labels.Selector) (ret []*$.type|raw$, err error)
|
||||
// Get retrieves the $.type|public$ from the indexer for a given namespace and name.
|
||||
Get(name string) (*$.type|raw$, error)
|
||||
$.type|public$NamespaceListerExpansion
|
||||
}
|
||||
`
|
||||
|
||||
|
@ -28,11 +28,10 @@ import (
|
||||
|
||||
func main() {
|
||||
arguments := &args.GeneratorArgs{
|
||||
OutputBase: args.DefaultSourceTree(),
|
||||
GoHeaderFilePath: filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt"),
|
||||
GeneratedBuildTag: "ignore_autogenerated",
|
||||
OutputFileBaseName: "zz_generated",
|
||||
OutputPackagePath: "k8s.io/kubernetes/pkg/client/listers",
|
||||
OutputBase: args.DefaultSourceTree(),
|
||||
GoHeaderFilePath: filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt"),
|
||||
GeneratedBuildTag: "ignore_autogenerated",
|
||||
OutputPackagePath: "k8s.io/kubernetes/pkg/client/listers",
|
||||
}
|
||||
arguments.AddFlags(pflag.CommandLine)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user