mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 03:41:45 +00:00
Updating client-gen to support a user specified override on the resources to be included in generated client
This commit is contained in:
parent
1616239b4a
commit
73895c0418
@ -29,6 +29,10 @@ type Args struct {
|
||||
// the respective types.go. We still need GroupVersions in the struct because
|
||||
// we need an order.
|
||||
GroupVersionToInputPath map[unversioned.GroupVersion]string
|
||||
|
||||
// Overrides for which types should be included in the client.
|
||||
IncludedTypesOverrides map[unversioned.GroupVersion][]string
|
||||
|
||||
// ClientsetName is the name of the clientset to be generated. It's
|
||||
// populated from command-line arguments.
|
||||
ClientsetName string
|
||||
|
@ -166,15 +166,32 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
|
||||
if !ok {
|
||||
glog.Fatalf("cannot convert arguments.CustomArgs to clientgenargs.Args")
|
||||
}
|
||||
includedTypesOverrides := customArgs.IncludedTypesOverrides
|
||||
|
||||
generatedBy := generatedBy(customArgs)
|
||||
|
||||
gvToTypes := map[unversioned.GroupVersion][]*types.Type{}
|
||||
for gv, inputDir := range customArgs.GroupVersionToInputPath {
|
||||
p := context.Universe.Package(inputDir)
|
||||
for _, t := range p.Types {
|
||||
if types.ExtractCommentTags("+", t.SecondClosestCommentLines)["genclient"] != "true" {
|
||||
continue
|
||||
for n, t := range p.Types {
|
||||
// filter out types which are not included in user specified overrides.
|
||||
typesOverride, ok := includedTypesOverrides[gv]
|
||||
if ok {
|
||||
found := false
|
||||
for _, typeStr := range typesOverride {
|
||||
if typeStr == n {
|
||||
found = true
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
// User has not specified any override for this group version.
|
||||
// filter out types which dont have genclient=true.
|
||||
if types.ExtractCommentTags("+", t.SecondClosestCommentLines)["genclient"] != "true" {
|
||||
continue
|
||||
}
|
||||
}
|
||||
if _, found := gvToTypes[gv]; !found {
|
||||
gvToTypes[gv] = []*types.Type{}
|
||||
|
@ -33,13 +33,14 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
test = flag.BoolP("test", "t", false, "set this flag to generate the client code for the testdata")
|
||||
inputVersions = flag.StringSlice("input", []string{"api/", "extensions/", "autoscaling/", "batch/"}, "group/versions that client-gen will generate clients for. At most one version per group is allowed. Specified in the format \"group1/version1,group2/version2...\". Default to \"api/,extensions/,autoscaling/,batch/\"")
|
||||
basePath = flag.String("input-base", "k8s.io/kubernetes/pkg/apis", "base path to look for the api group. Default to \"k8s.io/kubernetes/pkg/apis\"")
|
||||
clientsetName = flag.StringP("clientset-name", "n", "internalclientset", "the name of the generated clientset package.")
|
||||
clientsetPath = flag.String("clientset-path", "k8s.io/kubernetes/pkg/client/clientset_generated/", "the generated clientset will be output to <clientset-path>/<clientset-name>. Default to \"k8s.io/kubernetes/pkg/client/clientset_generated/\"")
|
||||
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")
|
||||
test = flag.BoolP("test", "t", false, "set this flag to generate the client code for the testdata")
|
||||
inputVersions = flag.StringSlice("input", []string{"api/", "extensions/", "autoscaling/", "batch/"}, "group/versions that client-gen will generate clients for. At most one version per group is allowed. Specified in the format \"group1/version1,group2/version2...\". Default to \"api/,extensions/,autoscaling/,batch/\"")
|
||||
includedTypesOverrides = flag.StringSlice("included-types-overrides", []string{}, "list of group/version/type for which client should be generated. By default, client is generated for all types which have genclient=true in types.go. This overrides that. For each groupVersion in this list, only the types mentioned here will be included. The default check of genclient=true will be used for other group versions.")
|
||||
basePath = flag.String("input-base", "k8s.io/kubernetes/pkg/apis", "base path to look for the api group. Default to \"k8s.io/kubernetes/pkg/apis\"")
|
||||
clientsetName = flag.StringP("clientset-name", "n", "internalclientset", "the name of the generated clientset package.")
|
||||
clientsetPath = flag.String("clientset-path", "k8s.io/kubernetes/pkg/client/clientset_generated/", "the generated clientset will be output to <clientset-path>/<clientset-name>. Default to \"k8s.io/kubernetes/pkg/client/clientset_generated/\"")
|
||||
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")
|
||||
)
|
||||
|
||||
func versionToPath(gvPath string, group string, version string) (path string) {
|
||||
@ -52,6 +53,24 @@ func versionToPath(gvPath string, group string, version string) (path string) {
|
||||
return
|
||||
}
|
||||
|
||||
func parseGroupVersionType(gvtString string) (gvString string, typeStr string, err error) {
|
||||
invalidFormatErr := fmt.Errorf("invalid value: %s, should be of the form group/version/type", gvtString)
|
||||
subs := strings.Split(gvtString, "/")
|
||||
length := len(subs)
|
||||
switch length {
|
||||
case 2:
|
||||
// handle legacy api group version.
|
||||
if subs[0] == "api" {
|
||||
return "api/", subs[1], nil
|
||||
}
|
||||
return "", "", invalidFormatErr
|
||||
case 3:
|
||||
return strings.Join(subs[:length-1], "/"), subs[length-1], nil
|
||||
default:
|
||||
return "", "", invalidFormatErr
|
||||
}
|
||||
}
|
||||
|
||||
func parsePathGroupVersion(pgvString string) (gvPath string, gvString string) {
|
||||
subs := strings.Split(pgvString, "/")
|
||||
length := len(subs)
|
||||
@ -85,6 +104,27 @@ func parseInputVersions() (paths []string, groupVersions []unversioned.GroupVers
|
||||
return paths, groupVersions, gvToPath, nil
|
||||
}
|
||||
|
||||
func parseIncludedTypesOverrides() (map[unversioned.GroupVersion][]string, error) {
|
||||
overrides := make(map[unversioned.GroupVersion][]string)
|
||||
for _, input := range *includedTypesOverrides {
|
||||
gvString, typeStr, err := parseGroupVersionType(input)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
gv, err := unversioned.ParseGroupVersion(gvString)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
types, ok := overrides[gv]
|
||||
if !ok {
|
||||
types = []string{}
|
||||
}
|
||||
types = append(types, typeStr)
|
||||
overrides[gv] = types
|
||||
}
|
||||
return overrides, nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
arguments := args.Default()
|
||||
flag.Parse()
|
||||
@ -124,6 +164,10 @@ func main() {
|
||||
if err != nil {
|
||||
glog.Fatalf("Error: %v", err)
|
||||
}
|
||||
includedTypesOverrides, err := parseIncludedTypesOverrides()
|
||||
if err != nil {
|
||||
glog.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
glog.Infof("going to generate clientset from these input paths: %v", inputPath)
|
||||
arguments.InputDirs = append(inputPath, dependencies...)
|
||||
|
||||
@ -135,6 +179,7 @@ func main() {
|
||||
ClientsetOnly: *clientsetOnly,
|
||||
FakeClient: *fakeClient,
|
||||
CmdArgs: cmdArgs,
|
||||
IncludedTypesOverrides: includedTypesOverrides,
|
||||
}
|
||||
|
||||
fmt.Printf("==arguments: %v\n", arguments)
|
||||
|
@ -45,8 +45,8 @@ ${clientgen} "$@"
|
||||
${clientgen} -t "$@"
|
||||
|
||||
# Clientgen for federation clientset.
|
||||
${clientgen} --clientset-name=federation_internalclientset --clientset-path=k8s.io/kubernetes/federation/client/clientset_generated --input="../../federation/apis/federation/" "$@"
|
||||
${clientgen} --clientset-name=federation_release_1_3 --clientset-path=k8s.io/kubernetes/federation/client/clientset_generated --input="../../federation/apis/federation/v1alpha1" "$@"
|
||||
${clientgen} --clientset-name=federation_internalclientset --clientset-path=k8s.io/kubernetes/federation/client/clientset_generated --input="../../federation/apis/federation/","api/" --included-types-overrides="api/Service" "$@"
|
||||
${clientgen} --clientset-name=federation_release_1_3 --clientset-path=k8s.io/kubernetes/federation/client/clientset_generated --input="../../federation/apis/federation/v1alpha1","api/v1" --included-types-overrides="api/v1/Service" "$@"
|
||||
|
||||
${conversiongen} "$@"
|
||||
${deepcopygen} "$@"
|
||||
|
@ -175,6 +175,7 @@ image-gc-high-threshold
|
||||
image-gc-low-threshold
|
||||
image-pull-policy
|
||||
include-extended-apis
|
||||
included-types-overrides
|
||||
input-base
|
||||
input-dirs
|
||||
insecure-bind-address
|
||||
@ -197,8 +198,8 @@ k8s-build-output
|
||||
keep-gogoproto
|
||||
km-path
|
||||
kube-api-burst
|
||||
kube-api-qps
|
||||
kube-api-content-type
|
||||
kube-api-qps
|
||||
kube-master
|
||||
kube-master
|
||||
kube-master-url
|
||||
|
Loading…
Reference in New Issue
Block a user