Templates: constrain validating required parameters by usage (#26167)
This commit is contained in:
parent
b1914c30ea
commit
525480e416
2 changed files with 54 additions and 1 deletions
|
|
@ -11,6 +11,7 @@ import (
|
|||
"text/template"
|
||||
|
||||
"github.com/Masterminds/sprig/v3"
|
||||
"github.com/spf13/cast"
|
||||
)
|
||||
|
||||
// Template describes is a proxy device for use with cli and automated testing
|
||||
|
|
@ -302,6 +303,14 @@ func (t *Template) RenderResult(renderMode int, other map[string]any) ([]byte, m
|
|||
|
||||
res := make(map[string]any)
|
||||
|
||||
var usage string
|
||||
for k, v := range values {
|
||||
if strings.ToLower(k) == "usage" {
|
||||
usage = strings.ToLower(cast.ToString(v))
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// TODO this is an utterly horrible hack
|
||||
//
|
||||
// When decoding the actual values ("other" parameter) into the
|
||||
|
|
@ -359,7 +368,10 @@ func (t *Template) RenderResult(renderMode int, other map[string]any) ([]byte, m
|
|||
// validate required fields from yaml
|
||||
if s == "" && p.IsRequired() && (renderMode == RenderModeUnitTest ||
|
||||
renderMode == RenderModeInstance && !testing.Testing()) {
|
||||
return nil, nil, fmt.Errorf("missing required `%s`", p.Name)
|
||||
// validate required per usage
|
||||
if len(p.Usages) == 0 || slices.Contains(p.Usages, usage) {
|
||||
return nil, nil, fmt.Errorf("missing required `%s`", p.Name)
|
||||
}
|
||||
}
|
||||
|
||||
res[out] = s
|
||||
|
|
|
|||
|
|
@ -65,3 +65,44 @@ func TestRequired(t *testing.T) {
|
|||
})
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestRequiredPerUsage(t *testing.T) {
|
||||
tmpl := &Template{
|
||||
TemplateDefinition: TemplateDefinition{
|
||||
Params: []Param{
|
||||
{
|
||||
Name: "usage",
|
||||
},
|
||||
{
|
||||
Name: "param",
|
||||
Required: true,
|
||||
Usages: []string{"battery"},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
_, _, err := tmpl.RenderResult(RenderModeUnitTest, map[string]any{
|
||||
"Param": nil,
|
||||
"Usage": nil,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
_, _, err = tmpl.RenderResult(RenderModeUnitTest, map[string]any{
|
||||
"Param": nil,
|
||||
"Usage": "pv",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
_, _, err = tmpl.RenderResult(RenderModeUnitTest, map[string]any{
|
||||
"Param": nil,
|
||||
"Usage": "battery",
|
||||
})
|
||||
require.Error(t, err)
|
||||
|
||||
_, _, err = tmpl.RenderResult(RenderModeUnitTest, map[string]any{
|
||||
"Param": "foo",
|
||||
"Usage": "battery",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue