mirror of
https://github.com/helm/helm.git
synced 2026-05-28 04:35:48 -04:00
ability to create different waiters
Signed-off-by: Austin Abro <AustinAbro321@gmail.com>
This commit is contained in:
parent
cb6d48e6ae
commit
86338215b7
4 changed files with 42 additions and 45 deletions
|
|
@ -371,7 +371,7 @@ func (cfg *Configuration) recordRelease(r *release.Release) {
|
|||
|
||||
// Init initializes the action configuration
|
||||
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 {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -88,6 +88,13 @@ type Client struct {
|
|||
Waiter
|
||||
}
|
||||
|
||||
type WaitStrategy int
|
||||
|
||||
const (
|
||||
StatusWaiter WaitStrategy = iota
|
||||
LegacyWaiter
|
||||
)
|
||||
|
||||
func init() {
|
||||
// Add CRDs to the scheme. They are missing by default.
|
||||
if err := apiextv1.AddToScheme(scheme.Scheme); err != nil {
|
||||
|
|
@ -112,21 +119,37 @@ func getStatusWatcher(factory Factory) (watcher.StatusWatcher, error) {
|
|||
return sw, nil
|
||||
}
|
||||
|
||||
// New creates a new Client.
|
||||
func New(getter genericclioptions.RESTClientGetter, waiter Waiter) (*Client, error) {
|
||||
if getter == nil {
|
||||
getter = genericclioptions.NewConfigFlags(true)
|
||||
}
|
||||
factory := cmdutil.NewFactory(getter)
|
||||
if waiter == nil {
|
||||
func NewWaiter(strategy WaitStrategy, factory Factory, log func(string, ...interface{})) (Waiter, error) {
|
||||
switch strategy {
|
||||
case LegacyWaiter:
|
||||
kc, err := factory.KubernetesClientSet()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &waiter{kubeClient: kc, log: log}, nil
|
||||
case StatusWaiter:
|
||||
sw, err := getStatusWatcher(factory)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
waiter = &statusWaiter{
|
||||
return &statusWaiter{
|
||||
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{
|
||||
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) {
|
||||
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 {
|
||||
t.Fatal(err)
|
||||
}
|
||||
checker := NewReadyChecker(cs, c.Log, PausedAsReady(true))
|
||||
c.Waiter = &waiter{
|
||||
c: checker,
|
||||
log: c.Log,
|
||||
timeout: time.Second * 30,
|
||||
}
|
||||
c.Waiter = waiter
|
||||
resources, err := c.Build(objBody(&podList), false)
|
||||
if err != nil {
|
||||
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 {
|
||||
t.Fatal(err)
|
||||
}
|
||||
checker := NewReadyChecker(cs, c.Log, PausedAsReady(true), CheckJobs(true))
|
||||
c.Waiter = &waiter{
|
||||
c: checker,
|
||||
log: c.Log,
|
||||
timeout: time.Second * 30,
|
||||
}
|
||||
c.Waiter = waiter
|
||||
resources, err := c.Build(objBody(job), false)
|
||||
if err != nil {
|
||||
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 {
|
||||
t.Fatal(err)
|
||||
}
|
||||
checker := NewReadyChecker(cs, c.Log, PausedAsReady(true))
|
||||
c.Waiter = &waiter{
|
||||
c: checker,
|
||||
log: c.Log,
|
||||
timeout: time.Second * 30,
|
||||
}
|
||||
c.Waiter = waiter
|
||||
resources, err := c.Build(objBody(&pod), false)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
@ -679,7 +660,7 @@ func TestWaitDelete(t *testing.T) {
|
|||
|
||||
func TestReal(t *testing.T) {
|
||||
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 {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
@ -692,7 +673,7 @@ func TestReal(t *testing.T) {
|
|||
}
|
||||
|
||||
testSvcEndpointManifest := testServiceManifest + "\n---\n" + testEndpointManifest
|
||||
c, err = New(nil, nil)
|
||||
c, err = New(nil, StatusWaiter)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,13 +46,6 @@ type waiter struct {
|
|||
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 {
|
||||
w.c = NewReadyChecker(w.kubeClient, w.log, PausedAsReady(true))
|
||||
w.timeout = timeout
|
||||
|
|
|
|||
Loading…
Reference in a new issue