@@ -319,6 +319,7 @@ func (b *APIs) parseArrayValidation(t *types.Type, found sets.String, comments [
319
319
type objectTemplateArgs struct {
320
320
v1beta1.JSONSchemaProps
321
321
Fields map [string ]string
322
+ Required []string
322
323
}
323
324
324
325
var objectTemplate = template .Must (template .New ("object-template" ).Parse (
@@ -329,6 +330,11 @@ var objectTemplate = template.Must(template.New("object-template").Parse(
329
330
"{{ $k }}": {{ $v }},
330
331
{{ end -}}
331
332
},
333
+ {{if .Required}}Required: []string{
334
+ {{ range $k, $v := .Required -}}
335
+ "{{ $v }}",
336
+ {{ end -}}
337
+ },{{ end -}}
332
338
}` ))
333
339
334
340
// parseObjectValidation returns a JSONSchemaProps object and its serialization in
@@ -340,19 +346,20 @@ func (b *APIs) parseObjectValidation(t *types.Type, found sets.String, comments
340
346
}
341
347
342
348
if strings .HasPrefix (t .Name .String (), "k8s.io/api" ) {
343
- if err := objectTemplate .Execute (buff , objectTemplateArgs {props , nil }); err != nil {
349
+ if err := objectTemplate .Execute (buff , objectTemplateArgs {props , nil , nil }); err != nil {
344
350
log .Fatalf ("%v" , err )
345
351
}
346
352
} else {
347
- m , result := b .getMembers (t , found )
353
+ m , result , required := b .getMembers (t , found )
348
354
props .Properties = m
355
+ props .Required = required
349
356
350
357
// Only add field validation for non-inlined fields
351
358
for _ , l := range comments {
352
359
getValidation (l , & props )
353
360
}
354
361
355
- if err := objectTemplate .Execute (buff , objectTemplateArgs {props , result }); err != nil {
362
+ if err := objectTemplate .Execute (buff , objectTemplateArgs {props , result , required }); err != nil {
356
363
log .Fatalf ("%v" , err )
357
364
}
358
365
}
@@ -475,15 +482,16 @@ func getValidation(comment string, props *v1beta1.JSONSchemaProps) {
475
482
476
483
// getMembers builds maps by field name of the JSONSchemaProps and their Go
477
484
// serializations.
478
- func (b * APIs ) getMembers (t * types.Type , found sets.String ) (map [string ]v1beta1.JSONSchemaProps , map [string ]string ) {
485
+ func (b * APIs ) getMembers (t * types.Type , found sets.String ) (map [string ]v1beta1.JSONSchemaProps , map [string ]string , [] string ) {
479
486
members := map [string ]v1beta1.JSONSchemaProps {}
480
487
result := map [string ]string {}
488
+ required := []string {}
481
489
482
490
// Don't allow recursion until we support it through refs
483
491
// TODO: Support recursion
484
492
if found .Has (t .Name .String ()) {
485
493
fmt .Printf ("Breaking recursion for type %s" , t .Name .String ())
486
- return members , result
494
+ return members , result , required
487
495
}
488
496
found .Insert (t .Name .String ())
489
497
@@ -506,22 +514,26 @@ func (b *APIs) getMembers(t *types.Type, found sets.String) (map[string]v1beta1.
506
514
507
515
// Inline "inline" structs
508
516
if strat == "inline" {
509
- m , r := b .getMembers (member .Type , found )
517
+ m , r , re := b .getMembers (member .Type , found )
510
518
for n , v := range m {
511
519
members [n ] = v
512
520
}
513
521
for n , v := range r {
514
522
result [n ] = v
515
523
}
524
+ required = append (required , re ... )
516
525
} else {
517
526
m , r := b .typeToJSONSchemaProps (member .Type , found , member .CommentLines )
518
527
members [name ] = m
519
528
result [name ] = r
529
+ if ! strings .HasSuffix (strat , "omitempty" ) {
530
+ required = append (required , name )
531
+ }
520
532
}
521
533
}
522
534
523
535
defer found .Delete (t .Name .String ())
524
- return members , result
536
+ return members , result , required
525
537
}
526
538
527
539
// getCategoriesTag returns the value of the +kubebuilder:categories tags
0 commit comments