mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 12:18:16 +00:00 
			
		
		
		
	Merge pull request #45839 from caesarxuchao/client-gen-vendor
Automatic merge from submit-queue let client-gen understand vendor This is extracted from #44784, where we move external api types to k8s.io/api. After the move, the types will locate at vendor/k8s.io/api/xxx. However, gengo index the parsed package using the import path, which is stripped of the vendor/ prefix, so we'll need to strip the vendor/ prefix as necessary in client-gen. This PR doesn't produce any change to the generated clientset yet since all types are still in the kubernetes repo.
This commit is contained in:
		@@ -41,6 +41,7 @@ filegroup(
 | 
				
			|||||||
        ":package-srcs",
 | 
					        ":package-srcs",
 | 
				
			||||||
        "//cmd/libs/go2idl/client-gen/args:all-srcs",
 | 
					        "//cmd/libs/go2idl/client-gen/args:all-srcs",
 | 
				
			||||||
        "//cmd/libs/go2idl/client-gen/generators:all-srcs",
 | 
					        "//cmd/libs/go2idl/client-gen/generators:all-srcs",
 | 
				
			||||||
 | 
					        "//cmd/libs/go2idl/client-gen/path:all-srcs",
 | 
				
			||||||
        "//cmd/libs/go2idl/client-gen/test_apis/testgroup:all-srcs",
 | 
					        "//cmd/libs/go2idl/client-gen/test_apis/testgroup:all-srcs",
 | 
				
			||||||
        "//cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset:all-srcs",
 | 
					        "//cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset:all-srcs",
 | 
				
			||||||
        "//cmd/libs/go2idl/client-gen/types:all-srcs",
 | 
					        "//cmd/libs/go2idl/client-gen/types:all-srcs",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,6 +22,7 @@ go_library(
 | 
				
			|||||||
        "//cmd/libs/go2idl/client-gen/args:go_default_library",
 | 
					        "//cmd/libs/go2idl/client-gen/args:go_default_library",
 | 
				
			||||||
        "//cmd/libs/go2idl/client-gen/generators/fake:go_default_library",
 | 
					        "//cmd/libs/go2idl/client-gen/generators/fake:go_default_library",
 | 
				
			||||||
        "//cmd/libs/go2idl/client-gen/generators/scheme:go_default_library",
 | 
					        "//cmd/libs/go2idl/client-gen/generators/scheme:go_default_library",
 | 
				
			||||||
 | 
					        "//cmd/libs/go2idl/client-gen/path:go_default_library",
 | 
				
			||||||
        "//cmd/libs/go2idl/client-gen/types:go_default_library",
 | 
					        "//cmd/libs/go2idl/client-gen/types:go_default_library",
 | 
				
			||||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
					        "//vendor/github.com/golang/glog:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/gengo/args:go_default_library",
 | 
					        "//vendor/k8s.io/gengo/args:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,6 +29,7 @@ import (
 | 
				
			|||||||
	clientgenargs "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/args"
 | 
						clientgenargs "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/args"
 | 
				
			||||||
	"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/generators/fake"
 | 
						"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/generators/fake"
 | 
				
			||||||
	"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/generators/scheme"
 | 
						"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/generators/scheme"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/path"
 | 
				
			||||||
	clientgentypes "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/types"
 | 
						clientgentypes "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/golang/glog"
 | 
						"github.com/golang/glog"
 | 
				
			||||||
@@ -275,7 +276,8 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	gvToTypes := map[clientgentypes.GroupVersion][]*types.Type{}
 | 
						gvToTypes := map[clientgentypes.GroupVersion][]*types.Type{}
 | 
				
			||||||
	for gv, inputDir := range customArgs.GroupVersionToInputPath {
 | 
						for gv, inputDir := range customArgs.GroupVersionToInputPath {
 | 
				
			||||||
		p := context.Universe.Package(inputDir)
 | 
							// Package are indexed with the vendor prefix stripped
 | 
				
			||||||
 | 
							p := context.Universe.Package(path.Vendorless(inputDir))
 | 
				
			||||||
		for n, t := range p.Types {
 | 
							for n, t := range p.Types {
 | 
				
			||||||
			// filter out types which are not included in user specified overrides.
 | 
								// filter out types which are not included in user specified overrides.
 | 
				
			||||||
			typesOverride, ok := includedTypesOverrides[gv]
 | 
								typesOverride, ok := includedTypesOverrides[gv]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@ go_library(
 | 
				
			|||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//cmd/libs/go2idl/client-gen/args:go_default_library",
 | 
					        "//cmd/libs/go2idl/client-gen/args:go_default_library",
 | 
				
			||||||
        "//cmd/libs/go2idl/client-gen/generators/scheme:go_default_library",
 | 
					        "//cmd/libs/go2idl/client-gen/generators/scheme:go_default_library",
 | 
				
			||||||
 | 
					        "//cmd/libs/go2idl/client-gen/path:go_default_library",
 | 
				
			||||||
        "//cmd/libs/go2idl/client-gen/types:go_default_library",
 | 
					        "//cmd/libs/go2idl/client-gen/types:go_default_library",
 | 
				
			||||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
					        "//vendor/github.com/golang/glog:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/gengo/generator:go_default_library",
 | 
					        "//vendor/k8s.io/gengo/generator:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,6 +24,7 @@ import (
 | 
				
			|||||||
	"k8s.io/gengo/generator"
 | 
						"k8s.io/gengo/generator"
 | 
				
			||||||
	"k8s.io/gengo/namer"
 | 
						"k8s.io/gengo/namer"
 | 
				
			||||||
	"k8s.io/gengo/types"
 | 
						"k8s.io/gengo/types"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/path"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// genFakeForType produces a file for each top-level type.
 | 
					// genFakeForType produces a file for each top-level type.
 | 
				
			||||||
@@ -99,7 +100,7 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io.
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// allow user to define a group name that's different from the one parsed from the directory.
 | 
						// allow user to define a group name that's different from the one parsed from the directory.
 | 
				
			||||||
	p := c.Universe.Package(g.inputPackage)
 | 
						p := c.Universe.Package(path.Vendorless(g.inputPackage))
 | 
				
			||||||
	if override := types.ExtractCommentTags("+", p.DocComments)["groupName"]; override != nil {
 | 
						if override := types.ExtractCommentTags("+", p.DocComments)["groupName"]; override != nil {
 | 
				
			||||||
		groupName = override[0]
 | 
							groupName = override[0]
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,7 @@ import (
 | 
				
			|||||||
	"k8s.io/gengo/generator"
 | 
						"k8s.io/gengo/generator"
 | 
				
			||||||
	"k8s.io/gengo/namer"
 | 
						"k8s.io/gengo/namer"
 | 
				
			||||||
	"k8s.io/gengo/types"
 | 
						"k8s.io/gengo/types"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/path"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// genGroup produces a file for a group client, e.g. ExtensionsClient for the extension group.
 | 
					// genGroup produces a file for a group client, e.g. ExtensionsClient for the extension group.
 | 
				
			||||||
@@ -76,7 +77,7 @@ func (g *genGroup) GenerateType(c *generator.Context, t *types.Type, w io.Writer
 | 
				
			|||||||
		groupName = ""
 | 
							groupName = ""
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// allow user to define a group name that's different from the one parsed from the directory.
 | 
						// allow user to define a group name that's different from the one parsed from the directory.
 | 
				
			||||||
	p := c.Universe.Package(g.inputPackage)
 | 
						p := c.Universe.Package(path.Vendorless(g.inputPackage))
 | 
				
			||||||
	if override := types.ExtractCommentTags("+", p.DocComments)["groupName"]; override != nil {
 | 
						if override := types.ExtractCommentTags("+", p.DocComments)["groupName"]; override != nil {
 | 
				
			||||||
		groupName = override[0]
 | 
							groupName = override[0]
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -95,7 +96,7 @@ func (g *genGroup) GenerateType(c *generator.Context, t *types.Type, w io.Writer
 | 
				
			|||||||
		"restDefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "DefaultKubernetesUserAgent"}),
 | 
							"restDefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "DefaultKubernetesUserAgent"}),
 | 
				
			||||||
		"restRESTClientInterface":        c.Universe.Type(types.Name{Package: "k8s.io/client-go/rest", Name: "Interface"}),
 | 
							"restRESTClientInterface":        c.Universe.Type(types.Name{Package: "k8s.io/client-go/rest", Name: "Interface"}),
 | 
				
			||||||
		"restRESTClientFor":              c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "RESTClientFor"}),
 | 
							"restRESTClientFor":              c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "RESTClientFor"}),
 | 
				
			||||||
		"SchemeGroupVersion":             c.Universe.Variable(types.Name{Package: g.inputPackage, Name: "SchemeGroupVersion"}),
 | 
							"SchemeGroupVersion":             c.Universe.Variable(types.Name{Package: path.Vendorless(g.inputPackage), Name: "SchemeGroupVersion"}),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	sw.Do(groupInterfaceTemplate, m)
 | 
						sw.Do(groupInterfaceTemplate, m)
 | 
				
			||||||
	sw.Do(groupClientTemplate, m)
 | 
						sw.Do(groupClientTemplate, m)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,6 +12,7 @@ go_library(
 | 
				
			|||||||
    srcs = ["generator_for_scheme.go"],
 | 
					    srcs = ["generator_for_scheme.go"],
 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//cmd/libs/go2idl/client-gen/path:go_default_library",
 | 
				
			||||||
        "//cmd/libs/go2idl/client-gen/types:go_default_library",
 | 
					        "//cmd/libs/go2idl/client-gen/types:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/gengo/generator:go_default_library",
 | 
					        "//vendor/k8s.io/gengo/generator:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/gengo/namer:go_default_library",
 | 
					        "//vendor/k8s.io/gengo/namer:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,6 +26,7 @@ import (
 | 
				
			|||||||
	"k8s.io/gengo/generator"
 | 
						"k8s.io/gengo/generator"
 | 
				
			||||||
	"k8s.io/gengo/namer"
 | 
						"k8s.io/gengo/namer"
 | 
				
			||||||
	"k8s.io/gengo/types"
 | 
						"k8s.io/gengo/types"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/path"
 | 
				
			||||||
	clientgentypes "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/types"
 | 
						clientgentypes "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -66,10 +67,10 @@ func (g *GenScheme) Imports(c *generator.Context) (imports []string) {
 | 
				
			|||||||
					packagePath = filepath.Dir(packagePath)
 | 
										packagePath = filepath.Dir(packagePath)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				packagePath = filepath.Join(packagePath, "install")
 | 
									packagePath = filepath.Join(packagePath, "install")
 | 
				
			||||||
				imports = append(imports, strings.ToLower(fmt.Sprintf("%s \"%s\"", group.Group.NonEmpty(), packagePath)))
 | 
									imports = append(imports, strings.ToLower(fmt.Sprintf("%s \"%s\"", group.Group.NonEmpty(), path.Vendorless(packagePath))))
 | 
				
			||||||
				break
 | 
									break
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				imports = append(imports, strings.ToLower(fmt.Sprintf("%s%s \"%s\"", group.Group.NonEmpty(), version.NonEmpty(), packagePath)))
 | 
									imports = append(imports, strings.ToLower(fmt.Sprintf("%s%s \"%s\"", group.Group.NonEmpty(), version.NonEmpty(), path.Vendorless(packagePath))))
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								cmd/libs/go2idl/client-gen/path/BUILD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								cmd/libs/go2idl/client-gen/path/BUILD
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					package(default_visibility = ["//visibility:public"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					licenses(["notice"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					load(
 | 
				
			||||||
 | 
					    "@io_bazel_rules_go//go:def.bzl",
 | 
				
			||||||
 | 
					    "go_library",
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = ["path.go"],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "package-srcs",
 | 
				
			||||||
 | 
					    srcs = glob(["**"]),
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:private"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "all-srcs",
 | 
				
			||||||
 | 
					    srcs = [":package-srcs"],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										31
									
								
								cmd/libs/go2idl/client-gen/path/path.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								cmd/libs/go2idl/client-gen/path/path.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2017 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 path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Vendorless removes the longest match of "*/vendor/" from the front of p.
 | 
				
			||||||
 | 
					// It is useful if a package locates in vendor/, e.g.,
 | 
				
			||||||
 | 
					// k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1, because gengo
 | 
				
			||||||
 | 
					// indexes the package with its import path, e.g.,
 | 
				
			||||||
 | 
					// k8s.io/apimachinery/pkg/apis/meta/v1,
 | 
				
			||||||
 | 
					func Vendorless(p string) string {
 | 
				
			||||||
 | 
						if pos := strings.LastIndex(p, "/vendor/"); pos != -1 {
 | 
				
			||||||
 | 
							return p[pos+len("/vendor/"):]
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return p
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -26,6 +26,7 @@ cmd/kubectl
 | 
				
			|||||||
cmd/kubelet
 | 
					cmd/kubelet
 | 
				
			||||||
cmd/libs/go2idl/client-gen
 | 
					cmd/libs/go2idl/client-gen
 | 
				
			||||||
cmd/libs/go2idl/client-gen/generators
 | 
					cmd/libs/go2idl/client-gen/generators
 | 
				
			||||||
 | 
					cmd/libs/go2idl/client-gen/path
 | 
				
			||||||
cmd/libs/go2idl/client-gen/test_apis/testgroup/install
 | 
					cmd/libs/go2idl/client-gen/test_apis/testgroup/install
 | 
				
			||||||
cmd/libs/go2idl/conversion-gen
 | 
					cmd/libs/go2idl/conversion-gen
 | 
				
			||||||
cmd/libs/go2idl/deepcopy-gen
 | 
					cmd/libs/go2idl/deepcopy-gen
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user