183 lines
5.0 KiB
Go
183 lines
5.0 KiB
Go
// SPDX-License-Identifier: Apache-2.0
|
|
// Copyright Authors of K9s
|
|
|
|
package dao
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"time"
|
|
|
|
"github.com/derailed/k9s/internal/client"
|
|
"github.com/derailed/k9s/internal/watch"
|
|
v1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/labels"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"k8s.io/client-go/informers"
|
|
restclient "k8s.io/client-go/rest"
|
|
)
|
|
|
|
// Factory represents a resource factory.
|
|
type Factory interface {
|
|
// Client retrieves an api client.
|
|
Client() client.Connection
|
|
|
|
// Get fetch a given resource.
|
|
Get(gvr *client.GVR, path string, wait bool, sel labels.Selector) (runtime.Object, error)
|
|
|
|
// List fetch a collection of resources.
|
|
List(gvr *client.GVR, ns string, wait bool, sel labels.Selector) ([]runtime.Object, error)
|
|
|
|
// ForResource fetch an informer for a given resource.
|
|
ForResource(ns string, gvr *client.GVR) (informers.GenericInformer, error)
|
|
|
|
// CanForResource fetch an informer for a given resource if authorized
|
|
CanForResource(ns string, gvr *client.GVR, verbs []string) (informers.GenericInformer, error)
|
|
|
|
// WaitForCacheSync synchronize the cache.
|
|
WaitForCacheSync()
|
|
|
|
// DeleteForwarder deletes a pod forwarder.
|
|
DeleteForwarder(path string)
|
|
|
|
// Forwarders returns all portforwards.
|
|
Forwarders() watch.Forwarders
|
|
}
|
|
|
|
// ImageLister tracks resources with container images.
|
|
type ImageLister interface {
|
|
// ListImages lists container images.
|
|
ListImages(ctx context.Context, path string) ([]string, error)
|
|
}
|
|
|
|
// Getter represents a resource getter.
|
|
type Getter interface {
|
|
// Get return a given resource.
|
|
Get(ctx context.Context, path string) (runtime.Object, error)
|
|
}
|
|
|
|
// Lister represents a resource lister.
|
|
type Lister interface {
|
|
// List returns a resource collection.
|
|
List(ctx context.Context, ns string) ([]runtime.Object, error)
|
|
}
|
|
|
|
// Accessor represents an accessible k8s resource.
|
|
type Accessor interface {
|
|
Lister
|
|
Getter
|
|
|
|
// Init the resource with a factory object.
|
|
Init(Factory, *client.GVR)
|
|
|
|
// GVR returns a gvr a string.
|
|
GVR() string
|
|
|
|
// SetIncludeObject toggles object inclusion.
|
|
SetIncludeObject(bool)
|
|
}
|
|
|
|
// DrainOptions tracks drain attributes.
|
|
type DrainOptions struct {
|
|
GracePeriodSeconds int
|
|
Timeout time.Duration
|
|
IgnoreAllDaemonSets bool
|
|
DeleteEmptyDirData bool
|
|
Force bool
|
|
DisableEviction bool
|
|
}
|
|
|
|
// NodeMaintainer performs node maintenance operations.
|
|
type NodeMaintainer interface {
|
|
// ToggleCordon toggles cordon/uncordon a node.
|
|
ToggleCordon(path string, cordon bool) error
|
|
|
|
// Drain drains the given node.
|
|
Drain(path string, opts DrainOptions, w io.Writer) error
|
|
}
|
|
|
|
// Loggable represents resources with logs.
|
|
type Loggable interface {
|
|
// TailLogs streams resource logs.
|
|
TailLogs(ctx context.Context, opts *LogOptions) ([]LogChan, error)
|
|
}
|
|
|
|
// Describer describes a resource.
|
|
type Describer interface {
|
|
// Describe describes a resource.
|
|
Describe(path string) (string, error)
|
|
|
|
// ToYAML dumps a resource to YAML.
|
|
ToYAML(path string, showManaged bool) (string, error)
|
|
}
|
|
|
|
// Scalable represents resources that can scale.
|
|
type Scalable interface {
|
|
// Scale scales a resource up or down.
|
|
Scale(ctx context.Context, path string, replicas int32) error
|
|
}
|
|
|
|
// ReplicasGetter represents a resource with replicas.
|
|
type ReplicasGetter interface {
|
|
// Replicas returns the number of replicas for the resource located at the given path.
|
|
Replicas(ctx context.Context, path string) (int32, error)
|
|
}
|
|
|
|
// Controller represents a pod controller.
|
|
type Controller interface {
|
|
// Pod returns a pod instance matching the selector.
|
|
Pod(path string) (string, error)
|
|
}
|
|
|
|
// Nuker represents a resource deleter.
|
|
type Nuker interface {
|
|
// Delete removes a resource from the api server.
|
|
Delete(context.Context, string, *metav1.DeletionPropagation, Grace) error
|
|
}
|
|
|
|
// Switchable represents a switchable resource.
|
|
type Switchable interface {
|
|
// Switch changes the active context.
|
|
Switch(ctx string) error
|
|
}
|
|
|
|
// Restartable represents a restartable resource.
|
|
type Restartable interface {
|
|
// Restart performs a rollout restart.
|
|
Restart(context.Context, string, *metav1.PatchOptions) error
|
|
}
|
|
|
|
// Runnable represents a runnable resource.
|
|
type Runnable interface {
|
|
// Run triggers a run.
|
|
Run(path string) error
|
|
}
|
|
|
|
// Logger represents a resource that exposes logs.
|
|
type Logger interface {
|
|
// Logs tails a resource logs.
|
|
Logs(path string, opts *v1.PodLogOptions) (*restclient.Request, error)
|
|
}
|
|
|
|
// ContainsPodSpec represents a resource with a pod template.
|
|
type ContainsPodSpec interface {
|
|
// GetPodSpec returns a podspec for the resource.
|
|
GetPodSpec(path string) (*v1.PodSpec, error)
|
|
|
|
// SetImages sets container image.
|
|
SetImages(ctx context.Context, path string, imageSpecs ImageSpecs) error
|
|
}
|
|
|
|
// Sanitizer represents a resource sanitizer.
|
|
type Sanitizer interface {
|
|
// Sanitize nukes all resources in unhappy state.
|
|
Sanitize(context.Context, string) (int, error)
|
|
}
|
|
|
|
// Valuer represents a resource with values.
|
|
type Valuer interface {
|
|
// GetValues returns values for a resource.
|
|
GetValues(path string, allValues bool) ([]byte, error)
|
|
}
|