Remove StatusPoller factory and support custom status readers

This commit is contained in:
Morten Torkildsen 2021-12-16 19:22:59 +01:00
parent 3064f8b728
commit f33a0cdb32
5 changed files with 32 additions and 41 deletions

View File

@ -19,10 +19,10 @@ import (
"sigs.k8s.io/cli-utils/pkg/kstatus/polling"
"sigs.k8s.io/cli-utils/pkg/kstatus/polling/aggregator"
"sigs.k8s.io/cli-utils/pkg/kstatus/polling/collector"
"sigs.k8s.io/cli-utils/pkg/kstatus/polling/engine"
"sigs.k8s.io/cli-utils/pkg/kstatus/polling/event"
"sigs.k8s.io/cli-utils/pkg/kstatus/status"
"sigs.k8s.io/cli-utils/pkg/manifestreader"
"sigs.k8s.io/cli-utils/pkg/util/factory"
)
func GetStatusRunner(factory cmdutil.Factory, invFactory inventory.InventoryClientFactory, loader manifestreader.ManifestLoader) *StatusRunner {
@ -193,5 +193,5 @@ func allKnownNotifierFunc(cancelFunc context.CancelFunc) collector.ObserverFunc
}
func pollerFactoryFunc(f cmdutil.Factory) (poller.Poller, error) {
return factory.NewStatusPoller(f)
return polling.NewStatusPollerFromFactory(f, []engine.StatusReader{})
}

View File

@ -24,9 +24,10 @@ import (
"sigs.k8s.io/cli-utils/pkg/apply/taskrunner"
"sigs.k8s.io/cli-utils/pkg/common"
"sigs.k8s.io/cli-utils/pkg/inventory"
"sigs.k8s.io/cli-utils/pkg/kstatus/polling"
"sigs.k8s.io/cli-utils/pkg/kstatus/polling/engine"
"sigs.k8s.io/cli-utils/pkg/object"
"sigs.k8s.io/cli-utils/pkg/ordering"
statusfactory "sigs.k8s.io/cli-utils/pkg/util/factory"
)
// NewApplier returns a new Applier.
@ -35,7 +36,7 @@ func NewApplier(factory cmdutil.Factory, invClient inventory.InventoryClient) (*
if err != nil {
return nil, err
}
statusPoller, err := statusfactory.NewStatusPoller(factory)
statusPoller, err := polling.NewStatusPollerFromFactory(factory, []engine.StatusReader{})
if err != nil {
return nil, err
}

View File

@ -20,8 +20,9 @@ import (
"sigs.k8s.io/cli-utils/pkg/apply/taskrunner"
"sigs.k8s.io/cli-utils/pkg/common"
"sigs.k8s.io/cli-utils/pkg/inventory"
"sigs.k8s.io/cli-utils/pkg/kstatus/polling"
"sigs.k8s.io/cli-utils/pkg/kstatus/polling/engine"
"sigs.k8s.io/cli-utils/pkg/object"
statusfactory "sigs.k8s.io/cli-utils/pkg/util/factory"
)
// NewDestroyer returns a new destroyer. It will set up the ApplyOptions and
@ -35,7 +36,7 @@ func NewDestroyer(factory cmdutil.Factory, invClient inventory.InventoryClient)
if err != nil {
return nil, fmt.Errorf("error setting up PruneOptions: %w", err)
}
statusPoller, err := statusfactory.NewStatusPoller(factory)
statusPoller, err := polling.NewStatusPollerFromFactory(factory, []engine.StatusReader{})
if err != nil {
return nil, err
}

View File

@ -5,9 +5,12 @@ package polling
import (
"context"
"fmt"
"time"
"k8s.io/apimachinery/pkg/api/meta"
cmdutil "k8s.io/kubectl/pkg/cmd/util"
"k8s.io/kubectl/pkg/scheme"
"sigs.k8s.io/cli-utils/pkg/kstatus/polling/clusterreader"
"sigs.k8s.io/cli-utils/pkg/kstatus/polling/engine"
"sigs.k8s.io/cli-utils/pkg/kstatus/polling/event"
@ -37,6 +40,27 @@ func NewStatusPoller(reader client.Reader, mapper meta.RESTMapper, customStatusR
}
}
// NewStatusPollerFromFactory creates a new StatusPoller instance from the
// passed in factory.
func NewStatusPollerFromFactory(f cmdutil.Factory, statusReaders []engine.StatusReader) (*StatusPoller, error) {
config, err := f.ToRESTConfig()
if err != nil {
return nil, fmt.Errorf("error getting RESTConfig: %w", err)
}
mapper, err := f.ToRESTMapper()
if err != nil {
return nil, fmt.Errorf("error getting RESTMapper: %w", err)
}
c, err := client.New(config, client.Options{Scheme: scheme.Scheme, Mapper: mapper})
if err != nil {
return nil, fmt.Errorf("error creating client: %w", err)
}
return NewStatusPoller(c, mapper, statusReaders), nil
}
// StatusPoller provides functionality for polling a cluster for status for a set of resources.
type StatusPoller struct {
engine *engine.PollerEngine

View File

@ -1,35 +0,0 @@
// Copyright 2020 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0
package factory
import (
"fmt"
cmdutil "k8s.io/kubectl/pkg/cmd/util"
"k8s.io/kubectl/pkg/scheme"
"sigs.k8s.io/cli-utils/pkg/kstatus/polling"
"sigs.k8s.io/cli-utils/pkg/kstatus/polling/engine"
"sigs.k8s.io/controller-runtime/pkg/client"
)
// NewStatusPoller creates a new StatusPoller instance from the
// passed in factory.
func NewStatusPoller(f cmdutil.Factory) (*polling.StatusPoller, error) {
config, err := f.ToRESTConfig()
if err != nil {
return nil, fmt.Errorf("error getting RESTConfig: %w", err)
}
mapper, err := f.ToRESTMapper()
if err != nil {
return nil, fmt.Errorf("error getting RESTMapper: %w", err)
}
c, err := client.New(config, client.Options{Scheme: scheme.Scheme, Mapper: mapper})
if err != nil {
return nil, fmt.Errorf("error creating client: %w", err)
}
return polling.NewStatusPoller(c, mapper, []engine.StatusReader{}), nil
}