ability to create different waiters

Signed-off-by: Austin Abro <AustinAbro321@gmail.com>
pull/13604/head
Austin Abro 9 months ago
parent cb6d48e6ae
commit 86338215b7
No known key found for this signature in database
GPG Key ID: 92EB5159E403F9D6

@ -371,7 +371,7 @@ func (cfg *Configuration) recordRelease(r *release.Release) {
// Init initializes the action configuration // Init initializes the action configuration
func (cfg *Configuration) Init(getter genericclioptions.RESTClientGetter, namespace, helmDriver string, log DebugLog) error { func (cfg *Configuration) Init(getter genericclioptions.RESTClientGetter, namespace, helmDriver string, log DebugLog) error {
kc, err := kube.New(getter, nil) kc, err := kube.New(getter, kube.StatusWaiter)
if err != nil { if err != nil {
return err return err
} }

@ -88,6 +88,13 @@ type Client struct {
Waiter Waiter
} }
type WaitStrategy int
const (
StatusWaiter WaitStrategy = iota
LegacyWaiter
)
func init() { func init() {
// Add CRDs to the scheme. They are missing by default. // Add CRDs to the scheme. They are missing by default.
if err := apiextv1.AddToScheme(scheme.Scheme); err != nil { if err := apiextv1.AddToScheme(scheme.Scheme); err != nil {
@ -112,21 +119,37 @@ func getStatusWatcher(factory Factory) (watcher.StatusWatcher, error) {
return sw, nil return sw, nil
} }
// New creates a new Client. func NewWaiter(strategy WaitStrategy, factory Factory, log func(string, ...interface{})) (Waiter, error) {
func New(getter genericclioptions.RESTClientGetter, waiter Waiter) (*Client, error) { switch strategy {
if getter == nil { case LegacyWaiter:
getter = genericclioptions.NewConfigFlags(true) kc, err := factory.KubernetesClientSet()
} if err != nil {
factory := cmdutil.NewFactory(getter) return nil, err
if waiter == nil { }
return &waiter{kubeClient: kc, log: log}, nil
case StatusWaiter:
sw, err := getStatusWatcher(factory) sw, err := getStatusWatcher(factory)
if err != nil { if err != nil {
return nil, err return nil, err
} }
waiter = &statusWaiter{ return &statusWaiter{
sw: sw, sw: sw,
log: nopLogger, log: log,
} }, nil
default:
return nil, errors.New("unknown wait strategy")
}
}
// New creates a new Client.
func New(getter genericclioptions.RESTClientGetter, ws WaitStrategy) (*Client, error) {
if getter == nil {
getter = genericclioptions.NewConfigFlags(true)
}
factory := cmdutil.NewFactory(getter)
waiter, err := NewWaiter(ws, factory, nopLogger)
if err != nil {
return nil, err
} }
return &Client{ return &Client{
Factory: factory, Factory: factory,

@ -453,10 +453,6 @@ func TestPerform(t *testing.T) {
} }
} }
// Likely it is not possible to get this test to work with kstatus given that it seems
// kstatus is not making constant get checks on the resources and is instead waiting for events
// Potentially the test could be reworked to make the pods after five seconds
// would need this ->
func TestWait(t *testing.T) { func TestWait(t *testing.T) {
podList := newPodList("starfish", "otter", "squid") podList := newPodList("starfish", "otter", "squid")
@ -517,16 +513,11 @@ func TestWait(t *testing.T) {
} }
}), }),
} }
cs, err := c.getKubeClient() waiter, err := NewWaiter(LegacyWaiter, c.Factory, c.Log)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
checker := NewReadyChecker(cs, c.Log, PausedAsReady(true)) c.Waiter = waiter
c.Waiter = &waiter{
c: checker,
log: c.Log,
timeout: time.Second * 30,
}
resources, err := c.Build(objBody(&podList), false) resources, err := c.Build(objBody(&podList), false)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
@ -579,16 +570,11 @@ func TestWaitJob(t *testing.T) {
} }
}), }),
} }
cs, err := c.getKubeClient() waiter, err := NewWaiter(LegacyWaiter, c.Factory, c.Log)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
checker := NewReadyChecker(cs, c.Log, PausedAsReady(true), CheckJobs(true)) c.Waiter = waiter
c.Waiter = &waiter{
c: checker,
log: c.Log,
timeout: time.Second * 30,
}
resources, err := c.Build(objBody(job), false) resources, err := c.Build(objBody(job), false)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
@ -643,16 +629,11 @@ func TestWaitDelete(t *testing.T) {
} }
}), }),
} }
cs, err := c.getKubeClient() waiter, err := NewWaiter(LegacyWaiter, c.Factory, c.Log)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
checker := NewReadyChecker(cs, c.Log, PausedAsReady(true)) c.Waiter = waiter
c.Waiter = &waiter{
c: checker,
log: c.Log,
timeout: time.Second * 30,
}
resources, err := c.Build(objBody(&pod), false) resources, err := c.Build(objBody(&pod), false)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
@ -679,7 +660,7 @@ func TestWaitDelete(t *testing.T) {
func TestReal(t *testing.T) { func TestReal(t *testing.T) {
t.Skip("This is a live test, comment this line to run") t.Skip("This is a live test, comment this line to run")
c, err := New(nil, nil) c, err := New(nil, StatusWaiter)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -692,7 +673,7 @@ func TestReal(t *testing.T) {
} }
testSvcEndpointManifest := testServiceManifest + "\n---\n" + testEndpointManifest testSvcEndpointManifest := testServiceManifest + "\n---\n" + testEndpointManifest
c, err = New(nil, nil) c, err = New(nil, StatusWaiter)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

@ -46,13 +46,6 @@ type waiter struct {
kubeClient *kubernetes.Clientset kubeClient *kubernetes.Clientset
} }
func (w *waiter) NewLegacyWaiter(kubeClient *kubernetes.Clientset, log func(string, ...interface{})) *waiter {
return &waiter{
log: log,
kubeClient: kubeClient,
}
}
func (w *waiter) Wait(resources ResourceList, timeout time.Duration) error { func (w *waiter) Wait(resources ResourceList, timeout time.Duration) error {
w.c = NewReadyChecker(w.kubeClient, w.log, PausedAsReady(true)) w.c = NewReadyChecker(w.kubeClient, w.log, PausedAsReady(true))
w.timeout = timeout w.timeout = timeout

Loading…
Cancel
Save