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
35 changes: 15 additions & 20 deletions pkg/toolsets/netedge/coredns.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@ import (
"fmt"

"github.com/containers/kubernetes-mcp-server/pkg/api"
"github.com/containers/kubernetes-mcp-server/pkg/kubernetes"
"github.com/google/jsonschema-go/jsonschema"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/rest"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/utils/ptr"
"sigs.k8s.io/controller-runtime/pkg/client"
)

func initCoreDNS() []api.ServerTool {
Expand All @@ -34,30 +32,27 @@ func initCoreDNS() []api.ServerTool {
}
}

// newClientFunc is the function used to create a controller-runtime client.
// It is a variable to allow overriding in tests.
var newClientFunc = func(config *rest.Config, options client.Options) (client.Client, error) {
return client.New(config, options)
}

func getCoreDNSConfig(params api.ToolHandlerParams) (*api.ToolCallResult, error) {
cfg := params.RESTConfig()
if cfg == nil {
return api.NewToolCallResult("", fmt.Errorf("failed to get REST config")), nil
gvr := schema.GroupVersionResource{
Group: "",
Version: "v1",
Resource: "configmaps",
}

cl, err := newClientFunc(cfg, client.Options{Scheme: kubernetes.Scheme})
cm, err := params.DynamicClient().Resource(gvr).Namespace("openshift-dns").Get(params.Context, "dns-default", metav1.GetOptions{})
if err != nil {
return api.NewToolCallResult("", fmt.Errorf("failed to create controller-runtime client: %w", err)), nil
return api.NewToolCallResult("", fmt.Errorf("failed to get dns-default ConfigMap: %w", err)), nil
}

cm := &corev1.ConfigMap{}
err = cl.Get(params.Context, types.NamespacedName{Name: "dns-default", Namespace: "openshift-dns"}, cm)
data, found, err := unstructured.NestedStringMap(cm.Object, "data")
if err != nil {
return api.NewToolCallResult("", fmt.Errorf("failed to get dns-default ConfigMap: %w", err)), nil
return api.NewToolCallResult("", fmt.Errorf("failed to parse ConfigMap data: %w", err)), nil
}
if !found {
return api.NewToolCallResult("", fmt.Errorf("ConfigMap has no data")), nil
}

corefile, ok := cm.Data["Corefile"]
corefile, ok := data["Corefile"]
if !ok {
return api.NewToolCallResult("", fmt.Errorf("corefile not found in dns-default ConfigMap")), nil
}
Expand Down
30 changes: 21 additions & 9 deletions pkg/toolsets/netedge/coredns_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@ import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/rest"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/client/fake"
"k8s.io/client-go/dynamic/fake"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
)

func (s *NetEdgeTestSuite) TestGetCoreDNSConfig() {
Expand Down Expand Up @@ -54,6 +53,18 @@ func (s *NetEdgeTestSuite) TestGetCoreDNSConfig() {
expectError: true,
errorContains: "corefile not found",
},
{
name: "failure - data not found",
configMap: &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: "dns-default",
Namespace: "openshift-dns",
},
},
expectedOutput: "",
expectError: true,
errorContains: "ConfigMap has no data",
},
}

for _, tt := range tests {
Expand All @@ -64,13 +75,14 @@ func (s *NetEdgeTestSuite) TestGetCoreDNSConfig() {
objs = append(objs, tt.configMap)
}

// Override newClientFunc to return fake client
originalNewClientFunc := newClientFunc
defer func() { newClientFunc = originalNewClientFunc }()
// Setup fake dynamic client
scheme := runtime.NewScheme()
err := clientgoscheme.AddToScheme(scheme)
s.Require().NoError(err)

newClientFunc = func(config *rest.Config, options client.Options) (client.Client, error) {
return fake.NewClientBuilder().WithRuntimeObjects(objs...).Build(), nil
}
// Create a fake dynamic client with the objects
dynClient := fake.NewSimpleDynamicClient(scheme, objs...)
s.SetDynamicClient(dynClient)

// Call handler using suite params
result, err := getCoreDNSConfig(s.params)
Expand Down
6 changes: 0 additions & 6 deletions vendor/k8s.io/client-go/applyconfigurations/OWNERS

This file was deleted.

150 changes: 0 additions & 150 deletions vendor/k8s.io/client-go/applyconfigurations/doc.go

This file was deleted.

Loading