Fix client-gen wrt gengo/v2
This commit is contained in:
		@@ -18,19 +18,20 @@ package args
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"path"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/spf13/pflag"
 | 
						"github.com/spf13/pflag"
 | 
				
			||||||
	"k8s.io/gengo/v2/args"
 | 
						"k8s.io/gengo/v2/args"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/code-generator/cmd/client-gen/types"
 | 
						"k8s.io/code-generator/cmd/client-gen/types"
 | 
				
			||||||
	codegenutil "k8s.io/code-generator/pkg/util"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var DefaultInputDirs = []string{}
 | 
					var DefaultInputDirs = []string{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CustomArgs is a wrapper for arguments to client-gen.
 | 
					// CustomArgs is a wrapper for arguments to client-gen.
 | 
				
			||||||
type CustomArgs struct {
 | 
					type CustomArgs struct {
 | 
				
			||||||
 | 
						// The Go import-path of the generated results.
 | 
				
			||||||
 | 
						OutputPackage string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// A sorted list of group versions to generate. For each of them the package path is found
 | 
						// A sorted list of group versions to generate. For each of them the package path is found
 | 
				
			||||||
	// in GroupVersionToInputPath.
 | 
						// in GroupVersionToInputPath.
 | 
				
			||||||
	Groups []types.GroupVersions
 | 
						Groups []types.GroupVersions
 | 
				
			||||||
@@ -72,15 +73,12 @@ func NewDefaults() (*args.GeneratorArgs, *CustomArgs) {
 | 
				
			|||||||
	genericArgs.CustomArgs = customArgs
 | 
						genericArgs.CustomArgs = customArgs
 | 
				
			||||||
	genericArgs.InputDirs = DefaultInputDirs
 | 
						genericArgs.InputDirs = DefaultInputDirs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if pkg := codegenutil.CurrentPackage(); len(pkg) != 0 {
 | 
					 | 
				
			||||||
		genericArgs.OutputPackagePath = path.Join(pkg, "pkg/client/clientset")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return genericArgs, customArgs
 | 
						return genericArgs, customArgs
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet, inputBase string) {
 | 
					func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet, inputBase string) {
 | 
				
			||||||
	gvsBuilder := NewGroupVersionsBuilder(&ca.Groups)
 | 
						gvsBuilder := NewGroupVersionsBuilder(&ca.Groups)
 | 
				
			||||||
 | 
						fs.StringVar(&ca.OutputPackage, "output-package", ca.OutputPackage, "the Go import-path of the generated results")
 | 
				
			||||||
	fs.Var(NewGVPackagesValue(gvsBuilder, nil), "input", "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...\".")
 | 
						fs.Var(NewGVPackagesValue(gvsBuilder, nil), "input", "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...\".")
 | 
				
			||||||
	fs.Var(NewGVTypesValue(&ca.IncludedTypesOverrides, []string{}), "included-types-overrides", "list of group/version/type for which client should be generated. By default, client is generated for all types which have genclient 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 will be used for other group versions.")
 | 
						fs.Var(NewGVTypesValue(&ca.IncludedTypesOverrides, []string{}), "included-types-overrides", "list of group/version/type for which client should be generated. By default, client is generated for all types which have genclient 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 will be used for other group versions.")
 | 
				
			||||||
	fs.Var(NewInputBasePathValue(gvsBuilder, inputBase), "input-base", "base path to look for the api group.")
 | 
						fs.Var(NewInputBasePathValue(gvsBuilder, inputBase), "input-base", "base path to look for the api group.")
 | 
				
			||||||
@@ -97,16 +95,20 @@ func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet, inputBase string) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Validate(genericArgs *args.GeneratorArgs) error {
 | 
					func Validate(genericArgs *args.GeneratorArgs) error {
 | 
				
			||||||
 | 
						if len(genericArgs.OutputBase) == 0 {
 | 
				
			||||||
 | 
							return fmt.Errorf("--output-base must be specified")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	customArgs := genericArgs.CustomArgs.(*CustomArgs)
 | 
						customArgs := genericArgs.CustomArgs.(*CustomArgs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if len(genericArgs.OutputPackagePath) == 0 {
 | 
						if len(customArgs.OutputPackage) == 0 {
 | 
				
			||||||
		return fmt.Errorf("output package cannot be empty")
 | 
							return fmt.Errorf("--output-package must be specified")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if len(customArgs.ClientsetName) == 0 {
 | 
						if len(customArgs.ClientsetName) == 0 {
 | 
				
			||||||
		return fmt.Errorf("clientset name cannot be empty")
 | 
							return fmt.Errorf("--clientset-name must be specified")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if len(customArgs.ClientsetAPIPath) == 0 {
 | 
						if len(customArgs.ClientsetAPIPath) == 0 {
 | 
				
			||||||
		return fmt.Errorf("clientset API path cannot be empty")
 | 
							return fmt.Errorf("--clientset-api-path cannot be empty")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,7 @@ limitations under the License.
 | 
				
			|||||||
package generators
 | 
					package generators
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -128,11 +129,15 @@ func DefaultNameSystem() string {
 | 
				
			|||||||
	return "public"
 | 
						return "public"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func packageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clientsetPackage string, groupPackageName string, groupGoName string, apiPath string, srcTreePath string, inputPackage string, applyBuilderPackage string, boilerplate []byte) generator.Package {
 | 
					func packageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clientsetDir, clientsetPkg string, groupPkgName string, groupGoName string, apiPath string, inputPkg string, applyBuilderPkg string, boilerplate []byte) generator.Package {
 | 
				
			||||||
	groupVersionClientPackage := filepath.Join(clientsetPackage, "typed", strings.ToLower(groupPackageName), strings.ToLower(gv.Version.NonEmpty()))
 | 
						subdir := filepath.Join("typed", strings.ToLower(groupPkgName), strings.ToLower(gv.Version.NonEmpty()))
 | 
				
			||||||
 | 
						gvDir := filepath.Join(clientsetDir, subdir)
 | 
				
			||||||
 | 
						gvPkg := filepath.Join(clientsetPkg, subdir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &generator.DefaultPackage{
 | 
						return &generator.DefaultPackage{
 | 
				
			||||||
		PackageName:          strings.ToLower(gv.Version.NonEmpty()),
 | 
							PackageName:          strings.ToLower(gv.Version.NonEmpty()),
 | 
				
			||||||
		PackagePath:          groupVersionClientPackage,
 | 
							PackagePath:          gvPkg,
 | 
				
			||||||
 | 
							Source:               gvDir,
 | 
				
			||||||
		HeaderText:           boilerplate,
 | 
							HeaderText:           boilerplate,
 | 
				
			||||||
		PackageDocumentation: []byte("// This package has the automatically generated typed clients.\n"),
 | 
							PackageDocumentation: []byte("// This package has the automatically generated typed clients.\n"),
 | 
				
			||||||
		// GeneratorFunc returns a list of generators. Each generator makes a
 | 
							// GeneratorFunc returns a list of generators. Each generator makes a
 | 
				
			||||||
@@ -149,10 +154,10 @@ func packageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, cli
 | 
				
			|||||||
					DefaultGen: generator.DefaultGen{
 | 
										DefaultGen: generator.DefaultGen{
 | 
				
			||||||
						OptionalName: strings.ToLower(c.Namers["private"].Name(t)),
 | 
											OptionalName: strings.ToLower(c.Namers["private"].Name(t)),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					outputPackage:             groupVersionClientPackage,
 | 
										outputPackage:             gvPkg,
 | 
				
			||||||
					inputPackage:              inputPackage,
 | 
										inputPackage:              inputPkg,
 | 
				
			||||||
					clientsetPackage:          clientsetPackage,
 | 
										clientsetPackage:          clientsetPkg,
 | 
				
			||||||
					applyConfigurationPackage: applyBuilderPackage,
 | 
										applyConfigurationPackage: applyBuilderPkg,
 | 
				
			||||||
					group:                     gv.Group.NonEmpty(),
 | 
										group:                     gv.Group.NonEmpty(),
 | 
				
			||||||
					version:                   gv.Version.String(),
 | 
										version:                   gv.Version.String(),
 | 
				
			||||||
					groupGoName:               groupGoName,
 | 
										groupGoName:               groupGoName,
 | 
				
			||||||
@@ -163,11 +168,11 @@ func packageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, cli
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			generators = append(generators, &genGroup{
 | 
								generators = append(generators, &genGroup{
 | 
				
			||||||
				DefaultGen: generator.DefaultGen{
 | 
									DefaultGen: generator.DefaultGen{
 | 
				
			||||||
					OptionalName: groupPackageName + "_client",
 | 
										OptionalName: groupPkgName + "_client",
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				outputPackage:    groupVersionClientPackage,
 | 
									outputPackage:    gvPkg,
 | 
				
			||||||
				inputPackage:     inputPackage,
 | 
									inputPackage:     inputPkg,
 | 
				
			||||||
				clientsetPackage: clientsetPackage,
 | 
									clientsetPackage: clientsetPkg,
 | 
				
			||||||
				group:            gv.Group.NonEmpty(),
 | 
									group:            gv.Group.NonEmpty(),
 | 
				
			||||||
				version:          gv.Version.String(),
 | 
									version:          gv.Version.String(),
 | 
				
			||||||
				groupGoName:      groupGoName,
 | 
									groupGoName:      groupGoName,
 | 
				
			||||||
@@ -178,7 +183,7 @@ func packageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, cli
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			expansionFileName := "generated_expansion"
 | 
								expansionFileName := "generated_expansion"
 | 
				
			||||||
			generators = append(generators, &genExpansion{
 | 
								generators = append(generators, &genExpansion{
 | 
				
			||||||
				groupPackagePath: filepath.Join(srcTreePath, groupVersionClientPackage),
 | 
									groupPackagePath: gvDir,
 | 
				
			||||||
				DefaultGen: generator.DefaultGen{
 | 
									DefaultGen: generator.DefaultGen{
 | 
				
			||||||
					OptionalName: expansionFileName,
 | 
										OptionalName: expansionFileName,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
@@ -193,10 +198,11 @@ func packageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, cli
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func packageForClientset(customArgs *clientgenargs.CustomArgs, clientsetPackage string, groupGoNames map[clientgentypes.GroupVersion]string, boilerplate []byte) generator.Package {
 | 
					func packageForClientset(customArgs *clientgenargs.CustomArgs, clientsetDir, clientsetPkg string, groupGoNames map[clientgentypes.GroupVersion]string, boilerplate []byte) generator.Package {
 | 
				
			||||||
	return &generator.DefaultPackage{
 | 
						return &generator.DefaultPackage{
 | 
				
			||||||
		PackageName: customArgs.ClientsetName,
 | 
							PackageName: customArgs.ClientsetName,
 | 
				
			||||||
		PackagePath: clientsetPackage,
 | 
							PackagePath: clientsetPkg,
 | 
				
			||||||
 | 
							Source:      clientsetDir,
 | 
				
			||||||
		HeaderText:  boilerplate,
 | 
							HeaderText:  boilerplate,
 | 
				
			||||||
		// GeneratorFunc returns a list of generators. Each generator generates a
 | 
							// GeneratorFunc returns a list of generators. Each generator generates a
 | 
				
			||||||
		// single file.
 | 
							// single file.
 | 
				
			||||||
@@ -208,8 +214,7 @@ func packageForClientset(customArgs *clientgenargs.CustomArgs, clientsetPackage
 | 
				
			|||||||
					},
 | 
										},
 | 
				
			||||||
					groups:           customArgs.Groups,
 | 
										groups:           customArgs.Groups,
 | 
				
			||||||
					groupGoNames:     groupGoNames,
 | 
										groupGoNames:     groupGoNames,
 | 
				
			||||||
					clientsetPackage: clientsetPackage,
 | 
										clientsetPackage: clientsetPkg,
 | 
				
			||||||
					outputPackage:    customArgs.ClientsetName,
 | 
					 | 
				
			||||||
					imports:          generator.NewImportTracker(),
 | 
										imports:          generator.NewImportTracker(),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -218,8 +223,9 @@ func packageForClientset(customArgs *clientgenargs.CustomArgs, clientsetPackage
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func packageForScheme(customArgs *clientgenargs.CustomArgs, clientsetPackage string, srcTreePath string, groupGoNames map[clientgentypes.GroupVersion]string, boilerplate []byte) generator.Package {
 | 
					func packageForScheme(customArgs *clientgenargs.CustomArgs, clientsetDir, clientsetPkg string, groupGoNames map[clientgentypes.GroupVersion]string, boilerplate []byte) generator.Package {
 | 
				
			||||||
	schemePackage := filepath.Join(clientsetPackage, "scheme")
 | 
						schemeDir := filepath.Join(clientsetDir, "scheme")
 | 
				
			||||||
 | 
						schemePkg := filepath.Join(clientsetPkg, "scheme")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// create runtime.Registry for internal client because it has to know about group versions
 | 
						// create runtime.Registry for internal client because it has to know about group versions
 | 
				
			||||||
	internalClient := false
 | 
						internalClient := false
 | 
				
			||||||
@@ -235,7 +241,8 @@ NextGroup:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return &generator.DefaultPackage{
 | 
						return &generator.DefaultPackage{
 | 
				
			||||||
		PackageName:          "scheme",
 | 
							PackageName:          "scheme",
 | 
				
			||||||
		PackagePath:          schemePackage,
 | 
							PackagePath:          schemePkg,
 | 
				
			||||||
 | 
							Source:               schemeDir,
 | 
				
			||||||
		HeaderText:           boilerplate,
 | 
							HeaderText:           boilerplate,
 | 
				
			||||||
		PackageDocumentation: []byte("// This package contains the scheme of the automatically generated clientset.\n"),
 | 
							PackageDocumentation: []byte("// This package contains the scheme of the automatically generated clientset.\n"),
 | 
				
			||||||
		// GeneratorFunc returns a list of generators. Each generator generates a
 | 
							// GeneratorFunc returns a list of generators. Each generator generates a
 | 
				
			||||||
@@ -250,8 +257,8 @@ NextGroup:
 | 
				
			|||||||
						OptionalName: "register",
 | 
											OptionalName: "register",
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					InputPackages:  customArgs.GroupVersionPackages(),
 | 
										InputPackages:  customArgs.GroupVersionPackages(),
 | 
				
			||||||
					OutputPackage:  schemePackage,
 | 
										OutputPackage:  schemePkg,
 | 
				
			||||||
					OutputPath:     filepath.Join(srcTreePath, schemePackage),
 | 
										OutputPath:     schemeDir,
 | 
				
			||||||
					Groups:         customArgs.Groups,
 | 
										Groups:         customArgs.Groups,
 | 
				
			||||||
					GroupGoNames:   groupGoNames,
 | 
										GroupGoNames:   groupGoNames,
 | 
				
			||||||
					ImportTracker:  generator.NewImportTracker(),
 | 
										ImportTracker:  generator.NewImportTracker(),
 | 
				
			||||||
@@ -305,6 +312,35 @@ func applyGroupOverrides(universe types.Universe, customArgs *clientgenargs.Cust
 | 
				
			|||||||
	customArgs.Groups = newGroups
 | 
						customArgs.Groups = newGroups
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Because we try to assemble inputs from an input-base and a set of
 | 
				
			||||||
 | 
					// group-version arguments, sometimes that comes in as a filesystem path.  This
 | 
				
			||||||
 | 
					// function rewrites them all as their canonical Go import-paths.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// TODO: Change this tool to just take inputs as Go "patterns" like every other
 | 
				
			||||||
 | 
					// gengo tool, then extract GVs from those.
 | 
				
			||||||
 | 
					func sanitizePackagePaths(context *generator.Context, ca *clientgenargs.CustomArgs) error {
 | 
				
			||||||
 | 
						for i := range ca.Groups {
 | 
				
			||||||
 | 
							pkg := &ca.Groups[i]
 | 
				
			||||||
 | 
							for j := range pkg.Versions {
 | 
				
			||||||
 | 
								ver := &pkg.Versions[j]
 | 
				
			||||||
 | 
								input := ver.Package
 | 
				
			||||||
 | 
								p := context.Universe[path.Vendorless(input)]
 | 
				
			||||||
 | 
								if p == nil || p.Name == "" {
 | 
				
			||||||
 | 
									pkgs, err := context.FindPackages(input)
 | 
				
			||||||
 | 
									if err != nil {
 | 
				
			||||||
 | 
										return fmt.Errorf("can't find input package %q: %w", input, err)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									p = context.Universe[pkgs[0]]
 | 
				
			||||||
 | 
									if p == nil {
 | 
				
			||||||
 | 
										return fmt.Errorf("can't find input package %q in universe", input)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									ver.Package = p.Path
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Packages makes the client package definition.
 | 
					// Packages makes the client package definition.
 | 
				
			||||||
func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages {
 | 
					func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages {
 | 
				
			||||||
	boilerplate, err := arguments.LoadGoBoilerplate()
 | 
						boilerplate, err := arguments.LoadGoBoilerplate()
 | 
				
			||||||
@@ -318,6 +354,9 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	includedTypesOverrides := customArgs.IncludedTypesOverrides
 | 
						includedTypesOverrides := customArgs.IncludedTypesOverrides
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err := sanitizePackagePaths(context, customArgs); err != nil {
 | 
				
			||||||
 | 
							klog.Fatalf("cannot sanitize inputs: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	applyGroupOverrides(context.Universe, customArgs)
 | 
						applyGroupOverrides(context.Universe, customArgs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	gvToTypes := map[clientgentypes.GroupVersion][]*types.Type{}
 | 
						gvToTypes := map[clientgentypes.GroupVersion][]*types.Type{}
 | 
				
			||||||
@@ -361,13 +400,18 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var packageList []generator.Package
 | 
						clientsetDir := filepath.Join(arguments.OutputBase, customArgs.ClientsetName)
 | 
				
			||||||
	clientsetPackage := filepath.Join(arguments.OutputPackagePath, customArgs.ClientsetName)
 | 
						clientsetPkg := filepath.Join(customArgs.OutputPackage, customArgs.ClientsetName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	packageList = append(packageList, packageForClientset(customArgs, clientsetPackage, groupGoNames, boilerplate))
 | 
						var packageList []generator.Package
 | 
				
			||||||
	packageList = append(packageList, packageForScheme(customArgs, clientsetPackage, arguments.OutputBase, groupGoNames, boilerplate))
 | 
					
 | 
				
			||||||
 | 
						packageList = append(packageList,
 | 
				
			||||||
 | 
							packageForClientset(customArgs, clientsetDir, clientsetPkg, groupGoNames, boilerplate))
 | 
				
			||||||
 | 
						packageList = append(packageList,
 | 
				
			||||||
 | 
							packageForScheme(customArgs, clientsetDir, clientsetPkg, groupGoNames, boilerplate))
 | 
				
			||||||
	if customArgs.FakeClient {
 | 
						if customArgs.FakeClient {
 | 
				
			||||||
		packageList = append(packageList, fake.PackageForClientset(customArgs, clientsetPackage, groupGoNames, boilerplate))
 | 
							packageList = append(packageList,
 | 
				
			||||||
 | 
								fake.PackageForClientset(customArgs, clientsetDir, clientsetPkg, groupGoNames, boilerplate))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// If --clientset-only=true, we don't regenerate the individual typed clients.
 | 
						// If --clientset-only=true, we don't regenerate the individual typed clients.
 | 
				
			||||||
@@ -382,9 +426,14 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
 | 
				
			|||||||
			gv := clientgentypes.GroupVersion{Group: group.Group, Version: version.Version}
 | 
								gv := clientgentypes.GroupVersion{Group: group.Group, Version: version.Version}
 | 
				
			||||||
			types := gvToTypes[gv]
 | 
								types := gvToTypes[gv]
 | 
				
			||||||
			inputPath := gvPackages[gv]
 | 
								inputPath := gvPackages[gv]
 | 
				
			||||||
			packageList = append(packageList, packageForGroup(gv, orderer.OrderTypes(types), clientsetPackage, group.PackageName, groupGoNames[gv], customArgs.ClientsetAPIPath, arguments.OutputBase, inputPath, customArgs.ApplyConfigurationPackage, boilerplate))
 | 
								packageList = append(packageList,
 | 
				
			||||||
 | 
									packageForGroup(
 | 
				
			||||||
 | 
										gv, orderer.OrderTypes(types), clientsetDir, clientsetPkg,
 | 
				
			||||||
 | 
										group.PackageName, groupGoNames[gv], customArgs.ClientsetAPIPath,
 | 
				
			||||||
 | 
										inputPath, customArgs.ApplyConfigurationPackage, boilerplate))
 | 
				
			||||||
			if customArgs.FakeClient {
 | 
								if customArgs.FakeClient {
 | 
				
			||||||
				packageList = append(packageList, fake.PackageForGroup(gv, orderer.OrderTypes(types), clientsetPackage, group.PackageName, groupGoNames[gv], inputPath, customArgs.ApplyConfigurationPackage, boilerplate))
 | 
									packageList = append(packageList,
 | 
				
			||||||
 | 
										fake.PackageForGroup(gv, orderer.OrderTypes(types), clientsetDir, clientsetPkg, group.PackageName, groupGoNames[gv], inputPath, customArgs.ApplyConfigurationPackage, boilerplate))
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,13 +29,17 @@ import (
 | 
				
			|||||||
	clientgentypes "k8s.io/code-generator/cmd/client-gen/types"
 | 
						clientgentypes "k8s.io/code-generator/cmd/client-gen/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func PackageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clientsetPackage string, groupPackageName string, groupGoName string, inputPackage string, applyBuilderPackage string, boilerplate []byte) generator.Package {
 | 
					func PackageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clientsetDir, clientsetPkg string, groupPkgName string, groupGoName string, inputPkg string, applyBuilderPackage string, boilerplate []byte) generator.Package {
 | 
				
			||||||
	outputPackage := filepath.Join(clientsetPackage, "typed", strings.ToLower(groupPackageName), strings.ToLower(gv.Version.NonEmpty()), "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
 | 
				
			||||||
	realClientPackage := filepath.Join(clientsetPackage, "typed", strings.ToLower(groupPackageName), strings.ToLower(gv.Version.NonEmpty()))
 | 
						subdir := filepath.Join("typed", strings.ToLower(groupPkgName), strings.ToLower(gv.Version.NonEmpty()))
 | 
				
			||||||
 | 
						outputDir := filepath.Join(clientsetDir, subdir, "fake")
 | 
				
			||||||
 | 
						outputPkg := filepath.Join(clientsetPkg, subdir, "fake")
 | 
				
			||||||
 | 
						realClientPkg := filepath.Join(clientsetPkg, subdir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &generator.DefaultPackage{
 | 
						return &generator.DefaultPackage{
 | 
				
			||||||
		PackageName: "fake",
 | 
							PackageName: "fake",
 | 
				
			||||||
		PackagePath: outputPackage,
 | 
							PackagePath: outputPkg,
 | 
				
			||||||
 | 
							Source:      outputDir,
 | 
				
			||||||
		HeaderText:  boilerplate,
 | 
							HeaderText:  boilerplate,
 | 
				
			||||||
		PackageDocumentation: []byte(
 | 
							PackageDocumentation: []byte(
 | 
				
			||||||
			`// Package fake has the automatically generated clients.
 | 
								`// Package fake has the automatically generated clients.
 | 
				
			||||||
@@ -54,8 +58,8 @@ func PackageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, cli
 | 
				
			|||||||
					DefaultGen: generator.DefaultGen{
 | 
										DefaultGen: generator.DefaultGen{
 | 
				
			||||||
						OptionalName: "fake_" + strings.ToLower(c.Namers["private"].Name(t)),
 | 
											OptionalName: "fake_" + strings.ToLower(c.Namers["private"].Name(t)),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					outputPackage:             outputPackage,
 | 
										outputPackage:             outputPkg,
 | 
				
			||||||
					inputPackage:              inputPackage,
 | 
										inputPackage:              inputPkg,
 | 
				
			||||||
					group:                     gv.Group.NonEmpty(),
 | 
										group:                     gv.Group.NonEmpty(),
 | 
				
			||||||
					version:                   gv.Version.String(),
 | 
										version:                   gv.Version.String(),
 | 
				
			||||||
					groupGoName:               groupGoName,
 | 
										groupGoName:               groupGoName,
 | 
				
			||||||
@@ -67,10 +71,10 @@ func PackageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, cli
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			generators = append(generators, &genFakeForGroup{
 | 
								generators = append(generators, &genFakeForGroup{
 | 
				
			||||||
				DefaultGen: generator.DefaultGen{
 | 
									DefaultGen: generator.DefaultGen{
 | 
				
			||||||
					OptionalName: "fake_" + groupPackageName + "_client",
 | 
										OptionalName: "fake_" + groupPkgName + "_client",
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				outputPackage:     outputPackage,
 | 
									outputPackage:     outputPkg,
 | 
				
			||||||
				realClientPackage: realClientPackage,
 | 
									realClientPackage: realClientPkg,
 | 
				
			||||||
				group:             gv.Group.NonEmpty(),
 | 
									group:             gv.Group.NonEmpty(),
 | 
				
			||||||
				version:           gv.Version.String(),
 | 
									version:           gv.Version.String(),
 | 
				
			||||||
				groupGoName:       groupGoName,
 | 
									groupGoName:       groupGoName,
 | 
				
			||||||
@@ -85,12 +89,13 @@ func PackageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, cli
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func PackageForClientset(customArgs *clientgenargs.CustomArgs, clientsetPackage string, groupGoNames map[clientgentypes.GroupVersion]string, boilerplate []byte) generator.Package {
 | 
					func PackageForClientset(customArgs *clientgenargs.CustomArgs, clientsetDir, clientsetPkg string, groupGoNames map[clientgentypes.GroupVersion]string, boilerplate []byte) generator.Package {
 | 
				
			||||||
	return &generator.DefaultPackage{
 | 
						return &generator.DefaultPackage{
 | 
				
			||||||
		// TODO: we'll generate fake clientset for different release in the future.
 | 
							// TODO: we'll generate fake clientset for different release in the future.
 | 
				
			||||||
		// Package name and path are hard coded for now.
 | 
							// Package name and path are hard coded for now.
 | 
				
			||||||
		PackageName: "fake",
 | 
							PackageName: "fake",
 | 
				
			||||||
		PackagePath: filepath.Join(clientsetPackage, "fake"),
 | 
							PackagePath: filepath.Join(clientsetPkg, "fake"),
 | 
				
			||||||
 | 
							Source:      filepath.Join(clientsetDir, "fake"),
 | 
				
			||||||
		HeaderText:  boilerplate,
 | 
							HeaderText:  boilerplate,
 | 
				
			||||||
		PackageDocumentation: []byte(
 | 
							PackageDocumentation: []byte(
 | 
				
			||||||
			`// This package has the automatically generated fake clientset.
 | 
								`// This package has the automatically generated fake clientset.
 | 
				
			||||||
@@ -108,17 +113,16 @@ func PackageForClientset(customArgs *clientgenargs.CustomArgs, clientsetPackage
 | 
				
			|||||||
					},
 | 
										},
 | 
				
			||||||
					groups:               customArgs.Groups,
 | 
										groups:               customArgs.Groups,
 | 
				
			||||||
					groupGoNames:         groupGoNames,
 | 
										groupGoNames:         groupGoNames,
 | 
				
			||||||
					fakeClientsetPackage: clientsetPackage,
 | 
										fakeClientsetPackage: clientsetPkg,
 | 
				
			||||||
					outputPackage:        "fake",
 | 
					 | 
				
			||||||
					imports:              generator.NewImportTracker(),
 | 
										imports:              generator.NewImportTracker(),
 | 
				
			||||||
					realClientsetPackage: clientsetPackage,
 | 
										realClientsetPackage: clientsetPkg,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				&scheme.GenScheme{
 | 
									&scheme.GenScheme{
 | 
				
			||||||
					DefaultGen: generator.DefaultGen{
 | 
										DefaultGen: generator.DefaultGen{
 | 
				
			||||||
						OptionalName: "register",
 | 
											OptionalName: "register",
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					InputPackages: customArgs.GroupVersionPackages(),
 | 
										InputPackages: customArgs.GroupVersionPackages(),
 | 
				
			||||||
					OutputPackage: clientsetPackage,
 | 
										OutputPackage: clientsetPkg,
 | 
				
			||||||
					Groups:        customArgs.Groups,
 | 
										Groups:        customArgs.Groups,
 | 
				
			||||||
					GroupGoNames:  groupGoNames,
 | 
										GroupGoNames:  groupGoNames,
 | 
				
			||||||
					ImportTracker: generator.NewImportTracker(),
 | 
										ImportTracker: generator.NewImportTracker(),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,19 +33,18 @@ type genClientset struct {
 | 
				
			|||||||
	generator.DefaultGen
 | 
						generator.DefaultGen
 | 
				
			||||||
	groups               []clientgentypes.GroupVersions
 | 
						groups               []clientgentypes.GroupVersions
 | 
				
			||||||
	groupGoNames         map[clientgentypes.GroupVersion]string
 | 
						groupGoNames         map[clientgentypes.GroupVersion]string
 | 
				
			||||||
	fakeClientsetPackage string
 | 
						fakeClientsetPackage string // must be a Go import-path
 | 
				
			||||||
	outputPackage        string
 | 
					 | 
				
			||||||
	imports              namer.ImportTracker
 | 
						imports              namer.ImportTracker
 | 
				
			||||||
	clientsetGenerated   bool
 | 
						clientsetGenerated   bool
 | 
				
			||||||
	// the import path of the generated real clientset.
 | 
						// the import path of the generated real clientset.
 | 
				
			||||||
	realClientsetPackage string
 | 
						realClientsetPackage string // must be a Go import-path
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var _ generator.Generator = &genClientset{}
 | 
					var _ generator.Generator = &genClientset{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (g *genClientset) Namers(c *generator.Context) namer.NameSystems {
 | 
					func (g *genClientset) Namers(c *generator.Context) namer.NameSystems {
 | 
				
			||||||
	return namer.NameSystems{
 | 
						return namer.NameSystems{
 | 
				
			||||||
		"raw": namer.NewRawNamer(g.outputPackage, g.imports),
 | 
							"raw": namer.NewRawNamer(g.fakeClientsetPackage, g.imports),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ import (
 | 
				
			|||||||
// genFakeForGroup produces a file for a group client, e.g. ExtensionsClient for the extension group.
 | 
					// genFakeForGroup produces a file for a group client, e.g. ExtensionsClient for the extension group.
 | 
				
			||||||
type genFakeForGroup struct {
 | 
					type genFakeForGroup struct {
 | 
				
			||||||
	generator.DefaultGen
 | 
						generator.DefaultGen
 | 
				
			||||||
	outputPackage     string
 | 
						outputPackage     string // must be a Go import-path
 | 
				
			||||||
	realClientPackage string
 | 
						realClientPackage string // must be a Go import-path
 | 
				
			||||||
	group             string
 | 
						group             string
 | 
				
			||||||
	version           string
 | 
						version           string
 | 
				
			||||||
	groupGoName       string
 | 
						groupGoName       string
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,7 @@ import (
 | 
				
			|||||||
// genFakeForType produces a file for each top-level type.
 | 
					// genFakeForType produces a file for each top-level type.
 | 
				
			||||||
type genFakeForType struct {
 | 
					type genFakeForType struct {
 | 
				
			||||||
	generator.DefaultGen
 | 
						generator.DefaultGen
 | 
				
			||||||
	outputPackage             string
 | 
						outputPackage             string // Must be a Go import-path
 | 
				
			||||||
	group                     string
 | 
						group                     string
 | 
				
			||||||
	version                   string
 | 
						version                   string
 | 
				
			||||||
	groupGoName               string
 | 
						groupGoName               string
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,8 +33,7 @@ type genClientset struct {
 | 
				
			|||||||
	generator.DefaultGen
 | 
						generator.DefaultGen
 | 
				
			||||||
	groups             []clientgentypes.GroupVersions
 | 
						groups             []clientgentypes.GroupVersions
 | 
				
			||||||
	groupGoNames       map[clientgentypes.GroupVersion]string
 | 
						groupGoNames       map[clientgentypes.GroupVersion]string
 | 
				
			||||||
	clientsetPackage   string
 | 
						clientsetPackage   string // must be a Go import-path
 | 
				
			||||||
	outputPackage      string
 | 
					 | 
				
			||||||
	imports            namer.ImportTracker
 | 
						imports            namer.ImportTracker
 | 
				
			||||||
	clientsetGenerated bool
 | 
						clientsetGenerated bool
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -43,7 +42,7 @@ var _ generator.Generator = &genClientset{}
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (g *genClientset) Namers(c *generator.Context) namer.NameSystems {
 | 
					func (g *genClientset) Namers(c *generator.Context) namer.NameSystems {
 | 
				
			||||||
	return namer.NameSystems{
 | 
						return namer.NameSystems{
 | 
				
			||||||
		"raw": namer.NewRawNamer(g.outputPackage, g.imports),
 | 
							"raw": namer.NewRawNamer(g.clientsetPackage, g.imports),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,7 +40,7 @@ type genGroup struct {
 | 
				
			|||||||
	types            []*types.Type
 | 
						types            []*types.Type
 | 
				
			||||||
	imports          namer.ImportTracker
 | 
						imports          namer.ImportTracker
 | 
				
			||||||
	inputPackage     string
 | 
						inputPackage     string
 | 
				
			||||||
	clientsetPackage string
 | 
						clientsetPackage string // must be a Go import-path
 | 
				
			||||||
	// If the genGroup has been called. This generator should only execute once.
 | 
						// If the genGroup has been called. This generator should only execute once.
 | 
				
			||||||
	called bool
 | 
						called bool
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,10 +32,10 @@ import (
 | 
				
			|||||||
// genClientForType produces a file for each top-level type.
 | 
					// genClientForType produces a file for each top-level type.
 | 
				
			||||||
type genClientForType struct {
 | 
					type genClientForType struct {
 | 
				
			||||||
	generator.DefaultGen
 | 
						generator.DefaultGen
 | 
				
			||||||
	outputPackage             string
 | 
						outputPackage             string // must be a Go import-path
 | 
				
			||||||
	inputPackage              string
 | 
						inputPackage              string
 | 
				
			||||||
	clientsetPackage          string
 | 
						clientsetPackage          string // must be a Go import-path
 | 
				
			||||||
	applyConfigurationPackage string
 | 
						applyConfigurationPackage string // must be a Go import-path
 | 
				
			||||||
	group                     string
 | 
						group                     string
 | 
				
			||||||
	version                   string
 | 
						version                   string
 | 
				
			||||||
	groupGoName               string
 | 
						groupGoName               string
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,11 +33,11 @@ import (
 | 
				
			|||||||
// GenScheme produces a package for a clientset with the scheme, codecs and parameter codecs.
 | 
					// GenScheme produces a package for a clientset with the scheme, codecs and parameter codecs.
 | 
				
			||||||
type GenScheme struct {
 | 
					type GenScheme struct {
 | 
				
			||||||
	generator.DefaultGen
 | 
						generator.DefaultGen
 | 
				
			||||||
	OutputPackage   string
 | 
						OutputPackage   string // Must be a Go import-path
 | 
				
			||||||
 | 
						OutputPath      string // optional
 | 
				
			||||||
	Groups          []clientgentypes.GroupVersions
 | 
						Groups          []clientgentypes.GroupVersions
 | 
				
			||||||
	GroupGoNames    map[clientgentypes.GroupVersion]string
 | 
						GroupGoNames    map[clientgentypes.GroupVersion]string
 | 
				
			||||||
	InputPackages   map[clientgentypes.GroupVersion]string
 | 
						InputPackages   map[clientgentypes.GroupVersion]string
 | 
				
			||||||
	OutputPath      string
 | 
					 | 
				
			||||||
	ImportTracker   namer.ImportTracker
 | 
						ImportTracker   namer.ImportTracker
 | 
				
			||||||
	PrivateScheme   bool
 | 
						PrivateScheme   bool
 | 
				
			||||||
	CreateRegistry  bool
 | 
						CreateRegistry  bool
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,10 +32,6 @@ func main() {
 | 
				
			|||||||
	klog.InitFlags(nil)
 | 
						klog.InitFlags(nil)
 | 
				
			||||||
	genericArgs, customArgs := generatorargs.NewDefaults()
 | 
						genericArgs, customArgs := generatorargs.NewDefaults()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Override defaults.
 | 
					 | 
				
			||||||
	// TODO: move this out of client-gen
 | 
					 | 
				
			||||||
	genericArgs.OutputPackagePath = "k8s.io/kubernetes/pkg/client/clientset_generated/"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	genericArgs.AddFlags(pflag.CommandLine)
 | 
						genericArgs.AddFlags(pflag.CommandLine)
 | 
				
			||||||
	customArgs.AddFlags(pflag.CommandLine, "k8s.io/kubernetes/pkg/apis") // TODO: move this input path out of client-gen
 | 
						customArgs.AddFlags(pflag.CommandLine, "k8s.io/kubernetes/pkg/apis") // TODO: move this input path out of client-gen
 | 
				
			||||||
	flag.Set("logtostderr", "true")
 | 
						flag.Set("logtostderr", "true")
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user