Plumb context to providers
This commit is contained in:
@@ -134,7 +134,7 @@ func (s *KubeletServer) ApiServerHandler(w http.ResponseWriter, req *http.Reques
|
||||
tail = t
|
||||
}
|
||||
|
||||
podsLogs, err := s.p.GetContainerLogs(namespace, pod, container, tail)
|
||||
podsLogs, err := s.p.GetContainerLogs(ctx, namespace, pod, container, tail)
|
||||
if err != nil {
|
||||
log.G(ctx).WithError(err).Error("error getting container logs")
|
||||
http.Error(w, fmt.Sprintf("error while getting container logs: %v", err), http.StatusInternalServerError)
|
||||
|
||||
@@ -14,44 +14,44 @@ import (
|
||||
// Provider contains the methods required to implement a virtual-kubelet provider.
|
||||
type Provider interface {
|
||||
// CreatePod takes a Kubernetes Pod and deploys it within the provider.
|
||||
CreatePod(pod *v1.Pod) error
|
||||
CreatePod(ctx context.Context, pod *v1.Pod) error
|
||||
|
||||
// UpdatePod takes a Kubernetes Pod and updates it within the provider.
|
||||
UpdatePod(pod *v1.Pod) error
|
||||
UpdatePod(ctx context.Context, pod *v1.Pod) error
|
||||
|
||||
// DeletePod takes a Kubernetes Pod and deletes it from the provider.
|
||||
DeletePod(pod *v1.Pod) error
|
||||
DeletePod(ctx context.Context, pod *v1.Pod) error
|
||||
|
||||
// GetPod retrieves a pod by name from the provider (can be cached).
|
||||
GetPod(namespace, name string) (*v1.Pod, error)
|
||||
GetPod(ctx context.Context, namespace, name string) (*v1.Pod, error)
|
||||
|
||||
// GetContainerLogs retrieves the logs of a container by name from the provider.
|
||||
GetContainerLogs(namespace, podName, containerName string, tail int) (string, error)
|
||||
GetContainerLogs(ctx context.Context, namespace, podName, containerName string, tail int) (string, error)
|
||||
|
||||
// ExecInContainer executes a command in a container in the pod, copying data
|
||||
// between in/out/err and the container's stdin/stdout/stderr.
|
||||
ExecInContainer(name string, uid types.UID, container string, cmd []string, in io.Reader, out, err io.WriteCloser, tty bool, resize <-chan remotecommand.TerminalSize, timeout time.Duration) error
|
||||
|
||||
// GetPodStatus retrieves the status of a pod by name from the provider.
|
||||
GetPodStatus(namespace, name string) (*v1.PodStatus, error)
|
||||
GetPodStatus(ctx context.Context, namespace, name string) (*v1.PodStatus, error)
|
||||
|
||||
// GetPods retrieves a list of all pods running on the provider (can be cached).
|
||||
GetPods() ([]*v1.Pod, error)
|
||||
GetPods(context.Context) ([]*v1.Pod, error)
|
||||
|
||||
// Capacity returns a resource list with the capacity constraints of the provider.
|
||||
Capacity() v1.ResourceList
|
||||
Capacity(context.Context) v1.ResourceList
|
||||
|
||||
// NodeConditions returns a list of conditions (Ready, OutOfDisk, etc), which is
|
||||
// polled periodically to update the node status within Kubernetes.
|
||||
NodeConditions() []v1.NodeCondition
|
||||
NodeConditions(context.Context) []v1.NodeCondition
|
||||
|
||||
// NodeAddresses returns a list of addresses for the node status
|
||||
// within Kubernetes.
|
||||
NodeAddresses() []v1.NodeAddress
|
||||
NodeAddresses(context.Context) []v1.NodeAddress
|
||||
|
||||
// NodeDaemonEndpoints returns NodeDaemonEndpoints for the node status
|
||||
// within Kubernetes.
|
||||
NodeDaemonEndpoints() *v1.NodeDaemonEndpoints
|
||||
NodeDaemonEndpoints(context.Context) *v1.NodeDaemonEndpoints
|
||||
|
||||
// OperatingSystem returns the operating system the provider is for.
|
||||
OperatingSystem() string
|
||||
|
||||
@@ -189,11 +189,11 @@ func (s *Server) registerNode(ctx context.Context) error {
|
||||
Architecture: "amd64",
|
||||
KubeletVersion: "v1.11.2",
|
||||
},
|
||||
Capacity: s.provider.Capacity(),
|
||||
Allocatable: s.provider.Capacity(),
|
||||
Conditions: s.provider.NodeConditions(),
|
||||
Addresses: s.provider.NodeAddresses(),
|
||||
DaemonEndpoints: *s.provider.NodeDaemonEndpoints(),
|
||||
Capacity: s.provider.Capacity(ctx),
|
||||
Allocatable: s.provider.Capacity(ctx),
|
||||
Conditions: s.provider.NodeConditions(ctx),
|
||||
Addresses: s.provider.NodeAddresses(ctx),
|
||||
DaemonEndpoints: *s.provider.NodeDaemonEndpoints(ctx),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -297,13 +297,13 @@ func (s *Server) updateNode(ctx context.Context) {
|
||||
}
|
||||
|
||||
n.ResourceVersion = "" // Blank out resource version to prevent object has been modified error
|
||||
n.Status.Conditions = s.provider.NodeConditions()
|
||||
n.Status.Conditions = s.provider.NodeConditions(ctx)
|
||||
|
||||
capacity := s.provider.Capacity()
|
||||
capacity := s.provider.Capacity(ctx)
|
||||
n.Status.Capacity = capacity
|
||||
n.Status.Allocatable = capacity
|
||||
|
||||
n.Status.Addresses = s.provider.NodeAddresses()
|
||||
n.Status.Addresses = s.provider.NodeAddresses(ctx)
|
||||
|
||||
n, err = s.k8sClient.CoreV1().Nodes().UpdateStatus(n)
|
||||
if err != nil {
|
||||
@@ -319,7 +319,7 @@ func (s *Server) reconcile(ctx context.Context) {
|
||||
logger.Debug("Start reconcile")
|
||||
defer logger.Debug("End reconcile")
|
||||
|
||||
providerPods, err := s.provider.GetPods()
|
||||
providerPods, err := s.provider.GetPods(ctx)
|
||||
if err != nil {
|
||||
logger.WithError(err).Error("Error getting pod list from provider")
|
||||
return
|
||||
@@ -377,7 +377,7 @@ func (s *Server) createPod(ctx context.Context, pod *corev1.Pod) error {
|
||||
|
||||
logger := log.G(ctx).WithField("pod", pod.Name)
|
||||
|
||||
if origErr := s.provider.CreatePod(pod); origErr != nil {
|
||||
if origErr := s.provider.CreatePod(ctx, pod); origErr != nil {
|
||||
pod.ResourceVersion = "" // Blank out resource version to prevent object has been modified error
|
||||
pod.Status.Phase = corev1.PodFailed
|
||||
pod.Status.Reason = PodStatusReason_ProviderFailed
|
||||
@@ -398,7 +398,7 @@ func (s *Server) createPod(ctx context.Context, pod *corev1.Pod) error {
|
||||
|
||||
func (s *Server) deletePod(ctx context.Context, pod *corev1.Pod) error {
|
||||
var delErr error
|
||||
if delErr = s.provider.DeletePod(pod); delErr != nil && errors.IsNotFound(delErr) {
|
||||
if delErr = s.provider.DeletePod(ctx, pod); delErr != nil && errors.IsNotFound(delErr) {
|
||||
return delErr
|
||||
}
|
||||
|
||||
@@ -430,7 +430,7 @@ func (s *Server) updatePodStatuses(ctx context.Context) {
|
||||
continue
|
||||
}
|
||||
|
||||
status, err := s.provider.GetPodStatus(pod.Namespace, pod.Name)
|
||||
status, err := s.provider.GetPodStatus(ctx, pod.Namespace, pod.Name)
|
||||
if err != nil {
|
||||
log.G(ctx).WithField("pod", pod.Name).Error("Error retrieving pod status")
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user