Skip to content

Commit c523476

Browse files
author
Kubernetes Submit Queue
authored
Merge pull request kubernetes#40124 from mbohlool/separation
Automatic merge from submit-queue Use full package path for definition name in OpenAPI spec We were using short package name (last part of package name) plus type name for OpenAPI spec definition name. That can result in duplicate names and make the spec invalid. To be sure we will always have unique names, we are going to use full package name as definition name. Also "x-kubernetes-tag" custom field is added to definitions to list Group/Version/Kind for the definitions that has it. This will help clients to discover definitions easier. Lastly, we've added a reference from old definition names to the new ones to keep backward compatibilities. The list of old definitions will not be updated. **Release note**: - Rename OpenAPI definition names to type's full package names to prevent duplicates - Create OpenAPI extension "x-kubernetes-group-version-kind" for definitions to store Group/Version/Kind - Deprecate old definition names and create a reference to the new definitions. Old definitions will be removed in the next release.
2 parents cb75873 + 32e1ef9 commit c523476

File tree

17 files changed

+19221
-17793
lines changed

17 files changed

+19221
-17793
lines changed

Diff for: api/openapi-spec/swagger.json

+4,607-3,952
Large diffs are not rendered by default.

Diff for: cmd/kube-apiserver/app/server.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ func Run(s *options.ServerRunOptions) error {
295295
genericConfig.Authenticator = apiAuthenticator
296296
genericConfig.Authorizer = apiAuthorizer
297297
genericConfig.AdmissionControl = admissionController
298-
genericConfig.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(generatedopenapi.OpenAPIDefinitions)
298+
genericConfig.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(generatedopenapi.GetOpenAPIDefinitions)
299299
genericConfig.OpenAPIConfig.SecurityDefinitions = securityDefinitions
300300
genericConfig.OpenAPIConfig.Info.Title = "Kubernetes"
301301
genericConfig.SwaggerConfig = genericapiserver.DefaultSwaggerConfig()

Diff for: cmd/libs/go2idl/openapi-gen/generators/openapi.go

+12-17
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ const (
133133
// openApiGen produces a file with auto-generated OpenAPI functions.
134134
type openAPIGen struct {
135135
generator.DefaultGen
136-
// TargetPackage is the package that will get OpenAPIDefinitions variable contains all open API definitions.
136+
// TargetPackage is the package that will get GetOpenAPIDefinitions function returns all open API definitions.
137137
targetPackage *types.Package
138138
imports namer.ImportTracker
139139
context *generator.Context
@@ -185,23 +185,24 @@ func (g *openAPIGen) Imports(c *generator.Context) []string {
185185

186186
func argsFromType(t *types.Type) generator.Args {
187187
return generator.Args{
188-
"type": t,
189-
"OpenAPIDefinitions": types.Ref(openAPICommonPackagePath, "OpenAPIDefinitions"),
190-
"OpenAPIDefinition": types.Ref(openAPICommonPackagePath, "OpenAPIDefinition"),
191-
"SpecSchemaType": types.Ref(specPackagePath, "Schema"),
188+
"type": t,
189+
"ReferenceCallback": types.Ref(openAPICommonPackagePath, "ReferenceCallback"),
190+
"OpenAPIDefinition": types.Ref(openAPICommonPackagePath, "OpenAPIDefinition"),
191+
"SpecSchemaType": types.Ref(specPackagePath, "Schema"),
192192
}
193193
}
194194

195195
func (g *openAPIGen) Init(c *generator.Context, w io.Writer) error {
196196
sw := generator.NewSnippetWriter(w, c, "$", "$")
197-
sw.Do("var OpenAPIDefinitions *$.OpenAPIDefinitions|raw$ = ", argsFromType(nil))
198-
sw.Do("&$.OpenAPIDefinitions|raw${\n", argsFromType(nil))
197+
sw.Do("func GetOpenAPIDefinitions(ref $.ReferenceCallback|raw$) map[string]$.OpenAPIDefinition|raw$ {\n", argsFromType(nil))
198+
sw.Do("return map[string]$.OpenAPIDefinition|raw${\n", argsFromType(nil))
199199
return sw.Error()
200200
}
201201

202202
func (g *openAPIGen) Finalize(c *generator.Context, w io.Writer) error {
203203
sw := generator.NewSnippetWriter(w, c, "$", "$")
204204
sw.Do("}\n", nil)
205+
sw.Do("}\n", nil)
205206
return sw.Error()
206207
}
207208

@@ -308,9 +309,9 @@ func (g openAPITypeWriter) generate(t *types.Type) error {
308309
switch t.Kind {
309310
case types.Struct:
310311
args := argsFromType(t)
311-
g.Do("\"$.$\": ", typeShortName(t))
312+
g.Do("\"$.$\": ", t.Name)
312313
if hasOpenAPIDefinitionMethod(t) {
313-
g.Do("$.type|raw${}.OpenAPIDefinition(),", args)
314+
g.Do("$.type|raw${}.OpenAPIDefinition(),\n", args)
314315
return nil
315316
}
316317
g.Do("{\nSchema: spec.Schema{\nSchemaProps: spec.SchemaProps{\n", nil)
@@ -437,14 +438,8 @@ func (g openAPITypeWriter) generateSimpleProperty(typeString, format string) {
437438
}
438439

439440
func (g openAPITypeWriter) generateReferenceProperty(t *types.Type) {
440-
var name string
441-
if t.Name.Package == "" {
442-
name = t.Name.Name
443-
} else {
444-
name = filepath.Base(t.Name.Package) + "." + t.Name.Name
445-
}
446-
g.refTypes[name] = t
447-
g.Do("Ref: spec.MustCreateRef(\"#/definitions/$.$\"),\n", name)
441+
g.refTypes[t.Name.String()] = t
442+
g.Do("Ref: ref(\"$.$\"),\n", t.Name.String())
448443
}
449444

450445
func resolveAliasAndPtrType(t *types.Type) *types.Type {

Diff for: cmd/libs/go2idl/openapi-gen/generators/openapi_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ type Blah struct {
112112
if err != nil {
113113
t.Fatal(err)
114114
}
115-
assert.Equal(`"foo.Blah": {
115+
assert.Equal(`"base/foo.Blah": {
116116
Schema: spec.Schema{
117117
SchemaProps: spec.SchemaProps{
118118
Description: "Blah is a test.",
@@ -280,7 +280,7 @@ type Blah struct {
280280
if err != nil {
281281
t.Fatal(err)
282282
}
283-
assert.Equal(`"foo.Blah": {
283+
assert.Equal(`"base/foo.Blah": {
284284
Schema: spec.Schema{
285285
SchemaProps: spec.SchemaProps{
286286
Description: "PointerSample demonstrate pointer's properties",
@@ -295,7 +295,7 @@ Format: "",
295295
"StructPointer": {
296296
SchemaProps: spec.SchemaProps{
297297
Description: "A struct pointer",
298-
Ref: spec.MustCreateRef("#/definitions/foo.Blah"),
298+
Ref: ref("base/foo.Blah"),
299299
},
300300
},
301301
"SlicePointer": {
@@ -331,7 +331,7 @@ Required: []string{"StringPointer","StructPointer","SlicePointer","MapPointer"},
331331
},
332332
},
333333
Dependencies: []string{
334-
"foo.Blah",},
334+
"base/foo.Blah",},
335335
},
336336
`, buffer.String())
337337
}

0 commit comments

Comments
 (0)