Skip to content
This repository has been archived by the owner on May 6, 2022. It is now read-only.

Commit

Permalink
Retrieve service instance in RemoveBindingFinalizerByInstance
Browse files Browse the repository at this point in the history
  • Loading branch information
Tara Gu committed May 7, 2019
1 parent 427d24e commit 0cf2e9e
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 55 deletions.
5 changes: 1 addition & 4 deletions cmd/svcat/binding/unbind_cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,8 @@ import (

"github.com/kubernetes-incubator/service-catalog/cmd/svcat/command"
"github.com/kubernetes-incubator/service-catalog/cmd/svcat/output"
"github.com/kubernetes-incubator/service-catalog/pkg/apis/servicecatalog/v1beta1"
"github.com/spf13/cobra"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
)

Expand Down Expand Up @@ -124,8 +122,7 @@ func (c *unbindCmd) Run() error {
}

if c.instanceName != "" {
si := &v1beta1.ServiceInstance{ObjectMeta: metav1.ObjectMeta{Name: c.instanceName, Namespace: c.Namespace}}
_, err = c.App.RemoveBindingFinalizerByInstance(si)
_, err = c.App.RemoveBindingFinalizerByInstance(c.Namespace, c.instanceName)
} else {
retrievedBindings := c.getBindingsToDelete()
_, err = c.App.RemoveFinalizerForBindings(retrievedBindings)
Expand Down
7 changes: 6 additions & 1 deletion pkg/svcat/service-catalog/binding.go
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,12 @@ func (sdk *SDK) RemoveFinalizerForBindings(bindings []types.NamespacedName) ([]t
}

// RemoveBindingFinalizerByInstance removes v1beta1.FinalizerServiceCatalog from all bindings for the specified instance.
func (sdk *SDK) RemoveBindingFinalizerByInstance(instance *v1beta1.ServiceInstance) ([]types.NamespacedName, error) {
func (sdk *SDK) RemoveBindingFinalizerByInstance(ns, name string) ([]types.NamespacedName, error) {
instance, err := sdk.RetrieveInstance(ns, name)
if err != nil {
return nil, err
}

instanceBindings, err := sdk.RetrieveBindingsByInstance(instance)
if err != nil {
return nil, err
Expand Down
44 changes: 16 additions & 28 deletions pkg/svcat/service-catalog/binding_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -392,50 +392,38 @@ var _ = Describe("Binding", func() {
})

Describe("RemoveBindingFinalizerByInstance", func() {
It("Calls the generated v1beta1 List method on the provided instance's namespace, and calls Update method on all bindings of the instance", func() {
si := &v1beta1.ServiceInstance{ObjectMeta: metav1.ObjectMeta{Name: "apple_instance", Namespace: sb.Namespace}}
It("Deletes all bindings of the instance", func() {
si := &v1beta1.ServiceInstance{ObjectMeta: metav1.ObjectMeta{Name: "myinstance", Namespace: sb.Namespace}}
sb.Spec.InstanceRef.Name = si.Name
svcCatClient = fake.NewSimpleClientset(sb, sb2)
sdk = &SDK{
ServiceCatalogClient: svcCatClient,
}
sb2.Spec.InstanceRef.Name = si.Name
client := fake.NewSimpleClientset(sb, sb2, si)
sdk.ServiceCatalogClient = client

bindings, err := sdk.RemoveBindingFinalizerByInstance(si)
bindings, err := sdk.RemoveBindingFinalizerByInstance(si.Namespace, si.Name)
Expect(err).NotTo(HaveOccurred())

Expect(bindings).To(ConsistOf(types.NamespacedName{Namespace: sb.Namespace, Name: sb.Name}))
actions := svcCatClient.Actions()

Expect(actions[0].Matches("list", "servicebindings")).To(BeTrue())
Expect(actions[0].(testing.ListActionImpl).Namespace).To(Equal(si.Namespace))
Expect(actions[1].Matches("get", "servicebindings")).To(BeTrue())
Expect(actions[1].(testing.GetActionImpl).Name).To(Equal(sb.Name))
Expect(actions[1].(testing.GetActionImpl).Namespace).To(Equal(sb.Namespace))
Expect(actions[2].Matches("update", "servicebindings")).To(BeTrue())
Expect(actions[2].(testing.UpdateActionImpl).Object.(*v1beta1.ServiceBinding).ObjectMeta.Name).To(Equal(sb.ObjectMeta.Name))
Expect(actions[2].(testing.UpdateActionImpl).Object.(*v1beta1.ServiceBinding).ObjectMeta.Namespace).To(Equal(sb.ObjectMeta.Namespace))
Expect(bindings).To(ConsistOf(
types.NamespacedName{Namespace: sb.Namespace, Name: sb.Name},
types.NamespacedName{Namespace: sb2.Namespace, Name: sb2.Name},
))
})

It("Bubbles up errors", func() {
si := &v1beta1.ServiceInstance{ObjectMeta: metav1.ObjectMeta{Name: "apple_instance", Namespace: sb.Namespace}}
si := &v1beta1.ServiceInstance{ObjectMeta: metav1.ObjectMeta{Name: "myinstance", Namespace: sb.Namespace}}
sb.Spec.InstanceRef.Name = si.Name
svcCatClient = fake.NewSimpleClientset(sb)
sb2.Spec.InstanceRef.Name = si.Name
client := fake.NewSimpleClientset(sb, sb2, si)
errorMessage := "error updating bindings"
svcCatClient.PrependReactor("update", "servicebindings", func(action testing.Action) (bool, runtime.Object, error) {
client.PrependReactor("update", "servicebindings", func(action testing.Action) (bool, runtime.Object, error) {
return true, nil, fmt.Errorf(errorMessage)
})
sdk = &SDK{
ServiceCatalogClient: svcCatClient,
}
sdk.ServiceCatalogClient = client

bindings, err := sdk.RemoveBindingFinalizerByInstance(si)
bindings, err := sdk.RemoveBindingFinalizerByInstance(si.Namespace, si.Name)

Expect(bindings).To(BeNil())
Expect(err).To(HaveOccurred())
Expect(err.Error()).Should(ContainSubstring(errorMessage))
Expect(svcCatClient.Actions()[0].Matches("list", "servicebindings")).To(BeTrue())
Expect(svcCatClient.Actions()[1].Matches("get", "servicebindings")).To(BeTrue())
Expect(svcCatClient.Actions()[2].Matches("update", "servicebindings")).To(BeTrue())
})
})
})
2 changes: 1 addition & 1 deletion pkg/svcat/service-catalog/instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ func (sdk *SDK) InstanceHasStatus(instance *v1beta1.ServiceInstance, status v1be
// RemoveFinalizerForInstance removes v1beta1.FinalizerServiceCatalog from the specified instance.
func (sdk *SDK) RemoveFinalizerForInstance(ns, name string) error {
instance, err := sdk.RetrieveInstance(ns, name)
if err != nil {
if err != nil {
return err
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/svcat/service-catalog/sdk.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ type SvcatClient interface {
RetrieveBindingsByInstance(*apiv1beta1.ServiceInstance) ([]apiv1beta1.ServiceBinding, error)
Unbind(string, string) ([]types.NamespacedName, error)
WaitForBinding(string, string, time.Duration, *time.Duration) (*apiv1beta1.ServiceBinding, error)
RemoveBindingFinalizerByInstance(*apiv1beta1.ServiceInstance) ([]types.NamespacedName, error)
RemoveBindingFinalizerByInstance(string, string) ([]types.NamespacedName, error)
RemoveFinalizerForBindings([]types.NamespacedName) ([]types.NamespacedName, error)
RemoveFinalizerForBinding(types.NamespacedName) error
RemoveFinalizerForInstance(string, string) error
Expand Down
42 changes: 22 additions & 20 deletions pkg/svcat/service-catalog/service-catalogfakes/fake_svcat_client.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 0cf2e9e

Please sign in to comment.