k8s

package
v0.10.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 13, 2019 License: Apache-2.0 Imports: 69 Imported by: 0

Documentation

Index

Constants

View Source
const ContainerIDPrefix = "docker://"
View Source
const DefaultNamespace = Namespace("default")
View Source
const MagicTestContainerID = "tilt-testcontainer"

A magic constant. If the docker client returns this constant, we always match even if the container doesn't have the correct image name.

View Source
const ManifestNameLabel = "tilt-manifest"
View Source
const TiltDeployIDLabel = "tilt-deployid"
View Source
const TiltRunIDLabel = "tilt-runid"

Variables

View Source
var ForbiddenFieldsRe = regexp.MustCompile(`updates to .* are forbidden`)
View Source
var NoFilter = func(v reflect.Value) bool {
	return true
}
View Source
var TiltRunID = uuid.New().String()

Functions

func ContainerIDFromContainerStatus

func ContainerIDFromContainerStatus(status v1.ContainerStatus) (container.ID, error)

func ContainerMatching

func ContainerMatching(pod *v1.Pod, ref container.RefSelector) (v1.ContainerStatus, error)

func ContainerNameFromContainerStatus

func ContainerNameFromContainerStatus(status v1.ContainerStatus) container.Name

func ContainerSpecOf

func ContainerSpecOf(pod *v1.Pod, status v1.ContainerStatus) v1.Container

func ExtractPodTemplateSpec added in v0.1.0

func ExtractPodTemplateSpec(obj interface{}) ([]*v1.PodTemplateSpec, error)

func ExtractPods

func ExtractPods(obj interface{}) ([]*v1.PodSpec, error)

func FakePodSpec

func FakePodSpec(image reference.NamedTagged) v1.PodSpec

func FakePodStatus

func FakePodStatus(image reference.NamedTagged, phase string) v1.PodStatus

func FindImageNamedTaggedMatching added in v0.2.0

func FindImageNamedTaggedMatching(pod v1.PodSpec, selector container.RefSelector) (reference.NamedTagged, error)

func FindImageRefMatching added in v0.2.0

func FindImageRefMatching(pod v1.PodSpec, selector container.RefSelector) (reference.Named, error)

func FixContainerStatusImages added in v0.8.2

func FixContainerStatusImages(pod *v1.Pod)

Kubernetes has a bug where the image ref in the container status can be wrong (though this does not mean the container is running unexpected code)

Repro steps: 1) Create an image and give it two different tags (A and B) 2) Deploy Pods with both A and B in the pod spec 3) The PodStatus will choose A or B for both pods.

More details here: https://github.com/kubernetes/kubernetes/issues/51017

For Tilt, it's pretty important that the image tag is correct (for matching purposes). To work around this bug, we change the image reference in ContainerStatus to match the ContainerSpec.

func IsContainerExited

func IsContainerExited(pod v1.PodStatus, container v1.ContainerStatus) bool

If true, this means the container is gone and will never recover.

func IsUnschedulable

func IsUnschedulable(pod v1.PodStatus) (bool, string)

Returns the error message if the pod is unschedulable

func LabelPairsToSelector added in v0.8.7

func LabelPairsToSelector(lps []model.LabelPair) labels.Selector

func NewK8sOnlyManifest added in v0.6.0

func NewK8sOnlyManifest(name model.ManifestName, entities []K8sEntity) (model.Manifest, error)

func NewK8sOnlyManifestFromYAML added in v0.9.3

func NewK8sOnlyManifestFromYAML(yaml string) (model.Manifest, error)

func NewTarget added in v0.6.0

func NewTarget(
	name model.TargetName,
	entities []K8sEntity,
	portForwards []model.PortForward,
	extraPodSelectors []labels.Selector,
	dependencyIDs []model.TargetID,
	refInjectCounts map[string]int) (model.K8sTarget, error)

func NormalizeContainerID added in v0.9.6

func NormalizeContainerID(id string) (container.ID, error)

func PodContainsRef

func PodContainsRef(pod v1.PodSpec, selector container.RefSelector) (bool, error)

func ProvideClientConfig added in v0.7.11

func ProvideClientConfig() clientcmd.ClientConfig

func ProvideClientSet added in v0.7.11

func ProvideClientSet(cfg *rest.Config) (*kubernetes.Clientset, error)

func ProvideContainerRegistry added in v0.8.9

func ProvideContainerRegistry(ctx context.Context, kCli Client) container.Registry

func ProvideContainerRuntime added in v0.7.11

