Skip to content
This repository was archived by the owner on Jan 21, 2020. It is now read-only.

Commit 4e670c2

Browse files
author
David Chung
authored
playbook improvements (#470)
Signed-off-by: David Chung <[email protected]>
1 parent 251ff68 commit 4e670c2

File tree

12 files changed

+212
-97
lines changed

12 files changed

+212
-97
lines changed

Makefile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@ ifeq (${DOCKER_TAG_LATEST},true)
6060
endif
6161
endif
6262

63+
build-docker-dev:
64+
@echo "+ $@"
65+
GOOS=linux GOARCH=amd64 make build-in-container
66+
@docker build ${DOCKER_BUILD_FLAGS} \
67+
-t ${DOCKER_IMAGE}:${DOCKER_TAG} \
68+
-f ${CURDIR}/dockerfiles/Dockerfile.bundle .
69+
6370
get-tools:
6471
@echo "+ $@"
6572
@go get -u \

cmd/cli/base/template.go

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import (
77
"path"
88
"strings"
99

10+
"github.com/docker/infrakit/pkg/cli"
1011
"github.com/docker/infrakit/pkg/discovery"
11-
metadata_template "github.com/docker/infrakit/pkg/plugin/metadata/template"
1212
"github.com/docker/infrakit/pkg/template"
1313
"github.com/ghodss/yaml"
1414
"github.com/spf13/pflag"
@@ -134,25 +134,7 @@ func TemplateProcessor(plugins func() discovery.Plugins) (*pflag.FlagSet, ToJSON
134134
}
135135
}
136136

137-
engine.WithFunctions(func() []template.Function {
138-
return []template.Function{
139-
{
140-
Name: "metadata",
141-
Description: []string{
142-
"Metadata function takes a path of the form \"plugin_name/path/to/data\"",
143-
"and calls GET on the plugin with the path \"path/to/data\".",
144-
"It's identical to the CLI command infrakit metadata cat ...",
145-
},
146-
Func: metadata_template.MetadataFunc(plugins),
147-
},
148-
{
149-
Name: "resource",
150-
Func: func(s string) string {
151-
return fmt.Sprintf("{{ resource `%s` }}", s)
152-
},
153-
},
154-
}
155-
})
137+
cli.ConfigureTemplate(engine, plugins)
156138

157139
view, err = engine.Render(nil)
158140
if err != nil {

cmd/cli/main/main.go

Lines changed: 23 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,26 @@ import (
55
"fmt"
66
"net/url"
77
"os"
8+
"strings"
89

910
"github.com/docker/infrakit/cmd/cli/base"
10-
"github.com/docker/infrakit/cmd/cli/playbook"
1111
"github.com/docker/infrakit/pkg/cli"
1212
cli_local "github.com/docker/infrakit/pkg/cli/local"
13-
cli_remote "github.com/docker/infrakit/pkg/cli/remote"
1413
"github.com/docker/infrakit/pkg/discovery"
1514
discovery_local "github.com/docker/infrakit/pkg/discovery/local"
1615
"github.com/docker/infrakit/pkg/discovery/remote"
1716
logutil "github.com/docker/infrakit/pkg/log"
1817
"github.com/spf13/cobra"
18+
19+
_ "github.com/docker/infrakit/cmd/cli/event"
20+
_ "github.com/docker/infrakit/cmd/cli/flavor"
21+
_ "github.com/docker/infrakit/cmd/cli/group"
22+
_ "github.com/docker/infrakit/cmd/cli/manager"
23+
_ "github.com/docker/infrakit/cmd/cli/playbook"
24+
_ "github.com/docker/infrakit/cmd/cli/plugin"
25+
_ "github.com/docker/infrakit/cmd/cli/resource"
26+
_ "github.com/docker/infrakit/cmd/cli/template"
27+
_ "github.com/docker/infrakit/cmd/cli/util"
1928
)
2029

2130
func init() {
@@ -55,10 +64,19 @@ func main() {
5564

5665
if len(remotes) > 0 {
5766
for _, h := range remotes {
67+
addProtocol := false
68+
if !strings.Contains(h, "://") {
69+
h = "http://" + h
70+
addProtocol = true
71+
}
5872
u, err := url.Parse(h)
5973
if err != nil {
6074
return err
6175
}
76+
if addProtocol {
77+
u.Scheme = "http"
78+
}
79+
6280
ulist = append(ulist, u)
6381
}
6482
}
@@ -96,48 +114,11 @@ func main() {
96114
cmd.AddCommand(c)
97115
})
98116

99-
mods := []*cobra.Command{}
100-
// additional modules
101-
if os.Getenv(cli.CliDirEnvVar) != "" {
102-
modules, err := cli_local.NewModules(cli_local.Dir())
103-
if err != nil {
104-
log.Crit("error executing", "err", err)
105-
os.Exit(1)
106-
}
107-
localModules, err := modules.List()
108-
log.Debug("modules", "local", localModules)
109-
if err != nil {
110-
log.Crit("error executing", "err", err)
111-
os.Exit(1)
112-
}
113-
mods = append(mods, localModules...)
114-
}
115-
116-
// any remote modules?
117-
pmod, err := playbook.Load()
118-
if err != nil {
119-
log.Warn("playbooks failed to load", "err", err)
120-
} else {
121-
if playbooks, err := cli_remote.NewModules(pmod, os.Stdin); err != nil {
122-
log.Warn("error loading playbooks", "err", err)
123-
} else {
124-
if more, err := playbooks.List(); err != nil {
125-
log.Warn("cannot list playbooks", "err", err)
126-
} else {
127-
mods = append(mods, more...)
128-
}
129-
}
130-
}
131-
132-
for _, mod := range mods {
133-
log.Debug("Adding", "module", mod.Use)
134-
cmd.AddCommand(mod)
135-
}
136-
137-
cmd.SetUsageTemplate(usageTemplate)
117+
// Help template includes the usage string, which is configure below
138118
cmd.SetHelpTemplate(helpTemplate)
119+
cmd.SetUsageTemplate(usageTemplate)
139120

140-
err = cmd.Execute()
121+
err := cmd.Execute()
141122
if err != nil {
142123
log.Crit("error executing", "cmd", cmd.Use, "err", err)
143124
fmt.Println(err.Error())

cmd/cli/playbook/playbook.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"path/filepath"
99

1010
"github.com/docker/infrakit/cmd/cli/base"
11+
"github.com/docker/infrakit/pkg/cli"
12+
"github.com/docker/infrakit/pkg/cli/local"
1113
"github.com/docker/infrakit/pkg/cli/remote"
1214
"github.com/docker/infrakit/pkg/discovery"
1315
logutil "github.com/docker/infrakit/pkg/log"
@@ -185,5 +187,51 @@ func Command(plugins func() discovery.Plugins) *cobra.Command {
185187

186188
cmd.AddCommand(add, remove, list)
187189

190+
reserved := map[*cobra.Command]int{add: 1, remove: 1, list: 1}
191+
192+
// Modules
193+
mods := []*cobra.Command{}
194+
// additional modules
195+
if os.Getenv(cli.CliDirEnvVar) != "" {
196+
modules, err := local.NewModules(plugins, local.Dir())
197+
if err != nil {
198+
log.Crit("error executing", "err", err)
199+
os.Exit(1)
200+
}
201+
localModules, err := modules.List()
202+
log.Debug("modules", "local", localModules)
203+
if err != nil {
204+
log.Crit("error executing", "err", err)
205+
os.Exit(1)
206+
}
207+
mods = append(mods, localModules...)
208+
}
209+
210+
// any remote modules?
211+
pmod, err := Load()
212+
if err != nil {
213+
log.Warn("playbooks failed to load", "err", err)
214+
} else {
215+
if playbooks, err := remote.NewModules(plugins, pmod, os.Stdin); err != nil {
216+
log.Warn("error loading playbooks", "err", err)
217+
} else {
218+
if more, err := playbooks.List(); err != nil {
219+
log.Warn("cannot list playbooks", "err", err)
220+
} else {
221+
mods = append(mods, more...)
222+
}
223+
}
224+
}
225+
226+
for _, mod := range mods {
227+
if _, has := reserved[mod]; has {
228+
log.Warn("cannot override reserverd command; igored", "conflict", mod.Use)
229+
continue
230+
}
231+
232+
log.Debug("Adding", "module", mod.Use)
233+
cmd.AddCommand(mod)
234+
}
235+
188236
return cmd
189237
}

cmd/cli/util/util.go

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package util
22

33
import (
4+
"net/http"
5+
"os"
46
"time"
57

68
"github.com/docker/infrakit/cmd/cli/base"
@@ -16,13 +18,39 @@ func init() {
1618
base.Register(Command)
1719
}
1820

21+
func fileServerCommand(plugins func() discovery.Plugins) *cobra.Command {
22+
cmd := &cobra.Command{
23+
Use: "fileserver <path>",
24+
Short: "Fileserver over http",
25+
}
26+
27+
listen := cmd.Flags().StringP("listen", "l", ":8080", "Listening port")
28+
29+
cmd.RunE = func(c *cobra.Command, args []string) error {
30+
31+
if len(args) != 1 {
32+
c.Usage()
33+
os.Exit(-1)
34+
}
35+
36+
logger.Info("Starting file server", "listen", *listen)
37+
38+
rootFS := args[0]
39+
handler := http.FileServer(http.Dir(rootFS))
40+
return http.ListenAndServe(*listen, handler)
41+
}
42+
43+
return cmd
44+
}
45+
1946
func muxCommand(plugins func() discovery.Plugins) *cobra.Command {
2047
cmd := &cobra.Command{
2148
Use: "mux",
2249
Short: "API mux service",
2350
}
2451

25-
listen := cmd.Flags().StringP("listen", "l", ":4358", "Listening port")
52+
// http://www.speedguide.net/port.php?port=24864 - unassigned by IANA
53+
listen := cmd.Flags().StringP("listen", "l", ":24864", "Listening port")
2654
autoStop := cmd.Flags().BoolP("auto-stop", "a", false, "True to stop when no plugins are running")
2755
interval := cmd.Flags().DurationP("scan", "s", 1*time.Minute, "Scan interval to check for plugins")
2856

@@ -74,7 +102,7 @@ func Command(plugins func() discovery.Plugins) *cobra.Command {
74102
Short: "Utilties",
75103
}
76104

77-
util.AddCommand(muxCommand(plugins))
105+
util.AddCommand(muxCommand(plugins), fileServerCommand(plugins))
78106

79107
return util
80108
}

dockerfiles/Dockerfile.bundle

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,24 @@
1-
FROM alpine:3.5
2-
3-
RUN apk add --update ca-certificates
1+
FROM docker:latest
42

53
RUN mkdir -p /infrakit/plugins /infrakit/configs /infrakit/logs /infrakit/cli
64

75
VOLUME /infrakit
86

97
ENV INFRAKIT_HOME /infrakit
8+
9+
# Defined in pkg/discovery
1010
ENV INFRAKIT_PLUGINS_DIR /infrakit/plugins
11+
12+
# Defined in pkg/cli
1113
ENV INFRAKIT_CLI_DIR /infrakit/cli
1214

15+
# Defined in cmd/cli/playbook
16+
ENV INFRAKIT_PLAYBOOKS_FILE /infrakit/playbooks
17+
18+
# When using the manager 'os' option
19+
ENV INFRAKIT_LEADER_FILE /infrakit/leader
20+
ENV INFRAKIT_STORE_DIR /infrakit/configs
21+
22+
23+
1324
ADD build/* /usr/local/bin/

pkg/cli/context.go

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"strconv"
99
"strings"
1010

11+
"github.com/docker/infrakit/pkg/discovery"
1112
"github.com/docker/infrakit/pkg/template"
1213
"github.com/docker/infrakit/pkg/util/exec"
1314
"github.com/spf13/cobra"
@@ -21,20 +22,22 @@ const (
2122

2223
// Context is the context for the running module
2324
type Context struct {
24-
cmd *cobra.Command
25-
src string
26-
input io.Reader
27-
exec bool
28-
run func(string) error
29-
script string
25+
cmd *cobra.Command
26+
src string
27+
input io.Reader
28+
exec bool
29+
run func(string) error
30+
script string
31+
plugins func() discovery.Plugins
3032
}
3133

3234
// NewContext creates a context
33-
func NewContext(cmd *cobra.Command, src string, input io.Reader) *Context {
35+
func NewContext(plugins func() discovery.Plugins, cmd *cobra.Command, src string, input io.Reader) *Context {
3436
return &Context{
35-
cmd: cmd,
36-
src: src,
37-
input: input,
37+
plugins: plugins,
38+
cmd: cmd,
39+
src: src,
40+
input: input,
3841
}
3942
}
4043

@@ -317,7 +320,8 @@ func (c *Context) BuildFlags() error {
317320
if err != nil {
318321
return err
319322
}
320-
_, err = t.Render(c)
323+
324+
_, err = ConfigureTemplate(t, c.plugins).Render(c)
321325
return err
322326
}
323327

@@ -334,8 +338,9 @@ func (c *Context) Execute() error {
334338
if err != nil {
335339
return err
336340
}
341+
337342
c.exec = true
338-
script, err := t.Render(c)
343+
script, err := ConfigureTemplate(t, c.plugins).Render(c)
339344
if err != nil {
340345
return err
341346
}

0 commit comments

Comments
 (0)