Skip to content

Commit 96af9c1

Browse files
authored
fix: support x-kubernetes-int-or-string type flag (#23)
1 parent 3a86bff commit 96af9c1

File tree

10 files changed

+33
-41
lines changed

10 files changed

+33
-41
lines changed

examples/kube_resource/complex/muti_models/models/core_oam_dev_v1alpha2_containerized_workload.k

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -430,14 +430,14 @@ schema CoreOamDevV1alpha2ContainerizedWorkloadSpecContainersItems0ResourcesExten
430430
----------
431431
name : str, default is Undefined, required
432432
Name of the external resource. Resource names are specified in kind.group/version format, e.g. motionsensor.ext.example.com/v1.
433-
required : int, default is Undefined, required
433+
required : int | str, default is Undefined, required
434434
Required extended resource(s), e.g. 8 or "very-cool-widget"
435435
"""
436436

437437

438438
name: str
439439

440-
required: int
440+
required: int | str
441441

442442

443443
schema CoreOamDevV1alpha2ContainerizedWorkloadSpecContainersItems0ResourcesGpu:

pkg/kube_resource/generator/testdata/muti_models/models/core_oam_dev_v1alpha2_containerized_workload.k

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -430,14 +430,14 @@ schema CoreOamDevV1alpha2ContainerizedWorkloadSpecContainersItems0ResourcesExten
430430
----------
431431
name : str, default is Undefined, required
432432
Name of the external resource. Resource names are specified in kind.group/version format, e.g. motionsensor.ext.example.com/v1.
433-
required : int, default is Undefined, required
433+
required : int | str, default is Undefined, required
434434
Required extended resource(s), e.g. 8 or "very-cool-widget"
435435
"""
436436

437437

438438
name: str
439439

440-
required: int
440+
required: int | str
441441

442442

443443
schema CoreOamDevV1alpha2ContainerizedWorkloadSpecContainersItems0ResourcesGpu:

pkg/kube_resource/generator/testdata/fix_me_union_type/models/core_oam_dev_v1alpha2_containerized_workload.k renamed to pkg/kube_resource/generator/testdata/union_type/models/core_oam_dev_v1alpha2_containerized_workload.k

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ schema ContainerizedWorkload:
2121
"""
2222

2323

24-
final apiVersion: str = "core.oam.dev/v1alpha2"
24+
apiVersion: "core.oam.dev/v1alpha2" = "core.oam.dev/v1alpha2"
2525

26-
final kind: str = "ContainerizedWorkload"
26+
kind: "ContainerizedWorkload" = "ContainerizedWorkload"
2727

2828
metadata?: apis.ObjectMeta
2929

pkg/kube_resource/generator/testdata/fix_me_union_type/models/kusion_kubernetes/apimachinery/apis/managed_fields_entry.k renamed to pkg/kube_resource/generator/testdata/union_type/models/kusion_kubernetes/apimachinery/apis/managed_fields_entry.k

File renamed without changes.

pkg/kube_resource/generator/testdata/fix_me_union_type/models/kusion_kubernetes/apimachinery/apis/object_meta.k renamed to pkg/kube_resource/generator/testdata/union_type/models/kusion_kubernetes/apimachinery/apis/object_meta.k

File renamed without changes.

pkg/kube_resource/generator/testdata/fix_me_union_type/models/kusion_kubernetes/apimachinery/apis/owner_reference.k renamed to pkg/kube_resource/generator/testdata/union_type/models/kusion_kubernetes/apimachinery/apis/owner_reference.k

File renamed without changes.

pkg/kube_resource/generator/testdata/fix_me_union_type/union_type.golden.yaml renamed to pkg/kube_resource/generator/testdata/union_type/union_type.golden.yaml

File renamed without changes.

pkg/swagger/generator/testdata/integration/fix_me_v3_union_type/models/socket.k

Lines changed: 0 additions & 19 deletions
This file was deleted.

pkg/swagger/generator/testdata/integration/fix_me_v3_union_type/v3_union_type.golden.yaml

Lines changed: 0 additions & 14 deletions
This file was deleted.

pkg/swagger/generator/types.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ const (
3737
)
3838

3939
const (
40-
intOrStr = "intorstring"
40+
intOrStr = "intorstring"
41+
k8sIntOrStrFlag = "x-kubernetes-int-or-string"
4142
)
4243

4344
// Extensions supported by go-swagger
@@ -187,7 +188,7 @@ func (t *typeResolver) resolveSchemaRef(schema *spec.Schema, isRequired bool) (r
187188
return
188189
}
189190

190-
func (t *typeResolver) resolveFormat(schema *spec.Schema, isAnonymous bool, isRequired bool) (returns bool, result resolvedType, err error) {
191+
func (t *typeResolver) resolveFormat(schema *spec.Schema, isAnonymous, isRequired bool) (returns bool, result resolvedType, err error) {
191192
if schema.Format != "" {
192193
// defaults to string
193194
result.SwaggerType = str
@@ -215,6 +216,24 @@ func (t *typeResolver) resolveFormat(schema *spec.Schema, isAnonymous bool, isRe
215216
return
216217
}
217218

219+
func (t *typeResolver) resolveExtensions(schema *spec.Schema, isAnonymous, isRequired bool) (returns bool, result resolvedType, err error) {
220+
if schema.VendorExtensible.Extensions != nil {
221+
if value, ok := schema.VendorExtensible.Extensions.GetBool(k8sIntOrStrFlag); value && ok {
222+
// the schema has {"x-kubernetes-int-or-string": "true"} flag
223+
debugLog("resolving x-kubernetes-int-or-string type flag (anon: %t, req: %t)", isAnonymous, isRequired)
224+
returns = true
225+
result.SwaggerType = str
226+
if len(schema.Type) > 0 {
227+
result.SwaggerType = schema.Type[0]
228+
}
229+
result.KclType = typeMapping[intOrStr]
230+
// propagate extensions in resolvedType
231+
result.Extensions = schema.Extensions
232+
}
233+
}
234+
return
235+
}
236+
218237
func (t *typeResolver) firstType(schema *spec.Schema) string {
219238
if len(schema.Type) == 0 || schema.Type[0] == "" {
220239
return object
@@ -368,6 +387,12 @@ func (t *typeResolver) ResolveSchema(schema *spec.Schema, isAnonymous, isRequire
368387
return
369388
}
370389

390+
returns, result, err = t.resolveExtensions(schema, isAnonymous, isRequired)
391+
if returns || err != nil {
392+
debugLog("returning after resolve vendor extensions: %s", pretty.Sprint(result))
393+
return
394+
}
395+
371396
switch tpe {
372397
case array:
373398
result, err = t.resolveArray(schema, isAnonymous, false)

0 commit comments

Comments
 (0)