func()

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
}