diff --git a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go index e0d958fbf62..3aa8a067746 100644 --- a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go +++ b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go @@ -104,7 +104,7 @@ func DefaultNameSystem() string { return "public" } -func generatedBy(customArgs clientgenargs.Args) string { +func generatedBy(customArgs *clientgenargs.Args) string { if len(customArgs.CmdArgs) != 0 { return fmt.Sprintf("\n// This package is generated by client-gen with custom arguments.\n\n") } @@ -175,7 +175,7 @@ func packageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, cli } } -func packageForClientset(customArgs clientgenargs.Args, clientsetPackage string, boilerplate []byte, generatedBy string) generator.Package { +func packageForClientset(customArgs *clientgenargs.Args, clientsetPackage string, boilerplate []byte, generatedBy string) generator.Package { return &generator.DefaultPackage{ PackageName: customArgs.ClientsetName, PackagePath: clientsetPackage, @@ -206,7 +206,7 @@ func packageForClientset(customArgs clientgenargs.Args, clientsetPackage string, } } -func packageForScheme(customArgs clientgenargs.Args, clientsetPackage string, srcTreePath string, boilerplate []byte, generatedBy string) generator.Package { +func packageForScheme(customArgs *clientgenargs.Args, clientsetPackage string, srcTreePath string, boilerplate []byte, generatedBy string) generator.Package { schemePackage := filepath.Join(clientsetPackage, "scheme") // create runtime.Registry for internal client because it has to know about group versions @@ -312,13 +312,13 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat glog.Fatalf("Failed loading boilerplate: %v", err) } - customArgs, ok := arguments.CustomArgs.(clientgenargs.Args) + customArgs, ok := arguments.CustomArgs.(*clientgenargs.Args) if !ok { glog.Fatalf("cannot convert arguments.CustomArgs to clientgenargs.Args") } includedTypesOverrides := customArgs.IncludedTypesOverrides - applyGroupOverrides(context.Universe, &customArgs) + applyGroupOverrides(context.Universe, customArgs) generatedBy := generatedBy(customArgs) diff --git a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/fake_client_generator.go b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/fake_client_generator.go index 9b607fdb35c..6cd37d811e9 100644 --- a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/fake_client_generator.go +++ b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/fake_client_generator.go @@ -83,7 +83,7 @@ func PackageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, cli } } -func PackageForClientset(customArgs clientgenargs.Args, fakeClientsetPackage string, boilerplate []byte, generatedBy string) generator.Package { +func PackageForClientset(customArgs *clientgenargs.Args, fakeClientsetPackage string, boilerplate []byte, generatedBy string) generator.Package { return &generator.DefaultPackage{ // TODO: we'll generate fake clientset for different release in the future. // Package name and path are hard coded for now. diff --git a/staging/src/k8s.io/code-generator/cmd/client-gen/main.go b/staging/src/k8s.io/code-generator/cmd/client-gen/main.go index 2bbb98b75c9..17804466ba6 100644 --- a/staging/src/k8s.io/code-generator/cmd/client-gen/main.go +++ b/staging/src/k8s.io/code-generator/cmd/client-gen/main.go @@ -18,6 +18,7 @@ limitations under the License. package main import ( + "flag" "fmt" "path/filepath" "sort" @@ -29,11 +30,11 @@ import ( "k8s.io/gengo/args" "github.com/golang/glog" - flag "github.com/spf13/pflag" + "github.com/spf13/pflag" ) var ( - inputVersions = flag.StringSlice("input", []string{ + inputVersions = pflag.StringSlice("input", []string{ "api/", "admissionregistration/", "authentication/", @@ -50,13 +51,13 @@ var ( "settings/", "networking/", }, "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...\".") - 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 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.") - basePath = flag.String("input-base", "k8s.io/kubernetes/pkg/apis", "base path to look for the api group.") - clientsetName = flag.StringP("clientset-name", "n", "internalclientset", "the name of the generated clientset package.") - clientsetAPIPath = flag.StringP("clientset-api-path", "", "", "the value of default API path.") - clientsetPath = flag.String("clientset-path", "k8s.io/kubernetes/pkg/client/clientset_generated/", "the generated clientset will be output to /.") - clientsetOnly = flag.Bool("clientset-only", false, "when set, client-gen only generates the clientset shell, without generating the individual typed clients") - fakeClient = flag.Bool("fake-clientset", true, "when set, client-gen will generate the fake clientset that can be used in tests") + includedTypesOverrides = pflag.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 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.") + basePath = pflag.String("input-base", "k8s.io/kubernetes/pkg/apis", "base path to look for the api group.") + clientsetName = pflag.StringP("clientset-name", "n", "internalclientset", "the name of the generated clientset package.") + clientsetAPIPath = pflag.StringP("clientset-api-path", "", "", "the value of default API path.") + clientsetPath = pflag.String("clientset-path", "k8s.io/kubernetes/pkg/client/clientset_generated/", "the generated clientset will be output to /.") + clientsetOnly = pflag.Bool("clientset-only", false, "when set, client-gen only generates the clientset shell, without generating the individual typed clients") + fakeClient = pflag.Bool("fake-clientset", true, "when set, client-gen will generate the fake clientset that can be used in tests") ) func versionToPath(gvPath string, group string, version string) (path string) { @@ -151,16 +152,7 @@ func parseIncludedTypesOverrides() (map[types.GroupVersion][]string, error) { } func main() { - arguments := args.Default() - arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt") - flag.Parse() - var cmdArgs string - flag.VisitAll(func(f *flag.Flag) { - if !f.Changed || f.Name == "verify-only" { - return - } - cmdArgs = cmdArgs + fmt.Sprintf("--%s=%s ", f.Name, f.Value) - }) + arguments := args.Default().WithoutDefaultFlagParsing() dependencies := []string{ "k8s.io/apimachinery/pkg/fields", @@ -169,6 +161,25 @@ func main() { "k8s.io/apimachinery/pkg/apimachinery/registered", } + customArgs := clientgenargs.Args{ + ClientsetName: *clientsetName, + ClientsetAPIPath: *clientsetAPIPath, + ClientsetOutputPath: *clientsetPath, + ClientsetOnly: *clientsetOnly, + FakeClient: *fakeClient, + } + + // Override defaults. + arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt") + arguments.CustomArgs = customArgs + + // Register default flags. We do this manually here because we have to override InputDirs below after additional + // input dirs are parse fromt he command-line. + arguments.AddFlags(pflag.CommandLine) + pflag.CommandLine.AddGoFlagSet(flag.CommandLine) + pflag.Parse() + + // Post-parse arguments. inputPath, groups, gvToPath, err := parseInputVersions() if err != nil { glog.Fatalf("Error: %v", err) @@ -178,21 +189,22 @@ func main() { glog.Fatalf("Unexpected error: %v", err) } glog.V(3).Infof("going to generate clientset from these input paths: %v", inputPath) - arguments.InputDirs = append(inputPath, dependencies...) - arguments.CustomArgs = clientgenargs.Args{ - Groups: groups, - GroupVersionToInputPath: gvToPath, - ClientsetName: *clientsetName, - ClientsetAPIPath: *clientsetAPIPath, - ClientsetOutputPath: *clientsetPath, - ClientsetOnly: *clientsetOnly, - FakeClient: *fakeClient, - CmdArgs: cmdArgs, - IncludedTypesOverrides: includedTypesOverrides, - } + // Override + arguments.InputDirs = append(arguments.InputDirs, append(inputPath, dependencies...)...) + customArgs.Groups = groups + customArgs.GroupVersionToInputPath = gvToPath + customArgs.IncludedTypesOverrides = includedTypesOverrides - glog.V(3).Infof("==arguments: %v\n", arguments) + // Derive customArgs.CmdArgs + var cmdArgs string + pflag.VisitAll(func(f *pflag.Flag) { + if !f.Changed || f.Name == "verify-only" { + return + } + cmdArgs = cmdArgs + fmt.Sprintf("--%s=%s ", f.Name, f.Value) + }) + customArgs.CmdArgs = cmdArgs if err := arguments.Execute( generators.NameSystems(), diff --git a/staging/src/k8s.io/code-generator/cmd/conversion-gen/main.go b/staging/src/k8s.io/code-generator/cmd/conversion-gen/main.go index c8acbb18d0d..510a1303d58 100644 --- a/staging/src/k8s.io/code-generator/cmd/conversion-gen/main.go +++ b/staging/src/k8s.io/code-generator/cmd/conversion-gen/main.go @@ -47,10 +47,6 @@ import ( func main() { arguments := args.Default() - // Override defaults. - arguments.OutputFileBaseName = "conversion_generated" - arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt") - // Custom args. // TODO: make callers pass this in. It is too opaque here, and any use of // the flag that DOESN'T include these is broken. @@ -69,6 +65,10 @@ func main() { "Comma-separated list of import paths which are considered, after tag-specified peers, for conversions.") pflag.CommandLine.BoolVar(&customArgs.SkipUnsafe, "skip-unsafe", customArgs.SkipUnsafe, "If true, will not generate code using unsafe pointer conversions; resulting code may be slower.") + + // Override defaults. + arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt") + arguments.OutputFileBaseName = "conversion_generated" arguments.CustomArgs = customArgs // Run it. diff --git a/staging/src/k8s.io/code-generator/cmd/deepcopy-gen/main.go b/staging/src/k8s.io/code-generator/cmd/deepcopy-gen/main.go index f270bff3820..b045acaf846 100644 --- a/staging/src/k8s.io/code-generator/cmd/deepcopy-gen/main.go +++ b/staging/src/k8s.io/code-generator/cmd/deepcopy-gen/main.go @@ -60,14 +60,14 @@ import ( func main() { arguments := args.Default() - // Override defaults. - arguments.OutputFileBaseName = "deepcopy_generated" - arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt") - // Custom args. customArgs := &generators.CustomArgs{} pflag.CommandLine.StringSliceVar(&customArgs.BoundingDirs, "bounding-dirs", customArgs.BoundingDirs, "Comma-separated list of import paths which bound the types for which deep-copies will be generated.") + + // Override defaults. + arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt") + arguments.OutputFileBaseName = "deepcopy_generated" arguments.CustomArgs = customArgs // Run it. diff --git a/staging/src/k8s.io/code-generator/cmd/defaulter-gen/main.go b/staging/src/k8s.io/code-generator/cmd/defaulter-gen/main.go index b12e58376ed..119ca119011 100644 --- a/staging/src/k8s.io/code-generator/cmd/defaulter-gen/main.go +++ b/staging/src/k8s.io/code-generator/cmd/defaulter-gen/main.go @@ -54,16 +54,16 @@ import ( func main() { arguments := args.Default() - // Override defaults. - arguments.OutputFileBaseName = "zz_generated.defaults" - arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt") - // Custom args. customArgs := &generators.CustomArgs{ ExtraPeerDirs: []string{}, } pflag.CommandLine.StringSliceVar(&customArgs.ExtraPeerDirs, "extra-peer-dirs", customArgs.ExtraPeerDirs, "Comma-separated list of import paths which are considered, after tag-specified peers, for conversions.") + + // Override defaults. + arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt") + arguments.OutputFileBaseName = "zz_generated.defaults" arguments.CustomArgs = customArgs // Run it. diff --git a/staging/src/k8s.io/code-generator/cmd/import-boss/main.go b/staging/src/k8s.io/code-generator/cmd/import-boss/main.go index db9505e52b4..a6fad8efe29 100644 --- a/staging/src/k8s.io/code-generator/cmd/import-boss/main.go +++ b/staging/src/k8s.io/code-generator/cmd/import-boss/main.go @@ -68,15 +68,13 @@ import ( func main() { arguments := args.Default() - // Override defaults. These are Kubernetes specific input and output - // locations. + // Override defaults. + arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt") arguments.InputDirs = []string{ "k8s.io/kubernetes/pkg/...", "k8s.io/kubernetes/cmd/...", "k8s.io/kubernetes/plugin/...", } - arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt") - // arguments.VerifyOnly = true if err := arguments.Execute( generators.NameSystems(), diff --git a/staging/src/k8s.io/code-generator/cmd/informer-gen/main.go b/staging/src/k8s.io/code-generator/cmd/informer-gen/main.go index 00d4eae2b88..78c0b3829cb 100644 --- a/staging/src/k8s.io/code-generator/cmd/informer-gen/main.go +++ b/staging/src/k8s.io/code-generator/cmd/informer-gen/main.go @@ -27,22 +27,22 @@ import ( ) func main() { + arguments := args.Default() + + // Custom arguments. customArgs := &generators.CustomArgs{ VersionedClientSetPackage: "k8s.io/kubernetes/pkg/client/clientset_generated/clientset", InternalClientSetPackage: "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset", ListersPackage: "k8s.io/kubernetes/pkg/client/listers", SingleDirectory: false, } - arguments := &args.GeneratorArgs{ - OutputBase: args.DefaultSourceTree(), - GoHeaderFilePath: filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt"), - GeneratedBuildTag: "ignore_autogenerated", - OutputPackagePath: "k8s.io/kubernetes/pkg/client/informers/informers_generated", - CustomArgs: customArgs, - } - arguments.AddFlags(pflag.CommandLine) customArgs.AddFlags(pflag.CommandLine) + // Override defaults. + arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt") + arguments.OutputPackagePath = "k8s.io/kubernetes/pkg/client/informers/informers_generated" + arguments.CustomArgs = customArgs + // Run it. if err := arguments.Execute( generators.NameSystems(), diff --git a/staging/src/k8s.io/code-generator/cmd/lister-gen/main.go b/staging/src/k8s.io/code-generator/cmd/lister-gen/main.go index 1be54d74716..3b305f82877 100644 --- a/staging/src/k8s.io/code-generator/cmd/lister-gen/main.go +++ b/staging/src/k8s.io/code-generator/cmd/lister-gen/main.go @@ -23,17 +23,14 @@ import ( "k8s.io/gengo/args" "github.com/golang/glog" - "github.com/spf13/pflag" ) func main() { - arguments := &args.GeneratorArgs{ - OutputBase: args.DefaultSourceTree(), - GoHeaderFilePath: filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt"), - GeneratedBuildTag: "ignore_autogenerated", - OutputPackagePath: "k8s.io/kubernetes/pkg/client/listers", - } - arguments.AddFlags(pflag.CommandLine) + arguments := args.Default() + + // Override defaults. + arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt") + arguments.OutputPackagePath = "k8s.io/kubernetes/pkg/client/listers" // Run it. if err := arguments.Execute( diff --git a/staging/src/k8s.io/code-generator/cmd/openapi-gen/main.go b/staging/src/k8s.io/code-generator/cmd/openapi-gen/main.go index afb69578618..67355f83494 100644 --- a/staging/src/k8s.io/code-generator/cmd/openapi-gen/main.go +++ b/staging/src/k8s.io/code-generator/cmd/openapi-gen/main.go @@ -32,8 +32,8 @@ func main() { arguments := args.Default() // Override defaults. - arguments.OutputFileBaseName = "openapi_generated" arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt") + arguments.OutputFileBaseName = "openapi_generated" // Run it. if err := arguments.Execute( diff --git a/staging/src/k8s.io/code-generator/cmd/set-gen/main.go b/staging/src/k8s.io/code-generator/cmd/set-gen/main.go index 524ba81d035..24af2229f9f 100644 --- a/staging/src/k8s.io/code-generator/cmd/set-gen/main.go +++ b/staging/src/k8s.io/code-generator/cmd/set-gen/main.go @@ -37,11 +37,10 @@ import ( func main() { arguments := args.Default() - // Override defaults. These are Kubernetes specific input and output - // locations. + // Override defaults. + arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt") arguments.InputDirs = []string{"k8s.io/kubernetes/pkg/util/sets/types"} arguments.OutputPackagePath = "k8s.io/apimachinery/pkg/util/sets" - arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kubernetes/hack/boilerplate/boilerplate.go.txt") if err := arguments.Execute( generators.NameSystems(),