mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Print the raw inspected elements when there is no template for docker inspect
.
Otherwise we're ignoring the fields that Swarm adds to the output. Signed-off-by: David Calavera <david.calavera@gmail.com>
This commit is contained in:
parent
ff69b23dc0
commit
1f5674363e
2 changed files with 63 additions and 8 deletions
|
@ -60,6 +60,7 @@ func (i *TemplateInspector) Flush() error {
|
||||||
type IndentedInspector struct {
|
type IndentedInspector struct {
|
||||||
outputStream io.Writer
|
outputStream io.Writer
|
||||||
elements []interface{}
|
elements []interface{}
|
||||||
|
rawElements [][]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewIndentedInspector generates a new IndentedInspector.
|
// NewIndentedInspector generates a new IndentedInspector.
|
||||||
|
@ -70,26 +71,49 @@ func NewIndentedInspector(outputStream io.Writer) Inspector {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inspect writes the raw element with an indented json format.
|
// Inspect writes the raw element with an indented json format.
|
||||||
func (i *IndentedInspector) Inspect(typedElement interface{}, _ []byte) error {
|
func (i *IndentedInspector) Inspect(typedElement interface{}, rawElement []byte) error {
|
||||||
|
if rawElement != nil {
|
||||||
|
i.rawElements = append(i.rawElements, rawElement)
|
||||||
|
} else {
|
||||||
i.elements = append(i.elements, typedElement)
|
i.elements = append(i.elements, typedElement)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flush write the result of inspecting all elements into the output stream.
|
// Flush write the result of inspecting all elements into the output stream.
|
||||||
func (i *IndentedInspector) Flush() error {
|
func (i *IndentedInspector) Flush() error {
|
||||||
if len(i.elements) == 0 {
|
if len(i.elements) == 0 && len(i.rawElements) == 0 {
|
||||||
_, err := io.WriteString(i.outputStream, "[]\n")
|
_, err := io.WriteString(i.outputStream, "[]\n")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer, err := json.MarshalIndent(i.elements, "", " ")
|
var buffer io.Reader
|
||||||
|
if len(i.rawElements) > 0 {
|
||||||
|
bytesBuffer := new(bytes.Buffer)
|
||||||
|
bytesBuffer.WriteString("[")
|
||||||
|
for idx, r := range i.rawElements {
|
||||||
|
bytesBuffer.Write(r)
|
||||||
|
if idx < len(i.rawElements)-1 {
|
||||||
|
bytesBuffer.WriteString(",")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bytesBuffer.WriteString("]")
|
||||||
|
indented := new(bytes.Buffer)
|
||||||
|
if err := json.Indent(indented, bytesBuffer.Bytes(), "", " "); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
buffer = indented
|
||||||
|
} else {
|
||||||
|
b, err := json.MarshalIndent(i.elements, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
buffer = bytes.NewReader(b)
|
||||||
|
}
|
||||||
|
|
||||||
if _, err := io.Copy(i.outputStream, bytes.NewReader(buffer)); err != nil {
|
if _, err := io.Copy(i.outputStream, buffer); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, err = io.WriteString(i.outputStream, "\n")
|
_, err := io.WriteString(i.outputStream, "\n")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -187,3 +187,34 @@ func TestIndentedInspectorEmpty(t *testing.T) {
|
||||||
t.Fatalf("Expected `%s`, got `%s`", expected, b.String())
|
t.Fatalf("Expected `%s`, got `%s`", expected, b.String())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIndentedInspectorRawElements(t *testing.T) {
|
||||||
|
b := new(bytes.Buffer)
|
||||||
|
i := NewIndentedInspector(b)
|
||||||
|
if err := i.Inspect(testElement{"0.0.0.0"}, []byte(`{"Dns": "0.0.0.0", "Node": "0"}`)); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := i.Inspect(testElement{"1.1.1.1"}, []byte(`{"Dns": "1.1.1.1", "Node": "1"}`)); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := i.Flush(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
expected := `[
|
||||||
|
{
|
||||||
|
"Dns": "0.0.0.0",
|
||||||
|
"Node": "0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Dns": "1.1.1.1",
|
||||||
|
"Node": "1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
`
|
||||||
|
if b.String() != expected {
|
||||||
|
t.Fatalf("Expected `%s`, got `%s`", expected, b.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue