Documentation ¶
Index ¶
- Constants
- Variables
- func ContainerIDFromContainerStatus(status v1.ContainerStatus) (container.ID, error)
- func ContainerMatching(pod *v1.Pod, ref container.RefSelector) (v1.ContainerStatus, error)
- func ContainerNameFromContainerStatus(status v1.ContainerStatus) container.Name
- func ContainerSpecOf(pod *v1.Pod, status v1.ContainerStatus) v1.Container
- func ExtractPodTemplateSpec(obj interface{}) ([]*v1.PodTemplateSpec, error)
- func ExtractPods(obj interface{}) ([]*v1.PodSpec, error)
- func FakePodSpec(image reference.NamedTagged) v1.PodSpec
- func FakePodStatus(image reference.NamedTagged, phase string) v1.PodStatus
- func FindImageNamedTaggedMatching(pod v1.PodSpec, selector container.RefSelector) (reference.NamedTagged, error)
- func FindImageRefMatching(pod v1.PodSpec, selector container.RefSelector) (reference.Named, error)
- func FixContainerStatusImages(pod *v1.Pod)
- func FragmentsToEntities(es []K8sEntity) map[string][]K8sEntity
- func IsContainerExited(pod v1.PodStatus, container v1.ContainerStatus) bool
- func IsUnschedulable(pod v1.PodStatus) (bool, string)
- func LabelPairsToSelector(lps []model.LabelPair) labels.Selector
- func LocatorMatchesOne(l ImageLocator, entities []K8sEntity) bool
- func ManagedByTiltSelector() labels.Selector
- func MustTarget(name model.TargetName, yaml string) model.K8sTarget
- func NewK8sOnlyManifest(name model.ManifestName, entities []K8sEntity, allLocators []ImageLocator) (model.Manifest, error)
- func NewK8sOnlyManifestFromYAML(yaml string) (model.Manifest, error)
- func NewTarget(name model.TargetName, entities []K8sEntity, portForwards []model.PortForward, ...) (model.K8sTarget, error)
- func NewTiltLabelMap() map[string]string
- func NormalizeContainerID(id string) (container.ID, error)
- func OwnerRefToObjectRef(owner metav1.OwnerReference, namespace string) v1.ObjectReference
- func PodContainsRef(pod v1.PodSpec, selector container.RefSelector) (bool, error)
- func ProvideClientConfig() clientcmd.ClientConfig
- func ProvideContainerRuntime(ctx context.Context, kCli Client) container.Runtime
- func ProvideKubeConfig(clientLoader clientcmd.ClientConfig) (*api.Config, error)
- func ProvideKubectlRunner(kubeContext KubeContext, logLevel KubectlLogLevel) kubectlRunner
- func ProvideServerVersion(maybeClientset ClientsetOrError) (*version.Info, error)
- func RuntimeObjToOwnerRef(obj runtime.Object) metav1.OwnerReference
- func SelectorEqual(a, b labels.Selector) bool
- func SerializeSpecYAML(decoded []K8sEntity) (string, error)
- func ServiceURL(service *v1.Service, ip NodeIP) (*url.URL, error)
- func SetUID(e *K8sEntity, UID string) error
- func SetUIDForTest(t *testing.T, e *K8sEntity, UID string)
- func TiltManagedByLabel() model.LabelPair
- func UniqueNames(es []K8sEntity, minComponents int) []string
- func WaitForContainerReady(ctx context.Context, client Client, pod *v1.Pod, ref container.RefSelector) (v1.ContainerStatus, error)
- type BufferCloser
- type Client
- type ClientsetOrError
- type ClusterName
- type Env
- type ExecCall
- type FakeK8sClient
- func (c *FakeK8sClient) ConnectedToCluster(ctx context.Context) error
- func (c *FakeK8sClient) ContainerLogs(ctx context.Context, pID PodID, cName container.Name, n Namespace, ...) (io.ReadCloser, error)
- func (c *FakeK8sClient) ContainerRuntime(ctx context.Context) container.Runtime
- func (c *FakeK8sClient) CreatePortForwarder(ctx context.Context, namespace Namespace, podID PodID, ...) (PortForwarder, error)
- func (c *FakeK8sClient) Delete(ctx context.Context, entities []K8sEntity) error
- func (c *FakeK8sClient) EmitEvent(ctx context.Context, evt *v1.Event)
- func (c *FakeK8sClient) EmitPod(ls labels.Selector, p *v1.Pod)
- func (c *FakeK8sClient) EmitPodDelete(ls labels.Selector, p *v1.Pod)
- func (c *FakeK8sClient) EmitService(ls labels.Selector, s *v1.Service)
- func (c *FakeK8sClient) Exec(ctx context.Context, podID PodID, cName container.Name, n Namespace, ...) error
- func (c *FakeK8sClient) GetByReference(ctx context.Context, ref v1.ObjectReference) (K8sEntity, error)
- func (c *FakeK8sClient) InjectEntityByName(entities ...K8sEntity)
- func (c *FakeK8sClient) LocalRegistry(ctx context.Context) container.Registry
- func (c *FakeK8sClient) NodeIP(ctx context.Context) NodeIP
- func (c *FakeK8sClient) PodByID(ctx context.Context, pID PodID, n Namespace) (*v1.Pod, error)
- func (c *FakeK8sClient) SetLogsForPodContainer(pID PodID, cName container.Name, logs string)
- func (c *FakeK8sClient) TearDown()
- func (c *FakeK8sClient) Upsert(ctx context.Context, entities []K8sEntity, timeout time.Duration) ([]K8sEntity, error)
- func (c *FakeK8sClient) WatchEvents(ctx context.Context) (<-chan *v1.Event, error)
- func (c *FakeK8sClient) WatchPod(ctx context.Context, pod *v1.Pod) (watch.Interface, error)
- func (c *FakeK8sClient) WatchPods(ctx context.Context, ls labels.Selector) (<-chan ObjectUpdate, error)
- func (c *FakeK8sClient) WatchServices(ctx context.Context, ls labels.Selector) (<-chan *v1.Service, error)
- func (c *FakeK8sClient) WatchedSelectors() []labels.Selector
- type FakeMinikube
- type FakePortForwardClient
- type FakePortForwarder
- type ImageLocator
- type JSONPath
- type JSONPathImageLocator
- func (l *JSONPathImageLocator) EqualsImageLocator(other interface{}) bool
- func (l *JSONPathImageLocator) Extract(e K8sEntity) ([]reference.Named, error)
- func (l *JSONPathImageLocator) Inject(e K8sEntity, selector container.RefSelector, injectRef reference.Named) (K8sEntity, bool, error)
- func (l *JSONPathImageLocator) MatchesType(e K8sEntity) bool
- type JSONPathImageObjectLocator
- func (l *JSONPathImageObjectLocator) EqualsImageLocator(other interface{}) bool
- func (l *JSONPathImageObjectLocator) Extract(e K8sEntity) ([]reference.Named, error)
- func (l *JSONPathImageObjectLocator) Inject(e K8sEntity, selector container.RefSelector, injectRef reference.Named) (K8sEntity, bool, error)
- func (l *JSONPathImageObjectLocator) MatchesType(e K8sEntity) bool
- type K8sClient
- func (k K8sClient) ConnectedToCluster(ctx context.Context) error
- func (k K8sClient) ContainerLogs(ctx context.Context, pID PodID, cName container.Name, n Namespace, ...) (io.ReadCloser, error)
- func (c K8sClient) ContainerRuntime(ctx context.Context) container.Runtime
- func (k K8sClient) CreatePortForwarder(ctx context.Context, namespace Namespace, podID PodID, ...) (PortForwarder, error)
- func (k K8sClient) Delete(ctx context.Context, entities []K8sEntity) error
- func (k K8sClient) Exec(ctx context.Context, podID PodID, cName container.Name, n Namespace, ...) error
- func (k K8sClient) GetByReference(ctx context.Context, ref v1.ObjectReference) (K8sEntity, error)
- func (c K8sClient) LocalRegistry(ctx context.Context) container.Registry
- func (c K8sClient) NodeIP(ctx context.Context) NodeIP
- func (k K8sClient) PodByID(ctx context.Context, pID PodID, n Namespace) (*v1.Pod, error)
- func (k K8sClient) Upsert(ctx context.Context, entities []K8sEntity, timeout time.Duration) ([]K8sEntity, error)
- func (kCli K8sClient) WatchEvents(ctx context.Context) (<-chan *v1.Event, error)
- func (k K8sClient) WatchPod(ctx context.Context, pod *v1.Pod) (watch.Interface, error)
- func (kCli K8sClient) WatchPods(ctx context.Context, ls labels.Selector) (<-chan ObjectUpdate, error)
- func (kCli K8sClient) WatchServices(ctx context.Context, ls labels.Selector) (<-chan *v1.Service, error)
- type K8sEntity
- func CopyEntities(entities []K8sEntity) []K8sEntity
- func Filter(entities []K8sEntity, test func(e K8sEntity) (bool, error)) (passing, rest []K8sEntity, err error)
- func FilterByHasPodTemplateSpec(entities []K8sEntity) (passing, rest []K8sEntity, err error)
- func FilterByImage(entities []K8sEntity, img container.RefSelector, locators []ImageLocator, ...) (passing, rest []K8sEntity, err error)
- func FilterByMatchesPodTemplateSpec(withPodSpec K8sEntity, entities []K8sEntity) (passing, rest []K8sEntity, err error)
- func FilterByMetadataLabels(entities []K8sEntity, labels map[string]string) (passing, rest []K8sEntity, err error)
- func FilterBySelectorMatchesLabels(entities []K8sEntity, labels map[string]string) (passing, rest []K8sEntity, err error)
- func ImmutableEntities(entities []K8sEntity) []K8sEntity
- func InjectCommandAndArgs(entity K8sEntity, ref reference.Named, cmd model.Cmd, args model.OverrideArgs) (K8sEntity, error)
- func InjectImageDigest(entity K8sEntity, selector container.RefSelector, injectRef reference.Named, ...) (K8sEntity, bool, error)
- func InjectImagePullPolicy(entity K8sEntity, policy v1.PullPolicy) (K8sEntity, error)
- func InjectLabels(entity K8sEntity, labels []model.LabelPair) (K8sEntity, error)
- func InjectParallelPodManagementPolicy(entity K8sEntity) K8sEntity
- func InjectPodTemplateSpecHashes(entity K8sEntity) (K8sEntity, error)
- func MutableAndImmutableEntities(entities entityList) (mutable, immutable []K8sEntity)
- func MutableEntities(entities []K8sEntity) []K8sEntity
- func NewK8sEntity(obj runtime.Object) K8sEntity
- func NewNamespaceEntity(name string) K8sEntity
- func OverwriteLabels(entity K8sEntity, labels []model.LabelPair) (K8sEntity, error)
- func ParseYAML(k8sYaml io.Reader) ([]K8sEntity, error)
- func ParseYAMLFromString(yaml string) ([]K8sEntity, error)
- func SortedEntities(entities []K8sEntity) []K8sEntity
- func (e K8sEntity) Clean()
- func (e K8sEntity) DeepCopy() K8sEntity
- func (e K8sEntity) FindImages(locators []ImageLocator, envVarImages []container.RefSelector) ([]reference.Named, error)
- func (e K8sEntity) GVK() schema.GroupVersionKind
- func (e K8sEntity) HasImage(image container.RefSelector, locators []ImageLocator, inEnvVars bool) (bool, error)
- func (e K8sEntity) HasKind(kind string) bool
- func (e K8sEntity) HasName(name string) bool
- func (e K8sEntity) HasNamespace(ns string) bool
- func (e K8sEntity) ImmutableOnceCreated() bool
- func (e K8sEntity) Labels() map[string]string
- func (e K8sEntity) MatchesMetadataLabels(labels map[string]string) (bool, error)
- func (e K8sEntity) Name() string
- func (e K8sEntity) Namespace() Namespace
- func (e K8sEntity) SelectorMatchesLabels(labels map[string]string) bool
- func (e K8sEntity) ToObjectReference() v1.ObjectReference
- func (e K8sEntity) UID() types.UID
- func (e K8sEntity) WithNamespace(ns string) K8sEntity
- type KubeContext
- type KubectlLogLevel
- type LoadBalancer
- type LoadBalancerSpec
- type MinikubeClient
- type NaiveRuntimeSource
- type Namespace
- type NodeID
- type NodeIP
- type ObjectRefTree
- type ObjectSelector
- func MustKindSelector(kind string) ObjectSelector
- func MustNameSelector(name string) ObjectSelector
- func NewFullmatchCaseInsensitiveObjectSelector(apiVersion string, kind string, name string, namespace string) (ObjectSelector, error)
- func NewPartialMatchObjectSelector(apiVersion string, kind string, name string, namespace string) (ObjectSelector, error)
- type ObjectUpdate
- type OwnerFetcher
- type PodAndCName
- type PodID
- type PodTemplateSpecHash
- type PortForwardClient
- type PortForwarder
- type RESTConfigOrError
- type RuntimeSource
- type ServiceName
- type TypeIndex
Constants ¶
const ContainerIDPrefix = "docker://"
const DefaultNamespace = Namespace("default")
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.
const ManagedByLabel = "app.kubernetes.io/managed-by"
https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/
const ManagedByValue = "tilt"
const ManifestNameLabel = "tilt-manifest"
const TiltPodTemplateHashLabel = "tilt.dev/pod-template-hash"
Variables ¶
var EventGVR = v1.SchemeGroupVersion.WithResource("events")
var ForbiddenFieldsRe = regexp.MustCompile(`updates to .* are forbidden`)
var MetadataAnnotationsTooLongRe = regexp.MustCompile(`metadata.annotations: Too long: must have at most \d+ bytes.*`)
var NoFilter = func(v reflect.Value) bool { return true }
var PodGVR = v1.SchemeGroupVersion.WithResource("pods")
var ServiceGVR = v1.SchemeGroupVersion.WithResource("services")
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 ExtractPodTemplateSpec ¶ added in v0.1.0
func ExtractPodTemplateSpec(obj interface{}) ([]*v1.PodTemplateSpec, error)
func ExtractPods ¶
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 FixContainerStatusImages ¶ added in v0.8.2
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 FragmentsToEntities ¶ added in v0.14.0
FragmentsToEntities maps all possible fragments (e.g. foo, foo:secret, foo:secret:default) to the k8s entity or entities that they correspond to
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 ¶
Returns the error message if the pod is unschedulable
func LabelPairsToSelector ¶ added in v0.8.7
func LocatorMatchesOne ¶ added in v0.15.2
func LocatorMatchesOne(l ImageLocator, entities []K8sEntity) bool
func ManagedByTiltSelector ¶ added in v0.10.7
func MustTarget ¶ added in v0.14.0
func MustTarget(name model.TargetName, yaml string) model.K8sTarget
func NewK8sOnlyManifest ¶ added in v0.6.0
func NewK8sOnlyManifest(name model.ManifestName, entities []K8sEntity, allLocators []ImageLocator) (model.Manifest, error)
func NewK8sOnlyManifestFromYAML ¶ added in v0.9.3
func NewTiltLabelMap ¶ added in v0.10.7
func NormalizeContainerID ¶ added in v0.9.6
func OwnerRefToObjectRef ¶ added in v0.10.5
func OwnerRefToObjectRef(owner metav1.OwnerReference, namespace string) v1.ObjectReference
func PodContainsRef ¶
func ProvideClientConfig ¶ added in v0.7.11
func ProvideClientConfig() clientcmd.ClientConfig
func ProvideContainerRuntime ¶ added in v0.7.11
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 ProvideServerVersion ¶ added in v0.7.11
func ProvideServerVersion(maybeClientset ClientsetOrError) (*version.Info, error)
func RuntimeObjToOwnerRef ¶ added in v0.10.5
func RuntimeObjToOwnerRef(obj runtime.Object) metav1.OwnerReference
func SelectorEqual ¶ added in v0.7.1
func SerializeSpecYAML ¶ added in v0.8.8
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 TiltManagedByLabel ¶ added in v0.10.7
func UniqueNames ¶ added in v0.9.3
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 ¶
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, timeout time.Duration) ([]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(ctx context.Context, ref v1.ObjectReference) (K8sEntity, 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 CreatePortForwarder(ctx context.Context, namespace Namespace, podID PodID, optionalLocalPort, remotePort int, host string) (PortForwarder, error) WatchPods(ctx context.Context, lps labels.Selector) (<-chan ObjectUpdate, error) WatchServices(ctx context.Context, lps labels.Selector) (<-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 local image registry that we can push to. LocalRegistry(ctx context.Context) container.Registry // Some clusters support a node IP where all servers are reachable. NodeIP(ctx context.Context) NodeIP 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, maybeRESTConfig RESTConfigOrError, maybeClientset ClientsetOrError, pfClient PortForwardClient, configNamespace Namespace, runner kubectlRunner, mkClient MinikubeClient, clientLoader clientcmd.ClientConfig) Client
type ClientsetOrError ¶ added in v0.10.8
type ClientsetOrError struct { Clientset *kubernetes.Clientset Error error }
func ProvideClientset ¶ added in v0.10.8
func ProvideClientset(cfg RESTConfigOrError) ClientsetOrError
type ClusterName ¶ added in v0.10.7
type ClusterName string
func ProvideClusterName ¶ added in v0.10.7
func ProvideClusterName(ctx context.Context, config *api.Config) ClusterName
type Env ¶
type Env string
const ( EnvUnknown Env = "unknown" EnvGKE Env = "gke" EnvMinikube Env = "minikube" EnvDockerDesktop Env = "docker-for-desktop" EnvMicroK8s Env = "microk8s" EnvCRC Env = "crc" // Kind v0.6 substantially changed the protocol for detecting and pulling, // so we represent them as two separate envs. EnvKIND5 Env = "kind-0.5-" EnvKIND6 Env = "kind-0.6+" EnvK3D Env = "k3d" EnvNone Env = "none" // k8s not running (not neces. a problem, e.g. if using Tilt x Docker Compose) )
func (Env) IsLocalCluster ¶
func (Env) UsesLocalDockerRegistry ¶ added in v0.10.0
type FakeK8sClient ¶
type FakeK8sClient struct { FakePortForwardClient Yaml string Lb LoadBalancerSpec DeletedYaml string DeleteError error LastPodQueryNamespace Namespace LastPodQueryImage reference.NamedTagged PodLogsByPodAndContainer map[PodAndCName]BufferCloser LastPodLogStartTime time.Time ContainerLogsError error EventsWatchErr error UpsertError error LastUpsertResult []K8sEntity UpsertTimeout time.Duration Runtime container.Runtime Registry container.Registry FakeNodeIP NodeIP 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 (*FakeK8sClient) ContainerRuntime ¶ added in v0.7.11
func (c *FakeK8sClient) ContainerRuntime(ctx context.Context) container.Runtime
func (*FakeK8sClient) CreatePortForwarder ¶ added in v0.10.8
func (c *FakeK8sClient) CreatePortForwarder(ctx context.Context, namespace Namespace, podID PodID, optionalLocalPort, remotePort int, host string) (PortForwarder, error)
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) EmitPodDelete ¶ added in v0.14.0
func (c *FakeK8sClient) EmitPodDelete(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) GetByReference ¶ added in v0.10.1
func (c *FakeK8sClient) GetByReference(ctx context.Context, ref v1.ObjectReference) (K8sEntity, error)
func (*FakeK8sClient) InjectEntityByName ¶ added in v0.10.5
func (c *FakeK8sClient) InjectEntityByName(entities ...K8sEntity)
func (*FakeK8sClient) LocalRegistry ¶ added in v0.14.0
func (c *FakeK8sClient) LocalRegistry(ctx context.Context) container.Registry
func (*FakeK8sClient) NodeIP ¶ added in v0.14.0
func (c *FakeK8sClient) NodeIP(ctx context.Context) NodeIP
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) WatchEvents ¶ added in v0.8.4
func (*FakeK8sClient) WatchPods ¶
func (c *FakeK8sClient) WatchPods(ctx context.Context, ls labels.Selector) (<-chan ObjectUpdate, error)
func (*FakeK8sClient) WatchServices ¶
func (*FakeK8sClient) WatchedSelectors ¶ added in v0.7.1
func (c *FakeK8sClient) WatchedSelectors() []labels.Selector
type FakeMinikube ¶ added in v0.14.0
type FakePortForwardClient ¶ added in v0.10.8
type FakePortForwardClient struct { CreatePortForwardCallCount int LastForwardPortPodID PodID LastForwardPortRemotePort int LastForwardPortHost string LastForwarder FakePortForwarder LastForwardContext context.Context }
func (*FakePortForwardClient) CreatePortForwarder ¶ added in v0.10.8
func (c *FakePortForwardClient) CreatePortForwarder(ctx context.Context, namespace Namespace, podID PodID, optionalLocalPort, remotePort int, host string) (PortForwarder, error)
type FakePortForwarder ¶ added in v0.10.8
type FakePortForwarder struct { Done chan error // contains filtered or unexported fields }
func (FakePortForwarder) ForwardPorts ¶ added in v0.10.8
func (pf FakePortForwarder) ForwardPorts() error
func (FakePortForwarder) LocalPort ¶ added in v0.10.8
func (pf FakePortForwarder) LocalPort() int
type ImageLocator ¶ added in v0.15.2
type ImageLocator interface { // Checks whether two image locators are the same. EqualsImageLocator(other interface{}) bool // Find all the images in this entity. Extract(e K8sEntity) ([]reference.Named, error) // Matches the type of this entity. MatchesType(e K8sEntity) bool // Find all the images in this entity that match the given selector, // and replace them with the injected ref. // // Returns a new entity with the injected ref. Returns a boolean indicated // whether there was at least one successful injection. Inject(e K8sEntity, selector container.RefSelector, injectRef reference.Named) (K8sEntity, bool, error) }
func ToImageLocators ¶ added in v0.15.2
func ToImageLocators(locators []model.K8sImageLocator) []ImageLocator
type JSONPath ¶ added in v0.7.11
type JSONPath struct {
// contains filtered or unexported fields
}
A wrapper around JSONPath with utility functions for locating particular types we need (like strings).
Improves the error message to include the problematic path.
func NewJSONPath ¶ added in v0.7.11
func (JSONPath) FindStrings ¶ added in v0.15.0
Extract all the strings from the given object. Returns an error if the object at the specified path isn't a string.
type JSONPathImageLocator ¶ added in v0.15.2
type JSONPathImageLocator struct {
// contains filtered or unexported fields
}
func MustJSONPathImageLocator ¶ added in v0.15.2
func MustJSONPathImageLocator(selector ObjectSelector, path string) *JSONPathImageLocator
func NewJSONPathImageLocator ¶ added in v0.15.2
func NewJSONPathImageLocator(selector ObjectSelector, path string) (*JSONPathImageLocator, error)
func (*JSONPathImageLocator) EqualsImageLocator ¶ added in v0.15.2
func (l *JSONPathImageLocator) EqualsImageLocator(other interface{}) bool
func (*JSONPathImageLocator) Extract ¶ added in v0.15.2
func (l *JSONPathImageLocator) Extract(e K8sEntity) ([]reference.Named, error)
func (*JSONPathImageLocator) Inject ¶ added in v0.15.2
func (l *JSONPathImageLocator) Inject(e K8sEntity, selector container.RefSelector, injectRef reference.Named) (K8sEntity, bool, error)
func (*JSONPathImageLocator) MatchesType ¶ added in v0.15.2
func (l *JSONPathImageLocator) MatchesType(e K8sEntity) bool
type JSONPathImageObjectLocator ¶ added in v0.15.2
type JSONPathImageObjectLocator struct {
// contains filtered or unexported fields
}
func MustJSONPathImageObjectLocator ¶ added in v0.15.2
func MustJSONPathImageObjectLocator(selector ObjectSelector, path, repoField, tagField string) *JSONPathImageObjectLocator
func NewJSONPathImageObjectLocator ¶ added in v0.15.2
func NewJSONPathImageObjectLocator(selector ObjectSelector, path, repoField, tagField string) (*JSONPathImageObjectLocator, error)
func (*JSONPathImageObjectLocator) EqualsImageLocator ¶ added in v0.15.2
func (l *JSONPathImageObjectLocator) EqualsImageLocator(other interface{}) bool
func (*JSONPathImageObjectLocator) Extract ¶ added in v0.15.2
func (l *JSONPathImageObjectLocator) Extract(e K8sEntity) ([]reference.Named, error)
func (*JSONPathImageObjectLocator) Inject ¶ added in v0.15.2
func (l *JSONPathImageObjectLocator) Inject(e K8sEntity, selector container.RefSelector, injectRef reference.Named) (K8sEntity, bool, error)
func (*JSONPathImageObjectLocator) MatchesType ¶ added in v0.15.2
func (l *JSONPathImageObjectLocator) MatchesType(e K8sEntity) bool
type K8sClient ¶
type K8sClient struct {
// contains filtered or unexported fields
}
func (K8sClient) ConnectedToCluster ¶ added in v0.2.0
func (K8sClient) ContainerLogs ¶
func (K8sClient) ContainerRuntime ¶ added in v0.7.11
func (K8sClient) CreatePortForwarder ¶ added in v0.10.8
func (K8sClient) Delete ¶
Deletes all given entities.
Currently ignores any "not found" errors, because that seems like the correct behavior for our use cases.
func (K8sClient) GetByReference ¶ added in v0.10.1
func (K8sClient) LocalRegistry ¶ added in v0.14.0
func (K8sClient) WatchEvents ¶ added in v0.8.9
type K8sEntity ¶
func CopyEntities ¶ added in v0.10.15
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 FilterByImage ¶ added in v0.1.0
func FilterByImage(entities []K8sEntity, img container.RefSelector, locators []ImageLocator, inEnvVars bool) (passing, rest []K8sEntity, err error)
func FilterByMatchesPodTemplateSpec ¶ added in v0.7.11
func FilterByMetadataLabels ¶ added in v0.7.11
func FilterBySelectorMatchesLabels ¶ added in v0.7.11
func ImmutableEntities ¶
func InjectCommandAndArgs ¶ added in v0.14.0
func InjectImageDigest ¶
func InjectImageDigest(entity K8sEntity, selector container.RefSelector, injectRef reference.Named, locators []ImageLocator, 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 InjectParallelPodManagementPolicy ¶ added in v0.10.0
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 intervention. See: https://github.com/tilt-dev/tilt/issues/1962
Tilt should change all statefulsets to use a parallel policy.
func InjectPodTemplateSpecHashes ¶ added in v0.10.16
Iterate through the fields of a k8s entity and add the pod template spec hash on all pod template specs
func MutableAndImmutableEntities ¶ added in v0.10.15
func MutableAndImmutableEntities(entities entityList) (mutable, immutable []K8sEntity)
MutableAndImmutableEntities returns two lists of k8s entities: mutable ones (that can simply be `kubectl apply`'d), and immutable ones (such as jobs and pods, which will need to be `--force`'d). (We assume input entities are already sorted in a safe order to apply -- see kustomize/ordering.go.)
func MutableEntities ¶
func NewK8sEntity ¶ added in v0.10.4
func NewNamespaceEntity ¶ added in v0.10.15
func OverwriteLabels ¶ added in v0.7.11
func ParseYAML ¶
Parse the YAML into entities. Loosely based on https://github.com/kubernetes/cli-runtime/blob/d6a36215b15f83b94578f2ffce5d00447972e8ae/pkg/genericclioptions/resource/visitor.go#L583
func ParseYAMLFromString ¶
func SortedEntities ¶ added in v0.10.15
func (K8sEntity) Clean ¶ added in v0.16.0
func (e K8sEntity) Clean()
Clean up internal bookkeeping fields. See https://github.com/kubernetes/kubernetes/issues/90066
func (K8sEntity) FindImages ¶ added in v0.4.1
func (e K8sEntity) FindImages(locators []ImageLocator, envVarImages []container.RefSelector) ([]reference.Named, error)
func (K8sEntity) GVK ¶ added in v0.10.4
func (e K8sEntity) GVK() schema.GroupVersionKind
func (K8sEntity) HasImage ¶ added in v0.1.0
func (e K8sEntity) HasImage(image container.RefSelector, locators []ImageLocator, inEnvVars bool) (bool, error)
HasImage indicates whether the given entity is tagged with the given image.
func (K8sEntity) HasNamespace ¶ added in v0.7.11
func (K8sEntity) ImmutableOnceCreated ¶
Most entities can be updated once running, but a few cannot.
func (K8sEntity) MatchesMetadataLabels ¶ added in v0.7.11
MatchesMetadataLabels indicates whether the given label(s) are a subset of metadata labels for the given entity.
func (K8sEntity) SelectorMatchesLabels ¶ added in v0.7.11
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) ToObjectReference ¶ added in v0.10.5
func (e K8sEntity) ToObjectReference() v1.ObjectReference
func (K8sEntity) WithNamespace ¶ added in v0.10.8
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 ¶
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 MinikubeClient ¶ added in v0.14.0
type MinikubeClient interface { Version(ctx context.Context) (string, error) DockerEnv(ctx context.Context) (map[string]string, error) NodeIP(ctx context.Context) (NodeIP, error) }
func ProvideMinikubeClient ¶ added in v0.14.0
func ProvideMinikubeClient(context KubeContext) MinikubeClient
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
type Namespace ¶
type Namespace string
func NamespaceFromPod ¶
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
type NodeIP ¶ added in v0.1.0
type NodeIP string
Some K8s environments expose a single IP for the whole cluster.
type ObjectRefTree ¶ added in v0.10.5
type ObjectRefTree struct { Ref v1.ObjectReference Owners []ObjectRefTree }
The ObjectRefTree only contains immutable properties of a Kubernetes object: the name, namespace, and UID
func (ObjectRefTree) String ¶ added in v0.10.5
func (t ObjectRefTree) String() string
func (ObjectRefTree) UIDs ¶ added in v0.10.5
func (t ObjectRefTree) UIDs() []types.UID
type ObjectSelector ¶ added in v0.15.2
type ObjectSelector struct {
// contains filtered or unexported fields
}
A selector matches an entity if all non-empty selector fields match the corresponding entity fields
func MustKindSelector ¶ added in v0.15.2
func MustKindSelector(kind string) ObjectSelector
Create a selector that matches the Kind. Useful for testing.
func MustNameSelector ¶ added in v0.15.2
func MustNameSelector(name string) ObjectSelector
Create a selector that matches the Name. Useful for testing.
func NewFullmatchCaseInsensitiveObjectSelector ¶ added in v0.15.2
func NewFullmatchCaseInsensitiveObjectSelector(apiVersion string, kind string, name string, namespace string) (ObjectSelector, error)
Creates a new ObjectSelector If an arg is an empty string it will become an empty regex that matches all input Otherwise the arg must match the input exactly
func NewPartialMatchObjectSelector ¶ added in v0.15.2
func NewPartialMatchObjectSelector(apiVersion string, kind string, name string, namespace string) (ObjectSelector, error)
Creates a new ObjectSelector If an arg is an empty string, it will become an empty regex that matches all input Otherwise the arg will match input from the beginning (prefix matching)
func (ObjectSelector) EqualsSelector ¶ added in v0.15.2
func (o1 ObjectSelector) EqualsSelector(o2 ObjectSelector) bool
func (ObjectSelector) Matches ¶ added in v0.15.2
func (k ObjectSelector) Matches(e K8sEntity) bool
type ObjectUpdate ¶ added in v0.14.0
type ObjectUpdate struct {
// contains filtered or unexported fields
}
A wrapper object around SharedInformer objects, to make them a bit easier to use correctly.
func (ObjectUpdate) AsDeletedKey ¶ added in v0.14.0
func (r ObjectUpdate) AsDeletedKey() (Namespace, string, bool)
Returns (namespace, name, isDelete).
The informer's OnDelete handler sometimes gives us a structured object, and sometimes returns a DeletedFinalStateUnknown object. To make this easier to handle correctly, we never allow access to the OnDelete object. Instead, we force the caller to use AsDeletedKey() to get the identifier of the object.
For more info, see: https://godoc.org/k8s.io/client-go/tools/cache#ResourceEventHandler
type OwnerFetcher ¶ added in v0.10.5
type OwnerFetcher struct {
// contains filtered or unexported fields
}
func ProvideOwnerFetcher ¶ added in v0.10.5
func ProvideOwnerFetcher(kCli Client) OwnerFetcher
func (OwnerFetcher) OwnerTreeOf ¶ added in v0.10.5
func (v OwnerFetcher) OwnerTreeOf(ctx context.Context, entity K8sEntity) (result ObjectRefTree, err error)
func (OwnerFetcher) OwnerTreeOfRef ¶ added in v0.10.7
func (v OwnerFetcher) OwnerTreeOfRef(ctx context.Context, ref v1.ObjectReference) (result ObjectRefTree, err error)
type PodAndCName ¶ added in v0.7.11
For keying PodLogsByPodAndContainer
type PodTemplateSpecHash ¶ added in v0.10.16
type PodTemplateSpecHash string
func HashPodTemplateSpec ¶ added in v0.10.16
func HashPodTemplateSpec(spec *v1.PodTemplateSpec) (PodTemplateSpecHash, error)
func ReadPodTemplateSpecHashes ¶ added in v0.10.19
func ReadPodTemplateSpecHashes(entity K8sEntity) ([]PodTemplateSpecHash, error)
ReadPodTemplateSpecHashes pulls the PodTemplateSpecHash that Tilt injected into this entity's metadata during deploy (if any)
type PortForwardClient ¶ added in v0.10.8
type PortForwardClient interface { // Creates a new port-forwarder that's bound to the given context's lifecycle. // When the context is canceled, the port-forwarder will close. CreatePortForwarder(ctx context.Context, namespace Namespace, podID PodID, localPort int, remotePort int, host string) (PortForwarder, error) }
func ProvidePortForwardClient ¶ added in v0.10.8
func ProvidePortForwardClient( maybeRESTConfig RESTConfigOrError, maybeClientset ClientsetOrError) PortForwardClient
type PortForwarder ¶
type PortForwarder interface { // The local port we're listening on. LocalPort() int // Listens on the configured port and forward all traffic to the container. // Returns when the port-forwarder sees an unrecoverable error or // when the context passed at creation is canceled. ForwardPorts() error }
type RESTConfigOrError ¶ added in v0.10.8
func ProvideRESTConfig ¶
func ProvideRESTConfig(clientLoader clientcmd.ClientConfig) RESTConfigOrError
type RuntimeSource ¶ added in v0.8.10
type ServiceName ¶
type ServiceName string
Source Files ¶
- client.go
- container.go
- encoder.go
- entity.go
- env.go
- errors.go
- exec.go
- exploding_client.go
- extract.go
- fake_client.go
- image.go
- ip.go
- json_path.go
- kubectl_runner.go
- label.go
- label_selector.go
- labels.go
- locator.go
- logging_kubectl_runner.go
- minikube.go
- minikube_fake.go
- names.go
- object_selector.go
- owner_fetcher.go
- pod.go
- pod_template.go
- portforward.go
- registry.go
- runtime.go
- serialize.go
- statefulset.go
- target.go
- watch.go
Directories ¶
Path | Synopsis |
---|---|
package jsonpath is a template engine using jsonpath syntax, which can be seen at http://goessner.net/articles/JsonPath/.
|
package jsonpath is a template engine using jsonpath syntax, which can be seen at http://goessner.net/articles/JsonPath/. |