Remove 'all namespaces' meaning of empty list in PodAffinityTerm

This commit is contained in:
Jordan Liggitt 2017-03-17 00:32:07 -04:00
parent a10c8f49ff
commit 8fda1c716b
No known key found for this signature in database
GPG Key ID: 24E7ADF9A3B42012
3 changed files with 7 additions and 12 deletions

View File

@ -1886,9 +1886,7 @@ type PodAffinityTerm struct {
// +optional // +optional
LabelSelector *metav1.LabelSelector LabelSelector *metav1.LabelSelector
// namespaces specifies which namespaces the labelSelector applies to (matches against); // namespaces specifies which namespaces the labelSelector applies to (matches against);
// nil list means "this pod's namespace," empty list means "all namespaces" // null or empty list means "this pod's namespace"
// The json tag here is not "omitempty" since we need to distinguish nil and empty.
// See https://golang.org/pkg/encoding/json/#Marshal for more details.
Namespaces []string Namespaces []string
// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching // This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
// the labelSelector in the specified namespaces, where co-located is defined as running on a node // the labelSelector in the specified namespaces, where co-located is defined as running on a node

View File

@ -2102,10 +2102,8 @@ type PodAffinityTerm struct {
// +optional // +optional
LabelSelector *metav1.LabelSelector `json:"labelSelector,omitempty" protobuf:"bytes,1,opt,name=labelSelector"` LabelSelector *metav1.LabelSelector `json:"labelSelector,omitempty" protobuf:"bytes,1,opt,name=labelSelector"`
// namespaces specifies which namespaces the labelSelector applies to (matches against); // namespaces specifies which namespaces the labelSelector applies to (matches against);
// nil list means "this pod's namespace," empty list means "all namespaces" // null or empty list means "this pod's namespace"
// The json tag here is not "omitempty" since we need to distinguish nil and empty. Namespaces []string `json:"namespaces,omitempty" protobuf:"bytes,2,rep,name=namespaces"`
// See https://golang.org/pkg/encoding/json/#Marshal for more details.
Namespaces []string `json:"namespaces" protobuf:"bytes,2,rep,name=namespaces"`
// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching // This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
// the labelSelector in the specified namespaces, where co-located is defined as running on a node // the labelSelector in the specified namespaces, where co-located is defined as running on a node
// whose value of the label with key topologyKey matches that of any node on which any of the // whose value of the label with key topologyKey matches that of any node on which any of the

View File

@ -26,13 +26,12 @@ import (
// GetNamespacesFromPodAffinityTerm returns a set of names // GetNamespacesFromPodAffinityTerm returns a set of names
// according to the namespaces indicated in podAffinityTerm. // according to the namespaces indicated in podAffinityTerm.
// 1. If the namespaces is nil considers the given pod's namespace // If namespaces is empty it considers the given pod's namespace.
// 2. If the namespaces is empty list then considers all the namespaces
func GetNamespacesFromPodAffinityTerm(pod *v1.Pod, podAffinityTerm *v1.PodAffinityTerm) sets.String { func GetNamespacesFromPodAffinityTerm(pod *v1.Pod, podAffinityTerm *v1.PodAffinityTerm) sets.String {
names := sets.String{} names := sets.String{}
if podAffinityTerm.Namespaces == nil { if len(podAffinityTerm.Namespaces) == 0 {
names.Insert(pod.Namespace) names.Insert(pod.Namespace)
} else if len(podAffinityTerm.Namespaces) != 0 { } else {
names.Insert(podAffinityTerm.Namespaces...) names.Insert(podAffinityTerm.Namespaces...)
} }
return names return names
@ -41,7 +40,7 @@ func GetNamespacesFromPodAffinityTerm(pod *v1.Pod, podAffinityTerm *v1.PodAffini
// PodMatchesTermsNamespaceAndSelector returns true if the given <pod> // PodMatchesTermsNamespaceAndSelector returns true if the given <pod>
// matches the namespace and selector defined by <affinityPod>`s <term>. // matches the namespace and selector defined by <affinityPod>`s <term>.
func PodMatchesTermsNamespaceAndSelector(pod *v1.Pod, namespaces sets.String, selector labels.Selector) bool { func PodMatchesTermsNamespaceAndSelector(pod *v1.Pod, namespaces sets.String, selector labels.Selector) bool {
if len(namespaces) != 0 && !namespaces.Has(pod.Namespace) { if !namespaces.Has(pod.Namespace) {
return false return false
} }