mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 14:37:00 +00:00
code-generator: complete PkgName, GroupName, GoName separation
- GroupNames are domain-like logical name for the group. Only the first segment is used as default for GoName - PkgName is the directory name. All packages in client, informer, lister re-use this for packages. - GoName is the Go identifier (CamelCase) used to reference the group, e.g. in the interface names, in the clientsets etc. Moreover it is used for package import aliases. The GoName defaults to the first segment of the GroupName.
This commit is contained in:
parent
7045c47986
commit
3247544082
@ -199,7 +199,7 @@ func packageForClientset(customArgs *clientgenargs.CustomArgs, clientsetPackage
|
||||
}
|
||||
}
|
||||
|
||||
func packageForScheme(customArgs *clientgenargs.CustomArgs, clientsetPackage string, srcTreePath string, boilerplate []byte) generator.Package {
|
||||
func packageForScheme(customArgs *clientgenargs.CustomArgs, clientsetPackage string, srcTreePath string, groupGoNames map[clientgentypes.GroupVersion]string, boilerplate []byte) generator.Package {
|
||||
schemePackage := filepath.Join(clientsetPackage, "scheme")
|
||||
|
||||
// create runtime.Registry for internal client because it has to know about group versions
|
||||
@ -236,6 +236,7 @@ NextGroup:
|
||||
OutputPackage: schemePackage,
|
||||
OutputPath: filepath.Join(srcTreePath, schemePackage),
|
||||
Groups: customArgs.Groups,
|
||||
GroupGoNames: groupGoNames,
|
||||
ImportTracker: generator.NewImportTracker(),
|
||||
CreateRegistry: internalClient,
|
||||
},
|
||||
@ -274,7 +275,7 @@ func applyGroupOverrides(universe types.Universe, customArgs *clientgenargs.Cust
|
||||
if newGV, ok := changes[gv]; ok {
|
||||
// There's an override, so use it.
|
||||
newGVS := clientgentypes.GroupVersions{
|
||||
PackageName: gv.Group.NonEmpty(),
|
||||
PackageName: gvs.PackageName,
|
||||
Group: newGV.Group,
|
||||
Versions: gvs.Versions,
|
||||
}
|
||||
@ -360,7 +361,7 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
|
||||
clientsetPackage := filepath.Join(customArgs.ClientsetOutputPath, customArgs.ClientsetName)
|
||||
|
||||
packageList = append(packageList, packageForClientset(customArgs, clientsetPackage, groupGoNames, boilerplate))
|
||||
packageList = append(packageList, packageForScheme(customArgs, clientsetPackage, arguments.OutputBase, boilerplate))
|
||||
packageList = append(packageList, packageForScheme(customArgs, clientsetPackage, arguments.OutputBase, groupGoNames, boilerplate))
|
||||
if customArgs.FakeClient {
|
||||
packageList = append(packageList, fake.PackageForClientset(customArgs, clientsetPackage, groupGoNames, boilerplate))
|
||||
}
|
||||
|
@ -119,6 +119,7 @@ func PackageForClientset(customArgs *clientgenargs.CustomArgs, fakeClientsetPack
|
||||
InputPackages: customArgs.GroupVersionToInputPath,
|
||||
OutputPackage: fakeClientsetPackage,
|
||||
Groups: customArgs.Groups,
|
||||
GroupGoNames: groupGoNames,
|
||||
ImportTracker: generator.NewImportTracker(),
|
||||
PrivateScheme: true,
|
||||
},
|
||||
|
@ -63,8 +63,9 @@ func (g *genClientset) Imports(c *generator.Context) (imports []string) {
|
||||
groupClientPackage := filepath.Join(g.fakeClientsetPackage, "typed", group.PackageName, version.NonEmpty())
|
||||
fakeGroupClientPackage := filepath.Join(groupClientPackage, "fake")
|
||||
|
||||
imports = append(imports, strings.ToLower(fmt.Sprintf("%s%s \"%s\"", group.PackageName, version.NonEmpty(), groupClientPackage)))
|
||||
imports = append(imports, strings.ToLower(fmt.Sprintf("fake%s%s \"%s\"", group.PackageName, version.NonEmpty(), fakeGroupClientPackage)))
|
||||
groupAlias := strings.ToLower(g.groupGoNames[clientgentypes.GroupVersion{group.Group, version}])
|
||||
imports = append(imports, strings.ToLower(fmt.Sprintf("%s%s \"%s\"", groupAlias, version.NonEmpty(), groupClientPackage)))
|
||||
imports = append(imports, strings.ToLower(fmt.Sprintf("fake%s%s \"%s\"", groupAlias, version.NonEmpty(), fakeGroupClientPackage)))
|
||||
}
|
||||
}
|
||||
// the package that has the clientset Interface
|
||||
@ -93,11 +94,11 @@ func (g *genClientset) GenerateType(c *generator.Context, t *types.Type, w io.Wr
|
||||
|
||||
for _, group := range allGroups {
|
||||
m := map[string]interface{}{
|
||||
"group": group.Group,
|
||||
"version": group.Version,
|
||||
"PackageName": group.PackageName,
|
||||
"GroupGoName": group.GroupGoName,
|
||||
"Version": namer.IC(group.Version.String()),
|
||||
"group": group.Group,
|
||||
"version": group.Version,
|
||||
"PackageAlias": group.PackageAlias,
|
||||
"GroupGoName": group.GroupGoName,
|
||||
"Version": namer.IC(group.Version.String()),
|
||||
}
|
||||
|
||||
sw.Do(clientsetInterfaceImplTemplate, m)
|
||||
@ -150,14 +151,14 @@ var _ clientset.Interface = &Clientset{}
|
||||
|
||||
var clientsetInterfaceImplTemplate = `
|
||||
// $.GroupGoName$$.Version$ retrieves the $.GroupGoName$$.Version$Client
|
||||
func (c *Clientset) $.GroupGoName$$.Version$() $.PackageName$.$.GroupGoName$$.Version$Interface {
|
||||
return &fake$.PackageName$.Fake$.GroupGoName$$.Version${Fake: &c.Fake}
|
||||
func (c *Clientset) $.GroupGoName$$.Version$() $.PackageAlias$.$.GroupGoName$$.Version$Interface {
|
||||
return &fake$.PackageAlias$.Fake$.GroupGoName$$.Version${Fake: &c.Fake}
|
||||
}
|
||||
`
|
||||
|
||||
var clientsetInterfaceDefaultVersionImpl = `
|
||||
// $.GroupGoName$ retrieves the $.GroupGoName$$.Version$Client
|
||||
func (c *Clientset) $.GroupGoName$() $.PackageName$.$.GroupGoName$$.Version$Interface {
|
||||
return &fake$.PackageName$.Fake$.GroupGoName$$.Version${Fake: &c.Fake}
|
||||
func (c *Clientset) $.GroupGoName$() $.PackageAlias$.$.GroupGoName$$.Version$Interface {
|
||||
return &fake$.PackageAlias$.Fake$.GroupGoName$$.Version${Fake: &c.Fake}
|
||||
}
|
||||
`
|
||||
|
@ -59,7 +59,8 @@ func (g *genClientset) Imports(c *generator.Context) (imports []string) {
|
||||
for _, group := range g.groups {
|
||||
for _, version := range group.Versions {
|
||||
typedClientPath := filepath.Join(g.clientsetPackage, "typed", group.PackageName, version.NonEmpty())
|
||||
imports = append(imports, strings.ToLower(fmt.Sprintf("%s%s \"%s\"", group.PackageName, version.NonEmpty(), typedClientPath)))
|
||||
groupAlias := strings.ToLower(g.groupGoNames[clientgentypes.GroupVersion{group.Group, version}])
|
||||
imports = append(imports, strings.ToLower(fmt.Sprintf("%s%s \"%s\"", groupAlias, version.NonEmpty(), typedClientPath)))
|
||||
}
|
||||
}
|
||||
return
|
||||
@ -104,9 +105,9 @@ func (g *genClientset) GenerateType(c *generator.Context, t *types.Type, w io.Wr
|
||||
var clientsetInterface = `
|
||||
type Interface interface {
|
||||
Discovery() $.DiscoveryInterface|raw$
|
||||
$range .allGroups$$.GroupGoName$$.Version$() $.PackageName$.$.GroupGoName$$.Version$Interface
|
||||
$range .allGroups$$.GroupGoName$$.Version$() $.PackageAlias$.$.GroupGoName$$.Version$Interface
|
||||
$if .IsDefaultVersion$// Deprecated: please explicitly pick a version if possible.
|
||||
$.GroupGoName$() $.PackageName$.$.GroupGoName$$.Version$Interface
|
||||
$.GroupGoName$() $.PackageAlias$.$.GroupGoName$$.Version$Interface
|
||||
$end$$end$
|
||||
}
|
||||
`
|
||||
@ -116,14 +117,14 @@ var clientsetTemplate = `
|
||||
// version included in a Clientset.
|
||||
type Clientset struct {
|
||||
*$.DiscoveryClient|raw$
|
||||
$range .allGroups$$.LowerCaseGroupGoName$$.Version$ *$.PackageName$.$.GroupGoName$$.Version$Client
|
||||
$range .allGroups$$.LowerCaseGroupGoName$$.Version$ *$.PackageAlias$.$.GroupGoName$$.Version$Client
|
||||
$end$
|
||||
}
|
||||
`
|
||||
|
||||
var clientsetInterfaceImplTemplate = `
|
||||
// $.GroupGoName$$.Version$ retrieves the $.GroupGoName$$.Version$Client
|
||||
func (c *Clientset) $.GroupGoName$$.Version$() $.PackageName$.$.GroupGoName$$.Version$Interface {
|
||||
func (c *Clientset) $.GroupGoName$$.Version$() $.PackageAlias$.$.GroupGoName$$.Version$Interface {
|
||||
return c.$.LowerCaseGroupGoName$$.Version$
|
||||
}
|
||||
`
|
||||
@ -131,7 +132,7 @@ func (c *Clientset) $.GroupGoName$$.Version$() $.PackageName$.$.GroupGoName$$.Ve
|
||||
var clientsetInterfaceDefaultVersionImpl = `
|
||||
// Deprecated: $.GroupGoName$ retrieves the default version of $.GroupGoName$Client.
|
||||
// Please explicitly pick a version.
|
||||
func (c *Clientset) $.GroupGoName$() $.PackageName$.$.GroupGoName$$.Version$Interface {
|
||||
func (c *Clientset) $.GroupGoName$() $.PackageAlias$.$.GroupGoName$$.Version$Interface {
|
||||
return c.$.LowerCaseGroupGoName$$.Version$
|
||||
}
|
||||
`
|
||||
@ -155,7 +156,7 @@ func NewForConfig(c *$.Config|raw$) (*Clientset, error) {
|
||||
}
|
||||
var cs Clientset
|
||||
var err error
|
||||
$range .allGroups$ cs.$.LowerCaseGroupGoName$$.Version$, err =$.PackageName$.NewForConfig(&configShallowCopy)
|
||||
$range .allGroups$ cs.$.LowerCaseGroupGoName$$.Version$, err =$.PackageAlias$.NewForConfig(&configShallowCopy)
|
||||
if err!=nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -174,7 +175,7 @@ var newClientsetForConfigOrDieTemplate = `
|
||||
// panics if there is an error in the config.
|
||||
func NewForConfigOrDie(c *$.Config|raw$) *Clientset {
|
||||
var cs Clientset
|
||||
$range .allGroups$ cs.$.LowerCaseGroupGoName$$.Version$ =$.PackageName$.NewForConfigOrDie(c)
|
||||
$range .allGroups$ cs.$.LowerCaseGroupGoName$$.Version$ =$.PackageAlias$.NewForConfigOrDie(c)
|
||||
$end$
|
||||
cs.DiscoveryClient = $.NewDiscoveryClientForConfigOrDie|raw$(c)
|
||||
return &cs
|
||||
@ -185,7 +186,7 @@ var newClientsetForRESTClientTemplate = `
|
||||
// New creates a new Clientset for the given RESTClient.
|
||||
func New(c $.RESTClientInterface|raw$) *Clientset {
|
||||
var cs Clientset
|
||||
$range .allGroups$ cs.$.LowerCaseGroupGoName$$.Version$ =$.PackageName$.New(c)
|
||||
$range .allGroups$ cs.$.LowerCaseGroupGoName$$.Version$ =$.PackageAlias$.New(c)
|
||||
$end$
|
||||
cs.DiscoveryClient = $.NewDiscoveryClient|raw$(c)
|
||||
return &cs
|
||||
|
@ -35,6 +35,7 @@ type GenScheme struct {
|
||||
generator.DefaultGen
|
||||
OutputPackage string
|
||||
Groups []clientgentypes.GroupVersions
|
||||
GroupGoNames map[clientgentypes.GroupVersion]string
|
||||
InputPackages map[clientgentypes.GroupVersion]string
|
||||
OutputPath string
|
||||
ImportTracker namer.ImportTracker
|
||||
@ -61,16 +62,17 @@ func (g *GenScheme) Imports(c *generator.Context) (imports []string) {
|
||||
for _, group := range g.Groups {
|
||||
for _, version := range group.Versions {
|
||||
packagePath := g.InputPackages[clientgentypes.GroupVersion{Group: group.Group, Version: version}]
|
||||
groupAlias := strings.ToLower(g.GroupGoNames[clientgentypes.GroupVersion{group.Group, version}])
|
||||
if g.CreateRegistry {
|
||||
// import the install package for internal clientsets instead of the type package with register.go
|
||||
if version != "" {
|
||||
packagePath = filepath.Dir(packagePath)
|
||||
}
|
||||
packagePath = filepath.Join(packagePath, "install")
|
||||
imports = append(imports, strings.ToLower(fmt.Sprintf("%s \"%s\"", group.PackageName, path.Vendorless(packagePath))))
|
||||
imports = append(imports, strings.ToLower(fmt.Sprintf("%s \"%s\"", groupAlias, path.Vendorless(packagePath))))
|
||||
break
|
||||
} else {
|
||||
imports = append(imports, strings.ToLower(fmt.Sprintf("%s%s \"%s\"", group.PackageName, version.NonEmpty(), path.Vendorless(packagePath))))
|
||||
imports = append(imports, strings.ToLower(fmt.Sprintf("%s%s \"%s\"", groupAlias, version.NonEmpty(), path.Vendorless(packagePath))))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -80,8 +82,8 @@ func (g *GenScheme) Imports(c *generator.Context) (imports []string) {
|
||||
func (g *GenScheme) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||
sw := generator.NewSnippetWriter(w, c, "$", "$")
|
||||
|
||||
allGroupVersions := clientgentypes.ToGroupVersionPackages(g.Groups, nil)
|
||||
allInstallGroups := clientgentypes.ToGroupInstallPackages(g.Groups)
|
||||
allGroupVersions := clientgentypes.ToGroupVersionPackages(g.Groups, g.GroupGoNames)
|
||||
allInstallGroups := clientgentypes.ToGroupInstallPackages(g.Groups, g.GroupGoNames)
|
||||
|
||||
m := map[string]interface{}{
|
||||
"allGroupVersions": allGroupVersions,
|
||||
@ -147,7 +149,7 @@ func init() {
|
||||
|
||||
// Install registers the API group and adds types to a scheme
|
||||
func Install(groupFactoryRegistry $.announcedAPIGroupFactoryRegistry|raw$, registry *$.registeredAPIRegistrationManager|raw$, scheme *$.runtimeScheme|raw$) {
|
||||
$range .allInstallGroups$ $.InstallPackageName$.Install(groupFactoryRegistry, registry, scheme)
|
||||
$range .allInstallGroups$ $.InstallPackageAlias$.Install(groupFactoryRegistry, registry, scheme)
|
||||
$end$
|
||||
$if .customRegister$ExtraInstall(groupFactoryRegistry, registry, scheme)$end$
|
||||
}
|
||||
@ -176,7 +178,7 @@ func init() {
|
||||
// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types
|
||||
// correctly.
|
||||
func AddToScheme(scheme *$.runtimeScheme|raw$) {
|
||||
$range .allGroupVersions$ $.PackageName$.AddToScheme(scheme)
|
||||
$range .allGroupVersions$ $.PackageAlias$.AddToScheme(scheme)
|
||||
$end$
|
||||
$if .customRegister$ExtraAddToScheme(scheme)$end$
|
||||
}
|
||||
|
@ -94,7 +94,7 @@ func ToGroupVersionPackages(groups []GroupVersions, groupGoNames map[GroupVersio
|
||||
groupVersionPackages = append(groupVersionPackages, GroupVersionPackage{
|
||||
Group: Group(namer.IC(group.Group.NonEmpty())),
|
||||
Version: Version(namer.IC(version.String())),
|
||||
PackageName: strings.ToLower(group.PackageName + version.NonEmpty()),
|
||||
PackageAlias: strings.ToLower(groupGoName + version.NonEmpty()),
|
||||
IsDefaultVersion: version == defaultVersion && version != "",
|
||||
GroupGoName: groupGoName,
|
||||
LowerCaseGroupGoName: namer.IL(groupGoName),
|
||||
@ -104,12 +104,14 @@ func ToGroupVersionPackages(groups []GroupVersions, groupGoNames map[GroupVersio
|
||||
return groupVersionPackages
|
||||
}
|
||||
|
||||
func ToGroupInstallPackages(groups []GroupVersions) []GroupInstallPackage {
|
||||
func ToGroupInstallPackages(groups []GroupVersions, groupGoNames map[GroupVersion]string) []GroupInstallPackage {
|
||||
var groupInstallPackages []GroupInstallPackage
|
||||
for _, group := range groups {
|
||||
defaultVersion := defaultVersion(group.Versions)
|
||||
groupGoName := groupGoNames[GroupVersion{Group: group.Group, Version: defaultVersion}]
|
||||
groupInstallPackages = append(groupInstallPackages, GroupInstallPackage{
|
||||
Group: Group(namer.IC(group.Group.NonEmpty())),
|
||||
InstallPackageName: group.PackageName,
|
||||
Group: Group(namer.IC(group.Group.NonEmpty())),
|
||||
InstallPackageAlias: strings.ToLower(groupGoName),
|
||||
})
|
||||
}
|
||||
return groupInstallPackages
|
||||
|
@ -61,12 +61,12 @@ type GroupVersionPackage struct {
|
||||
// If a user calls a group client without specifying the version (e.g.,
|
||||
// c.Core(), instead of c.CoreV1()), the default version will be returned.
|
||||
IsDefaultVersion bool
|
||||
PackageName string
|
||||
PackageAlias string
|
||||
GroupGoName string
|
||||
LowerCaseGroupGoName string
|
||||
}
|
||||
|
||||
type GroupInstallPackage struct {
|
||||
Group Group
|
||||
InstallPackageName string
|
||||
Group Group
|
||||
InstallPackageAlias string
|
||||
}
|
||||
|
@ -195,7 +195,8 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
|
||||
groupVersionsEntry, ok := targetGroupVersions[groupPkgName]
|
||||
if !ok {
|
||||
groupVersionsEntry = clientgentypes.GroupVersions{
|
||||
Group: gv.Group,
|
||||
PackageName: groupPkgName,
|
||||
Group: gv.Group,
|
||||
}
|
||||
}
|
||||
groupVersionsEntry.Versions = append(groupVersionsEntry.Versions, gv.Version)
|
||||
@ -214,16 +215,16 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
|
||||
if len(externalGroupVersions) != 0 {
|
||||
packageList = append(packageList, factoryInterfacePackage(externalVersionPackagePath, boilerplate, customArgs.VersionedClientSetPackage))
|
||||
packageList = append(packageList, factoryPackage(externalVersionPackagePath, boilerplate, groupGoNames, externalGroupVersions, customArgs.VersionedClientSetPackage, typesForGroupVersion))
|
||||
for groupPkgName, groupVersionsEntry := range externalGroupVersions {
|
||||
packageList = append(packageList, groupPackage(externalVersionPackagePath, groupPkgName, groupVersionsEntry, boilerplate))
|
||||
for _, gvs := range externalGroupVersions {
|
||||
packageList = append(packageList, groupPackage(externalVersionPackagePath, gvs, boilerplate))
|
||||
}
|
||||
}
|
||||
|
||||
if len(internalGroupVersions) != 0 {
|
||||
packageList = append(packageList, factoryInterfacePackage(internalVersionPackagePath, boilerplate, customArgs.InternalClientSetPackage))
|
||||
packageList = append(packageList, factoryPackage(internalVersionPackagePath, boilerplate, groupGoNames, internalGroupVersions, customArgs.InternalClientSetPackage, typesForGroupVersion))
|
||||
for groupPkgName, groupVersionsEntry := range internalGroupVersions {
|
||||
packageList = append(packageList, groupPackage(internalVersionPackagePath, groupPkgName, groupVersionsEntry, boilerplate))
|
||||
for _, gvs := range internalGroupVersions {
|
||||
packageList = append(packageList, groupPackage(internalVersionPackagePath, gvs, boilerplate))
|
||||
}
|
||||
}
|
||||
|
||||
@ -286,8 +287,9 @@ func factoryInterfacePackage(basePackage string, boilerplate []byte, clientSetPa
|
||||
}
|
||||
}
|
||||
|
||||
func groupPackage(basePackage string, groupPkgName string, groupVersions clientgentypes.GroupVersions, boilerplate []byte) generator.Package {
|
||||
packagePath := filepath.Join(basePackage, groupPkgName)
|
||||
func groupPackage(basePackage string, groupVersions clientgentypes.GroupVersions, boilerplate []byte) generator.Package {
|
||||
packagePath := filepath.Join(basePackage, groupVersions.PackageName)
|
||||
groupPkgName := strings.Split(string(groupVersions.Group), ".")[0]
|
||||
|
||||
return &generator.DefaultPackage{
|
||||
PackageName: groupPkgName,
|
||||
|
Loading…
Reference in New Issue
Block a user