func ProvideContainerRuntime(ctx context.Context, kCli Client) container.Runtime

func ProvideKubeConfig added in v0.7.11

func ProvideKubeConfig(clientLoader clientcmd.ClientConfig) (*api.Config, error)

func ProvideKubectlRunner added in v0.7.11

func ProvideKubectlRunner(kubeContext KubeContext, logLevel KubectlLogLevel) kubectlRunner

func ProvideRESTConfig

func ProvideRESTConfig(clientLoader clientcmd.ClientConfig) (*rest.Config, error)

func ProvideServerVersion added in v0.7.11

func ProvideServerVersion(clientSet *kubernetes.Clientset) (*version.Info, error)

func SelectorEqual added in v0.7.1

func SelectorEqual(a, b labels.Selector) bool

func SerializeSpecYAML added in v0.8.8

func SerializeSpecYAML(decoded []K8sEntity) (string, error)

Serializes the provided K8s objects as YAML.

By convention, all K8s objects contain ObjectMetadata, Spec, and Status. This only serializes the metadata and spec, skipping the status.

func ServiceURL

func ServiceURL(service *v1.Service, ip NodeIP) (*url.URL, error)

func SetUID added in v0.10.0

func SetUID(e *K8sEntity, UID string) error

func SetUIDForTest added in v0.8.9

func SetUIDForTest(t *testing.T, e *K8sEntity, UID string)

func TiltDeployLabel added in v0.7.11

func TiltDeployLabel(dID model.DeployID) model.LabelPair

func TiltRunLabel added in v0.7.11

func TiltRunLabel() model.LabelPair

func TiltRunSelector added in v0.7.11

func TiltRunSelector() labels.Selector

func UniqueNames added in v0.9.3

func UniqueNames(es []K8sEntity, minComponents int) []string

Calculates names for workloads by using the shortest uniquely matching identifiers

func WaitForContainerReady

func WaitForContainerReady(ctx context.Context, client Client, pod *v1.Pod, ref container.RefSelector) (v1.ContainerStatus, error)

Types

type BufferCloser

type BufferCloser struct {
	*bytes.Buffer
}

func (BufferCloser) Close

func (b BufferCloser) Close() error

type Client

type Client interface {
	// Updates the entities, creating them if necessary.
	//
	// Tries to update them in-place if possible. But for certain resource types,
	// we might need to fallback to deleting and re-creating them.
	//
	// Returns entities in the order that they were applied (which may be different
	// than they were passed in) and with UUIDs from the Kube API
	Upsert(ctx context.Context, entities []K8sEntity) ([]K8sEntity, error)

	// Deletes all given entities.
	//
	// Currently ignores any "not found" errors, because that seems like the correct
	// behavior for our use cases.
	Delete(ctx context.Context, entities []K8sEntity) error

	GetByReference(ref v1.ObjectReference) (*unstructured.Unstructured, error)

	PodByID(ctx context.Context, podID PodID, n Namespace) (*v1.Pod, error)

	// Creates a channel where all changes to the pod are brodcast.
	// Takes a pod as input, to indicate the version of the pod where we start watching.
	WatchPod(ctx context.Context, pod *v1.Pod) (watch.Interface, error)

	// Streams the container logs
	ContainerLogs(ctx context.Context, podID PodID, cName container.Name, n Namespace, startTime time.Time) (io.ReadCloser, error)

	// Opens a tunnel to the specified pod+port. Returns the tunnel's local port and a function that closes the tunnel
	ForwardPort(ctx context.Context, namespace Namespace, podID PodID, optionalLocalPort, remotePort int) (localPort int, closer func(), err error)

	WatchPods(ctx context.Context, lps labels.Selector) (<-chan *v1.Pod, error)

	WatchServices(ctx context.Context, lps []model.LabelPair) (<-chan *v1.Service, error)

	WatchEvents(ctx context.Context) (<-chan *v1.Event, error)

	ConnectedToCluster(ctx context.Context) error

	ContainerRuntime(ctx context.Context) container.Runtime

	// Some clusters support a private image registry that we can push to.
	PrivateRegistry(ctx context.Context) container.Registry

	Exec(ctx context.Context, podID PodID, cName container.Name, n Namespace, cmd []string, stdin io.Reader, stdout io.Writer, stderr io.Writer) error
}

func ProvideK8sClient added in v0.7.1

func ProvideK8sClient(
	ctx context.Context,
	env Env,
	pf PortForwarder,
	configNamespace Namespace,
	runner kubectlRunner,
	clientLoader clientcmd.ClientConfig) Client

