mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 20:53:33 +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
|
// the respective types.go. We still need GroupVersions in the struct because
|
||||||
// we need an order.
|
// we need an order.
|
||||||
GroupVersionToInputPath map[unversioned.GroupVersion]string
|
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
|
// ClientsetName is the name of the clientset to be generated. It's
|
||||||
// populated from command-line arguments.
|
// populated from command-line arguments.
|
||||||
ClientsetName string
|
ClientsetName string
|
||||||
|
@ -166,16 +166,33 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
|
|||||||
if !ok {
|
if !ok {
|
||||||
glog.Fatalf("cannot convert arguments.CustomArgs to clientgenargs.Args")
|
glog.Fatalf("cannot convert arguments.CustomArgs to clientgenargs.Args")
|
||||||
}
|
}
|
||||||
|
includedTypesOverrides := customArgs.IncludedTypesOverrides
|
||||||
|
|
||||||
generatedBy := generatedBy(customArgs)
|
generatedBy := generatedBy(customArgs)
|
||||||
|
|
||||||
gvToTypes := map[unversioned.GroupVersion][]*types.Type{}
|
gvToTypes := map[unversioned.GroupVersion][]*types.Type{}
|
||||||
for gv, inputDir := range customArgs.GroupVersionToInputPath {
|
for gv, inputDir := range customArgs.GroupVersionToInputPath {
|
||||||
p := context.Universe.Package(inputDir)
|
p := context.Universe.Package(inputDir)
|
||||||
for _, t := range p.Types {
|
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" {
|
if types.ExtractCommentTags("+", t.SecondClosestCommentLines)["genclient"] != "true" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if _, found := gvToTypes[gv]; !found {
|
if _, found := gvToTypes[gv]; !found {
|
||||||
gvToTypes[gv] = []*types.Type{}
|
gvToTypes[gv] = []*types.Type{}
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,7 @@ import (
|
|||||||
var (
|
var (
|
||||||
test = flag.BoolP("test", "t", false, "set this flag to generate the client code for the testdata")
|
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/\"")
|
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\"")
|
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.")
|
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/\"")
|
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/\"")
|
||||||
@ -52,6 +53,24 @@ func versionToPath(gvPath string, group string, version string) (path string) {
|
|||||||
return
|
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) {
|
func parsePathGroupVersion(pgvString string) (gvPath string, gvString string) {
|
||||||
subs := strings.Split(pgvString, "/")
|
subs := strings.Split(pgvString, "/")
|
||||||
length := len(subs)
|
length := len(subs)
|
||||||
@ -85,6 +104,27 @@ func parseInputVersions() (paths []string, groupVersions []unversioned.GroupVers
|
|||||||
return paths, groupVersions, gvToPath, nil
|
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() {
|
func main() {
|
||||||
arguments := args.Default()
|
arguments := args.Default()
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
@ -124,6 +164,10 @@ func main() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Fatalf("Error: %v", err)
|
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)
|
glog.Infof("going to generate clientset from these input paths: %v", inputPath)
|
||||||
arguments.InputDirs = append(inputPath, dependencies...)
|
arguments.InputDirs = append(inputPath, dependencies...)
|
||||||
|
|
||||||
@ -135,6 +179,7 @@ func main() {
|
|||||||
ClientsetOnly: *clientsetOnly,
|
ClientsetOnly: *clientsetOnly,
|
||||||
FakeClient: *fakeClient,
|
FakeClient: *fakeClient,
|
||||||
CmdArgs: cmdArgs,
|
CmdArgs: cmdArgs,
|
||||||
|
IncludedTypesOverrides: includedTypesOverrides,
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("==arguments: %v\n", arguments)
|
fmt.Printf("==arguments: %v\n", arguments)
|
||||||
|
@ -45,8 +45,8 @@ ${clientgen} "$@"
|
|||||||
${clientgen} -t "$@"
|
${clientgen} -t "$@"
|
||||||
|
|
||||||
# Clientgen for federation clientset.
|
# 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_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" "$@"
|
${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} "$@"
|
${conversiongen} "$@"
|
||||||
${deepcopygen} "$@"
|
${deepcopygen} "$@"
|
||||||
|
@ -175,6 +175,7 @@ image-gc-high-threshold
|
|||||||
image-gc-low-threshold
|
image-gc-low-threshold
|
||||||
image-pull-policy
|
image-pull-policy
|
||||||
include-extended-apis
|
include-extended-apis
|
||||||
|
included-types-overrides
|
||||||
input-base
|
input-base
|
||||||
input-dirs
|
input-dirs
|
||||||
insecure-bind-address
|
insecure-bind-address
|
||||||
@ -197,8 +198,8 @@ k8s-build-output
|
|||||||
keep-gogoproto
|
keep-gogoproto
|
||||||
km-path
|
km-path
|
||||||
kube-api-burst
|
kube-api-burst
|
||||||
kube-api-qps
|
|
||||||
kube-api-content-type
|
kube-api-content-type
|
||||||
|
kube-api-qps
|
||||||
kube-master
|
kube-master
|
||||||
kube-master
|
kube-master
|
||||||
kube-master-url
|
kube-master-url
|
||||||
|
Loading…
Reference in New Issue
Block a user