Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 25 additions & 30 deletions pkg/porter/parameters.go
Original file line number Diff line number Diff line change
Expand Up @@ -576,49 +576,44 @@ func (p *Porter) finalizeParameters(ctx context.Context, installation storage.In
// Apply user supplied parameter overrides last
for key, rawValue := range params {
param, ok := bun.Parameters[key]
if !ok {
return nil, fmt.Errorf("parameter %s not defined in bundle", key)
}
if ok {
def, ok := bun.Definitions[param.Definition]
if !ok {
return nil, fmt.Errorf("definition %s not defined in bundle", param.Definition)
}

def, ok := bun.Definitions[param.Definition]
if !ok {
return nil, fmt.Errorf("definition %s not defined in bundle", param.Definition)
}
// Apply porter specific conversions, like retrieving file contents
value, err := p.getUnconvertedValueFromRaw(bun, def, key, rawValue)
if err != nil {
return nil, err
}

// Apply porter specific conversions, like retrieving file contents
value, err := p.getUnconvertedValueFromRaw(bun, def, key, rawValue)
if err != nil {
return nil, err
mergedParams[key] = value
}

mergedParams[key] = value
}

// Now convert all parameters which are currently strings into the
// proper type for the parameter, e.g. "false" -> false
typedParams := make(map[string]interface{}, len(mergedParams))
for key, unconverted := range mergedParams {
param, ok := bun.Parameters[key]
if !ok {
return nil, fmt.Errorf("parameter %s not defined in bundle", key)
}

def, ok := bun.Definitions[param.Definition]
if !ok {
return nil, fmt.Errorf("definition %s not defined in bundle", param.Definition)
}
if ok {
def, ok := bun.Definitions[param.Definition]
if !ok {
return nil, fmt.Errorf("definition %s not defined in bundle", param.Definition)
}

if def.Type != nil {
value, err := def.ConvertValue(unconverted)
if err != nil {
return nil, fmt.Errorf("unable to convert parameter's %s value %s to the destination parameter type %s: %w", key, unconverted, def.Type, err)
if def.Type != nil {
value, err := def.ConvertValue(unconverted)
if err != nil {
return nil, fmt.Errorf("unable to convert parameter's %s value %s to the destination parameter type %s: %w", key, unconverted, def.Type, err)
}
typedParams[key] = value
} else {
// bundle dependency parameters can be any type, not sure we have a solid way to do a typed conversion
typedParams[key] = unconverted
}
typedParams[key] = value
} else {
// bundle dependency parameters can be any type, not sure we have a solid way to do a typed conversion
typedParams[key] = unconverted
}

}

return bundle.ValuesOrDefaults(typedParams, &bun.Bundle, action)
Expand Down
4 changes: 2 additions & 2 deletions pkg/porter/parameters_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ func TestPorter_ListParameters(t *testing.T) {
})
}

func Test_loadParameters_paramNotDefined(t *testing.T) {
func Test_loadParameters_IgnoreParamNotDefined(t *testing.T) {
t.Parallel()

r := NewTestPorter(t)
Expand All @@ -112,7 +112,7 @@ func Test_loadParameters_paramNotDefined(t *testing.T) {

i := storage.Installation{}
_, err := r.finalizeParameters(context.Background(), i, b, "action", overrides)
require.EqualError(t, err, "parameter foo not defined in bundle")
require.NoError(t, err)
}

func Test_loadParameters_definitionNotDefined(t *testing.T) {
Expand Down