mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
client-gen: allow doc comment to override API group name
This commit is contained in:
parent
4e8e4a574c
commit
a3467a06cb
@ -63,7 +63,7 @@ func generatedBy(customArgs clientgenargs.Args) string {
|
|||||||
return fmt.Sprintf("\n// This package is generated by client-gen with the default arguments.\n\n")
|
return fmt.Sprintf("\n// This package is generated by client-gen with the default arguments.\n\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
func packageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packageBasePath string, srcTreePath string, boilerplate []byte, generatedBy string) generator.Package {
|
func packageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packageBasePath string, srcTreePath string, inputPath string, boilerplate []byte, generatedBy string) generator.Package {
|
||||||
outputPackagePath := filepath.Join(packageBasePath, gv.Group, gv.Version)
|
outputPackagePath := filepath.Join(packageBasePath, gv.Group, gv.Version)
|
||||||
return &generator.DefaultPackage{
|
return &generator.DefaultPackage{
|
||||||
PackageName: gv.Version,
|
PackageName: gv.Version,
|
||||||
@ -99,6 +99,7 @@ func packageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packag
|
|||||||
OptionalName: normalization.BeforeFirstDot(gv.Group) + "_client",
|
OptionalName: normalization.BeforeFirstDot(gv.Group) + "_client",
|
||||||
},
|
},
|
||||||
outputPackage: outputPackagePath,
|
outputPackage: outputPackagePath,
|
||||||
|
inputPacakge: inputPath,
|
||||||
group: gv.Group,
|
group: gv.Group,
|
||||||
version: gv.Version,
|
version: gv.Version,
|
||||||
types: typeList,
|
types: typeList,
|
||||||
@ -216,9 +217,10 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
|
|||||||
orderer := namer.Orderer{Namer: namer.NewPrivateNamer(0)}
|
orderer := namer.Orderer{Namer: namer.NewPrivateNamer(0)}
|
||||||
for _, gv := range customArgs.GroupVersions {
|
for _, gv := range customArgs.GroupVersions {
|
||||||
types := gvToTypes[gv]
|
types := gvToTypes[gv]
|
||||||
packageList = append(packageList, packageForGroup(normalization.GroupVersion(gv), orderer.OrderTypes(types), typedClientBasePath, arguments.OutputBase, boilerplate, generatedBy))
|
inputPath := customArgs.GroupVersionToInputPath[gv]
|
||||||
|
packageList = append(packageList, packageForGroup(normalization.GroupVersion(gv), orderer.OrderTypes(types), typedClientBasePath, arguments.OutputBase, inputPath, boilerplate, generatedBy))
|
||||||
if customArgs.FakeClient {
|
if customArgs.FakeClient {
|
||||||
packageList = append(packageList, fake.PackageForGroup(normalization.GroupVersion(gv), orderer.OrderTypes(types), typedClientBasePath, arguments.OutputBase, boilerplate, generatedBy))
|
packageList = append(packageList, fake.PackageForGroup(normalization.GroupVersion(gv), orderer.OrderTypes(types), typedClientBasePath, arguments.OutputBase, inputPath, boilerplate, generatedBy))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
)
|
)
|
||||||
|
|
||||||
func PackageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packageBasePath string, srcTreePath string, boilerplate []byte, generatedBy string) generator.Package {
|
func PackageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packageBasePath string, srcTreePath string, inputPath string, boilerplate []byte, generatedBy string) generator.Package {
|
||||||
outputPackagePath := filepath.Join(packageBasePath, gv.Group, gv.Version, "fake")
|
outputPackagePath := filepath.Join(packageBasePath, gv.Group, gv.Version, "fake")
|
||||||
// TODO: should make this a function, called by here and in client-generator.go
|
// TODO: should make this a function, called by here and in client-generator.go
|
||||||
realClientPath := filepath.Join(packageBasePath, gv.Group, gv.Version)
|
realClientPath := filepath.Join(packageBasePath, gv.Group, gv.Version)
|
||||||
@ -55,6 +55,7 @@ func PackageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packag
|
|||||||
},
|
},
|
||||||
outputPackage: outputPackagePath,
|
outputPackage: outputPackagePath,
|
||||||
group: normalization.BeforeFirstDot(gv.Group),
|
group: normalization.BeforeFirstDot(gv.Group),
|
||||||
|
inputPackage: inputPath,
|
||||||
version: gv.Version,
|
version: gv.Version,
|
||||||
typeToMatch: t,
|
typeToMatch: t,
|
||||||
imports: generator.NewImportTracker(),
|
imports: generator.NewImportTracker(),
|
||||||
|
@ -31,6 +31,7 @@ type genFakeForType struct {
|
|||||||
generator.DefaultGen
|
generator.DefaultGen
|
||||||
outputPackage string
|
outputPackage string
|
||||||
group string
|
group string
|
||||||
|
inputPackage string
|
||||||
version string
|
version string
|
||||||
typeToMatch *types.Type
|
typeToMatch *types.Type
|
||||||
imports namer.ImportTracker
|
imports namer.ImportTracker
|
||||||
@ -87,6 +88,20 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io.
|
|||||||
if canonicalVersion == "unversioned" {
|
if canonicalVersion == "unversioned" {
|
||||||
canonicalVersion = ""
|
canonicalVersion = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
groupName := g.group
|
||||||
|
if g.group == "core" {
|
||||||
|
groupName = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// allow user to define a group name that's different from the one parsed from the directory.
|
||||||
|
for _, comment := range c.Universe.Package(g.inputPackage).DocComments {
|
||||||
|
comment = strings.TrimLeft(comment, "//")
|
||||||
|
if override, ok := types.ExtractCommentTags("+", comment)["groupName"]; ok {
|
||||||
|
groupName = override
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"type": t,
|
"type": t,
|
||||||
"package": pkg,
|
"package": pkg,
|
||||||
@ -94,6 +109,7 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io.
|
|||||||
"namespaced": namespaced,
|
"namespaced": namespaced,
|
||||||
"Group": namer.IC(g.group),
|
"Group": namer.IC(g.group),
|
||||||
"group": canonicalGroup,
|
"group": canonicalGroup,
|
||||||
|
"groupName": groupName,
|
||||||
"version": canonicalVersion,
|
"version": canonicalVersion,
|
||||||
"watchInterface": c.Universe.Type(types.Name{Package: "k8s.io/kubernetes/pkg/watch", Name: "Interface"}),
|
"watchInterface": c.Universe.Type(types.Name{Package: "k8s.io/kubernetes/pkg/watch", Name: "Interface"}),
|
||||||
"apiDeleteOptions": c.Universe.Type(types.Name{Package: "k8s.io/kubernetes/pkg/api", Name: "DeleteOptions"}),
|
"apiDeleteOptions": c.Universe.Type(types.Name{Package: "k8s.io/kubernetes/pkg/api", Name: "DeleteOptions"}),
|
||||||
@ -168,7 +184,7 @@ type Fake$.type|publicPlural$ struct {
|
|||||||
`
|
`
|
||||||
|
|
||||||
var resource = `
|
var resource = `
|
||||||
var $.type|allLowercasePlural$Resource = $.GroupVersionResource|raw${Group: "$.group$", Version: "$.version$", Resource: "$.type|allLowercasePlural$"}
|
var $.type|allLowercasePlural$Resource = $.GroupVersionResource|raw${Group: "$.groupName$", Version: "$.version$", Resource: "$.type|allLowercasePlural$"}
|
||||||
`
|
`
|
||||||
|
|
||||||
var listTemplate = `
|
var listTemplate = `
|
||||||
|
@ -18,6 +18,7 @@ package generators
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
"io"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/generators/normalization"
|
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/generators/normalization"
|
||||||
"k8s.io/kubernetes/cmd/libs/go2idl/generator"
|
"k8s.io/kubernetes/cmd/libs/go2idl/generator"
|
||||||
@ -32,8 +33,9 @@ type genGroup struct {
|
|||||||
group string
|
group string
|
||||||
version string
|
version string
|
||||||
// types in this group
|
// types in this group
|
||||||
types []*types.Type
|
types []*types.Type
|
||||||
imports namer.ImportTracker
|
imports namer.ImportTracker
|
||||||
|
inputPacakge string
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ generator.Generator = &genGroup{}
|
var _ generator.Generator = &genGroup{}
|
||||||
@ -66,17 +68,22 @@ func (g *genGroup) GenerateType(c *generator.Context, t *types.Type, w io.Writer
|
|||||||
return `"/apis"`
|
return `"/apis"`
|
||||||
}
|
}
|
||||||
|
|
||||||
canonize := func(group string) string {
|
groupName := g.group
|
||||||
if group == "core" {
|
if g.group == "core" {
|
||||||
return ""
|
groupName = ""
|
||||||
|
}
|
||||||
|
// allow user to define a group name that's different from the one parsed from the directory.
|
||||||
|
for _, comment := range c.Universe.Package(g.inputPacakge).DocComments {
|
||||||
|
comment = strings.TrimLeft(comment, "//")
|
||||||
|
if override, ok := types.ExtractCommentTags("+", comment)["groupName"]; ok && override != "" {
|
||||||
|
groupName = override
|
||||||
}
|
}
|
||||||
return group
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"group": normalization.BeforeFirstDot(g.group),
|
"group": normalization.BeforeFirstDot(g.group),
|
||||||
"Group": namer.IC(normalization.BeforeFirstDot(g.group)),
|
"Group": namer.IC(normalization.BeforeFirstDot(g.group)),
|
||||||
"canonicalGroup": canonize(g.group),
|
"groupName": groupName,
|
||||||
"types": g.types,
|
"types": g.types,
|
||||||
"Config": c.Universe.Type(types.Name{Package: pkgRESTClient, Name: "Config"}),
|
"Config": c.Universe.Type(types.Name{Package: pkgRESTClient, Name: "Config"}),
|
||||||
"DefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: pkgRESTClient, Name: "DefaultKubernetesUserAgent"}),
|
"DefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: pkgRESTClient, Name: "DefaultKubernetesUserAgent"}),
|
||||||
@ -190,7 +197,7 @@ func New(c *$.RESTClient|raw$) *$.Group$Client {
|
|||||||
var setInternalVersionClientDefaultsTemplate = `
|
var setInternalVersionClientDefaultsTemplate = `
|
||||||
func setConfigDefaults(config *$.Config|raw$) error {
|
func setConfigDefaults(config *$.Config|raw$) error {
|
||||||
// if $.group$ group is not registered, return an error
|
// if $.group$ group is not registered, return an error
|
||||||
g, err := $.latestGroup|raw$("$.canonicalGroup$")
|
g, err := $.latestGroup|raw$("$.groupName$")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -219,7 +226,7 @@ func setConfigDefaults(config *$.Config|raw$) error {
|
|||||||
var setClientDefaultsTemplate = `
|
var setClientDefaultsTemplate = `
|
||||||
func setConfigDefaults(config *$.Config|raw$) error {
|
func setConfigDefaults(config *$.Config|raw$) error {
|
||||||
// if $.group$ group is not registered, return an error
|
// if $.group$ group is not registered, return an error
|
||||||
g, err := $.latestGroup|raw$("$.canonicalGroup$")
|
g, err := $.latestGroup|raw$("$.groupName$")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
test = flag.BoolP("test", "t", false, "set this flag to generate the client code for the testdata")
|
test = flag.BoolP("test", "t", false, "set this flag to generate the client code for the testdata")
|
||||||
inputVersions = flag.StringSlice("input", []string{"api/", "extensions/", "autoscaling/", "batch/"}, "group/versions that client-gen will generate clients for. At most one version per group is allowed. Specified in the format \"group1/version1,group2/version2...\". Default to \"api/,extensions/,autoscaling/,batch/\"")
|
inputVersions = flag.StringSlice("input", []string{"api/", "extensions/", "autoscaling/", "batch/", "rbac/"}, "group/versions that client-gen will generate clients for. At most one version per group is allowed. Specified in the format \"group1/version1,group2/version2...\". Default to \"api/,extensions/,autoscaling/,batch/,rbac/\"")
|
||||||
includedTypesOverrides = flag.StringSlice("included-types-overrides", []string{}, "list of group/version/type for which client should be generated. By default, client is generated for all types which have genclient=true in types.go. This overrides that. For each groupVersion in this list, only the types mentioned here will be included. The default check of genclient=true will be used for other group versions.")
|
includedTypesOverrides = flag.StringSlice("included-types-overrides", []string{}, "list of group/version/type for which client should be generated. By default, client is generated for all types which have genclient=true in types.go. This overrides that. For each groupVersion in this list, only the types mentioned here will be included. The default check of genclient=true will be used for other group versions.")
|
||||||
basePath = flag.String("input-base", "k8s.io/kubernetes/pkg/apis", "base path to look for the api group. Default to \"k8s.io/kubernetes/pkg/apis\"")
|
basePath = flag.String("input-base", "k8s.io/kubernetes/pkg/apis", "base path to look for the api group. Default to \"k8s.io/kubernetes/pkg/apis\"")
|
||||||
clientsetName = flag.StringP("clientset-name", "n", "internalclientset", "the name of the generated clientset package.")
|
clientsetName = flag.StringP("clientset-name", "n", "internalclientset", "the name of the generated clientset package.")
|
||||||
|
18
cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/doc.go
Normal file
18
cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/doc.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015 The Kubernetes Authors All rights reserved.
|
||||||
|
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// +groupName=testgroup.k8s.io
|
||||||
|
package testgroup
|
@ -31,7 +31,7 @@ type FakeTestTypes struct {
|
|||||||
ns string
|
ns string
|
||||||
}
|
}
|
||||||
|
|
||||||
var testtypesResource = unversioned.GroupVersionResource{Group: "testgroup", Version: "", Resource: "testtypes"}
|
var testtypesResource = unversioned.GroupVersionResource{Group: "testgroup.k8s.io", Version: "", Resource: "testtypes"}
|
||||||
|
|
||||||
func (c *FakeTestTypes) Create(testType *testgroup_k8s_io.TestType) (result *testgroup_k8s_io.TestType, err error) {
|
func (c *FakeTestTypes) Create(testType *testgroup_k8s_io.TestType) (result *testgroup_k8s_io.TestType, err error) {
|
||||||
obj, err := c.Fake.
|
obj, err := c.Fake.
|
||||||
|
Loading…
Reference in New Issue
Block a user