Skip to content

Commit 7a325b3

Browse files
committed
wip adding lifecycle flag to delete-buildpack and update-buildpack
- need to fix failing tests - need to update messages for update buildpack Signed-off-by: Tom Kennedy <tom.kennedy@broadcom.com>
1 parent b583e2d commit 7a325b3

17 files changed

+599
-369
lines changed

actor/actionerror/buildpack_not_found_error.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import "fmt"
66
type BuildpackNotFoundError struct {
77
BuildpackName string
88
StackName string
9+
Lifecycle string
910
}
1011

1112
func (e BuildpackNotFoundError) Error() string {
12-
return fmt.Sprintf("Buildpack not found - Name: '%s'; Stack: '%s'", e.BuildpackName, e.StackName)
13+
return fmt.Sprintf("Buildpack not found - Name: '%s'; Stack: '%s', Lifecyle: '%s'", e.BuildpackName, e.StackName, e.Lifecycle)
1314
}

actor/v7action/buildpack.go

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -36,41 +36,45 @@ func (actor Actor) GetBuildpacks(labelSelector string, lifecycle string) ([]reso
3636
return buildpacks, Warnings(warnings), err
3737
}
3838

39-
// GetBuildpackByNameAndStack returns a buildpack with the provided name and
40-
// stack. If `buildpackStack` is not specified, and there are multiple
39+
// GetBuildpackByNameAndStackAndLifecycle returns a buildpack with the provided name, stack,
40+
// and lifecycle. If `buildpackStack` is not specified, and there are multiple
4141
// buildpacks with the same name, it will return the one with no stack, if
42-
// present.
43-
func (actor Actor) GetBuildpackByNameAndStack(buildpackName string, buildpackStack string) (resources.Buildpack, Warnings, error) {
42+
// present. If `buildpackLifecycle` is not specified and there are multiple buildpacks with
43+
// the same name, it will return the one with the default_app_lifecycle, if present.
44+
func (actor Actor) GetBuildpackByNameAndStackAndLifecycle(buildpackName string, buildpackStack string, buildpackLifecycle string) (resources.Buildpack, Warnings, error) {
4445
var (
4546
buildpacks []resources.Buildpack
4647
warnings ccv3.Warnings
4748
err error
4849
)
4950

50-
if buildpackStack == "" {
51-
buildpacks, warnings, err = actor.CloudControllerClient.GetBuildpacks(ccv3.Query{
52-
Key: ccv3.NameFilter,
53-
Values: []string{buildpackName},
51+
queries := []ccv3.Query{{
52+
Key: ccv3.NameFilter,
53+
Values: []string{buildpackName},
54+
}}
55+
56+
if buildpackStack != "" {
57+
queries = append(queries, ccv3.Query{
58+
Key: ccv3.StackFilter,
59+
Values: []string{buildpackStack},
5460
})
55-
} else {
56-
buildpacks, warnings, err = actor.CloudControllerClient.GetBuildpacks(
57-
ccv3.Query{
58-
Key: ccv3.NameFilter,
59-
Values: []string{buildpackName},
60-
},
61-
ccv3.Query{
62-
Key: ccv3.StackFilter,
63-
Values: []string{buildpackStack},
64-
},
65-
)
6661
}
6762

63+
if buildpackLifecycle != "" {
64+
queries = append(queries, ccv3.Query{
65+
Key: ccv3.LifecycleFilter,
66+
Values: []string{buildpackLifecycle},
67+
})
68+
}
69+
70+
buildpacks, warnings, err = actor.CloudControllerClient.GetBuildpacks(queries...)
71+
6872
if err != nil {
6973
return resources.Buildpack{}, Warnings(warnings), err
7074
}
7175

7276
if len(buildpacks) == 0 {
73-
return resources.Buildpack{}, Warnings(warnings), actionerror.BuildpackNotFoundError{BuildpackName: buildpackName, StackName: buildpackStack}
77+
return resources.Buildpack{}, Warnings(warnings), actionerror.BuildpackNotFoundError{BuildpackName: buildpackName, StackName: buildpackStack, Lifecycle: buildpackLifecycle}
7478
}
7579

7680
if len(buildpacks) > 1 {
@@ -91,9 +95,9 @@ func (actor Actor) CreateBuildpack(buildpack resources.Buildpack) (resources.Bui
9195
return buildpack, Warnings(warnings), err
9296
}
9397

94-
func (actor Actor) UpdateBuildpackByNameAndStack(buildpackName string, buildpackStack string, buildpack resources.Buildpack) (resources.Buildpack, Warnings, error) {
98+
func (actor Actor) UpdateBuildpackByNameAndStackAndLifecycle(buildpackName string, buildpackStack string, buildpackLifecycle string, buildpack resources.Buildpack) (resources.Buildpack, Warnings, error) {
9599
var warnings Warnings
96-
foundBuildpack, getWarnings, err := actor.GetBuildpackByNameAndStack(buildpackName, buildpackStack)
100+
foundBuildpack, getWarnings, err := actor.GetBuildpackByNameAndStackAndLifecycle(buildpackName, buildpackStack, buildpackLifecycle)
97101
warnings = append(warnings, getWarnings...)
98102

99103
if err != nil {
@@ -254,9 +258,9 @@ func Zipit(source, target, prefix string) error {
254258
return err
255259
}
256260

257-
func (actor Actor) DeleteBuildpackByNameAndStack(buildpackName string, buildpackStack string) (Warnings, error) {
261+
func (actor Actor) DeleteBuildpackByNameAndStackAndLifecycle(buildpackName string, buildpackStack string, buildpackLifecycle string) (Warnings, error) {
258262
var allWarnings Warnings
259-
buildpack, getBuildpackWarnings, err := actor.GetBuildpackByNameAndStack(buildpackName, buildpackStack)
263+
buildpack, getBuildpackWarnings, err := actor.GetBuildpackByNameAndStackAndLifecycle(buildpackName, buildpackStack, buildpackLifecycle)
260264
allWarnings = append(allWarnings, getBuildpackWarnings...)
261265
if err != nil {
262266
return allWarnings, err

actor/v7action/buildpack_test.go

Lines changed: 102 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,23 +28,24 @@ var _ = Describe("Buildpack", func() {
2828
actor, fakeCloudControllerClient, _, _, _, _, _ = NewTestActor()
2929
})
3030

31-
Describe("GetBuildpackByNameAndStack", func() {
31+
Describe("GetBuildpackByNameAndStackAndLifecycle", func() {
3232
var (
33-
buildpackName = "buildpack-1"
34-
buildpackStack = "stack-name"
35-
buildpack resources.Buildpack
36-
warnings Warnings
37-
executeErr error
33+
buildpackName = "buildpack-1"
34+
buildpackStack = "stack-name"
35+
buildpackLifecycle = "buildpack"
36+
buildpack resources.Buildpack
37+
warnings Warnings
38+
executeErr error
3839
)
3940

4041
JustBeforeEach(func() {
41-
buildpack, warnings, executeErr = actor.GetBuildpackByNameAndStack(buildpackName, buildpackStack)
42+
buildpack, warnings, executeErr = actor.GetBuildpackByNameAndStackAndLifecycle(buildpackName, buildpackStack, buildpackLifecycle)
4243
})
4344

4445
When("getting buildpacks fails", func() {
4546
BeforeEach(func() {
46-
4747
buildpackStack = "real-good-stack"
48+
buildpackLifecycle = "some-lifecycle"
4849
fakeCloudControllerClient.GetBuildpacksReturns(
4950
nil,
5051
ccv3.Warnings{"some-warning-1", "some-warning-2"},
@@ -65,6 +66,10 @@ var _ = Describe("Buildpack", func() {
6566
Key: ccv3.StackFilter,
6667
Values: []string{buildpackStack},
6768
},
69+
ccv3.Query{
70+
Key: ccv3.LifecycleFilter,
71+
Values: []string{buildpackLifecycle},
72+
},
6873
))
6974
})
7075
})
@@ -120,7 +125,7 @@ var _ = Describe("Buildpack", func() {
120125
})
121126

122127
It("returns warnings and a BuildpackNotFoundError", func() {
123-
Expect(executeErr).To(MatchError(actionerror.BuildpackNotFoundError{BuildpackName: buildpackName, StackName: buildpackStack}))
128+
Expect(executeErr).To(MatchError(actionerror.BuildpackNotFoundError{BuildpackName: buildpackName, StackName: buildpackStack, Lifecycle: buildpackLifecycle}))
124129
Expect(warnings).To(ConsistOf("some-warning-1", "some-warning-2"))
125130
})
126131
})
@@ -152,10 +157,43 @@ var _ = Describe("Buildpack", func() {
152157
Key: ccv3.NameFilter,
153158
Values: []string{buildpackName},
154159
},
160+
ccv3.Query{
161+
Key: ccv3.LifecycleFilter,
162+
Values: []string{buildpackLifecycle},
163+
},
155164
))
156165
})
157166
})
158167

168+
When("No lifecycle is specified", func() {
169+
BeforeEach(func() {
170+
buildpackLifecycle = ""
171+
buildpackName = "my-buildpack"
172+
173+
ccBuildpack := resources.Buildpack{Name: "my-buildpack", GUID: "some-guid"}
174+
fakeCloudControllerClient.GetBuildpacksReturns(
175+
[]resources.Buildpack{ccBuildpack},
176+
ccv3.Warnings{"some-warning-1", "some-warning-2"},
177+
nil)
178+
})
179+
180+
It("Returns the proper buildpack", func() {
181+
Expect(executeErr).ToNot(HaveOccurred())
182+
Expect(warnings).To(ConsistOf("some-warning-1", "some-warning-2"))
183+
Expect(buildpack).To(Equal(resources.Buildpack{Name: "my-buildpack", GUID: "some-guid"}))
184+
})
185+
186+
It("Does not pass a lifecycle query to the client", func() {
187+
Expect(fakeCloudControllerClient.GetBuildpacksCallCount()).To(Equal(1))
188+
queries := fakeCloudControllerClient.GetBuildpacksArgsForCall(0)
189+
Expect(queries).To(ConsistOf(
190+
ccv3.Query{
191+
Key: ccv3.NameFilter,
192+
Values: []string{buildpackName},
193+
},
194+
))
195+
})
196+
})
159197
When("A stack is specified", func() {
160198
BeforeEach(func() {
161199
buildpackStack = "good-stack"
@@ -189,6 +227,39 @@ var _ = Describe("Buildpack", func() {
189227
))
190228
})
191229
})
230+
When("A lifecycle is specified", func() {
231+
BeforeEach(func() {
232+
buildpackLifecycle = "good-lifecycle"
233+
buildpackName = "my-buildpack"
234+
235+
ccBuildpack := resources.Buildpack{Name: "my-buildpack", GUID: "some-guid", Lifecycle: "good-lifecycle"}
236+
fakeCloudControllerClient.GetBuildpacksReturns(
237+
[]resources.Buildpack{ccBuildpack},
238+
ccv3.Warnings{"some-warning-1", "some-warning-2"},
239+
nil)
240+
})
241+
242+
It("Returns the proper buildpack", func() {
243+
Expect(executeErr).ToNot(HaveOccurred())
244+
Expect(warnings).To(ConsistOf("some-warning-1", "some-warning-2"))
245+
Expect(buildpack).To(Equal(resources.Buildpack{Name: "my-buildpack", GUID: "some-guid", Lifecycle: "good-lifecycle"}))
246+
})
247+
248+
It("Does pass a lifecycle query to the client", func() {
249+
Expect(fakeCloudControllerClient.GetBuildpacksCallCount()).To(Equal(1))
250+
queries := fakeCloudControllerClient.GetBuildpacksArgsForCall(0)
251+
Expect(queries).To(ConsistOf(
252+
ccv3.Query{
253+
Key: ccv3.NameFilter,
254+
Values: []string{buildpackName},
255+
},
256+
ccv3.Query{
257+
Key: ccv3.LifecycleFilter,
258+
Values: []string{buildpackLifecycle},
259+
},
260+
))
261+
})
262+
})
192263
})
193264
})
194265

@@ -338,9 +409,10 @@ var _ = Describe("Buildpack", func() {
338409

339410
Describe("UpdateBuildpackByNameAndStack", func() {
340411
var (
341-
buildpackName = "my-buildpack"
342-
buildpackStack = "my-stack"
343-
buildpack = resources.Buildpack{
412+
buildpackName = "my-buildpack"
413+
buildpackStack = "my-stack"
414+
buildpackLifecycle = "cnb"
415+
buildpack = resources.Buildpack{
344416
Stack: "new-stack",
345417
}
346418

@@ -350,7 +422,7 @@ var _ = Describe("Buildpack", func() {
350422
)
351423

352424
JustBeforeEach(func() {
353-
retBuildpack, warnings, executeErr = actor.UpdateBuildpackByNameAndStack(buildpackName, buildpackStack, buildpack)
425+
retBuildpack, warnings, executeErr = actor.UpdateBuildpackByNameAndStackAndLifecycle(buildpackName, buildpackStack, buildpackLifecycle, buildpack)
354426
})
355427

356428
When("it is successful", func() {
@@ -377,6 +449,10 @@ var _ = Describe("Buildpack", func() {
377449
Key: ccv3.StackFilter,
378450
Values: []string{buildpackStack},
379451
},
452+
ccv3.Query{
453+
Key: ccv3.LifecycleFilter,
454+
Values: []string{buildpackLifecycle},
455+
},
380456
))
381457

382458
paramBuildpack := fakeCloudControllerClient.UpdateBuildpackArgsForCall(0)
@@ -651,18 +727,19 @@ var _ = Describe("Buildpack", func() {
651727
})
652728
})
653729

654-
Describe("DeleteBuildpackByNameAndStack", func() {
730+
Describe("DeleteBuildpackByNameAndStackAndLifecycle", func() {
655731
var (
656-
buildpackName = "buildpack-name"
657-
buildpackStack = "buildpack-stack"
658-
buildpackGUID = "buildpack-guid"
659-
jobURL = "buildpack-delete-job-url"
660-
warnings Warnings
661-
executeErr error
732+
buildpackName = "buildpack-name"
733+
buildpackStack = "buildpack-stack"
734+
buildpackLifecycle = "buildpack-stack"
735+
buildpackGUID = "buildpack-guid"
736+
jobURL = "buildpack-delete-job-url"
737+
warnings Warnings
738+
executeErr error
662739
)
663740

664741
JustBeforeEach(func() {
665-
warnings, executeErr = actor.DeleteBuildpackByNameAndStack(buildpackName, buildpackStack)
742+
warnings, executeErr = actor.DeleteBuildpackByNameAndStackAndLifecycle(buildpackName, buildpackStack, buildpackLifecycle)
666743
})
667744

668745
When("getting the buildpack fails", func() {
@@ -686,6 +763,10 @@ var _ = Describe("Buildpack", func() {
686763
Key: ccv3.StackFilter,
687764
Values: []string{buildpackStack},
688765
},
766+
ccv3.Query{
767+
Key: ccv3.LifecycleFilter,
768+
Values: []string{buildpackLifecycle},
769+
},
689770
))
690771
})
691772
})

actor/v7action/label.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ func (actor *Actor) GetStackLabels(stackName string) (map[string]types.NullStrin
5656
return actor.extractLabels(resource.Metadata, warnings, err)
5757
}
5858

59-
func (actor *Actor) GetBuildpackLabels(buildpackName string, buildpackStack string) (map[string]types.NullString, Warnings, error) {
60-
resource, warnings, err := actor.GetBuildpackByNameAndStack(buildpackName, buildpackStack)
59+
func (actor *Actor) GetBuildpackLabels(buildpackName string, buildpackStack string, buildpackLifecycle string) (map[string]types.NullString, Warnings, error) {
60+
resource, warnings, err := actor.GetBuildpackByNameAndStackAndLifecycle(buildpackName, buildpackStack, buildpackLifecycle)
6161
return actor.extractLabels(resource.Metadata, warnings, err)
6262
}
6363

@@ -81,8 +81,8 @@ func (actor *Actor) UpdateApplicationLabelsByApplicationName(appName string, spa
8181
return actor.updateResourceMetadata("app", app.GUID, resources.Metadata{Labels: labels}, warnings)
8282
}
8383

84-
func (actor *Actor) UpdateBuildpackLabelsByBuildpackNameAndStack(buildpackName string, stack string, labels map[string]types.NullString) (Warnings, error) {
85-
buildpack, warnings, err := actor.GetBuildpackByNameAndStack(buildpackName, stack)
84+
func (actor *Actor) UpdateBuildpackLabelsByBuildpackNameAndStackAndLifecycle(buildpackName string, stack string, lifecycle string, labels map[string]types.NullString) (Warnings, error) {
85+
buildpack, warnings, err := actor.GetBuildpackByNameAndStackAndLifecycle(buildpackName, stack, lifecycle)
8686
if err != nil {
8787
return warnings, err
8888
}
Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,28 @@
11
package translatableerror
22

3+
import "fmt"
4+
35
type BuildpackNotFoundError struct {
46
BuildpackName string
57
StackName string
8+
Lifecycle string
69
}
710

811
func (e BuildpackNotFoundError) Error() string {
9-
if len(e.StackName) == 0 {
10-
return "Buildpack '{{.BuildpackName}}' not found"
12+
message := fmt.Sprintf("Buildpack '%s'", e.BuildpackName)
13+
if len(e.StackName) != 0 {
14+
message = fmt.Sprintf("%s with stack %s", message, e.StackName)
15+
}
16+
if len(e.Lifecycle) != 0 {
17+
message = fmt.Sprintf("%s with lifecycle %s", message, e.Lifecycle)
1118
}
12-
return "Buildpack '{{.BuildpackName}}' with stack '{{.StackName}}' not found"
19+
return message + " not found"
1320
}
1421

1522
func (e BuildpackNotFoundError) Translate(translate func(string, ...interface{}) string) string {
1623
return translate(e.Error(), map[string]interface{}{
1724
"BuildpackName": e.BuildpackName,
1825
"StackName": e.StackName,
26+
"Lifecycle": e.Lifecycle,
1927
})
2028
}

command/v7/actor.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ type Actor interface {
5858
CreateUser(username string, password string, origin string) (resources.User, v7action.Warnings, error)
5959
CreateUserProvidedServiceInstance(instance resources.ServiceInstance) (v7action.Warnings, error)
6060
DeleteApplicationByNameAndSpace(name, spaceGUID string, deleteRoutes bool) (v7action.Warnings, error)
61-
DeleteBuildpackByNameAndStack(buildpackName string, buildpackStack string) (v7action.Warnings, error)
61+
DeleteBuildpackByNameAndStackAndLifecycle(buildpackName string, buildpackStack string, buildpackLifecycle string) (v7action.Warnings, error)
6262
DeleteDomain(domain resources.Domain) (v7action.Warnings, error)
6363
DeleteInstanceByApplicationNameSpaceProcessTypeAndIndex(appName string, spaceGUID string, processType string, instanceIndex int) (v7action.Warnings, error)
6464
DeleteOrgRole(roleType constant.RoleType, orgGUID string, userNameOrGUID string, userOrigin string, isClient bool) (v7action.Warnings, error)
@@ -99,7 +99,7 @@ type Actor interface {
9999
GetApplicationRoutes(appGUID string) ([]resources.Route, v7action.Warnings, error)
100100
GetApplicationTasks(appName string, sortOrder v7action.SortOrder) ([]resources.Task, v7action.Warnings, error)
101101
GetApplicationsByNamesAndSpace(appNames []string, spaceGUID string) ([]resources.Application, v7action.Warnings, error)
102-
GetBuildpackLabels(buildpackName string, buildpackStack string) (map[string]types.NullString, v7action.Warnings, error)
102+
GetBuildpackLabels(buildpackName string, buildpackStack string, buildpackLifecycle string) (map[string]types.NullString, v7action.Warnings, error)
103103
GetBuildpacks(labelSelector string, lifecycle string) ([]resources.Buildpack, v7action.Warnings, error)
104104
GetCurrentUser() (configv3.User, error)
105105
GetDefaultDomain(orgGUID string) (resources.Domain, v7action.Warnings, error)
@@ -237,8 +237,8 @@ type Actor interface {
237237
UpdateAppFeature(app resources.Application, enabled bool, featureName string) (v7action.Warnings, error)
238238
UpdateApplication(app resources.Application) (resources.Application, v7action.Warnings, error)
239239
UpdateApplicationLabelsByApplicationName(string, string, map[string]types.NullString) (v7action.Warnings, error)
240-
UpdateBuildpackByNameAndStack(buildpackName string, buildpackStack string, buildpack resources.Buildpack) (resources.Buildpack, v7action.Warnings, error)
241-
UpdateBuildpackLabelsByBuildpackNameAndStack(string, string, map[string]types.NullString) (v7action.Warnings, error)
240+
UpdateBuildpackByNameAndStackAndLifecycle(buildpackName string, buildpackStack string, buildpackLifecycle string, buildpack resources.Buildpack) (resources.Buildpack, v7action.Warnings, error)
241+
UpdateBuildpackLabelsByBuildpackNameAndStackAndLifecycle(string, string, string, map[string]types.NullString) (v7action.Warnings, error)
242242
UpdateDestination(string, string, string) (v7action.Warnings, error)
243243
UpdateDomainLabelsByDomainName(string, map[string]types.NullString) (v7action.Warnings, error)
244244
UpdateManagedServiceInstance(params v7action.UpdateManagedServiceInstanceParams) (chan v7action.PollJobEvent, v7action.Warnings, error)

0 commit comments

Comments
 (0)