// AddLabelToSelector returns a selector with the given key and value added to the given selector's MatchLabels. func AddLabelToSelector(selector *metav1.LabelSelector, labelKey, labelValue string) *metav1.LabelSelector { if labelKey == "" { // Don't need to add a label. return selector } if selector.MatchLabels == nil { selector.MatchLabels = make(map[string]string) } selector.MatchLabels[labelKey] = labelValue return selector }
// Clones the given selector and returns a new selector with the given key and value added. // Returns the given selector, if labelKey is empty. func CloneSelectorAndAddLabel(selector *metav1.LabelSelector, labelKey, labelValue string) *metav1.LabelSelector { if labelKey == "" { // Don't need to add a label. return selector } // Clone. newSelector := new(metav1.LabelSelector) // TODO(madhusudancs): Check if you can use deepCopy_extensions_LabelSelector here. newSelector.MatchLabels = make(map[string]string) if selector.MatchLabels != nil { for key, val := range selector.MatchLabels { newSelector.MatchLabels[key] = val } } newSelector.MatchLabels[labelKey] = labelValue if selector.MatchExpressions != nil { newMExps := make([]metav1.LabelSelectorRequirement, len(selector.MatchExpressions)) for i, me := range selector.MatchExpressions { newMExps[i].Key = me.Key newMExps[i].Operator = me.Operator if me.Values != nil { newMExps[i].Values = make([]string, len(me.Values)) copy(newMExps[i].Values, me.Values) } else { newMExps[i].Values = nil } } newSelector.MatchExpressions = newMExps } else { newSelector.MatchExpressions = nil } return newSelector }