mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-11 13:02:14 +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(
|
go_library(
|
||||||
name = "go_default_library",
|
name = "go_default_library",
|
||||||
srcs = [
|
srcs = [
|
||||||
|
"expansion.go",
|
||||||
"lister.go",
|
"lister.go",
|
||||||
"tags.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], "/")
|
internalGVPkg = strings.Join(parts[0:len(parts)-1], "/")
|
||||||
}
|
}
|
||||||
|
|
||||||
packageList = append(packageList, &generator.DefaultPackage{
|
var typesToGenerate []*types.Type
|
||||||
PackageName: strings.ToLower(gv.Version.NonEmpty()),
|
|
||||||
PackagePath: filepath.Join(arguments.OutputPackagePath, strings.ToLower(gv.Group.NonEmpty()), strings.ToLower(gv.Version.NonEmpty())),
|
|
||||||
HeaderText: boilerplate,
|
|
||||||
GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) {
|
|
||||||
for _, t := range p.Types {
|
for _, t := range p.Types {
|
||||||
// filter out types which dont have genclient=true.
|
// filter out types which dont have genclient=true.
|
||||||
if extractBoolTagOrDie("genclient", t.SecondClosestCommentLines) == false {
|
if extractBoolTagOrDie("genclient", t.SecondClosestCommentLines) == false {
|
||||||
continue
|
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: packagePath,
|
||||||
|
HeaderText: boilerplate,
|
||||||
|
GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) {
|
||||||
|
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{
|
generators = append(generators, &listerGenerator{
|
||||||
DefaultGen: generator.DefaultGen{
|
DefaultGen: generator.DefaultGen{
|
||||||
OptionalName: arguments.OutputFileBaseName + "." + strings.ToLower(t.Name.Name),
|
OptionalName: strings.ToLower(t.Name.Name),
|
||||||
},
|
},
|
||||||
outputPackage: arguments.OutputPackagePath,
|
outputPackage: arguments.OutputPackagePath,
|
||||||
groupVersion: gv,
|
groupVersion: gv,
|
||||||
@ -248,6 +264,7 @@ type $.type|public$Lister interface {
|
|||||||
List(selector labels.Selector) (ret []*$.type|raw$, err error)
|
List(selector labels.Selector) (ret []*$.type|raw$, err error)
|
||||||
// $.type|publicPlural$ returns an object that can list and get $.type|publicPlural$.
|
// $.type|publicPlural$ returns an object that can list and get $.type|publicPlural$.
|
||||||
$.type|publicPlural$(namespace string) $.type|public$NamespaceLister
|
$.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)
|
List(selector labels.Selector) (ret []*$.type|raw$, err error)
|
||||||
// Get retrieves the $.type|public$ from the index for a given name.
|
// Get retrieves the $.type|public$ from the index for a given name.
|
||||||
Get(name string) (*$.type|raw$, error)
|
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)
|
List(selector labels.Selector) (ret []*$.type|raw$, err error)
|
||||||
// Get retrieves the $.type|public$ from the indexer for a given namespace and name.
|
// Get retrieves the $.type|public$ from the indexer for a given namespace and name.
|
||||||
Get(name string) (*$.type|raw$, error)
|
Get(name string) (*$.type|raw$, error)
|
||||||
|
$.type|public$NamespaceListerExpansion
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
|
@ -31,7 +31,6 @@ func main() {
|
|||||||
OutputBase: args.DefaultSourceTree(),
|
OutputBase: args.DefaultSourceTree(),
|
||||||
GoHeaderFilePath: filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt"),
|
GoHeaderFilePath: filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt"),
|
||||||
GeneratedBuildTag: "ignore_autogenerated",
|
GeneratedBuildTag: "ignore_autogenerated",
|
||||||
OutputFileBaseName: "zz_generated",
|
|
||||||
OutputPackagePath: "k8s.io/kubernetes/pkg/client/listers",
|
OutputPackagePath: "k8s.io/kubernetes/pkg/client/listers",
|
||||||
}
|
}
|
||||||
arguments.AddFlags(pflag.CommandLine)
|
arguments.AddFlags(pflag.CommandLine)
|
||||||
|
Loading…
Reference in New Issue
Block a user