mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 18:28:13 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			127 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| /*
 | |
| Copyright 2015 The Kubernetes Authors All rights reserved.
 | |
| 
 | |
| 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.
 | |
| */
 | |
| 
 | |
| // client-gen makes the individual typed clients using go2idl.
 | |
| package main
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"path/filepath"
 | |
| 
 | |
| 	"k8s.io/kubernetes/cmd/libs/go2idl/args"
 | |
| 	"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/generators"
 | |
| 	"k8s.io/kubernetes/pkg/api/unversioned"
 | |
| 
 | |
| 	"github.com/golang/glog"
 | |
| 	flag "github.com/spf13/pflag"
 | |
| )
 | |
| 
 | |
| 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/"}, "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\"")
 | |
| 	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")
 | |
| )
 | |
| 
 | |
| func versionToPath(group string, version string) (path string) {
 | |
| 	const base = "k8s.io/kubernetes/pkg"
 | |
| 	// special case for the core group
 | |
| 	if group == "api" {
 | |
| 		path = filepath.Join(base, "api", version)
 | |
| 	} else {
 | |
| 		path = filepath.Join(base, "apis", group, version)
 | |
| 	}
 | |
| 	return
 | |
| }
 | |
| 
 | |
| func parseInputVersions() ([]string, []unversioned.GroupVersion, error) {
 | |
| 	var visitedGroups = make(map[string]struct{})
 | |
| 	var groupVersions []unversioned.GroupVersion
 | |
| 	var paths []string
 | |
| 	for _, gvString := range *inputVersions {
 | |
| 		gv, err := unversioned.ParseGroupVersion(gvString)
 | |
| 		if err != nil {
 | |
| 			return nil, nil, err
 | |
| 		}
 | |
| 
 | |
| 		if _, found := visitedGroups[gv.Group]; found {
 | |
| 			return nil, nil, fmt.Errorf("group %q appeared more than once in the input. At most one version is allowed for each group.", gv.Group)
 | |
| 		}
 | |
| 		visitedGroups[gv.Group] = struct{}{}
 | |
| 		groupVersions = append(groupVersions, gv)
 | |
| 		paths = append(paths, versionToPath(gv.Group, gv.Version))
 | |
| 	}
 | |
| 	return paths, groupVersions, nil
 | |
| }
 | |
| 
 | |
| func main() {
 | |
| 	arguments := args.Default()
 | |
| 	flag.Parse()
 | |
| 	dependencies := []string{
 | |
| 		"k8s.io/kubernetes/pkg/fields",
 | |
| 		"k8s.io/kubernetes/pkg/labels",
 | |
| 		"k8s.io/kubernetes/pkg/watch",
 | |
| 		"k8s.io/kubernetes/pkg/client/unversioned",
 | |
| 		"k8s.io/kubernetes/pkg/client/testing/fake",
 | |
| 		"k8s.io/kubernetes/pkg/apimachinery/registered",
 | |
| 	}
 | |
| 
 | |
| 	if *test {
 | |
| 		arguments.InputDirs = append(dependencies, []string{
 | |
| 			"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testdata/apis/testgroup",
 | |
| 		}...)
 | |
| 		// We may change the output path later.
 | |
| 		arguments.OutputPackagePath = "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testoutput"
 | |
| 		arguments.CustomArgs = generators.ClientGenArgs{
 | |
| 			[]unversioned.GroupVersion{{"testgroup", ""}},
 | |
| 			"test_internalclientset",
 | |
| 			"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/",
 | |
| 			false,
 | |
| 			false,
 | |
| 		}
 | |
| 	} else {
 | |
| 		inputPath, groupVersions, err := parseInputVersions()
 | |
| 		if err != nil {
 | |
| 			glog.Fatalf("Error: %v", err)
 | |
| 		}
 | |
| 		glog.Info("going to generate clientset from these input paths: %v", inputPath)
 | |
| 		arguments.InputDirs = append(inputPath, dependencies...)
 | |
| 		// TODO: we need to make OutPackagePath a map[string]string. For example,
 | |
| 		// we need clientset and the individual typed clients be output to different
 | |
| 		// output path.
 | |
| 
 | |
| 		// We may change the output path later.
 | |
| 		arguments.OutputPackagePath = "k8s.io/kubernetes/pkg/client/typed/generated"
 | |
| 
 | |
| 		arguments.CustomArgs = generators.ClientGenArgs{
 | |
| 			groupVersions,
 | |
| 			*clientsetName,
 | |
| 			*clientsetPath,
 | |
| 			*clientsetOnly,
 | |
| 			true,
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if err := arguments.Execute(
 | |
| 		generators.NameSystems(),
 | |
| 		generators.DefaultNameSystem(),
 | |
| 		generators.Packages,
 | |
| 	); err != nil {
 | |
| 		glog.Fatalf("Error: %v", err)
 | |
| 	}
 | |
| }
 | 
