mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Merge pull request #24059 from caesarxuchao/client-gen-dotted-group
Automatic merge from submit-queue Client-gen: handle dotted group name, e.g., "authentication.k8s.io" The client-gen used to assume the group name doesn't include dot, but it's not true, e.g., we have group `authentication.k8s.io`. With this PR, Client-gen will use the full group name when creating directory (e.g., the client for the authentication group will be generated at pkg/client/clientset_generated/release_1_3/typed/`authentication.k8s.io`/v1/). However, because golang doesn't allow dot in variable/function names, so when the group name is used as part of variable/function name, client-gen extracts the part before the first dot (e.g., authentication). This PR also changes the group name of the test group from `testgroup` to `testgroup.k8s.io` to verify if client-gen generates sane code. cc @deads2k for #20573
This commit is contained in:
commit
5cc7c9565f
@ -88,7 +88,7 @@ func packageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packag
|
||||
OptionalName: strings.ToLower(c.Namers["private"].Name(t)),
|
||||
},
|
||||
outputPackage: outputPackagePath,
|
||||
group: gv.Group,
|
||||
group: normalization.BeforeFirstDot(gv.Group),
|
||||
typeToMatch: t,
|
||||
imports: generator.NewImportTracker(),
|
||||
})
|
||||
@ -96,7 +96,7 @@ func packageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packag
|
||||
|
||||
generators = append(generators, &genGroup{
|
||||
DefaultGen: generator.DefaultGen{
|
||||
OptionalName: gv.Group + "_client",
|
||||
OptionalName: normalization.BeforeFirstDot(gv.Group) + "_client",
|
||||
},
|
||||
outputPackage: outputPackagePath,
|
||||
group: gv.Group,
|
||||
|
@ -21,6 +21,7 @@ import (
|
||||
"strings"
|
||||
|
||||
clientgenargs "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/args"
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/generators/normalization"
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/generator"
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/types"
|
||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||
@ -53,7 +54,7 @@ func PackageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packag
|
||||
OptionalName: "fake_" + strings.ToLower(c.Namers["private"].Name(t)),
|
||||
},
|
||||
outputPackage: outputPackagePath,
|
||||
group: gv.Group,
|
||||
group: normalization.BeforeFirstDot(gv.Group),
|
||||
typeToMatch: t,
|
||||
imports: generator.NewImportTracker(),
|
||||
})
|
||||
@ -65,7 +66,7 @@ func PackageForGroup(gv unversioned.GroupVersion, typeList []*types.Type, packag
|
||||
},
|
||||
outputPackage: outputPackagePath,
|
||||
realClientPath: realClientPath,
|
||||
group: gv.Group,
|
||||
group: normalization.BeforeFirstDot(gv.Group),
|
||||
types: typeList,
|
||||
imports: generator.NewImportTracker(),
|
||||
})
|
||||
|
@ -59,6 +59,7 @@ func (g *genClientset) Imports(c *generator.Context) (imports []string) {
|
||||
group := normalization.Group(gv.Group)
|
||||
version := normalization.Version(gv.Version)
|
||||
typedClientPath := filepath.Join(g.typedClientPath, group, version)
|
||||
group = normalization.BeforeFirstDot(group)
|
||||
imports = append(imports, fmt.Sprintf("%s%s \"%s\"", version, group, typedClientPath))
|
||||
imports = append(imports, "github.com/golang/glog")
|
||||
}
|
||||
@ -79,7 +80,7 @@ func (g *genClientset) GenerateType(c *generator.Context, t *types.Type, w io.Wr
|
||||
|
||||
allGroups := []arg{}
|
||||
for _, gv := range g.groupVersions {
|
||||
group := normalization.Group(gv.Group)
|
||||
group := normalization.BeforeFirstDot(normalization.Group(gv.Group))
|
||||
version := normalization.Version(gv.Version)
|
||||
allGroups = append(allGroups, arg{namer.IC(group), version + group})
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ package generators
|
||||
import (
|
||||
"io"
|
||||
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/generators/normalization"
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/generator"
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/namer"
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/types"
|
||||
@ -71,8 +72,8 @@ func (g *genGroup) GenerateType(c *generator.Context, t *types.Type, w io.Writer
|
||||
}
|
||||
|
||||
m := map[string]interface{}{
|
||||
"group": g.group,
|
||||
"Group": namer.IC(g.group),
|
||||
"group": normalization.BeforeFirstDot(g.group),
|
||||
"Group": namer.IC(normalization.BeforeFirstDot(g.group)),
|
||||
"canonicalGroup": canonize(g.group),
|
||||
"types": g.types,
|
||||
"Config": c.Universe.Type(types.Name{Package: pkgRESTClient, Name: "Config"}),
|
||||
@ -89,7 +90,7 @@ func (g *genGroup) GenerateType(c *generator.Context, t *types.Type, w io.Writer
|
||||
for _, t := range g.types {
|
||||
wrapper := map[string]interface{}{
|
||||
"type": t,
|
||||
"Group": namer.IC(g.group),
|
||||
"Group": namer.IC(normalization.BeforeFirstDot(g.group)),
|
||||
}
|
||||
namespaced := !(types.ExtractCommentTags("+", t.SecondClosestCommentLines)["nonNamespaced"] == "true")
|
||||
if namespaced {
|
||||
|
@ -16,7 +16,11 @@ limitations under the License.
|
||||
|
||||
package normalization
|
||||
|
||||
import "k8s.io/kubernetes/pkg/api/unversioned"
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||
)
|
||||
|
||||
func Group(group string) string {
|
||||
if group == "api" {
|
||||
@ -35,3 +39,7 @@ func Version(version string) string {
|
||||
func GroupVersion(gv unversioned.GroupVersion) unversioned.GroupVersion {
|
||||
return unversioned.GroupVersion{Group: Group(gv.Group), Version: Version(gv.Version)}
|
||||
}
|
||||
|
||||
func BeforeFirstDot(dotted string) string {
|
||||
return strings.Split(dotted, ".")[0]
|
||||
}
|
||||
|
@ -92,12 +92,12 @@ func main() {
|
||||
|
||||
if *test {
|
||||
arguments.InputDirs = append(dependencies, []string{
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup",
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup.k8s.io",
|
||||
}...)
|
||||
arguments.CustomArgs = clientgenargs.Args{
|
||||
GroupVersions: []unversioned.GroupVersion{{Group: "testgroup", Version: ""}},
|
||||
GroupVersions: []unversioned.GroupVersion{{Group: "testgroup.k8s.io", Version: ""}},
|
||||
GroupVersionToInputPath: map[unversioned.GroupVersion]string{
|
||||
unversioned.GroupVersion{Group: "testgroup", Version: ""}: "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup",
|
||||
unversioned.GroupVersion{Group: "testgroup.k8s.io", Version: ""}: "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup.k8s.io",
|
||||
},
|
||||
ClientsetName: "test_internalclientset",
|
||||
ClientsetOutputPath: "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/",
|
||||
|
@ -23,8 +23,8 @@ import (
|
||||
|
||||
"github.com/golang/glog"
|
||||
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup"
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup/v1"
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup.k8s.io"
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup.k8s.io/v1"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/api/meta"
|
||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||
@ -34,11 +34,11 @@ import (
|
||||
"k8s.io/kubernetes/pkg/util/sets"
|
||||
)
|
||||
|
||||
const importPrefix = "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup"
|
||||
const importPrefix = "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup.k8s.io"
|
||||
|
||||
var accessor = meta.NewAccessor()
|
||||
|
||||
const groupName = "testgroup"
|
||||
const groupName = "testgroup.k8s.io"
|
||||
|
||||
// availableVersions lists all known external versions for this group from most preferred to least preferred
|
||||
var availableVersions = []unversioned.GroupVersion{{Group: groupName, Version: "v1"}}
|
@ -22,7 +22,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/runtime"
|
||||
)
|
||||
|
||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: "testgroup", Version: runtime.APIVersionInternal}
|
||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: "testgroup.k8s.io", Version: runtime.APIVersionInternal}
|
||||
|
||||
func AddToScheme(scheme *runtime.Scheme) {
|
||||
// Add the API to Scheme.
|
@ -23,7 +23,7 @@ import (
|
||||
versionedwatch "k8s.io/kubernetes/pkg/watch/versioned"
|
||||
)
|
||||
|
||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: "testgroup", Version: "v1"}
|
||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: "testgroup.k8s.io", Version: "v1"}
|
||||
|
||||
func AddToScheme(scheme *runtime.Scheme) {
|
||||
// Add the API to Scheme.
|
@ -18,7 +18,7 @@ package test_internalclientset
|
||||
|
||||
import (
|
||||
"github.com/golang/glog"
|
||||
unversionedtestgroup "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset/typed/testgroup/unversioned"
|
||||
unversionedtestgroup "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset/typed/testgroup.k8s.io/unversioned"
|
||||
restclient "k8s.io/kubernetes/pkg/client/restclient"
|
||||
discovery "k8s.io/kubernetes/pkg/client/typed/discovery"
|
||||
)
|
||||
|
@ -65,7 +65,7 @@ func New(c *restclient.RESTClient) *TestgroupClient {
|
||||
|
||||
func setConfigDefaults(config *restclient.Config) error {
|
||||
// if testgroup group is not registered, return an error
|
||||
g, err := registered.Group("testgroup")
|
||||
g, err := registered.Group("testgroup.k8s.io")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
@ -21,9 +21,9 @@ import (
|
||||
"net/url"
|
||||
"testing"
|
||||
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup"
|
||||
_ "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup/install"
|
||||
. "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset/typed/testgroup/unversioned"
|
||||
testgroup "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup.k8s.io"
|
||||
_ "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup.k8s.io/install"
|
||||
. "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset/typed/testgroup.k8s.io/unversioned"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/api/testapi"
|
||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
@ -17,7 +17,7 @@ limitations under the License.
|
||||
package unversioned
|
||||
|
||||
import (
|
||||
testgroup "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup"
|
||||
testgroup_k8s_io "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup.k8s.io"
|
||||
api "k8s.io/kubernetes/pkg/api"
|
||||
watch "k8s.io/kubernetes/pkg/watch"
|
||||
)
|
||||
@ -30,13 +30,13 @@ type TestTypesGetter interface {
|
||||
|
||||
// TestTypeInterface has methods to work with TestType resources.
|
||||
type TestTypeInterface interface {
|
||||
Create(*testgroup.TestType) (*testgroup.TestType, error)
|
||||
Update(*testgroup.TestType) (*testgroup.TestType, error)
|
||||
UpdateStatus(*testgroup.TestType) (*testgroup.TestType, error)
|
||||
Create(*testgroup_k8s_io.TestType) (*testgroup_k8s_io.TestType, error)
|
||||
Update(*testgroup_k8s_io.TestType) (*testgroup_k8s_io.TestType, error)
|
||||
UpdateStatus(*testgroup_k8s_io.TestType) (*testgroup_k8s_io.TestType, error)
|
||||
Delete(name string, options *api.DeleteOptions) error
|
||||
DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error
|
||||
Get(name string) (*testgroup.TestType, error)
|
||||
List(opts api.ListOptions) (*testgroup.TestTypeList, error)
|
||||
Get(name string) (*testgroup_k8s_io.TestType, error)
|
||||
List(opts api.ListOptions) (*testgroup_k8s_io.TestTypeList, error)
|
||||
Watch(opts api.ListOptions) (watch.Interface, error)
|
||||
TestTypeExpansion
|
||||
}
|
||||
@ -56,8 +56,8 @@ func newTestTypes(c *TestgroupClient, namespace string) *testTypes {
|
||||
}
|
||||
|
||||
// Create takes the representation of a testType and creates it. Returns the server's representation of the testType, and an error, if there is any.
|
||||
func (c *testTypes) Create(testType *testgroup.TestType) (result *testgroup.TestType, err error) {
|
||||
result = &testgroup.TestType{}
|
||||
func (c *testTypes) Create(testType *testgroup_k8s_io.TestType) (result *testgroup_k8s_io.TestType, err error) {
|
||||
result = &testgroup_k8s_io.TestType{}
|
||||
err = c.client.Post().
|
||||
Namespace(c.ns).
|
||||
Resource("testtypes").
|
||||
@ -68,8 +68,8 @@ func (c *testTypes) Create(testType *testgroup.TestType) (result *testgroup.Test
|
||||
}
|
||||
|
||||
// Update takes the representation of a testType and updates it. Returns the server's representation of the testType, and an error, if there is any.
|
||||
func (c *testTypes) Update(testType *testgroup.TestType) (result *testgroup.TestType, err error) {
|
||||
result = &testgroup.TestType{}
|
||||
func (c *testTypes) Update(testType *testgroup_k8s_io.TestType) (result *testgroup_k8s_io.TestType, err error) {
|
||||
result = &testgroup_k8s_io.TestType{}
|
||||
err = c.client.Put().
|
||||
Namespace(c.ns).
|
||||
Resource("testtypes").
|
||||
@ -80,8 +80,8 @@ func (c *testTypes) Update(testType *testgroup.TestType) (result *testgroup.Test
|
||||
return
|
||||
}
|
||||
|
||||
func (c *testTypes) UpdateStatus(testType *testgroup.TestType) (result *testgroup.TestType, err error) {
|
||||
result = &testgroup.TestType{}
|
||||
func (c *testTypes) UpdateStatus(testType *testgroup_k8s_io.TestType) (result *testgroup_k8s_io.TestType, err error) {
|
||||
result = &testgroup_k8s_io.TestType{}
|
||||
err = c.client.Put().
|
||||
Namespace(c.ns).
|
||||
Resource("testtypes").
|
||||
@ -116,8 +116,8 @@ func (c *testTypes) DeleteCollection(options *api.DeleteOptions, listOptions api
|
||||
}
|
||||
|
||||
// Get takes name of the testType, and returns the corresponding testType object, and an error if there is any.
|
||||
func (c *testTypes) Get(name string) (result *testgroup.TestType, err error) {
|
||||
result = &testgroup.TestType{}
|
||||
func (c *testTypes) Get(name string) (result *testgroup_k8s_io.TestType, err error) {
|
||||
result = &testgroup_k8s_io.TestType{}
|
||||
err = c.client.Get().
|
||||
Namespace(c.ns).
|
||||
Resource("testtypes").
|
||||
@ -128,8 +128,8 @@ func (c *testTypes) Get(name string) (result *testgroup.TestType, err error) {
|
||||
}
|
||||
|
||||
// List takes label and field selectors, and returns the list of TestTypes that match those selectors.
|
||||
func (c *testTypes) List(opts api.ListOptions) (result *testgroup.TestTypeList, err error) {
|
||||
result = &testgroup.TestTypeList{}
|
||||
func (c *testTypes) List(opts api.ListOptions) (result *testgroup_k8s_io.TestTypeList, err error) {
|
||||
result = &testgroup_k8s_io.TestTypeList{}
|
||||
err = c.client.Get().
|
||||
Namespace(c.ns).
|
||||
Resource("testtypes").
|
@ -19,7 +19,7 @@ package apiserver
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup/v1"
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup.k8s.io/v1"
|
||||
testgroupetcd "k8s.io/kubernetes/examples/apiserver/rest"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/api/rest"
|
||||
@ -29,7 +29,7 @@ import (
|
||||
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
||||
|
||||
// Install the testgroup API
|
||||
_ "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup/install"
|
||||
_ "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup.k8s.io/install"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -24,7 +24,7 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup/v1"
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup.k8s.io/v1"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||
@ -107,7 +107,7 @@ func testAPIGroupList(t *testing.T) {
|
||||
}
|
||||
|
||||
func testAPIGroup(t *testing.T) {
|
||||
serverURL := serverIP + "/apis/testgroup"
|
||||
serverURL := serverIP + "/apis/testgroup.k8s.io"
|
||||
contents, err := readResponse(serverURL)
|
||||
if err != nil {
|
||||
t.Fatalf("%v", err)
|
||||
@ -126,7 +126,7 @@ func testAPIGroup(t *testing.T) {
|
||||
}
|
||||
|
||||
func testAPIResourceList(t *testing.T) {
|
||||
serverURL := serverIP + "/apis/testgroup/v1"
|
||||
serverURL := serverIP + "/apis/testgroup.k8s.io/v1"
|
||||
contents, err := readResponse(serverURL)
|
||||
if err != nil {
|
||||
t.Fatalf("%v", err)
|
||||
|
@ -17,7 +17,7 @@ limitations under the License.
|
||||
package rest
|
||||
|
||||
import (
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup"
|
||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup.k8s.io"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/fields"
|
||||
"k8s.io/kubernetes/pkg/labels"
|
||||
|
Loading…
Reference in New Issue
Block a user