@@ -18,6 +18,8 @@ package v1alpha1
1818
1919import (
2020 "fmt"
21+ "reflect"
22+
2123 v1 "k8s.io/api/core/v1"
2224 "k8s.io/apimachinery/pkg/runtime"
2325 kerrors "k8s.io/apimachinery/pkg/util/errors"
@@ -51,7 +53,7 @@ func (r *CrdbCluster) SetupWebhookWithManager(mgr ctrl.Manager) error {
5153 return ctrl .NewWebhookManagedBy (mgr ).For (r ).Complete ()
5254}
5355
54- //+kubebuilder:webhook:path=/mutate-crdb-cockroachlabs-com-v1alpha1-crdbcluster,mutating=true,failurePolicy=fail,groups=crdb.cockroachlabs.com,resources=crdbclusters,verbs=create;update,versions=v1alpha1,name=mcrdbcluster.kb.io,sideEffects=None,admissionReviewVersions=v1
56+ // +kubebuilder:webhook:path=/mutate-crdb-cockroachlabs-com-v1alpha1-crdbcluster,mutating=true,failurePolicy=fail,groups=crdb.cockroachlabs.com,resources=crdbclusters,verbs=create;update,versions=v1alpha1,name=mcrdbcluster.kb.io,sideEffects=None,admissionReviewVersions=v1
5557
5658// Default implements webhook.Defaulter so a webhook will be registered for the type.
5759func (r * CrdbCluster ) Default () {
@@ -79,7 +81,7 @@ func (r *CrdbCluster) Default() {
7981 }
8082}
8183
82- //+kubebuilder:webhook:path=/validate-crdb-cockroachlabs-com-v1alpha1-crdbcluster,mutating=false,failurePolicy=fail,groups=crdb.cockroachlabs.com,resources=crdbclusters,verbs=create;update,versions=v1alpha1,name=vcrdbcluster.kb.io,sideEffects=None,admissionReviewVersions=v1
84+ // +kubebuilder:webhook:path=/validate-crdb-cockroachlabs-com-v1alpha1-crdbcluster,mutating=false,failurePolicy=fail,groups=crdb.cockroachlabs.com,resources=crdbclusters,verbs=create;update,versions=v1alpha1,name=vcrdbcluster.kb.io,sideEffects=None,admissionReviewVersions=v1
8385
8486// ValidateCreate implements webhook.Validator so a webhook will be registered for the type.
8587func (r * CrdbCluster ) ValidateCreate () error {
@@ -111,6 +113,18 @@ func (r *CrdbCluster) ValidateUpdate(old runtime.Object) error {
111113 webhookLog .Info ("validate update" , "name" , r .Name )
112114 var errors []error
113115
116+ oldCluster , ok := old .(* CrdbCluster )
117+ if ! ok {
118+ webhookLog .Info (fmt .Sprintf ("unexpected old cluster type %T" , old ))
119+ } else {
120+ // Validate if labels changed.
121+ // k8s does not support changing selector/labels on sts:
122+ // https://github.com/kubernetes/kubernetes/issues/90519.
123+ if ! reflect .DeepEqual (oldCluster .Spec .AdditionalLabels , r .Spec .AdditionalLabels ) {
124+ errors = append (errors , fmt .Errorf ("mutating additionalLabels field is not supported" ))
125+ }
126+ }
127+
114128 if r .Spec .Ingress != nil {
115129 if err := r .ValidateIngress (); err != nil {
116130 errors = append (errors , err ... )
0 commit comments