mirror of
https://github.com/edgelesssys/constellation.git
synced 2025-08-03 12:36:09 -04:00
Wait for kube api during init (#440)
* kubernetes: wait for KubeAPI to be reachable
This commit is contained in:
parent
b89fae8062
commit
9ad377284d
9 changed files with 190 additions and 10 deletions
47
bootstrapper/internal/kubernetes/kubeWaiter/waiter.go
Normal file
47
bootstrapper/internal/kubernetes/kubeWaiter/waiter.go
Normal file
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
Copyright (c) Edgeless Systems GmbH
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
package kubewaiter
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
|
||||
"github.com/edgelesssys/constellation/v2/internal/retry"
|
||||
)
|
||||
|
||||
// KubernetesClient is an interface for the Kubernetes client.
|
||||
// It is used to check if the Kubernetes API is available.
|
||||
type KubernetesClient interface {
|
||||
ListAllNamespaces(ctx context.Context) (*corev1.NamespaceList, error)
|
||||
}
|
||||
|
||||
// CloudKubeAPIWaiter waits for the Kubernetes API to be available.
|
||||
type CloudKubeAPIWaiter struct{}
|
||||
|
||||
// Wait waits for the Kubernetes API to be available.
|
||||
// Note that the kubernetesClient must have the kubeconfig already set.
|
||||
func (w *CloudKubeAPIWaiter) Wait(ctx context.Context, kubernetesClient KubernetesClient) error {
|
||||
funcAlwaysRetriable := func(err error) bool { return true }
|
||||
|
||||
doer := &kubeDoer{kubeClient: kubernetesClient}
|
||||
retrier := retry.NewIntervalRetrier(doer, 5*time.Second, funcAlwaysRetriable)
|
||||
if err := retrier.Do(ctx); err != nil {
|
||||
return doer.Do(context.Background())
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type kubeDoer struct {
|
||||
kubeClient KubernetesClient
|
||||
}
|
||||
|
||||
func (d *kubeDoer) Do(ctx context.Context) error {
|
||||
_, err := d.kubeClient.ListAllNamespaces(ctx)
|
||||
return err
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue