Skip to content

Commit 06ab6e7

Browse files
authored
Establish a convention for declaring CLI flags (docker-archive#301)
Signed-off-by: Bill Farner <[email protected]>
1 parent 1519d12 commit 06ab6e7

File tree

16 files changed

+365
-405
lines changed

16 files changed

+365
-405
lines changed

cmd/cli/flavor.go

+53-55
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,25 @@ import (
1818

1919
func flavorPluginCommand(plugins func() discovery.Plugins) *cobra.Command {
2020

21-
name := ""
2221
var flavorPlugin flavor.Plugin
2322

2423
cmd := &cobra.Command{
2524
Use: "flavor",
2625
Short: "Access flavor plugin",
27-
PersistentPreRunE: func(c *cobra.Command, args []string) error {
26+
}
27+
name := cmd.PersistentFlags().String("name", "", "Name of plugin")
2828

29-
endpoint, err := plugins().Find(name)
30-
if err != nil {
31-
return err
32-
}
29+
cmd.PersistentPreRunE = func(c *cobra.Command, args []string) error {
30+
31+
endpoint, err := plugins().Find(*name)
32+
if err != nil {
33+
return err
34+
}
3335

34-
flavorPlugin = flavor_plugin.NewClient(endpoint.Address)
36+
flavorPlugin = flavor_plugin.NewClient(endpoint.Address)
3537

36-
return nil
37-
},
38+
return nil
3839
}
39-
cmd.PersistentFlags().StringVar(&name, "name", name, "Name of plugin")
4040

4141
logicalIDs := []string{}
4242
groupSize := uint(0)
@@ -86,6 +86,7 @@ func flavorPluginCommand(plugins func() discovery.Plugins) *cobra.Command {
8686
},
8787
}
8888
addAllocationMethodFlags(validate)
89+
cmd.AddCommand(validate)
8990

9091
prepare := &cobra.Command{
9192
Use: "prepare <flavor configuration file> <instance Spec JSON file>",
@@ -129,61 +130,58 @@ func flavorPluginCommand(plugins func() discovery.Plugins) *cobra.Command {
129130
},
130131
}
131132
addAllocationMethodFlags(prepare)
133+
cmd.AddCommand(prepare)
132134

133-
tags := []string{}
134-
id := ""
135-
logicalID := ""
136135
healthy := &cobra.Command{
137136
Use: "healthy <flavor configuration file>",
138137
Short: "checks if an instance is considered healthy",
139-
RunE: func(cmd *cobra.Command, args []string) error {
140-
assertNotNil("no plugin", flavorPlugin)
141-
142-
if len(args) != 1 {
143-
cmd.Usage()
144-
os.Exit(1)
145-
}
138+
}
139+
tags := healthy.Flags().StringSlice("tags", []string{}, "Tags to filter")
140+
id := healthy.Flags().String("id", "", "ID of resource")
141+
logicalID := healthy.Flags().String("logical-id", "", "Logical ID of resource")
142+
healthy.RunE = func(cmd *cobra.Command, args []string) error {
143+
assertNotNil("no plugin", flavorPlugin)
144+
145+
if len(args) != 1 {
146+
cmd.Usage()
147+
os.Exit(1)
148+
}
146149

147-
flavorProperties, err := ioutil.ReadFile(args[0])
148-
if err != nil {
149-
log.Error(err)
150-
os.Exit(1)
151-
}
150+
flavorProperties, err := ioutil.ReadFile(args[0])
151+
if err != nil {
152+
log.Error(err)
153+
os.Exit(1)
154+
}
152155

153-
filter := map[string]string{}
154-
for _, t := range tags {
155-
p := strings.Split(t, "=")
156-
if len(p) == 2 {
157-
filter[p[0]] = p[1]
158-
} else {
159-
filter[p[0]] = ""
160-
}
156+
filter := map[string]string{}
157+
for _, t := range *tags {
158+
p := strings.Split(t, "=")
159+
if len(p) == 2 {
160+
filter[p[0]] = p[1]
161+
} else {
162+
filter[p[0]] = ""
161163
}
164+
}
162165

163-
desc := instance.Description{}
164-
if len(filter) > 0 {
165-
desc.Tags = filter
166-
}
167-
if id != "" {
168-
desc.ID = instance.ID(id)
169-
}
170-
if logicalID != "" {
171-
logical := instance.LogicalID(logicalID)
172-
desc.LogicalID = &logical
173-
}
166+
desc := instance.Description{}
167+
if len(filter) > 0 {
168+
desc.Tags = filter
169+
}
170+
if *id != "" {
171+
desc.ID = instance.ID(*id)
172+
}
173+
if *logicalID != "" {
174+
logical := instance.LogicalID(*logicalID)
175+
desc.LogicalID = &logical
176+
}
174177

175-
healthy, err := flavorPlugin.Healthy(json.RawMessage(flavorProperties), desc)
176-
if err == nil {
177-
fmt.Printf("%v\n", healthy)
178-
}
179-
return err
180-
},
178+
healthy, err := flavorPlugin.Healthy(json.RawMessage(flavorProperties), desc)
179+
if err == nil {
180+
fmt.Printf("%v\n", healthy)
181+
}
182+
return err
181183
}
182-
healthy.Flags().StringSliceVar(&tags, "tags", tags, "Tags to filter")
183-
healthy.Flags().StringVar(&id, "id", id, "ID of resource")
184-
healthy.Flags().StringVar(&logicalID, "logical-id", logicalID, "Logical ID of resource")
185-
186-
cmd.AddCommand(validate, prepare, healthy)
184+
cmd.AddCommand(healthy)
187185

188186
return cmd
189187
}

cmd/cli/group.go

+48-51
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,25 @@ const (
2222

2323
func groupPluginCommand(plugins func() discovery.Plugins) *cobra.Command {
2424

25-
name := DefaultGroupPluginName
2625
var groupPlugin group.Plugin
2726

2827
cmd := &cobra.Command{
2928
Use: "group",
3029
Short: "Access group plugin",
31-
PersistentPreRunE: func(c *cobra.Command, args []string) error {
30+
}
31+
name := cmd.PersistentFlags().String("name", DefaultGroupPluginName, "Name of plugin")
32+
cmd.PersistentPreRunE = func(c *cobra.Command, args []string) error {
3233

33-
endpoint, err := plugins().Find(name)
34-
if err != nil {
35-
return err
36-
}
34+
endpoint, err := plugins().Find(*name)
35+
if err != nil {
36+
return err
37+
}
3738

38-
groupPlugin = group_plugin.NewClient(endpoint.Address)
39+
groupPlugin = group_plugin.NewClient(endpoint.Address)
3940

40-
return nil
41-
},
41+
return nil
4242
}
4343

44-
cmd.PersistentFlags().StringVar(&name, "name", name, "Name of plugin")
45-
4644
commit := cobra.Command{
4745
Use: "commit <group configuration>",
4846
Short: "commit a group configuration",
@@ -99,44 +97,43 @@ func groupPluginCommand(plugins func() discovery.Plugins) *cobra.Command {
9997
},
10098
})
10199

102-
var quiet bool
103100
describe := &cobra.Command{
104101
Use: "describe <group ID>",
105102
Short: "describe the live instances that make up a group",
106-
RunE: func(cmd *cobra.Command, args []string) error {
107-
assertNotNil("no plugin", groupPlugin)
103+
}
104+
quietDescribe := describe.Flags().BoolP("quiet", "q", false, "Print rows without column headers")
105+
describe.RunE = func(cmd *cobra.Command, args []string) error {
106+
assertNotNil("no plugin", groupPlugin)
108107

109-
if len(args) != 1 {
110-
cmd.Usage()
111-
os.Exit(1)
112-
}
108+
if len(args) != 1 {
109+
cmd.Usage()
110+
os.Exit(1)
111+
}
113112

114-
groupID := group.ID(args[0])
115-
desc, err := groupPlugin.DescribeGroup(groupID)
113+
groupID := group.ID(args[0])
114+
desc, err := groupPlugin.DescribeGroup(groupID)
116115

117-
if err == nil {
118-
if !quiet {
119-
fmt.Printf("%-30s\t%-30s\t%-s\n", "ID", "LOGICAL", "TAGS")
116+
if err == nil {
117+
if !*quietDescribe {
118+
fmt.Printf("%-30s\t%-30s\t%-s\n", "ID", "LOGICAL", "TAGS")
119+
}
120+
for _, d := range desc.Instances {
121+
logical := " - "
122+
if d.LogicalID != nil {
123+
logical = string(*d.LogicalID)
120124
}
121-
for _, d := range desc.Instances {
122-
logical := " - "
123-
if d.LogicalID != nil {
124-
logical = string(*d.LogicalID)
125-
}
126-
127-
printTags := []string{}
128-
for k, v := range d.Tags {
129-
printTags = append(printTags, fmt.Sprintf("%s=%s", k, v))
130-
}
131-
sort.Strings(printTags)
132125

133-
fmt.Printf("%-30s\t%-30s\t%-s\n", d.ID, logical, strings.Join(printTags, ","))
126+
printTags := []string{}
127+
for k, v := range d.Tags {
128+
printTags = append(printTags, fmt.Sprintf("%s=%s", k, v))
134129
}
130+
sort.Strings(printTags)
131+
132+
fmt.Printf("%-30s\t%-30s\t%-s\n", d.ID, logical, strings.Join(printTags, ","))
135133
}
136-
return err
137-
},
134+
}
135+
return err
138136
}
139-
describe.Flags().BoolVarP(&quiet, "quiet", "q", false, "Print rows without column headers")
140137
cmd.AddCommand(describe)
141138

142139
cmd.AddCommand(&cobra.Command{
@@ -198,23 +195,23 @@ func groupPluginCommand(plugins func() discovery.Plugins) *cobra.Command {
198195
describeGroups := &cobra.Command{
199196
Use: "ls",
200197
Short: "list groups",
201-
RunE: func(cmd *cobra.Command, args []string) error {
202-
assertNotNil("no plugin", groupPlugin)
198+
}
199+
quietls := describeGroups.Flags().BoolP("quiet", "q", false, "Print rows without column headers")
200+
describeGroups.RunE = func(cmd *cobra.Command, args []string) error {
201+
assertNotNil("no plugin", groupPlugin)
203202

204-
groups, err := groupPlugin.InspectGroups()
205-
if err == nil {
206-
if !quiet {
207-
fmt.Printf("%s\n", "ID")
208-
}
209-
for _, g := range groups {
210-
fmt.Printf("%s\n", g.ID)
211-
}
203+
groups, err := groupPlugin.InspectGroups()
204+
if err == nil {
205+
if !*quietls {
206+
fmt.Printf("%s\n", "ID")
212207
}
208+
for _, g := range groups {
209+
fmt.Printf("%s\n", g.ID)
210+
}
211+
}
213212

214-
return err
215-
},
213+
return err
216214
}
217-
describeGroups.Flags().BoolVarP(&quiet, "quiet", "q", false, "Print rows without column headers")
218215
cmd.AddCommand(describeGroups)
219216

220217
return cmd

0 commit comments

Comments
 (0)