From 8ba2cf3ff6e4588cfd141abbbdac842bab818d6b Mon Sep 17 00:00:00 2001 From: Dustin Scott Date: Fri, 22 Jul 2022 22:50:27 -0500 Subject: [PATCH] fix: Fixes #47, non-defaulted fields are marked as required Signed-off-by: Dustin Scott --- internal/workload/v1/kinds/api.go | 21 ++++++++++--------- .../workload/v1/kinds/api_internal_test.go | 4 +++- internal/workload/v1/kinds/workload.go | 4 ++-- internal/workload/v1/markers/markers.go | 4 ++-- 4 files changed, 18 insertions(+), 15 deletions(-) diff --git a/internal/workload/v1/kinds/api.go b/internal/workload/v1/kinds/api.go index 41e11d5..1db20b4 100644 --- a/internal/workload/v1/kinds/api.go +++ b/internal/workload/v1/kinds/api.go @@ -29,7 +29,6 @@ type APIFields struct { Children []*APIFields Default string Sample string - Last bool } func (api *APIFields) AddField(path string, fieldType markers.FieldType, comments []string, sample interface{}, hasDefault bool) error { @@ -70,7 +69,6 @@ func (api *APIFields) AddField(path string, fieldType markers.FieldType, comment } newChild := obj.newChild(last, fieldType, sample) - newChild.Last = true newChild.setCommentsAndDefault(comments, sample, hasDefault) @@ -265,22 +263,25 @@ func (api *APIFields) setSample(sampleVal interface{}) { func (api *APIFields) setDefault(sampleVal interface{}) { api.Default = api.getSampleValue(sampleVal) + api.appendMarkers( + fmt.Sprintf("+kubebuilder:default=%s", api.Default), + "+kubebuilder:validation:Optional", + fmt.Sprintf("(Default: %s)", api.Default), + ) + api.setSample(sampleVal) +} +func (api *APIFields) appendMarkers(apiMarkers ...string) { if len(api.Markers) == 0 { - api.Markers = append( - api.Markers, - fmt.Sprintf("+kubebuilder:default=%s", api.Default), - "+kubebuilder:validation:Optional", - fmt.Sprintf("(Default: %s)", api.Default), - ) + api.Markers = append(api.Markers, apiMarkers...) } - - api.setSample(sampleVal) } func (api *APIFields) setCommentsAndDefault(comments []string, sampleVal interface{}, hasDefault bool) { if hasDefault { api.setDefault(sampleVal) + } else { + api.appendMarkers("+kubebuilder:validation:Required") } if comments != nil { diff --git a/internal/workload/v1/kinds/api_internal_test.go b/internal/workload/v1/kinds/api_internal_test.go index 61f3558..393ed5e 100644 --- a/internal/workload/v1/kinds/api_internal_test.go +++ b/internal/workload/v1/kinds/api_internal_test.go @@ -440,7 +440,6 @@ func TestAPIFields_getSampleValue(t *testing.T) { Children: tt.fields.Children, Default: tt.fields.Default, Sample: tt.fields.Sample, - Last: tt.fields.Last, } if got := api.getSampleValue(tt.args.sampleVal); got != tt.want { t.Errorf("APIFields.getSampleValue() = %v, want %v", got, tt.want) @@ -683,6 +682,9 @@ func TestAPIFields_setCommentsAndDefault(t *testing.T) { }, expect: &APIFields{ manifestName: "other", + Markers: []string{ + "+kubebuilder:validation:Required", + }, }, }, } diff --git a/internal/workload/v1/kinds/workload.go b/internal/workload/v1/kinds/workload.go index 3a2d3c7..4bbfe8e 100644 --- a/internal/workload/v1/kinds/workload.go +++ b/internal/workload/v1/kinds/workload.go @@ -347,7 +347,7 @@ func (ws *WorkloadSpec) processMarkers(manifestFile *manifests.Manifest, markerT } func (ws *WorkloadSpec) processMarkerResults(markerResults []*inspect.YAMLResult) error { - for _, markerResult := range markerResults { + for i := range markerResults { var defaultFound bool var sampleVal interface{} @@ -355,7 +355,7 @@ func (ws *WorkloadSpec) processMarkerResults(markerResults []*inspect.YAMLResult // convert to interface var marker markers.FieldMarkerProcessor - switch t := markerResult.Object.(type) { + switch t := markerResults[i].Object.(type) { case *markers.FieldMarker: marker = t ws.FieldMarkers = append(ws.FieldMarkers, t) diff --git a/internal/workload/v1/markers/markers.go b/internal/workload/v1/markers/markers.go index c4c2544..19d12bf 100644 --- a/internal/workload/v1/markers/markers.go +++ b/internal/workload/v1/markers/markers.go @@ -106,8 +106,8 @@ func initializeMarkerInspector(markerTypes ...MarkerType) (*inspect.Inspector, e var err error - for _, markerType := range markerTypes { - switch markerType { + for i := range markerTypes { + switch markerTypes[i] { case FieldMarkerType: err = defineFieldMarker(registry) case CollectionMarkerType: