support fieldSelector spec.hostNetwork

Signed-off-by: Yan Zhu <hackzhuyan@gmail.com>
This commit is contained in:
Yan Zhu 2022-06-09 12:42:10 +08:00
parent e27b2781f5
commit 7fb88eec73
3 changed files with 55 additions and 1 deletions

View File

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

View File

@ -303,11 +303,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)