func()

in internal/kubectl.go [185:227]


func (c Kubectl) getFiltered(resource, namespace string, w io.Writer, filter func(object metav1.Object) bool, skipFilter bool) error {
	r, err := c.getResources(resource, namespace)
	if err != nil {
		return err
	}

	printer, err := printers.NewTypeSetter(scheme.Scheme).WrapToPrinter(&printers.JSONPrinter{}, nil)
	if err != nil {
		return err
	}

	obj, err := r.Object()
	if err != nil {
		return err
	}

	// If there are no filters, simply return the unfiltered resources.
	if skipFilter {
		return printer.PrintObj(obj, w)
	}

	// Otherwise, convert the returned resource to a List, and filter for any matching objects
	// using the provided filter func.
	var list *corev1.List
	list, ok := obj.(*corev1.List)
	if !ok {
		return fmt.Errorf("while converting returned object (%T) to list", obj)
	}

	filtered := corev1.List{}
	for _, item := range list.Items {
		obj, err := meta.Accessor(item.Object)
		if err != nil {
			return fmt.Errorf("while accessing metadata for %s: %w", item.Object.GetObjectKind().GroupVersionKind().String(), err)
		}

		if filter(obj) {
			filtered.Items = append(filtered.Items, item)
		}
	}

	return printer.PrintObj(&filtered, w)
}