knative.dev/pkg@v0.0.0-20260602142205-ac97e43f6622/webhook/helper.go (about) 1 /* 2 Copyright 2020 The Knative Authors 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package webhook 18 19 import ( 20 "strings" 21 22 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 23 "knative.dev/pkg/webhook/certificates/resources" 24 ) 25 26 // EnsureLabelSelectorExpressions merges the current label selector's MatchExpressions 27 // with the ones wanted. 28 // It keeps all non-knative keys intact, removes all knative-keys no longer wanted and 29 // adds all knative-keys not yet there. 30 func EnsureLabelSelectorExpressions( 31 current *metav1.LabelSelector, 32 want *metav1.LabelSelector, 33 ) *metav1.LabelSelector { 34 if current == nil { 35 return want 36 } 37 38 if len(current.MatchExpressions) == 0 { 39 return &metav1.LabelSelector{ 40 MatchLabels: current.MatchLabels, 41 MatchExpressions: want.MatchExpressions, 42 } 43 } 44 45 var wantExpressions []metav1.LabelSelectorRequirement 46 if want != nil { 47 wantExpressions = want.MatchExpressions 48 } 49 50 return &metav1.LabelSelector{ 51 MatchLabels: current.MatchLabels, 52 MatchExpressions: ensureLabelSelectorRequirements( 53 current.MatchExpressions, wantExpressions), 54 } 55 } 56 57 func ensureLabelSelectorRequirements( 58 current []metav1.LabelSelectorRequirement, 59 want []metav1.LabelSelectorRequirement, 60 ) []metav1.LabelSelectorRequirement { 61 nonKnative := make([]metav1.LabelSelectorRequirement, 0, len(current)) 62 for _, r := range current { 63 if !strings.Contains(r.Key, "knative.dev") { 64 nonKnative = append(nonKnative, r) 65 } 66 } 67 68 return append(want, nonKnative...) 69 } 70 71 func getSecretDataKeyNamesOrDefault(sKey string, sCert string) (serverKey string, serverCert string) { 72 serverKey = resources.ServerKey 73 serverCert = resources.ServerCert 74 75 if sKey != "" { 76 serverKey = sKey 77 } 78 if sCert != "" { 79 serverCert = sCert 80 } 81 return serverKey, serverCert 82 }