|
@@ -1,40 +0,0 @@
|
|
|
-// +build !go1.5
|
|
|
-
|
|
|
-package inspect
|
|
|
-
|
|
|
-import (
|
|
|
- "bytes"
|
|
|
- "encoding/json"
|
|
|
- "fmt"
|
|
|
- "strings"
|
|
|
-)
|
|
|
-
|
|
|
-// tryeRawInspectFallback executes the inspect template with a raw interface.
|
|
|
-// This allows docker cli to parse inspect structs injected with Swarm fields.
|
|
|
-// Unfortunately, go 1.4 doesn't fail executing invalid templates when the input is an interface.
|
|
|
-// It doesn't allow to modify this behavior either, sending <no value> messages to the output.
|
|
|
-// We assume that the template is invalid when there is a <no value>, if the template was valid
|
|
|
-// we'd get <nil> or "" values. In that case we fail with the original error raised executing the
|
|
|
-// template with the typed input.
|
|
|
-func (i *TemplateInspector) tryRawInspectFallback(rawElement []byte, originalErr error) error {
|
|
|
- var raw interface{}
|
|
|
- buffer := new(bytes.Buffer)
|
|
|
- rdr := bytes.NewReader(rawElement)
|
|
|
- dec := json.NewDecoder(rdr)
|
|
|
-
|
|
|
- if rawErr := dec.Decode(&raw); rawErr != nil {
|
|
|
- return fmt.Errorf("unable to read inspect data: %v", rawErr)
|
|
|
- }
|
|
|
-
|
|
|
- if rawErr := i.tmpl.Execute(buffer, raw); rawErr != nil {
|
|
|
- return fmt.Errorf("Template parsing error: %v", rawErr)
|
|
|
- }
|
|
|
-
|
|
|
- if strings.Contains(buffer.String(), "<no value>") {
|
|
|
- return fmt.Errorf("Template parsing error: %v", originalErr)
|
|
|
- }
|
|
|
-
|
|
|
- i.buffer.Write(buffer.Bytes())
|
|
|
- i.buffer.WriteByte('\n')
|
|
|
- return nil
|
|
|
-}
|