Skip to content

Commit c563bd9

Browse files
committed
backport deployment filter on tasks cmd
1 parent d9bbeea commit c563bd9

File tree

11 files changed

+129
-54
lines changed

11 files changed

+129
-54
lines changed

cmd/factory.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ func (f Factory) New(args []string) (Cmd, error) {
4545
opts.Deployment = cmd.BoshOpts.DeploymentOpt
4646
}
4747

48+
if opts, ok := command.(*TasksOpts); ok {
49+
opts.Deployment = cmd.BoshOpts.DeploymentOpt
50+
}
51+
4852
if len(extraArgs) > 0 {
4953
errMsg := "Command '%T' does not support extra arguments: %s"
5054
return fmt.Errorf(errMsg, command, strings.Join(extraArgs, ", "))

cmd/factory_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,16 @@ var _ = Describe("Factory", func() {
186186
})
187187
})
188188

189+
Describe("tasks command", func() {
190+
It("is passed the deployment flag", func() {
191+
cmd, err := factory.New([]string{"tasks", "--deployment", "deployment"})
192+
Expect(err).ToNot(HaveOccurred())
193+
194+
opts := cmd.Opts.(*TasksOpts)
195+
Expect(opts.Deployment).To(Equal("deployment"))
196+
})
197+
})
198+
189199
Describe("help options", func() {
190200
It("has a help flag", func() {
191201
_, err := factory.New([]string{"--help"})

cmd/opts.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,9 +206,9 @@ type TaskArgs struct {
206206
}
207207

208208
type TasksOpts struct {
209-
Recent *int `long:"recent" short:"r" description:"Number of tasks to show" optional:"true" optional-value:"30"`
210-
211-
All bool `long:"all" short:"a" description:"Include all task types (ssh, logs, vms, etc)"`
209+
Recent *int `long:"recent" short:"r" description:"Number of tasks to show" optional:"true" optional-value:"30"`
210+
All bool `long:"all" short:"a" description:"Include all task types (ssh, logs, vms, etc)"`
211+
Deployment string
212212

213213
cmd
214214
}

cmd/task.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func (c TaskCmd) Run(opts TaskOpts) error {
3131
var err error
3232

3333
if opts.Args.ID == 0 {
34-
tasks, err := c.director.CurrentTasks(opts.All)
34+
tasks, err := c.director.CurrentTasks(boshdir.TasksFilter{All: opts.All})
3535
if err != nil {
3636
return err
3737
}

cmd/task_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,13 +242,13 @@ var _ = Describe("TaskCmd", func() {
242242
It("filters tasks based on 'all' option", func() {
243243
err := act()
244244
Expect(err).ToNot(HaveOccurred())
245-
Expect(director.CurrentTasksArgsForCall(0)).To(Equal(false))
245+
Expect(director.CurrentTasksArgsForCall(0)).To(Equal(boshdir.TasksFilter{}))
246246

247247
opts.All = true
248248

249249
err = act()
250250
Expect(err).ToNot(HaveOccurred())
251-
Expect(director.CurrentTasksArgsForCall(1)).To(Equal(true))
251+
Expect(director.CurrentTasksArgsForCall(1)).To(Equal(boshdir.TasksFilter{All: true}))
252252
})
253253

254254
It("returns error if there are no current tasks", func() {

cmd/tasks.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@ func NewTasksCmd(ui boshui.UI, director boshdir.Director) TasksCmd {
1616
}
1717

1818
func (c TasksCmd) Run(opts TasksOpts) error {
19+
filter := boshdir.TasksFilter{
20+
All: opts.All,
21+
Deployment: opts.Deployment,
22+
}
23+
1924
if opts.Recent != nil {
20-
return c.printTable(c.director.RecentTasks(*opts.Recent, opts.All))
25+
return c.printTable(c.director.RecentTasks(*opts.Recent, filter))
2126
}
22-
return c.printTable(c.director.CurrentTasks(opts.All))
27+
return c.printTable(c.director.CurrentTasks(filter))
2328
}
2429

2530
func (c TasksCmd) printTable(tasks []boshdir.Task, err error) error {

cmd/tasks_test.go

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -113,18 +113,22 @@ var _ = Describe("TasksCmd", func() {
113113
}))
114114
})
115115

116-
It("filters tasks based on 'all' option", func() {
116+
It("filters tasks based options", func() {
117117
director.CurrentTasksReturns(nil, nil)
118118

119119
err := act()
120120
Expect(err).ToNot(HaveOccurred())
121-
Expect(director.CurrentTasksArgsForCall(0)).To(Equal(false))
121+
Expect(director.CurrentTasksArgsForCall(0)).To(Equal(boshdir.TasksFilter{}))
122122

123123
opts.All = true
124+
opts.Deployment = "deployment"
124125

125126
err = act()
126127
Expect(err).ToNot(HaveOccurred())
127-
Expect(director.CurrentTasksArgsForCall(1)).To(Equal(true))
128+
Expect(director.CurrentTasksArgsForCall(1)).To(Equal(boshdir.TasksFilter{
129+
All: true,
130+
Deployment: "deployment",
131+
}))
128132
})
129133

130134
It("returns error if tasks cannot be retrieved", func() {
@@ -216,18 +220,22 @@ var _ = Describe("TasksCmd", func() {
216220
}))
217221
})
218222

219-
It("filters tasks based on 'all' option", func() {
223+
It("filters tasks based on options", func() {
220224
director.RecentTasksReturns(nil, nil)
221225

222226
Expect(act()).ToNot(HaveOccurred())
223-
_, includeAll := director.RecentTasksArgsForCall(0)
224-
Expect(includeAll).To(Equal(false))
227+
_, filter := director.RecentTasksArgsForCall(0)
228+
Expect(filter).To(Equal(boshdir.TasksFilter{}))
225229

226230
opts.All = true
231+
opts.Deployment = "deployment"
227232

228233
Expect(act()).ToNot(HaveOccurred())
229-
_, includeAll = director.RecentTasksArgsForCall(1)
230-
Expect(includeAll).To(Equal(true))
234+
_, filter = director.RecentTasksArgsForCall(1)
235+
Expect(filter).To(Equal(boshdir.TasksFilter{
236+
All: true,
237+
Deployment: "deployment",
238+
}))
231239
})
232240

233241
It("requests specific number of tasks", func() {

director/fakes/fake_director.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,20 @@ type FakeDirector struct {
3030
result1 []director.Lock
3131
result2 error
3232
}
33-
CurrentTasksStub func(includeAll bool) ([]director.Task, error)
33+
CurrentTasksStub func(director.TasksFilter) ([]director.Task, error)
3434
currentTasksMutex sync.RWMutex
3535
currentTasksArgsForCall []struct {
36-
includeAll bool
36+
arg1 director.TasksFilter
3737
}
3838
currentTasksReturns struct {
3939
result1 []director.Task
4040
result2 error
4141
}
42-
RecentTasksStub func(limit int, includeAll bool) ([]director.Task, error)
42+
RecentTasksStub func(int, director.TasksFilter) ([]director.Task, error)
4343
recentTasksMutex sync.RWMutex
4444
recentTasksArgsForCall []struct {
45-
limit int
46-
includeAll bool
45+
arg1 int
46+
arg2 director.TasksFilter
4747
}
4848
recentTasksReturns struct {
4949
result1 []director.Task
@@ -342,14 +342,14 @@ func (fake *FakeDirector) LocksReturns(result1 []director.Lock, result2 error) {
342342
}{result1, result2}
343343
}
344344

345-
func (fake *FakeDirector) CurrentTasks(includeAll bool) ([]director.Task, error) {
345+
func (fake *FakeDirector) CurrentTasks(arg1 director.TasksFilter) ([]director.Task, error) {
346346
fake.currentTasksMutex.Lock()
347347
fake.currentTasksArgsForCall = append(fake.currentTasksArgsForCall, struct {
348-
includeAll bool
349-
}{includeAll})
348+
arg1 director.TasksFilter
349+
}{arg1})
350350
fake.currentTasksMutex.Unlock()
351351
if fake.CurrentTasksStub != nil {
352-
return fake.CurrentTasksStub(includeAll)
352+
return fake.CurrentTasksStub(arg1)
353353
} else {
354354
return fake.currentTasksReturns.result1, fake.currentTasksReturns.result2
355355
}
@@ -361,10 +361,10 @@ func (fake *FakeDirector) CurrentTasksCallCount() int {
361361
return len(fake.currentTasksArgsForCall)
362362
}
363363

364-
func (fake *FakeDirector) CurrentTasksArgsForCall(i int) bool {
364+
func (fake *FakeDirector) CurrentTasksArgsForCall(i int) director.TasksFilter {
365365
fake.currentTasksMutex.RLock()
366366
defer fake.currentTasksMutex.RUnlock()
367-
return fake.currentTasksArgsForCall[i].includeAll
367+
return fake.currentTasksArgsForCall[i].arg1
368368
}
369369

370370
func (fake *FakeDirector) CurrentTasksReturns(result1 []director.Task, result2 error) {
@@ -375,15 +375,15 @@ func (fake *FakeDirector) CurrentTasksReturns(result1 []director.Task, result2 e
375375
}{result1, result2}
376376
}
377377

378-
func (fake *FakeDirector) RecentTasks(limit int, includeAll bool) ([]director.Task, error) {
378+
func (fake *FakeDirector) RecentTasks(arg1 int, arg2 director.TasksFilter) ([]director.Task, error) {
379379
fake.recentTasksMutex.Lock()
380380
fake.recentTasksArgsForCall = append(fake.recentTasksArgsForCall, struct {
381-
limit int
382-
includeAll bool
383-
}{limit, includeAll})
381+
arg1 int
382+
arg2 director.TasksFilter
383+
}{arg1, arg2})
384384
fake.recentTasksMutex.Unlock()
385385
if fake.RecentTasksStub != nil {
386-
return fake.RecentTasksStub(limit, includeAll)
386+
return fake.RecentTasksStub(arg1, arg2)
387387
} else {
388388
return fake.recentTasksReturns.result1, fake.recentTasksReturns.result2
389389
}
@@ -395,10 +395,10 @@ func (fake *FakeDirector) RecentTasksCallCount() int {
395395
return len(fake.recentTasksArgsForCall)
396396
}
397397

398-
func (fake *FakeDirector) RecentTasksArgsForCall(i int) (int, bool) {
398+
func (fake *FakeDirector) RecentTasksArgsForCall(i int) (int, director.TasksFilter) {
399399
fake.recentTasksMutex.RLock()
400400
defer fake.recentTasksMutex.RUnlock()
401-
return fake.recentTasksArgsForCall[i].limit, fake.recentTasksArgsForCall[i].includeAll
401+
return fake.recentTasksArgsForCall[i].arg1, fake.recentTasksArgsForCall[i].arg2
402402
}
403403

404404
func (fake *FakeDirector) RecentTasksReturns(result1 []director.Task, result2 error) {

director/interfaces.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ type Director interface {
1616

1717
Locks() ([]Lock, error)
1818

19-
CurrentTasks(includeAll bool) ([]Task, error)
20-
RecentTasks(limit int, includeAll bool) ([]Task, error)
19+
CurrentTasks(TasksFilter) ([]Task, error)
20+
RecentTasks(int, TasksFilter) ([]Task, error)
2121
FindTask(int) (Task, error)
2222

2323
Events(EventsFilter) ([]Event, error)
@@ -157,6 +157,11 @@ type Stemcell interface {
157157
Delete(force bool) error
158158
}
159159

160+
type TasksFilter struct {
161+
All bool
162+
Deployment string
163+
}
164+
160165
type Task interface {
161166
ID() int
162167
StartedAt() time.Time

director/tasks.go

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package director
22

33
import (
44
"fmt"
5+
gourl "net/url"
56
"time"
67

78
bosherr "github.com/cloudfoundry/bosh-utils/errors"
@@ -72,10 +73,10 @@ func NewTaskFromResp(client Client, r TaskResp) TaskImpl {
7273
}
7374
}
7475

75-
func (d DirectorImpl) CurrentTasks(includeAll bool) ([]Task, error) {
76+
func (d DirectorImpl) CurrentTasks(filter TasksFilter) ([]Task, error) {
7677
tasks := []Task{}
7778

78-
taskResps, err := d.client.CurrentTasks(includeAll)
79+
taskResps, err := d.client.CurrentTasks(filter)
7980
if err != nil {
8081
return tasks, err
8182
}
@@ -87,10 +88,10 @@ func (d DirectorImpl) CurrentTasks(includeAll bool) ([]Task, error) {
8788
return tasks, nil
8889
}
8990

90-
func (d DirectorImpl) RecentTasks(limit int, includeAll bool) ([]Task, error) {
91+
func (d DirectorImpl) RecentTasks(limit int, filter TasksFilter) ([]Task, error) {
9192
tasks := []Task{}
9293

93-
taskResps, err := d.client.RecentTasks(limit, includeAll)
94+
taskResps, err := d.client.RecentTasks(limit, filter)
9495
if err != nil {
9596
return tasks, err
9697
}
@@ -131,11 +132,19 @@ func (t TaskImpl) RawOutput(taskReporter TaskReporter) error {
131132
return t.client.TaskOutput(t.id, "raw", taskReporter)
132133
}
133134

134-
func (c Client) CurrentTasks(includeAll bool) ([]TaskResp, error) {
135+
func (c Client) CurrentTasks(filter TasksFilter) ([]TaskResp, error) {
135136
var tasks []TaskResp
136137

137-
path := "/tasks?state=processing,cancelling,queued&verbose=" +
138-
c.taskVerbosity(includeAll)
138+
query := gourl.Values{}
139+
140+
query.Add("state", "processing,cancelling,queued")
141+
query.Add("verbose", c.taskVerbosity(filter.All))
142+
143+
if len(filter.Deployment) > 0 {
144+
query.Add("deployment", filter.Deployment)
145+
}
146+
147+
path := fmt.Sprintf("/tasks?%s", query.Encode())
139148

140149
err := c.clientRequest.Get(path, &tasks)
141150
if err != nil {
@@ -145,11 +154,19 @@ func (c Client) CurrentTasks(includeAll bool) ([]TaskResp, error) {
145154
return tasks, nil
146155
}
147156

148-
func (c Client) RecentTasks(limit int, includeAll bool) ([]TaskResp, error) {
157+
func (c Client) RecentTasks(limit int, filter TasksFilter) ([]TaskResp, error) {
149158
var tasks []TaskResp
150159

151-
path := fmt.Sprintf("/tasks?limit=%d&verbose=%s",
152-
limit, c.taskVerbosity(includeAll))
160+
query := gourl.Values{}
161+
162+
query.Add("limit", fmt.Sprintf("%d", limit))
163+
query.Add("verbose", c.taskVerbosity(filter.All))
164+
165+
if len(filter.Deployment) > 0 {
166+
query.Add("deployment", filter.Deployment)
167+
}
168+
169+
path := fmt.Sprintf("/tasks?%s", query.Encode())
153170

154171
err := c.clientRequest.Get(path, &tasks)
155172
if err != nil {

0 commit comments

Comments
 (0)