mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 11:21:47 +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")
|
||||
}
|
||||
|
||||
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)
|
||||
return &generator.DefaultPackage{
|
||||
PackageName: gv.Version,
|
||||
@ -99,6 +99,7 @@ func packageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packag
|
||||
OptionalName: normalization.BeforeFirstDot(gv.Group) + "_client",
|
||||
},
|
||||
outputPackage: outputPackagePath,
|
||||
inputPacakge: inputPath,
|
||||
group: gv.Group,
|
||||
version: gv.Version,
|
||||
types: typeList,
|
||||
@ -216,9 +217,10 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
|
||||
orderer := namer.Orderer{Namer: namer.NewPrivateNamer(0)}
|
||||
for _, gv := range customArgs.GroupVersions {
|
||||
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 {
|
||||
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"
|
||||
)
|
||||
|
||||
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")
|
||||
// TODO: should make this a function, called by here and in client-generator.go
|
||||
realClientPath := filepath.Join(packageBasePath, gv.Group, gv.Version)
|
||||
@ -55,6 +55,7 @@ func PackageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packag
|
||||
},
|
||||
outputPackage: outputPackagePath,
|
||||
group: normalization.BeforeFirstDot(gv.Group),
|
||||
inputPackage: inputPath,
|
||||
version: gv.Version,
|
||||
typeToMatch: t,
|
||||
imports: generator.NewImportTracker(),
|
||||
|
@ -31,6 +31,7 @@ type genFakeForType struct {
|
||||
generator.DefaultGen
|
||||
outputPackage string
|
||||
group string
|
||||
inputPackage string
|
||||
version string
|
||||
typeToMatch *types.Type
|
||||
imports namer.ImportTracker
|
||||
@ -87,6 +88,20 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io.
|
||||
if canonicalVersion == "unversioned" {
|
||||
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{}{
|
||||
"type": t,
|
||||
"package": pkg,
|
||||
@ -94,6 +109,7 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io.
|
||||
"namespaced": namespaced,
|
||||
"Group": namer.IC(g.group),
|
||||
"group": canonicalGroup,
|
||||
"groupName": groupName,
|
||||
"version": canonicalVersion,
|
||||
"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"}),
|
||||
@ -168,7 +184,7 @@ type Fake$.type|publicPlural$ struct {
|
||||
`
|
||||
|
||||
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 = `
|
||||
|
@ -18,6 +18,7 @@ package generators
|
||||
|
||||
import (
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/generators/normalization"
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/generator"
|
||||
@ -32,8 +33,9 @@ type genGroup struct {
|
||||
group string
|
||||
version string
|
||||
// types in this group
|
||||
types []*types.Type
|
||||
imports namer.ImportTracker
|
||||
types []*types.Type
|
||||
imports namer.ImportTracker
|
||||
inputPacakge string
|
||||
}
|
||||
|
||||
var _ generator.Generator = &genGroup{}
|
||||
@ -66,17 +68,22 @@ func (g *genGroup) GenerateType(c *generator.Context, t *types.Type, w io.Writer
|
||||
return `"/apis"`
|
||||
}
|
||||
|
||||
canonize := func(group string) string {
|
||||
if group == "core" {
|
||||
return ""
|
||||
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.inputPacakge).DocComments {
|
||||
comment = strings.TrimLeft(comment, "//")
|
||||
if override, ok := types.ExtractCommentTags("+", comment)["groupName"]; ok && override != "" {
|
||||
groupName = override
|
||||
}
|
||||
return group
|
||||
}
|
||||
|
||||
m := map[string]interface{}{
|
||||
"group": normalization.BeforeFirstDot(g.group),
|
||||
"Group": namer.IC(normalization.BeforeFirstDot(g.group)),
|
||||
"canonicalGroup": canonize(g.group),
|
||||
"groupName": groupName,
|
||||
"types": g.types,
|
||||
"Config": c.Universe.Type(types.Name{Package: pkgRESTClient, Name: "Config"}),
|
||||
"DefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: pkgRESTClient, Name: "DefaultKubernetesUserAgent"}),
|
||||
@ -190,7 +197,7 @@ func New(c *$.RESTClient|raw$) *$.Group$Client {
|
||||
var setInternalVersionClientDefaultsTemplate = `
|
||||
func setConfigDefaults(config *$.Config|raw$) error {
|
||||
// if $.group$ group is not registered, return an error
|
||||
g, err := $.latestGroup|raw$("$.canonicalGroup$")
|
||||
g, err := $.latestGroup|raw$("$.groupName$")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -219,7 +226,7 @@ func setConfigDefaults(config *$.Config|raw$) error {
|
||||
var setClientDefaultsTemplate = `
|
||||
func setConfigDefaults(config *$.Config|raw$) error {
|
||||
// if $.group$ group is not registered, return an error
|
||||
g, err := $.latestGroup|raw$("$.canonicalGroup$")
|
||||
g, err := $.latestGroup|raw$("$.groupName$")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ import (
|
||||
|
||||
var (
|
||||
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.")
|
||||
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.")
|
||||
|
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
|
||||
}
|
||||
|
||||
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) {
|
||||
obj, err := c.Fake.
|
||||
|
Loading…
Reference in New Issue
Block a user