type Env

type Env string
const (
	EnvUnknown       Env = "unknown"
	EnvGKE           Env = "gke"
	EnvMinikube      Env = "minikube"
	EnvDockerDesktop Env = "docker-for-desktop"
	EnvMicroK8s      Env = "microk8s"
	EnvKIND          Env = "kind"
	EnvK3D           Env = "k3d"
	EnvNone          Env = "none" // k8s not running (not neces. a problem, e.g. if using Tilt x Docker Compose)
)

func ProvideEnv added in v0.7.11

func ProvideEnv(ctx context.Context, config *api.Config) Env

func (Env) IsLocalCluster

func (e Env) IsLocalCluster() bool

func (Env) UsesLocalDockerRegistry added in v0.10.0

func (e Env) UsesLocalDockerRegistry() bool

type EventWithEntity added in v0.8.9

type EventWithEntity struct {
	Event  *v1.Event
	Entity K8sEntity
}

A Kubernetes event and the entity to which it applies

func NewEventWithEntity added in v0.8.9

func NewEventWithEntity(evt *v1.Event, entity K8sEntity) EventWithEntity

type ExecCall added in v0.9.5

type ExecCall struct {
	PID   PodID
	CName container.Name
	Ns    Namespace
	Cmd   []string
	Stdin []byte
}

type FakeK8sClient

type FakeK8sClient struct {
	Yaml string
	Lb   LoadBalancerSpec

	DeletedYaml string
	DeleteError error

	LastPodQueryNamespace Namespace
	LastPodQueryImage     reference.NamedTagged

	PodLogsByPodAndContainer map[PodAndCName]BufferCloser
	ContainerLogsError       error

	LastForwardPortPodID      PodID
	LastForwardPortRemotePort int

	EventsWatchErr error

	UpsertError error
	Runtime     container.Runtime
	Registry    container.Registry

	GetResources map[GetKey]*unstructured.Unstructured

	ExecCalls  []ExecCall
	ExecErrors []error
	// contains filtered or unexported fields
}

func NewFakeK8sClient

func NewFakeK8sClient() *FakeK8sClient

func (*FakeK8sClient) ConnectedToCluster added in v0.2.0

func (c *FakeK8sClient) ConnectedToCluster(ctx context.Context) error

func (*FakeK8sClient) ContainerLogs

func (c *FakeK8sClient) ContainerLogs(ctx context.Context, pID PodID, cName container.Name, n Namespace, startTime time.Time) (io.ReadCloser, error)

func (*FakeK8sClient) ContainerRuntime added in v0.7.11

func (c *FakeK8sClient) ContainerRuntime(ctx context.Context) container.Runtime

func (*FakeK8sClient) Delete

func (c *FakeK8sClient) Delete(ctx context.Context, entities []K8sEntity) error

func (*FakeK8sClient) EmitEvent added in v0.8.9

func (c *FakeK8sClient) EmitEvent(ctx context.Context, evt *v1.Event)

func (*FakeK8sClient) EmitPod added in v0.7.1

func (c *FakeK8sClient) EmitPod(ls labels.Selector, p *v1.Pod)

func (*FakeK8sClient) EmitService added in v0.8.7

func (c *FakeK8sClient) EmitService(ls labels.Selector, s *v1.Service)

func (*FakeK8sClient) Exec added in v0.7.11

func (c *FakeK8sClient) Exec(ctx context.Context, podID PodID, cName container.Name, n Namespace, cmd []string, stdin io.Reader, stdout io.Writer, stderr io.Writer) error

func (*FakeK8sClient) ForwardPort

func (c *FakeK8sClient) ForwardPort(ctx context.Context, namespace Namespace, podID PodID, optionalLocalPort, remotePort int) (int, func(), error)

func (*FakeK8sClient) GetByReference added in v0.10.1

func (c *FakeK8sClient) GetByReference(ref v1.ObjectReference) (*unstructured.Unstructured, error)

func (*FakeK8sClient) PodByID

func (c *FakeK8sClient) PodByID(ctx context.Context, pID PodID, n Namespace) (*v1.Pod, error)

func (*FakeK8sClient) PrivateRegistry added in v0.8.9

func (c *FakeK8sClient) PrivateRegistry(ctx context.Context) container.Registry

func (*FakeK8sClient) SetLogsForPodContainer added in v0.7.11

func (c *FakeK8sClient) SetLogsForPodContainer(pID PodID, cName container.Name, logs string)

func (*FakeK8sClient) TearDown added in v0.8.9

