type Waiter … type KubeWaiter … // NewKubeWaiter returns a new Waiter object that talks to the given Kubernetes cluster func NewKubeWaiter(client clientset.Interface, timeout time.Duration, writer io.Writer) Waiter { … } type controlPlaneComponent … // getControlPlaneComponents takes a ClusterConfiguration and returns a slice of // control plane components and their secure ports. func getControlPlaneComponents(cfg *kubeadmapi.ClusterConfiguration) []controlPlaneComponent { … } // WaitForControlPlaneComponents waits for all control plane components to report "ok" on /healthz func (w *KubeWaiter) WaitForControlPlaneComponents(cfg *kubeadmapi.ClusterConfiguration) error { … } // WaitForAPI waits for the API Server's /healthz endpoint to report "ok" func (w *KubeWaiter) WaitForAPI() error { … } // WaitForPodsWithLabel will lookup pods with the given label and wait until they are all // reporting status as running. func (w *KubeWaiter) WaitForPodsWithLabel(kvLabel string) error { … } // WaitForPodToDisappear blocks until it timeouts or gets a "NotFound" response from the API Server when getting the Static Pod in question func (w *KubeWaiter) WaitForPodToDisappear(podName string) error { … } // WaitForKubelet blocks until the kubelet /healthz endpoint returns 'ok'. func (w *KubeWaiter) WaitForKubelet(healthzAddress string, healthzPort int32) error { … } // SetTimeout adjusts the timeout to the specified duration func (w *KubeWaiter) SetTimeout(timeout time.Duration) { … } // WaitForStaticPodControlPlaneHashes blocks until it timeouts or gets a hash map for all components and their Static Pods func (w *KubeWaiter) WaitForStaticPodControlPlaneHashes(nodeName string) (map[string]string, error) { … } // WaitForStaticPodSingleHash blocks until it timeouts or gets a hash for a single component and its Static Pod func (w *KubeWaiter) WaitForStaticPodSingleHash(nodeName string, component string) (string, error) { … } // WaitForStaticPodHashChange blocks until it timeouts or notices that the Mirror Pod (for the Static Pod, respectively) has changed // This implicitly means this function blocks until the kubelet has restarted the Static Pod in question func (w *KubeWaiter) WaitForStaticPodHashChange(nodeName, component, previousHash string) error { … } // getStaticPodSingleHash computes hashes for a single Static Pod resource func getStaticPodSingleHash(client clientset.Interface, nodeName string, component string) (string, error) { … }