github.com/grahambrereton-form3/tilt@v0.10.18/internal/k8s/pod.go (about)

     1  package k8s
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"io"
     7  	"time"
     8  
     9  	v1 "k8s.io/api/core/v1"
    10  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    11  	"k8s.io/apimachinery/pkg/watch"
    12  
    13  	"github.com/windmilleng/tilt/internal/container"
    14  )
    15  
    16  func (k K8sClient) WatchPod(ctx context.Context, pod *v1.Pod) (watch.Interface, error) {
    17  	podAPI := k.core.Pods(NamespaceFromPod(pod).String())
    18  	podID := PodIDFromPod(pod)
    19  	fieldSelector := fmt.Sprintf("metadata.name=%s", podID)
    20  	watchOptions := metav1.ListOptions{
    21  		FieldSelector:   fieldSelector,
    22  		Watch:           true,
    23  		ResourceVersion: pod.ObjectMeta.ResourceVersion,
    24  	}
    25  	return podAPI.Watch(watchOptions)
    26  }
    27  
    28  func (k K8sClient) ContainerLogs(ctx context.Context, pID PodID, cName container.Name, n Namespace, startWatchTime time.Time) (io.ReadCloser, error) {
    29  	options := &v1.PodLogOptions{
    30  		Container: cName.String(),
    31  		Follow:    true,
    32  		SinceTime: &metav1.Time{
    33  			Time: startWatchTime,
    34  		},
    35  	}
    36  	req := k.core.Pods(n.String()).GetLogs(pID.String(), options)
    37  	return req.Stream()
    38  }
    39  
    40  func (k K8sClient) PodByID(ctx context.Context, pID PodID, n Namespace) (*v1.Pod, error) {
    41  	pod, err := k.core.Pods(n.String()).Get(pID.String(), metav1.GetOptions{})
    42  	if pod != nil {
    43  		FixContainerStatusImages(pod)
    44  	}
    45  	return pod, err
    46  }
    47  
    48  func PodIDFromPod(pod *v1.Pod) PodID {
    49  	return PodID(pod.ObjectMeta.Name)
    50  }
    51  
    52  func NamespaceFromPod(pod *v1.Pod) Namespace {
    53  	return Namespace(pod.ObjectMeta.Namespace)
    54  }
    55  
    56  func NodeIDFromPod(pod *v1.Pod) NodeID {
    57  	return NodeID(pod.Spec.NodeName)
    58  }