func (c *FakeK8sClient) TearDown()

func (*FakeK8sClient) Upsert

func (c *FakeK8sClient) Upsert(ctx context.Context, entities []K8sEntity) ([]K8sEntity, error)

func (*FakeK8sClient) WatchEvents added in v0.8.4

func (c *FakeK8sClient) WatchEvents(ctx context.Context) (<-chan *v1.Event, error)

func (*FakeK8sClient) WatchPod

func (c *FakeK8sClient) WatchPod(ctx context.Context, pod *v1.Pod) (watch.Interface, error)

func (*FakeK8sClient) WatchPods

func (c *FakeK8sClient) WatchPods(ctx context.Context, ls labels.Selector) (<-chan *v1.Pod, error)

func (*FakeK8sClient) WatchServices

func (c *FakeK8sClient) WatchServices(ctx context.Context, lps []model.LabelPair) (<-chan *v1.Service, error)

func (*FakeK8sClient) WatchedSelectors added in v0.7.1

func (c *FakeK8sClient) WatchedSelectors() []labels.Selector

type GetKey added in v0.9.2

type GetKey struct {
	Group           string
	Kind            string
	Namespace       string
	Name            string
	ResourceVersion string
}

type JSONPath added in v0.7.11

type JSONPath struct {
	// contains filtered or unexported fields
}

This is just a wrapper around k8s jsonpath, mostly because k8s jsonpath doesn't produce errors containing the problematic path (and as long as we're here, deal with some of its other annoyances, like taking a "name" that doesn't do anything, and having a separate "Parse" step to make an instance actually useful, and making you use an io.Writer, and wrapping string results in quotes)

func NewJSONPath added in v0.7.11

func NewJSONPath(s string) (JSONPath, error)

func (JSONPath) Execute added in v0.7.11

func (jp JSONPath) Execute(obj interface{}) (string, error)

Gets the value at the specified path NB: currently strips away surrounding quotes, which the underlying parser includes in its return value If, at some point, we want to distinguish between, e.g., ints and strings by the presence of quotes, this will need to be revisited.

func (JSONPath) String added in v0.7.11

func (jp JSONPath) String() string

type K8sClient

type K8sClient struct {
	// contains filtered or unexported fields
}

func (K8sClient) ConnectedToCluster added in v0.2.0

func (k K8sClient) ConnectedToCluster(ctx context.Context) error

func (K8sClient) ContainerLogs

func (k K8sClient) ContainerLogs(ctx context.Context, pID PodID, cName container.Name, n Namespace, startWatchTime time.Time) (io.ReadCloser, error)

func (K8sClient) ContainerRuntime added in v0.7.11

func (c K8sClient) ContainerRuntime(ctx context.Context) container.Runtime

func (K8sClient) Delete

func (k K8sClient) Delete(ctx context.Context, entities []K8sEntity) error

Deletes all given entities.

Currently ignores any "not found" errors, because that seems like the correct behavior for our use cases.

func (K8sClient) Exec added in v0.7.11

func (k K8sClient) Exec(ctx context.Context, podID PodID, cName container.Name, n Namespace, cmd []string, stdin io.Reader, stdout io.Writer, stderr io.Writer) error

func (K8sClient) ForwardPort

func (k K8sClient) ForwardPort(ctx context.Context, namespace Namespace, podID PodID, optionalLocalPort, remotePort int) (localPort int, closer func(), err error)

func (K8sClient) GetByReference added in v0.10.1

func (k K8sClient) GetByReference(ref v1.ObjectReference) (*unstructured.Unstructured, error)

func (K8sClient) PodByID

func (k K8sClient) PodByID(ctx context.Context, pID PodID, n Namespace) (*v1.Pod, error)

func (K8sClient) PrivateRegistry added in v0.8.9

func (c K8sClient) PrivateRegistry(ctx context.Context) container.Registry

func (K8sClient) Upsert

func (k K8sClient) Upsert(ctx context.Context, entities []K8sEntity) ([]K8sEntity, error)

func (K8sClient) WatchEvents added in v0.8.9

func (kCli K8sClient) WatchEvents(ctx context.Context) (<-chan *v1.Event, error)

func (K8sClient) WatchPod

func (k K8sClient) WatchPod(ctx context.Context, pod *v1.Pod) (watch.Interface, error)

func (K8sClient) WatchPods

func (kCli K8sClient) WatchPods(ctx context.Context, ls labels.Selector) (<-chan *v1.Pod, error)

func (K8sClient) WatchServices

