Files
opencode-krates-connector/server/internal/k8s/client.go

51 lines
1.1 KiB
Go

package k8s
import (
"context"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
)
type Client struct {
clientset *kubernetes.Clientset
}
func NewClient() (*Client, error) {
config, err := rest.InClusterConfig()
if err != nil {
// Fall back to out-of-cluster config for local development
// config, err = clientcmd.BuildConfigFromFlags("", filepath.Join(home, ".kube", "config"))
// if err != nil {
// return nil, err
// }
}
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
return nil, err
}
return &Client{
clientset: clientset,
}, nil
}
func (c *Client) Clientset() *kubernetes.Clientset {
return c.clientset
}
func (c *Client) GetPods(ctx context.Context, namespace string) ([]v1.Pod, error) {
pods, err := c.clientset.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{})
if err != nil {
return nil, err
}
return pods.Items, nil
}
func (c *Client) WatchPods(ctx context.Context, namespace string, resourceVersion string) (watch.Interface, error) {
return c.clientset.CoreV1().Pods(namespace).Watch(ctx, metav1.ListOptions{
ResourceVersion: resourceVersion,
})
}