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 IsContainerExited(pod v1.PodStatus, container v1.ContainerStatus) bool
- func IsUnschedulable(pod v1.PodStatus) (bool, string)
- func NewK8sOnlyManifest(name model.ManifestName, entities []K8sEntity) (model.Manifest, error)
- func NewK8sOnlyManifestForTesting(name model.ManifestName, yaml string) model.Manifest
- func NewTarget(name model.TargetName, entities []K8sEntity, portForwards []model.PortForward, ...) (model.K8sTarget, error)
- func PodContainsRef(pod v1.PodSpec, selector container.RefSelector) (bool, error)
- func ProvideClientConfig() clientcmd.ClientConfig
- func ProvideClientSet(cfg *rest.Config) (*kubernetes.Clientset, error)
- func ProvideContainerRuntime(ctx context.Context, kCli Client) container.Runtime
- func ProvideKubeConfig(clientLoader clientcmd.ClientConfig) (*api.Config, error)
- func ProvideKubectlRunner(kubeContext KubeContext) kubectlRunner
- func ProvideRESTConfig(clientLoader clientcmd.ClientConfig) (*rest.Config, error)
- func ProvideServerVersion(clientSet *kubernetes.Clientset) (*version.Info, error)
- func SelectorEqual(a, b labels.Selector) bool
- func SerializeYAML(decoded []K8sEntity) (string, error)
- func ServiceURL(service *v1.Service, ip NodeIP) (*url.URL, error)
- func TiltDeployLabel(dID model.DeployID) model.LabelPair
- func TiltRunLabel() model.LabelPair
- func TiltRunSelector() labels.Selector
- func WaitForContainerReady(ctx context.Context, client Client, pod *v1.Pod, ref container.RefSelector) (v1.ContainerStatus, error)
- type BufferCloser
- type Client
- type Env
- 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) Delete(ctx context.Context, entities []K8sEntity) error
- func (c *FakeK8sClient) EmitPod(ls labels.Selector, p *v1.Pod)
- func (c *FakeK8sClient) Exec(ctx context.Context, podID PodID, cName container.Name, n Namespace, ...) error
- func (c *FakeK8sClient) ForwardPort(ctx context.Context, namespace Namespace, podID PodID, ...) (int, func(), error)
- 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) Upsert(ctx context.Context, entities []K8sEntity) 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 *v1.Pod, error)
- func (c *FakeK8sClient) WatchServices(ctx context.Context, lps []model.LabelPair) (<-chan *v1.Service, error)
- func (c *FakeK8sClient) WatchedSelectors() []labels.Selector
- type JSONPath
- 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) 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) ForwardPort(ctx context.Context, namespace Namespace, podID PodID, ...) (localPort int, closer func(), err error)
- func (k K8sClient) PodByID(ctx context.Context, pID PodID, n Namespace) (*v1.Pod, error)
- func (k K8sClient) Upsert(ctx context.Context, entities []K8sEntity) 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 *v1.Pod, error)
- func (kCli K8sClient) WatchServices(ctx context.Context, lps []model.LabelPair) (<-chan *v1.Service, error)
- type 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, ...) (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 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 MutableEntities(entities []K8sEntity) []K8sEntity
- func OverwriteLabels(entity K8sEntity, labels []model.LabelPair) (K8sEntity, error)
- func ParseYAML(k8sYaml io.Reader) ([]K8sEntity, error)
- func ParseYAMLFromString(yaml string) ([]K8sEntity, error)
- func (e K8sEntity) DeepCopy() K8sEntity
- func (e K8sEntity) FindImages(imageJSONPaths []JSONPath) ([]reference.Named, error)
- func (e K8sEntity) HasImage(image container.RefSelector, imageJSONPaths []JSONPath) (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) MatchesMetadataLabels(labels map[string]string) (bool, error)
- func (e K8sEntity) Name() string
- func (e K8sEntity) Namespace() Namespace
- func (e K8sEntity) ResourceName() string
- func (e K8sEntity) SelectorMatchesLabels(labels map[string]string) bool
- type KubeContext
- type LoadBalancer
- type LoadBalancerSpec
- type Namespace
- type NodeID
- type NodeIP
- type PodAndCName
- type PodID
- type PortForwarder
- type ServiceName
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 ManifestNameLabel = "tilt-manifest"
const TiltDeployIDLabel = "tilt-deployid"
const TiltRunIDLabel = "tilt-runid"
Variables ¶
var NoFilter = func(v reflect.Value) bool { return true }
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 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 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 NewK8sOnlyManifest ¶ added in v0.6.0
func NewK8sOnlyManifestForTesting ¶ added in v0.6.0
func NewK8sOnlyManifestForTesting(name model.ManifestName, yaml string) model.Manifest
func PodContainsRef ¶
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 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) 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 SerializeYAML ¶
func TiltRunLabel ¶ added in v0.7.11
func TiltRunSelector ¶ added in v0.7.11
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. Upsert(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. Delete(ctx context.Context, entities []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 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) ConnectedToCluster(ctx context.Context) error ContainerRuntime(ctx context.Context) container.Runtime 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
func EnvFromConfig ¶ added in v0.7.11
func EnvFromString ¶
func ProvideEnv ¶ added in v0.7.11
func (Env) IsLocalCluster ¶
type FakeK8sClient ¶
type FakeK8sClient struct { Yaml string DeletedYaml string Lb LoadBalancerSpec LastPodQueryNamespace Namespace LastPodQueryImage reference.NamedTagged PodLogsByPodAndContainer map[PodAndCName]BufferCloser ContainerLogsError error LastForwardPortPodID PodID LastForwardPortRemotePort int UpsertError error Runtime container.Runtime // 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) Delete ¶
func (c *FakeK8sClient) Delete(ctx context.Context, entities []K8sEntity) error
func (*FakeK8sClient) EmitPod ¶ added in v0.7.1
func (c *FakeK8sClient) EmitPod(ls labels.Selector, p *v1.Pod)
func (*FakeK8sClient) ForwardPort ¶
func (*FakeK8sClient) SetLogsForPodContainer ¶ added in v0.7.11
func (c *FakeK8sClient) SetLogsForPodContainer(pID PodID, cName container.Name, logs string)
func (*FakeK8sClient) Upsert ¶
func (c *FakeK8sClient) Upsert(ctx context.Context, entities []K8sEntity) error
func (*FakeK8sClient) WatchServices ¶
func (*FakeK8sClient) WatchedSelectors ¶ added in v0.7.1
func (c *FakeK8sClient) WatchedSelectors() []labels.Selector
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 (JSONPath) Execute ¶ added in v0.7.11
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.
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) Delete ¶
Deletes all given entities.
Currently ignores any "not found" errors, because that seems like the correct behavior for our use cases.
func (K8sClient) ForwardPort ¶
type K8sEntity ¶
type K8sEntity struct { Obj runtime.Object Kind *schema.GroupVersionKind }
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 FilterByMatchesPodTemplateSpec ¶ added in v0.7.11
func FilterByMetadataLabels ¶ added in v0.7.11
func FilterBySelectorMatchesLabels ¶ added in v0.7.11
func ImmutableEntities ¶
func InjectImageDigest ¶
func InjectImageDigest(entity K8sEntity, selector container.RefSelector, injectRef reference.Named, 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 MutableEntities ¶
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 (K8sEntity) FindImages ¶ added in v0.4.1
func (K8sEntity) HasImage ¶ added in v0.1.0
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) ResourceName ¶ added in v0.7.11
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.
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 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 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 PodAndCName ¶ added in v0.7.11
For keying PodLogsByPodAndContainer
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 ServiceName ¶
type ServiceName string