func (kCli K8sClient) WatchServices(ctx context.Context, lps []model.LabelPair) (<-chan *v1.Service, error)

type K8sEntity

type K8sEntity struct {
	Obj  runtime.Object
	Kind *schema.GroupVersionKind
}

func EntitiesWithDependentsAndRest added in v0.9.5

func EntitiesWithDependentsAndRest(entities []K8sEntity) (withDependents, rest []K8sEntity)

EntitiesWithDependentsAndRest returns two lists of k8s entities: those that may have dependencies, which we will therefore want to apply first (i.e. namespaces and CRDs -- e.g. trying to create a pod in a nonexistent namespace causes an error); and the rest of the entities.

func Filter added in v0.1.0

func Filter(entities []K8sEntity, test func(e K8sEntity) (bool, error)) (passing, rest []K8sEntity, err error)

Filter returns two slices of entities: those passing the given test, and the remainder of the input.

func FilterByHasPodTemplateSpec added in v0.7.11

func FilterByHasPodTemplateSpec(entities []K8sEntity) (passing, rest []K8sEntity, err error)

func FilterByImage added in v0.1.0

func FilterByImage(entities []K8sEntity, img container.RefSelector, imageJSONPaths func(K8sEntity) []JSONPath, inEnvVars bool) (passing, rest []K8sEntity, err error)

func FilterByMatchesPodTemplateSpec added in v0.7.11

func FilterByMatchesPodTemplateSpec(withPodSpec K8sEntity, entities []K8sEntity) (passing, rest []K8sEntity, err error)

func FilterByMetadataLabels added in v0.7.11

func FilterByMetadataLabels(entities []K8sEntity, labels map[string]string) (passing, rest []K8sEntity, err error)

func FilterBySelectorMatchesLabels added in v0.7.11

func FilterBySelectorMatchesLabels(entities []K8sEntity, labels map[string]string) (passing, rest []K8sEntity, err error)

func ImmutableEntities

func ImmutableEntities(entities []K8sEntity) []K8sEntity

func InjectCommand added in v0.9.3

func InjectCommand(entity K8sEntity, ref reference.Named, cmd model.Cmd) (K8sEntity, error)

func InjectImageDigest

func InjectImageDigest(entity K8sEntity, selector container.RefSelector, injectRef reference.Named, matchInEnvVars bool, policy v1.PullPolicy) (K8sEntity, bool, error)

Iterate through the fields of a k8s entity and replace a image name with its digest.

policy: The pull policy to set on the replaced image.

When working with a local k8s cluster, we want to set this to Never,
to ensure that k8s fails hard if the image is missing from docker.

Returns: the new entity, whether the image was replaced, and an error.

func InjectImagePullPolicy

func InjectImagePullPolicy(entity K8sEntity, policy v1.PullPolicy) (K8sEntity, error)

Iterate through the fields of a k8s entity and replace the image pull policy on all images.

func InjectLabels

func InjectLabels(entity K8sEntity, labels []model.LabelPair) (K8sEntity, error)

func InjectParallelPodManagementPolicy added in v0.10.0

func InjectParallelPodManagementPolicy(entity K8sEntity) K8sEntity

By default, StatefulSets use OrderedPodManagement.

This is a bad policy for development. If the pod goes into a crash loop, the StatefulSet operator will get wedged and require manual invervention. See: https://github.com/windmilleng/tilt/issues/1962

Tilt should change all statefulsets to use a parallel policy.

func MutableEntities

func MutableEntities(entities []K8sEntity) []K8sEntity

func OverwriteLabels added in v0.7.11

func OverwriteLabels(entity K8sEntity, labels []model.LabelPair) (K8sEntity, error)

func ParseYAMLFromString

func ParseYAMLFromString(yaml string) ([]K8sEntity, error)

func (K8sEntity) DeepCopy

func (e K8sEntity) DeepCopy() K8sEntity

func (K8sEntity) FindImages added in v0.4.1

func (e K8sEntity) FindImages(imageJSONPaths []JSONPath, envVarImages []container.RefSelector) ([]reference.Named, error)

func (K8sEntity) HasImage added in v0.1.0

func (e K8sEntity) HasImage(image container.RefSelector, imageJSONPaths []JSONPath, inEnvVars bool) (bool, error)

HasImage indicates whether the given entity is tagged with the given image.

func (K8sEntity) HasKind added in v0.7.11

func (e K8sEntity) HasKind(kind string) bool

func (K8sEntity) HasName added in v0.7.11

func (e K8sEntity) HasName(name string) bool

