Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions charts/redpanda/chart_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ func TestIntegrationChart(t *testing.T) {
}),
})

pods, err := kube.List[corev1.PodList](ctx, env.Ctl(), client.MatchingLabels{
pods, err := kube.List[corev1.PodList](ctx, env.Ctl(), release.Namespace, client.MatchingLabels{
"app.kubernetes.io/instance": release.Name,
"app.kubernetes.io/component": release.Chart + "-statefulset",
})
Expand Down Expand Up @@ -372,7 +372,7 @@ func TestIntegrationChart(t *testing.T) {
}),
})

pods, err := kube.List[corev1.PodList](ctx, env.Ctl(), client.MatchingLabels{
pods, err := kube.List[corev1.PodList](ctx, env.Ctl(), release.Namespace, client.MatchingLabels{
"app.kubernetes.io/instance": release.Name,
"app.kubernetes.io/component": release.Chart + "-statefulset",
})
Expand Down
5 changes: 2 additions & 3 deletions charts/redpanda/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ import (
"github.com/twmb/franz-go/pkg/sasl/scram"
"github.com/twmb/franz-go/pkg/sr"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/controller-runtime/pkg/client"

"github.com/redpanda-data/redpanda-operator/charts/redpanda/v5"
Expand Down Expand Up @@ -482,9 +481,9 @@ func srvLookup(dot *helmette.Dot, dialer DialContextFunc, service string) ([]*ne
// Querying for k8s-app=kube-dns is a generally accepted / safe
// way of finding the kube DNS. We could alternatively find the
// kube-dns service and use its label selector.
pods, err := kube.List[corev1.PodList](ctx, ctl, client.MatchingLabels{
pods, err := kube.List[corev1.PodList](ctx, ctl, kube.NamespaceSystem, client.MatchingLabels{
"k8s-app": "kube-dns",
}, client.InNamespace(metav1.NamespaceSystem))
})
if err != nil {
return nil, err
}
Expand Down
14 changes: 12 additions & 2 deletions pkg/kube/ctl.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"github.com/cockroachdb/errors"
corev1 "k8s.io/api/core/v1"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/kubernetes/scheme"
Expand All @@ -35,8 +36,11 @@ type (
Object = client.Object
ObjectList = client.ObjectList
ObjectKey = client.ObjectKey
)

InNamespace = client.InNamespace
const (
NamespaceAll = metav1.NamespaceAll
NamespaceSystem = metav1.NamespaceSystem
)

type Option interface {
Expand Down Expand Up @@ -149,11 +153,17 @@ func (c *Ctl) GetAndWait(ctx context.Context, key ObjectKey, obj Object, cond Co
}

// List fetches a list of objects into `objs` from Kubernetes.
//
// Cluster scoped resources should pass `""` as namespace.
//
// Usage:
//
// var pods corev1.PodList
// ctl.List(ctx, &pods)
func (c *Ctl) List(ctx context.Context, objs client.ObjectList, opts ...client.ListOption) error {
func (c *Ctl) List(ctx context.Context, namespace string, objs ObjectList, opts ...client.ListOption) error {
// Top level namespace parameter takes precedence over anything specified
// in opts. The other way around is less straightforward.
opts = append(opts, client.InNamespace(namespace))
if err := c.client.List(ctx, objs, opts...); err != nil {
return errors.WithStack(err)
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/kube/ctl_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func TestCtl(t *testing.T) {
))
require.Equal(t, []string{"cm-0", "cm-1", "cm-2"}, seen)

cms, err := kube.List[corev1.ConfigMapList](ctx, ctl, kube.InNamespace("hello-world"))
cms, err := kube.List[corev1.ConfigMapList](ctx, ctl, "hello-world")
require.NoError(t, err)
require.Len(t, cms.Items, 3)
}
4 changes: 2 additions & 2 deletions pkg/kube/generics.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,9 @@ func ApplyAndWait[T any, PT AddrOfObject[T]](ctx context.Context, ctl *Ctl, obj
}

// List is a generic equivalent of [Ctl.List].
func List[T any, L AddrOfObjectList[T]](ctx context.Context, ctl *Ctl, opts ...client.ListOption) (*T, error) {
func List[T any, L AddrOfObjectList[T]](ctx context.Context, ctl *Ctl, namespace string, opts ...client.ListOption) (*T, error) {
var list T
if err := ctl.List(ctx, L(&list), opts...); err != nil {
if err := ctl.List(ctx, namespace, L(&list), opts...); err != nil {
return nil, err
}
return &list, nil
Expand Down