Merge pull request #110477 from halfcrazy/feat/hostnetwork-fieldsel

support fieldSelector spec.hostNetwork
This commit is contained in:
Kubernetes Prow Robot 2023-04-21 18:13:11 -07:00 committed by GitHub
commit 25a25e27a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 55 additions and 1 deletions

View File

@ -42,6 +42,7 @@ func addConversionFuncs(scheme *runtime.Scheme) error {
"spec.restartPolicy",
"spec.schedulerName",
"spec.serviceAccountName",
"spec.hostNetwork",
"status.phase",
"status.podIP",
"status.podIPs",

View File

@ -319,11 +319,17 @@ func ToSelectableFields(pod *api.Pod) fields.Set {
// amount of allocations needed to create the fields.Set. If you add any
// field here or the number of object-meta related fields changes, this should
// be adjusted.
podSpecificFieldsSet := make(fields.Set, 9)
podSpecificFieldsSet := make(fields.Set, 10)
podSpecificFieldsSet["spec.nodeName"] = pod.Spec.NodeName
podSpecificFieldsSet["spec.restartPolicy"] = string(pod.Spec.RestartPolicy)
podSpecificFieldsSet["spec.schedulerName"] = string(pod.Spec.SchedulerName)
podSpecificFieldsSet["spec.serviceAccountName"] = string(pod.Spec.ServiceAccountName)
if pod.Spec.SecurityContext != nil {
podSpecificFieldsSet["spec.hostNetwork"] = strconv.FormatBool(pod.Spec.SecurityContext.HostNetwork)
} else {
// default to false
podSpecificFieldsSet["spec.hostNetwork"] = strconv.FormatBool(false)
}
podSpecificFieldsSet["status.phase"] = string(pod.Status.Phase)
// TODO: add podIPs as a downward API value(s) with proper format
podIP := ""

View File

@ -182,6 +182,53 @@ func TestMatchPod(t *testing.T) {
fieldSelector: fields.ParseSelectorOrDie("status.podIP=2001:db7::"),
expectMatch: false,
},
{
in: &api.Pod{
Spec: api.PodSpec{
SecurityContext: &api.PodSecurityContext{
HostNetwork: true,
},
},
},
fieldSelector: fields.ParseSelectorOrDie("spec.hostNetwork=true"),
expectMatch: true,
},
{
in: &api.Pod{
Spec: api.PodSpec{
SecurityContext: &api.PodSecurityContext{
HostNetwork: true,
},
},
},
fieldSelector: fields.ParseSelectorOrDie("spec.hostNetwork=false"),
expectMatch: false,
},
{
in: &api.Pod{
Spec: api.PodSpec{
SecurityContext: &api.PodSecurityContext{
HostNetwork: false,
},
},
},
fieldSelector: fields.ParseSelectorOrDie("spec.hostNetwork=false"),
expectMatch: true,
},
{
in: &api.Pod{
Spec: api.PodSpec{},
},
fieldSelector: fields.ParseSelectorOrDie("spec.hostNetwork=false"),
expectMatch: true,
},
{
in: &api.Pod{
Spec: api.PodSpec{},
},
fieldSelector: fields.ParseSelectorOrDie("spec.hostNetwork=true"),
expectMatch: false,
},
}
for _, testCase := range testCases {
m := MatchPod(labels.Everything(), testCase.fieldSelector)