func (K8sEntity) HasNamespace added in v0.7.11

func (e K8sEntity) HasNamespace(ns string) bool

func (K8sEntity) ImmutableOnceCreated

func (e K8sEntity) ImmutableOnceCreated() bool

Most entities can be updated once running, but a few cannot.

func (K8sEntity) Labels added in v0.8.9

func (e K8sEntity) Labels() map[string]string

func (K8sEntity) MatchesMetadataLabels added in v0.7.11

func (e K8sEntity) MatchesMetadataLabels(labels map[string]string) (bool, error)

MatchesMetadataLabels indicates whether the given label(s) are a subset of metadata labels for the given entity.

func (K8sEntity) Name

func (e K8sEntity) Name() string

func (K8sEntity) Namespace

func (e K8sEntity) Namespace() Namespace

func (K8sEntity) SelectorMatchesLabels added in v0.7.11

func (e K8sEntity) SelectorMatchesLabels(labels map[string]string) bool

SelectorMatchesLabels indicates whether the pod selector of the given entity matches the given label(s). Currently only supports Services, but may be expanded to support other types that match pods via selectors.

func (K8sEntity) UID added in v0.8.9

func (e K8sEntity) UID() UID

type KubeContext added in v0.6.0

type KubeContext string

func ProvideKubeContext added in v0.7.11

func ProvideKubeContext(config *api.Config) (KubeContext, error)

type KubectlLogLevel added in v0.8.7

type KubectlLogLevel = int

type LoadBalancer

type LoadBalancer struct {
	Spec LoadBalancerSpec
	URL  *url.URL
}

type LoadBalancerSpec

type LoadBalancerSpec struct {
	Name      string
	Namespace Namespace
	Ports     []int32
}

func ToLoadBalancerSpec

func ToLoadBalancerSpec(entity K8sEntity) (LoadBalancerSpec, bool)

Try to convert the current entity to a LoadBalancerSpec service

func ToLoadBalancerSpecs

func ToLoadBalancerSpecs(entities []K8sEntity) []LoadBalancerSpec

type NaiveRuntimeSource added in v0.8.10

type NaiveRuntimeSource struct {
	// contains filtered or unexported fields
}

func NewNaiveRuntimeSource added in v0.8.10

func NewNaiveRuntimeSource(r container.Runtime) NaiveRuntimeSource

func (NaiveRuntimeSource) Runtime added in v0.8.10

type Namespace

type Namespace string

func NamespaceFromPod

func NamespaceFromPod(pod *v1.Pod) Namespace

func ProvideConfigNamespace added in v0.7.11

func ProvideConfigNamespace(clientLoader clientcmd.ClientConfig) Namespace

The namespace in the kubeconfig. Used as a default namespace in some (but not all) client commands. https://godoc.org/k8s.io/client-go/tools/clientcmd/api/v1#Context

func (Namespace) Empty added in v0.8.5

func (n Namespace) Empty() bool

func (Namespace) String

func (n Namespace) String() string

type NodeID

type NodeID string

func NodeIDFromPod

func NodeIDFromPod(pod *v1.Pod) NodeID

func (NodeID) String

func (nID NodeID) String() string

type NodeIP added in v0.1.0

type NodeIP string

Some K8s environments expose a single IP for the whole cluster.

func DetectNodeIP added in v0.1.0

func DetectNodeIP(ctx context.Context, env Env) (NodeIP, error)

type PodAndCName added in v0.7.11

type PodAndCName struct {
	PID   PodID
	CName container.Name
}

For keying PodLogsByPodAndContainer

type PodID

type PodID string

func PodIDFromPod

func PodIDFromPod(pod *v1.Pod) PodID

func (PodID) Empty

func (pID PodID) Empty() bool

func (PodID) String

func (pID PodID) String() string

type PortForwarder

type PortForwarder func(ctx context.Context, restConfig *rest.Config, core apiv1.CoreV1Interface, namespace string, podID PodID, localPort int, remotePort int) (closer func(), err error)

func ProvidePortForwarder

func ProvidePortForwarder() PortForwarder

type RuntimeSource added in v0.8.10

type RuntimeSource interface {
	Runtime(ctx context.Context) container.Runtime
}

type ServiceName

type ServiceName string

type TypeIndex added in v0.8.8

type TypeIndex map[reflect2.Type]bool

func (TypeIndex) Contains added in v0.8.8

func (idx TypeIndex) Contains(typ reflect2.Type) bool

type UID added in v0.8.9

type UID string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL