portainer/pkg/libkubectl/describe.go

41 lines
1.2 KiB
Go

package libkubectl
import (
"fmt"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/cli-runtime/pkg/resource"
describecmd "k8s.io/kubectl/pkg/cmd/describe"
cmdutil "k8s.io/kubectl/pkg/cmd/util"
"k8s.io/kubectl/pkg/describe"
)
// Describe returns the description of a resource
// name is the name of the resource, kind is the kind of the resource, and namespace is the namespace of the resource
// this is identical to running `kubectl describe <kind> <name> --namespace <namespace>`
func (c *Client) Describe(namespace, name, kind string) (string, error) {
describeOptions := &describecmd.DescribeOptions{
BuilderArgs: []string{kind, name},
Describer: func(mapping *meta.RESTMapping) (describe.ResourceDescriber, error) {
return describe.DescriberFn(c.factory, mapping)
},
FilenameOptions: &resource.FilenameOptions{},
DescriberSettings: &describe.DescriberSettings{
ShowEvents: true,
ChunkSize: cmdutil.DefaultChunkSize,
},
IOStreams: c.streams,
NewBuilder: c.factory.NewBuilder,
}
if namespace != "" {
describeOptions.Namespace = namespace
}
if err := describeOptions.Run(); err != nil {
return "", fmt.Errorf("error describing resources: %w", err)
}
return c.out.String(), nil
}