k9s/internal/k8s/cluster.go

70 lines
1.5 KiB
Go

package k8s
import (
"github.com/rs/zerolog"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Cluster represents a Kubernetes cluster.
type Cluster struct {
Connection
logger *zerolog.Logger
}
// NewCluster instantiates a new cluster.
func NewCluster(c Connection, l *zerolog.Logger) *Cluster {
return &Cluster{c, l}
}
// Version returns the current cluster git version.
func (c *Cluster) Version() (string, error) {
rev, err := c.DialOrDie().Discovery().ServerVersion()
if err != nil {
c.logger.Warn().Msgf("%s", err)
return "", err
}
return rev.GitVersion, nil
}
// ContextName returns the currently active context.
func (c *Cluster) ContextName() string {
ctx, err := c.Config().CurrentContextName()
if err != nil {
c.logger.Warn().Msgf("%s", err)
return "N/A"
}
return ctx
}
// ClusterName return the currently active cluster name.
func (c *Cluster) ClusterName() string {
ctx, err := c.Config().CurrentClusterName()
if err != nil {
c.logger.Warn().Msgf("%s", err)
return "N/A"
}
return ctx
}
// UserName returns the currently active user.
func (c *Cluster) UserName() string {
usr, err := c.Config().CurrentUserName()
if err != nil {
c.logger.Warn().Msgf("%s", err)
return "N/A"
}
return usr
}
// FetchNodes get all available nodes in the cluster.
func (c *Cluster) FetchNodes() ([]v1.Node, error) {
list, err := c.DialOrDie().CoreV1().Nodes().List(metav1.ListOptions{})
if err != nil {
return nil, err
}
return list.Items, nil
}