Skip to content

Commit 5911d33

Browse files
authored
fix binding validating webhook (#516)
1 parent a253057 commit 5911d33

File tree

3 files changed

+33
-5
lines changed

3 files changed

+33
-5
lines changed

api/v1/servicebinding_validating_webhook.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,15 @@ func (sb *ServiceBinding) ValidateUpdate(_ context.Context, oldObj, newObj runti
7979
}
8080
}
8181

82-
specChanged := newBinding.specChanged(oldBinding, newBinding)
83-
if specChanged && (newBinding.Status.BindingID != "" || isStale) {
82+
if newBinding.Spec.UserInfo == nil {
83+
newBinding.Spec.UserInfo = oldBinding.Spec.UserInfo
84+
} else if !reflect.DeepEqual(newBinding.Spec.UserInfo, oldBinding.Spec.UserInfo) {
85+
return nil, fmt.Errorf("modifying spec.userInfo is not allowed")
86+
}
87+
88+
isSpecChanged := newBinding.specChanged(oldBinding)
89+
if isSpecChanged && (newBinding.Status.BindingID != "" || isStale) {
90+
8491
return nil, fmt.Errorf("updating service bindings is not supported")
8592
}
8693
return nil, nil
@@ -93,9 +100,9 @@ func (sb *ServiceBinding) validateRotationLabels(old *ServiceBinding) bool {
93100
return sb.ObjectMeta.Labels[common.StaleBindingRotationOfLabel] == old.ObjectMeta.Labels[common.StaleBindingRotationOfLabel]
94101
}
95102

96-
func (sb *ServiceBinding) specChanged(oldBinding *ServiceBinding, newBinding *ServiceBinding) bool {
103+
func (sb *ServiceBinding) specChanged(oldBinding *ServiceBinding) bool {
97104
oldSpec := oldBinding.Spec.DeepCopy()
98-
newSpec := newBinding.Spec.DeepCopy()
105+
newSpec := sb.Spec.DeepCopy()
99106

100107
//allow changing cred rotation config
101108
oldSpec.CredRotationPolicy = nil

api/v1/servicebinding_validating_webhook_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"github.com/lithammer/dedent"
66
. "github.com/onsi/ginkgo"
77
. "github.com/onsi/gomega"
8+
v1 "k8s.io/api/authentication/v1"
89
"k8s.io/apimachinery/pkg/runtime"
910
)
1011

@@ -86,6 +87,26 @@ var _ = Describe("Service Binding Webhook Test", func() {
8687
Expect(err).ToNot(HaveOccurred())
8788
})
8889
})
90+
91+
When("UserInfo changed", func() {
92+
It("should fail", func() {
93+
newBinding.Spec.UserInfo = &v1.UserInfo{
94+
Username: "username",
95+
}
96+
_, err := newBinding.ValidateUpdate(nil, binding, newBinding)
97+
Expect(err).To(HaveOccurred())
98+
Expect(err.Error()).To(ContainSubstring("modifying spec.userInfo is not allowed"))
99+
})
100+
It("should succeed if new binding user info is empty", func() {
101+
newBinding.Spec.UserInfo = nil
102+
_, err := newBinding.ValidateUpdate(nil, binding, newBinding)
103+
Expect(err).ToNot(HaveOccurred())
104+
})
105+
It("should succeed if user info not changed", func() {
106+
_, err := newBinding.ValidateUpdate(nil, binding, newBinding)
107+
Expect(err).ToNot(HaveOccurred())
108+
})
109+
})
89110
})
90111

91112
When("Metadata changed", func() {

controllers/servicebinding_controller_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -915,7 +915,7 @@ stringData:
915915
}
916916
err := k8sClient.Update(ctx, createdBinding)
917917
Expect(err).To(HaveOccurred())
918-
Expect(err.Error()).To(ContainSubstring("updating service bindings is not supported"))
918+
Expect(err.Error()).To(ContainSubstring("modifying spec.userInfo is not allowed"))
919919
})
920920
})
921921
})

0 commit comments

Comments
 (0)