mirror of
https://github.com/openshift/openshift-mcp-server.git
synced 2025-10-17 14:27:48 +03:00
feat: use clientcmd instead of kubectl to minimize binary size
This commit is contained in:
@@ -1,33 +1,27 @@
|
||||
package kubernetes
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"k8s.io/cli-runtime/pkg/genericiooptions"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
"k8s.io/component-base/cli/flag"
|
||||
"k8s.io/kubectl/pkg/cmd/config"
|
||||
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
|
||||
"k8s.io/client-go/tools/clientcmd/api/latest"
|
||||
)
|
||||
|
||||
func ConfigurationView() (string, error) {
|
||||
outBuffer := &bytes.Buffer{}
|
||||
// TODO: consider in cluster run mode (current approach only shows kubeconfig)
|
||||
pathOptions := clientcmd.NewDefaultPathOptions()
|
||||
ioStreams := genericiooptions.IOStreams{In: nil, Out: outBuffer, ErrOut: outBuffer}
|
||||
o := &config.ViewOptions{
|
||||
IOStreams: ioStreams,
|
||||
ConfigAccess: pathOptions,
|
||||
PrintFlags: defaultPrintFlags(),
|
||||
Flatten: true,
|
||||
Minify: true,
|
||||
Merge: flag.True,
|
||||
}
|
||||
printer, err := o.PrintFlags.ToPrinter()
|
||||
cfg, err := pathOptions.GetStartingConfig()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
o.PrintObject = printer.PrintObj
|
||||
err = o.Run()
|
||||
if err = clientcmdapi.MinifyConfig(cfg); err != nil {
|
||||
return "", err
|
||||
}
|
||||
if err = clientcmdapi.FlattenConfig(cfg); err != nil {
|
||||
return "", err
|
||||
}
|
||||
convertedObj, err := latest.Scheme.ConvertToVersion(cfg, latest.ExternalVersion)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return outBuffer.String(), nil
|
||||
return marshal(convertedObj)
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package kubernetes
|
||||
|
||||
import (
|
||||
"k8s.io/cli-runtime/pkg/genericclioptions"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/restmapper"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
"k8s.io/kubectl/pkg/scheme"
|
||||
"sigs.k8s.io/yaml"
|
||||
)
|
||||
|
||||
type Kubernetes struct {
|
||||
@@ -21,10 +21,20 @@ func NewKubernetes() (*Kubernetes, error) {
|
||||
return &Kubernetes{cfg: cfg}, nil
|
||||
}
|
||||
|
||||
func defaultPrintFlags() *genericclioptions.PrintFlags {
|
||||
return genericclioptions.NewPrintFlags("").
|
||||
WithTypeSetter(scheme.Scheme).
|
||||
WithDefaultOutput("yaml")
|
||||
func marshal(v any) (string, error) {
|
||||
switch t := v.(type) {
|
||||
case []unstructured.Unstructured:
|
||||
for i := range t {
|
||||
t[i].SetManagedFields(nil)
|
||||
}
|
||||
case unstructured.Unstructured:
|
||||
t.SetManagedFields(nil)
|
||||
}
|
||||
ret, err := yaml.Marshal(v)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(ret), nil
|
||||
}
|
||||
|
||||
func resolveClientConfig() (*rest.Config, error) {
|
||||
|
||||
@@ -3,13 +3,11 @@ package kubernetes
|
||||
import (
|
||||
"context"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/client-go/discovery"
|
||||
memory "k8s.io/client-go/discovery/cached"
|
||||
"k8s.io/client-go/dynamic"
|
||||
"k8s.io/client-go/restmapper"
|
||||
"sigs.k8s.io/yaml"
|
||||
)
|
||||
|
||||
// TODO: WIP
|
||||
@@ -29,22 +27,6 @@ func (k *Kubernetes) ResourcesList(ctx context.Context, gvk *schema.GroupVersion
|
||||
return marshal(rl.Items)
|
||||
}
|
||||
|
||||
func marshal(v any) (string, error) {
|
||||
switch t := v.(type) {
|
||||
case []unstructured.Unstructured:
|
||||
for i := range t {
|
||||
t[i].SetManagedFields(nil)
|
||||
}
|
||||
case unstructured.Unstructured:
|
||||
t.SetManagedFields(nil)
|
||||
}
|
||||
ret, err := yaml.Marshal(v)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(ret), nil
|
||||
}
|
||||
|
||||
func (k *Kubernetes) resourceFor(gvk *schema.GroupVersionKind) (*schema.GroupVersionResource, error) {
|
||||
if k.deferredDiscoveryRESTMapper == nil {
|
||||
d, err := discovery.NewDiscoveryClientForConfig(k.cfg)
|
||||
|
||||
Reference in New Issue
Block a user