Skip to content

Commit 174db6a

Browse files
committed
rewrite everything to output kcp code, but with kube 1.32+ generic style
On-behalf-of: @SAP [email protected]
1 parent 91944c7 commit 174db6a

30 files changed

+2015
-1540
lines changed

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ SHELL := /usr/bin/env bash
1616

1717
GO_INSTALL = ./hack/go-install.sh
1818
BUILD_DEST ?= _build
19+
BUILDFLAGS ?=
1920
CMD ?= $(notdir $(wildcard ./cmd/*))
2021

2122
TOOLS_DIR=hack/tools
@@ -86,7 +87,7 @@ build: $(CMD)
8687
$(CMD): %: $(BUILD_DEST)/%
8788

8889
$(BUILD_DEST)/%: cmd/%
89-
go build -o $@ ./cmd/$*
90+
go build $(BUILDFLAGS) -o $@ ./cmd/$*
9091

9192
.PHONY: install
9293
install:

cmd/cluster-client-gen/args/args.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ type Args struct {
6464

6565
// PrefersProtobuf determines if the generated clientset uses protobuf for API requests.
6666
PrefersProtobuf bool
67+
68+
// Path to the generated Kubernetes single-cluster clientset package.
69+
SingleClusterClientPackage string
70+
// Path to the generated Kubernetes single-cluster applyconfigurations package.
71+
SingleClusterApplyConfigurationsPackage string
6772
}
6873

6974
func New() *Args {
@@ -100,13 +105,14 @@ func (args *Args) AddFlags(fs *pflag.FlagSet, inputBase string) {
100105
"when set, client-gen will generate the fake clientset that can be used in tests")
101106
fs.StringSliceVar(&args.PluralExceptions, "plural-exceptions", args.PluralExceptions,
102107
"list of comma separated plural exception definitions in Type:PluralizedType form")
103-
fs.StringVar(&args.ApplyConfigurationPackage, "apply-configuration-package", args.ApplyConfigurationPackage,
108+
fs.StringVar(&args.ApplyConfigurationPackage, "applyconfigurations-pkg", args.ApplyConfigurationPackage,
104109
"optional package of apply configurations, generated by applyconfiguration-gen, that are required to generate Apply functions for each type in the clientset. By default Apply functions are not generated.")
105110
fs.BoolVar(&args.PrefersProtobuf, "prefers-protobuf", args.PrefersProtobuf,
106111
"when set, client-gen will generate a clientset that uses protobuf for API requests")
107-
108-
// support old flags
109-
fs.SetNormalizeFunc(mapFlagName("clientset-path", "output-pkg", fs.GetNormalizeFunc()))
112+
fs.StringVar(&args.SingleClusterClientPackage, "single-cluster-versioned-clientset-pkg", args.SingleClusterClientPackage,
113+
"package path to the generated Kubernetes single-cluster clientset package")
114+
fs.StringVar(&args.SingleClusterApplyConfigurationsPackage, "single-cluster-applyconfigurations-pkg", args.SingleClusterApplyConfigurationsPackage,
115+
"package path to the generated Kubernetes single-cluster applyconfigurations package")
110116
}
111117

112118
func (args *Args) Validate() error {
@@ -122,6 +128,12 @@ func (args *Args) Validate() error {
122128
if len(args.ClientsetAPIPath) == 0 {
123129
return fmt.Errorf("--clientset-api-path cannot be empty")
124130
}
131+
if len(args.SingleClusterClientPackage) == 0 {
132+
return fmt.Errorf("--single-cluster-versioned-clientset-pkg cannot be empty")
133+
}
134+
if len(args.SingleClusterApplyConfigurationsPackage) == 0 {
135+
return fmt.Errorf("--single-cluster-applyconfigurations-pkg cannot be empty")
136+
}
125137

126138
return nil
127139
}

cmd/cluster-client-gen/generators/client_generator.go

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
"github.com/kcp-dev/code-generator/v3/cmd/cluster-client-gen/generators/scheme"
3636
"github.com/kcp-dev/code-generator/v3/cmd/cluster-client-gen/generators/util"
3737
clientgentypes "github.com/kcp-dev/code-generator/v3/cmd/cluster-client-gen/types"
38+
"github.com/kcp-dev/code-generator/v3/pkg/imports"
3839
)
3940

4041
// NameSystems returns the name system used by the generators in this package.
@@ -128,7 +129,7 @@ func DefaultNameSystem() string {
128129
return "public"
129130
}
130131

131-
func targetForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clientsetDir, clientsetPkg string, groupPkgName string, groupGoName string, apiPath string, inputPkg string, applyBuilderPkg string, boilerplate []byte, prefersProtobuf bool) generator.Target {
132+
func targetForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clientsetDir, clientsetPkg string, groupPkgName string, groupGoName string, apiPath string, inputPkg string, applyBuilderPkg string, singleClusterClientPkg string, boilerplate []byte, prefersProtobuf bool) generator.Target {
132133
subdir := []string{"typed", strings.ToLower(groupPkgName), strings.ToLower(gv.Version.NonEmpty())}
133134
gvDir := filepath.Join(clientsetDir, filepath.Join(subdir...))
134135
gvPkg := path.Join(clientsetPkg, path.Join(subdir...))
@@ -153,32 +154,34 @@ func targetForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clie
153154
GoGenerator: generator.GoGenerator{
154155
OutputFilename: strings.ToLower(c.Namers["private"].Name(t)) + ".go",
155156
},
156-
outputPackage: gvPkg,
157-
inputPackage: inputPkg,
158-
clientsetPackage: clientsetPkg,
159-
applyConfigurationPackage: applyBuilderPkg,
160-
group: gv.Group.NonEmpty(),
161-
version: gv.Version.String(),
162-
groupGoName: groupGoName,
163-
prefersProtobuf: prefersProtobuf,
164-
typeToMatch: t,
165-
imports: generator.NewImportTrackerForPackage(gvPkg),
157+
outputPackage: gvPkg,
158+
inputPackage: inputPkg,
159+
clientsetPackage: clientsetPkg,
160+
applyConfigurationPackage: applyBuilderPkg,
161+
group: gv.Group.NonEmpty(),
162+
version: gv.Version.String(),
163+
groupGoName: groupGoName,
164+
prefersProtobuf: prefersProtobuf,
165+
typeToMatch: t,
166+
imports: imports.NewImportTrackerForPackage(gvPkg),
167+
singleClusterClientPackage: singleClusterClientPkg,
166168
})
167169
}
168170

169171
generators = append(generators, &genGroup{
170172
GoGenerator: generator.GoGenerator{
171173
OutputFilename: groupPkgName + "_client.go",
172174
},
173-
outputPackage: gvPkg,
174-
inputPackage: inputPkg,
175-
clientsetPackage: clientsetPkg,
176-
group: gv.Group.NonEmpty(),
177-
version: gv.Version.String(),
178-
groupGoName: groupGoName,
179-
apiPath: apiPath,
180-
types: typeList,
181-
imports: generator.NewImportTrackerForPackage(gvPkg),
175+
outputPackage: gvPkg,
176+
inputPackage: inputPkg,
177+
clientsetPackage: clientsetPkg,
178+
group: gv.Group.NonEmpty(),
179+
version: gv.Version.String(),
180+
groupGoName: groupGoName,
181+
apiPath: apiPath,
182+
types: typeList,
183+
imports: imports.NewImportTrackerForPackage(gvPkg),
184+
singleClusterClientPkg: singleClusterClientPkg,
182185
})
183186

184187
expansionFileName := "generated_expansion.go"
@@ -212,10 +215,11 @@ func targetForClientset(args *args.Args, clientsetDir, clientsetPkg string, grou
212215
GoGenerator: generator.GoGenerator{
213216
OutputFilename: "clientset.go",
214217
},
215-
groups: args.Groups,
216-
groupGoNames: groupGoNames,
217-
clientsetPackage: clientsetPkg,
218-
imports: generator.NewImportTrackerForPackage(clientsetPkg),
218+
groups: args.Groups,
219+
groupGoNames: groupGoNames,
220+
clientsetPackage: clientsetPkg,
221+
imports: imports.NewImportTrackerForPackage(clientsetPkg),
222+
singleClusterClientPkg: args.SingleClusterClientPackage,
219223
},
220224
}
221225
return generators
@@ -261,7 +265,7 @@ NextGroup:
261265
OutputPath: schemeDir,
262266
Groups: args.Groups,
263267
GroupGoNames: groupGoNames,
264-
ImportTracker: generator.NewImportTrackerForPackage(schemePkg),
268+
ImportTracker: imports.NewImportTrackerForPackage(schemePkg),
265269
CreateRegistry: internalClient,
266270
},
267271
}
@@ -406,7 +410,7 @@ func GetTargets(context *generator.Context, args *args.Args) []generator.Target
406410
targetForScheme(args, clientsetDir, clientsetPkg, groupGoNames, boilerplate))
407411
if args.FakeClient {
408412
targetList = append(targetList,
409-
fake.TargetForClientset(args, clientsetDir, clientsetPkg, args.ApplyConfigurationPackage, groupGoNames, boilerplate))
413+
fake.TargetForClientset(args, clientsetDir, clientsetPkg, args.SingleClusterClientPackage, args.ApplyConfigurationPackage, groupGoNames, boilerplate))
410414
}
411415

412416
// If --clientset-only=true, we don't regenerate the individual typed clients.
@@ -421,14 +425,15 @@ func GetTargets(context *generator.Context, args *args.Args) []generator.Target
421425
gv := clientgentypes.GroupVersion{Group: group.Group, Version: version.Version}
422426
types := gvToTypes[gv]
423427
inputPath := gvPackages[gv]
428+
singleClusterClientPkg := path.Join(args.SingleClusterClientPackage, "typed", group.PackageName, version.String())
424429
targetList = append(targetList,
425430
targetForGroup(
426431
gv, orderer.OrderTypes(types), clientsetDir, clientsetPkg,
427432
group.PackageName, groupGoNames[gv], args.ClientsetAPIPath,
428-
inputPath, args.ApplyConfigurationPackage, boilerplate, args.PrefersProtobuf))
433+
inputPath, args.ApplyConfigurationPackage, singleClusterClientPkg, boilerplate, args.PrefersProtobuf))
429434
if args.FakeClient {
430435
targetList = append(targetList,
431-
fake.TargetForGroup(gv, orderer.OrderTypes(types), clientsetDir, clientsetPkg, group.PackageName, groupGoNames[gv], inputPath, args.ApplyConfigurationPackage, boilerplate))
436+
fake.TargetForGroup(gv, orderer.OrderTypes(types), clientsetDir, clientsetPkg, group.PackageName, groupGoNames[gv], inputPath, args.ApplyConfigurationPackage, singleClusterClientPkg, boilerplate))
432437
}
433438
}
434439
}

cmd/cluster-client-gen/generators/fake/fake_client_generator.go

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ import (
2828
scheme "github.com/kcp-dev/code-generator/v3/cmd/cluster-client-gen/generators/scheme"
2929
"github.com/kcp-dev/code-generator/v3/cmd/cluster-client-gen/generators/util"
3030
clientgentypes "github.com/kcp-dev/code-generator/v3/cmd/cluster-client-gen/types"
31+
"github.com/kcp-dev/code-generator/v3/pkg/imports"
3132
)
3233

33-
func TargetForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clientsetDir, clientsetPkg string, groupPkgName string, groupGoName string, inputPkg string, applyBuilderPackage string, boilerplate []byte) generator.Target {
34+
func TargetForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clientsetDir, clientsetPkg string, groupPkgName string, groupGoName string, inputPkg string, applyBuilderPackage string, singleClusterClientPkg string, boilerplate []byte) generator.Target {
3435
// TODO: should make this a function, called by here and in client-generator.go
3536
subdir := []string{"typed", strings.ToLower(groupPkgName), strings.ToLower(gv.Version.NonEmpty())}
3637
outputDir := filepath.Join(clientsetDir, filepath.Join(subdir...), "fake")
@@ -42,7 +43,7 @@ func TargetForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clie
4243
PkgPath: outputPkg,
4344
PkgDir: outputDir,
4445
HeaderComment: boilerplate,
45-
PkgDocComment: []byte("// Package fake has the automatically generated clients.\n"),
46+
PkgDocComment: []byte("// Package fake has the automatically generated cluster clients.\n"),
4647
// GeneratorsFunc returns a list of generators. Each generator makes a
4748
// single file.
4849
GeneratorsFunc: func(c *generator.Context) (generators []generator.Generator) {
@@ -55,29 +56,31 @@ func TargetForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clie
5556
for _, t := range typeList {
5657
generators = append(generators, &genFakeForType{
5758
GoGenerator: generator.GoGenerator{
58-
OutputFilename: "fake_" + strings.ToLower(c.Namers["private"].Name(t)) + ".go",
59+
OutputFilename: strings.ToLower(c.Namers["private"].Name(t)) + ".go",
5960
},
60-
outputPackage: outputPkg,
61-
realClientPackage: realClientPkg,
62-
inputPackage: inputPkg,
63-
version: gv.Version.String(),
64-
groupGoName: groupGoName,
65-
typeToMatch: t,
66-
imports: generator.NewImportTrackerForPackage(outputPkg),
67-
applyConfigurationPackage: applyBuilderPackage,
61+
outputPackage: outputPkg,
62+
realClientPackage: realClientPkg,
63+
inputPackage: inputPkg,
64+
version: gv.Version.String(),
65+
groupGoName: groupGoName,
66+
typeToMatch: t,
67+
imports: imports.NewImportTrackerForPackage(outputPkg),
68+
applyConfigurationPackage: applyBuilderPackage,
69+
singleClusterClientPackage: singleClusterClientPkg,
6870
})
6971
}
7072

7173
generators = append(generators, &genFakeForGroup{
7274
GoGenerator: generator.GoGenerator{
73-
OutputFilename: "fake_" + groupPkgName + "_client.go",
75+
OutputFilename: groupPkgName + "_client.go",
7476
},
75-
outputPackage: outputPkg,
76-
realClientPackage: realClientPkg,
77-
version: gv.Version.String(),
78-
groupGoName: groupGoName,
79-
types: typeList,
80-
imports: generator.NewImportTrackerForPackage(outputPkg),
77+
outputPackage: outputPkg,
78+
realClientPackage: realClientPkg,
79+
version: gv.Version.String(),
80+
groupGoName: groupGoName,
81+
types: typeList,
82+
imports: imports.NewImportTrackerForPackage(outputPkg),
83+
singleClusterClientPackage: singleClusterClientPkg,
8184
})
8285
return generators
8386
},
@@ -87,7 +90,7 @@ func TargetForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clie
8790
}
8891
}
8992

90-
func TargetForClientset(args *args.Args, clientsetDir, clientsetPkg string, applyConfigurationPkg string, groupGoNames map[clientgentypes.GroupVersion]string, boilerplate []byte) generator.Target {
93+
func TargetForClientset(args *args.Args, clientsetDir, clientsetPkg string, singleClusterClientPkg string, applyConfigurationPkg string, groupGoNames map[clientgentypes.GroupVersion]string, boilerplate []byte) generator.Target {
9194
return &generator.SimpleTarget{
9295
// TODO: we'll generate fake clientset for different release in the future.
9396
// Package name and path are hard coded for now.
@@ -105,14 +108,15 @@ func TargetForClientset(args *args.Args, clientsetDir, clientsetPkg string, appl
105108

106109
&genClientset{
107110
GoGenerator: generator.GoGenerator{
108-
OutputFilename: "clientset_generated.go",
111+
OutputFilename: "clientset.go",
109112
},
110-
groups: args.Groups,
111-
groupGoNames: groupGoNames,
112-
fakeClientsetPackage: clientsetPkg,
113-
imports: generator.NewImportTrackerForPackage(clientsetPkg),
114-
realClientsetPackage: clientsetPkg,
115-
applyConfigurationPackage: applyConfigurationPkg,
113+
groups: args.Groups,
114+
groupGoNames: groupGoNames,
115+
fakeClientsetPackage: clientsetPkg,
116+
imports: imports.NewImportTrackerForPackage(clientsetPkg),
117+
realClientsetPackage: clientsetPkg,
118+
singleClusterClientPackage: singleClusterClientPkg,
119+
applyConfigurationPackage: applyConfigurationPkg,
116120
},
117121
&scheme.GenScheme{
118122
GoGenerator: generator.GoGenerator{
@@ -122,7 +126,7 @@ func TargetForClientset(args *args.Args, clientsetDir, clientsetPkg string, appl
122126
OutputPkg: clientsetPkg,
123127
Groups: args.Groups,
124128
GroupGoNames: groupGoNames,
125-
ImportTracker: generator.NewImportTrackerForPackage(clientsetPkg),
129+
ImportTracker: imports.NewImportTrackerForPackage(clientsetPkg),
126130
PrivateScheme: true,
127131
},
128132
}

0 commit comments

Comments
 (0)