Skip to content

List Resources

Query Kubernetes resources with label selectors.

Server-Side Filtering

Always filter resources server-side using label selectors. This reduces network traffic and memory usage compared to client-side filtering.


List All Deployments

package k8s

import (
    "context"

    appsv1 "k8s.io/api/apps/v1"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// ListDeployments returns all deployments in the configured namespace
func (c *Client) ListDeployments(ctx context.Context) ([]appsv1.Deployment, error) {
    list, err := c.Clientset.AppsV1().Deployments(c.Namespace).List(ctx, metav1.ListOptions{})
    if err != nil {
        return nil, err
    }
    return list.Items, nil
}

Filter with Label Selectors

Server-Side Filtering

Always filter resources server-side using label selectors. This reduces network traffic and memory usage compared to client-side filtering.

// ListDeploymentsWithLabel returns deployments matching a label selector
func (c *Client) ListDeploymentsWithLabel(ctx context.Context, labelSelector string) ([]appsv1.Deployment, error) {
    list, err := c.Clientset.AppsV1().Deployments(c.Namespace).List(ctx, metav1.ListOptions{
        LabelSelector: labelSelector,
    })
    if err != nil {
        return nil, err
    }
    return list.Items, nil
}

Label Selector Examples

Selector Description
app=nginx Exact match
app!=nginx Not equal
app in (nginx,haproxy) Set membership
app notin (nginx,haproxy) Set exclusion
app Key exists
!app Key does not exist
app=nginx,env=prod Multiple conditions (AND)

Command Usage

func runSelect(cmd *cobra.Command, args []string) error {
    ctx := cmd.Context()

    label, _ := cmd.Flags().GetString("label")

    var deployments []appsv1.Deployment
    var err error

    if label != "" {
        deployments, err = client.ListDeploymentsWithLabel(ctx, label)
    } else {
        deployments, err = client.ListDeployments(ctx)
    }

    if err != nil {
        return fmt.Errorf("failed to list deployments: %w", err)
    }

    for _, d := range deployments {
        fmt.Printf("%s (%d/%d ready)\n",
            d.Name,
            d.Status.ReadyReplicas,
            d.Status.Replicas)
    }

    return nil
}

Filter resources server-side with label selectors for efficiency.

Comments