in pkg/k8s/pod_wrapper.go [50:89]
func (k *podsRepository) ListPodsWithMatchingLabels(opts client.ListOptions) (*v1.PodList, error) {
var items []interface{}
var err error
if opts.Namespace != "" {
items, err = k.customController.GetDataStore().ByIndex(NamespaceIndexKey, opts.Namespace)
} else {
items = k.customController.GetDataStore().List()
}
if err != nil {
return nil, err
}
podList := &v1.PodList{}
var labelSel labels.Selector
if opts.LabelSelector != nil {
labelSel = opts.LabelSelector
}
for _, item := range items {
pod, ok := item.(*v1.Pod)
if !ok {
return nil, fmt.Errorf("cache contained %T, which is not a Pod", item)
}
meta, err := apimeta.Accessor(pod)
if err != nil {
return nil, err
}
if labelSel != nil {
lbls := labels.Set(meta.GetLabels())
if !labelSel.Matches(lbls) {
continue
}
}
podList.Items = append(podList.Items, *pod)
}
return podList, nil
}