Skip to content
This repository was archived by the owner on Jul 18, 2025. It is now read-only.

Commit b973243

Browse files
authored
Merge pull request #76 from mnottale/inspect-nicer
inspect: Nicer output, also dump settings.
2 parents 3092d1a + 57801a2 commit b973243

File tree

4 files changed

+70
-37
lines changed

4 files changed

+70
-37
lines changed

cmd/inspect.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package cmd
22

33
import (
44
"github.com/docker/cli/cli"
5-
"github.com/docker/lunchbox/packager"
5+
"github.com/docker/lunchbox/renderer"
66
"github.com/spf13/cobra"
77
)
88

@@ -12,7 +12,7 @@ var inspectCmd = &cobra.Command{
1212
Short: "Retrieve metadata for a given app package",
1313
Args: cli.RequiresMaxArgs(1),
1414
RunE: func(cmd *cobra.Command, args []string) error {
15-
return packager.Inspect(firstOrEmpty(args))
15+
return renderer.Inspect(firstOrEmpty(args))
1616
},
1717
}
1818

packager/inspect.go

Lines changed: 0 additions & 35 deletions
This file was deleted.

renderer/inspect.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package renderer
2+
3+
import (
4+
"fmt"
5+
"io/ioutil"
6+
"os"
7+
"path/filepath"
8+
"text/tabwriter"
9+
10+
"github.com/docker/lunchbox/packager"
11+
"github.com/docker/lunchbox/types"
12+
yaml "gopkg.in/yaml.v2"
13+
)
14+
15+
// Inspect dumps the metadata of an app
16+
func Inspect(appname string) error {
17+
appname, cleanup, err := packager.Extract(appname)
18+
if err != nil {
19+
return err
20+
}
21+
defer cleanup()
22+
metaFile := filepath.Join(appname, "metadata.yml")
23+
metaContent, err := ioutil.ReadFile(metaFile)
24+
if err != nil {
25+
return err
26+
}
27+
var meta types.AppMetadata
28+
err = yaml.Unmarshal(metaContent, &meta)
29+
if err != nil {
30+
return err
31+
}
32+
// extract settings
33+
settingsFile := filepath.Join(appname, "settings.yml")
34+
settingsContent, err := ioutil.ReadFile(settingsFile)
35+
if err != nil {
36+
return err
37+
}
38+
settings, err := flattenYAML(settingsContent)
39+
if err != nil {
40+
return err
41+
}
42+
fmt.Printf("%s %s\n", meta.Name, meta.Version)
43+
fmt.Printf("Maintained by: %s\n", meta.Author)
44+
fmt.Println("")
45+
fmt.Printf("%s\n", meta.Description)
46+
fmt.Println("")
47+
w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0)
48+
fmt.Fprintln(w, "Setting\tDefault")
49+
fmt.Fprintln(w, "-------\t-------")
50+
for k, v := range settings {
51+
fmt.Fprintf(w, "%s\t%s\n", k, v)
52+
}
53+
w.Flush()
54+
return nil
55+
}

renderer/render.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,19 @@ import (
1717
"gopkg.in/yaml.v2"
1818
)
1919

20+
//flattenYAML reads a YAML file and return a flattened view
21+
func flattenYAML(content []byte) (map[string]string, error) {
22+
in := make(map[interface{}]interface{})
23+
if err := yaml.Unmarshal(content, in); err != nil {
24+
return nil, err
25+
}
26+
out := make(map[string]interface{})
27+
merge(out, in)
28+
res := make(map[string]string)
29+
flatten(out, res, "")
30+
return res, nil
31+
}
32+
2033
// flatten flattens a structure: foo.bar.baz -> foo_bar_baz
2134
func flatten(in map[string]interface{}, out map[string]string, prefix string) {
2235
for k, v := range in {

0 commit comments

Comments
 (0)