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

Commit 4e9a442

Browse files
committed
cli revision
1 parent 83e6c52 commit 4e9a442

File tree

4 files changed

+75
-42
lines changed

4 files changed

+75
-42
lines changed

cli/cmd_containers.go

+10-6
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,31 @@ import (
55
"strings"
66
"time"
77

8-
"github.com/mcuadros/dockership/core"
9-
108
"github.com/docker/docker/pkg/units"
119
"github.com/mitchellh/cli"
1210
"github.com/stevedomin/termtable"
1311
)
1412

15-
type CmdContainers struct{}
13+
type CmdContainers struct{ cmd }
1614

1715
func NewCmdContainers() (cli.Command, error) {
1816
return &CmdContainers{}, nil
1917
}
2018

2119
func (c *CmdContainers) Run(args []string) int {
22-
var config core.Config
23-
config.LoadFile("config.ini")
20+
c.buildFlags(c)
21+
if err := c.parse(args); err != nil {
22+
return 1
23+
}
2424

2525
table := termtable.NewTable(nil, &termtable.TableOptions{Padding: 3})
2626
table.SetHeader([]string{"Enviroment", "Repository", "Commit", "Container ID", "Created", "Command", "Status", "Ports"})
2727

28-
for _, p := range config.Projects {
28+
for name, p := range c.config.Projects {
29+
if c.project != "" && c.project != name {
30+
continue
31+
}
32+
2933
l, err := p.List()
3034
if err != nil {
3135
continue

cli/cmd_deploy.go

+22-21
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,53 @@
11
package main
22

33
import (
4-
"flag"
4+
"fmt"
55
"strings"
66

7-
"github.com/mcuadros/dockership/core"
87
. "github.com/mcuadros/dockership/logger"
98

109
"github.com/mitchellh/cli"
1110
)
1211

1312
type CmdDeploy struct {
14-
config *core.Config
13+
enviroment string
14+
force bool
15+
cmd
1516
}
1617

1718
func NewCmdDeploy() (cli.Command, error) {
18-
var config core.Config
19-
if err := config.LoadFile("config.ini"); err != nil {
20-
Critical(err.Error(), "file", "config.ini")
21-
}
19+
return &CmdDeploy{}, nil
20+
}
21+
22+
func (c *CmdDeploy) parse(args []string) error {
23+
c.flags.StringVar(&c.enviroment, "env", "", "")
24+
c.flags.BoolVar(&c.force, "force", false, "")
25+
err := c.cmd.parse(args)
26+
27+
fmt.Println(args)
2228

23-
return &CmdDeploy{config: &config}, nil
29+
return err
2430
}
2531

2632
func (c *CmdDeploy) Run(args []string) int {
27-
var project, enviroment string
28-
var force bool
29-
cmdFlags := flag.NewFlagSet("deploy", flag.ContinueOnError)
30-
cmdFlags.StringVar(&project, "project", "", "")
31-
cmdFlags.StringVar(&enviroment, "env", "", "")
32-
cmdFlags.BoolVar(&force, "force", false, "")
33-
if err := cmdFlags.Parse(args); err != nil {
33+
c.buildFlags(c)
34+
if err := c.parse(args); err != nil {
3435
return 1
3536
}
3637

37-
if p, ok := c.config.Projects[project]; ok {
38-
Info("Starting deploy", "project", p, "enviroment", enviroment, "force", force)
39-
_, err := p.Deploy(enviroment, force)
38+
if p, ok := c.config.Projects[c.project]; ok {
39+
Info("Starting deploy", "project", p, "enviroment", c.enviroment, "force", c.force)
40+
_, err := p.Deploy(c.enviroment, c.force)
4041
if err != nil {
41-
Critical(err.Error(), "project", project)
42+
Critical(err.Error(), "project", c.project)
4243
return 1
4344
}
4445

45-
Info("Deploy success", "project", p, "enviroment", enviroment)
46+
Info("Deploy success", "project", p, "enviroment", c.enviroment)
4647
return 0
4748
}
4849

49-
Critical("Unable to find project", "project", project)
50+
Critical("Unable to find project", "project", c.project)
5051

5152
return 1
5253
}

cli/cmd_status.go

+5-15
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,30 @@
11
package main
22

33
import (
4-
"flag"
54
"fmt"
65
"strings"
76

8-
"github.com/mcuadros/dockership/core"
9-
107
"github.com/mitchellh/cli"
118
"github.com/stevedomin/termtable"
129
)
1310

14-
type CmdStatus struct {
15-
config *core.Config
16-
}
11+
type CmdStatus struct{ cmd }
1712

1813
func NewCmdStatus() (cli.Command, error) {
19-
var config core.Config
20-
config.LoadFile("config.ini")
21-
22-
return &CmdStatus{config: &config}, nil
14+
return &CmdStatus{}, nil
2315
}
2416

2517
func (c *CmdStatus) Run(args []string) int {
26-
var project string
27-
cmdFlags := flag.NewFlagSet("status", flag.ContinueOnError)
28-
cmdFlags.StringVar(&project, "project", "", "")
29-
if err := cmdFlags.Parse(args); err != nil {
18+
c.buildFlags(c)
19+
if err := c.parse(args); err != nil {
3020
return 1
3121
}
3222

3323
table := termtable.NewTable(nil, &termtable.TableOptions{Padding: 3})
3424
table.SetHeader([]string{"Enviroment", "Project", "Last Commit", "Containers", "Status"})
3525

3626
for name, p := range c.config.Projects {
37-
if project != "" && project != name {
27+
if c.project != "" && c.project != name {
3828
continue
3929
}
4030

cli/main.go

+38
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package main
22

33
import (
4+
"flag"
45
"os"
56

7+
"github.com/mcuadros/dockership/core"
68
. "github.com/mcuadros/dockership/logger"
79

810
"github.com/mitchellh/cli"
911
)
1012

13+
const DEFAULT_CONFIG = "config.ini"
14+
1115
func main() {
1216
c := cli.NewCLI("dockership", "0.0.1")
1317
c.Args = os.Args[1:]
@@ -24,3 +28,37 @@ func main() {
2428

2529
os.Exit(exitStatus)
2630
}
31+
32+
type cmd struct {
33+
configFile string
34+
project string
35+
config core.Config
36+
flags *flag.FlagSet
37+
}
38+
39+
func (c *cmd) loadConfig() {
40+
if err := c.config.LoadFile(c.configFile); err != nil {
41+
Critical(err.Error(), "file", c.configFile)
42+
}
43+
}
44+
45+
func (c *cmd) buildFlags(child cli.Command) {
46+
c.flags = flag.NewFlagSet("set", flag.ContinueOnError)
47+
c.flags.StringVar(&c.configFile, "config", DEFAULT_CONFIG, "")
48+
c.flags.StringVar(&c.project, "project", "", "")
49+
c.flags.Usage = func() { child.Help() }
50+
}
51+
52+
func (c *cmd) parse(args []string) error {
53+
if err := c.flags.Parse(args); err != nil {
54+
return err
55+
}
56+
57+
c.loadConfig()
58+
59+
if _, ok := c.config.Projects[c.project]; !ok {
60+
Critical("Unknown project", "project", c.project)
61+
}
62+
63+
return nil
64+
}

0 commit comments

Comments
 (0)