Make sure we error out instead of panic during interpolation

Use type assertion to error out if the type isn't the right one
instead of panic as before this change.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
This commit is contained in:
Vincent Demeester 2017-03-23 16:05:24 +01:00
parent d9ecb1b8fe
commit c165a8bfa1
No known key found for this signature in database
GPG Key ID: 083CC6FD6EB699A3
1 changed files with 7 additions and 4 deletions

View File

@ -1,9 +1,8 @@
package interpolation package interpolation
import ( import (
"fmt"
"github.com/docker/docker/cli/compose/template" "github.com/docker/docker/cli/compose/template"
"github.com/pkg/errors"
) )
// Interpolate replaces variables in a string with the values from a mapping // Interpolate replaces variables in a string with the values from a mapping
@ -15,7 +14,11 @@ func Interpolate(config map[string]interface{}, section string, mapping template
out[name] = nil out[name] = nil
continue continue
} }
interpolatedItem, err := interpolateSectionItem(name, item.(map[string]interface{}), section, mapping) mapItem, ok := item.(map[string]interface{})
if !ok {
return nil, errors.Errorf("Invalid type for %s : %T instead of %T", name, item, out)
}
interpolatedItem, err := interpolateSectionItem(name, mapItem, section, mapping)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -37,7 +40,7 @@ func interpolateSectionItem(
for key, value := range item { for key, value := range item {
interpolatedValue, err := recursiveInterpolate(value, mapping) interpolatedValue, err := recursiveInterpolate(value, mapping)
if err != nil { if err != nil {
return nil, fmt.Errorf( return nil, errors.Errorf(
"Invalid interpolation format for %#v option in %s %#v: %#v. You may need to escape any $ with another $.", "Invalid interpolation format for %#v option in %s %#v: %#v. You may need to escape any $ with another $.",
key, section, name, err.Template, key, section, name, err.Template,
) )