mirror of https://github.com/fluxcd/cli-utils.git
Merge pull request #517 from ash2k/ash2k/reset-mapper
fix: remove reflection hack
This commit is contained in:
commit
d45357db63
|
|
@ -20,7 +20,6 @@ import (
|
|||
"sigs.k8s.io/cli-utils/cmd/status"
|
||||
"sigs.k8s.io/cli-utils/pkg/inventory"
|
||||
"sigs.k8s.io/cli-utils/pkg/manifestreader"
|
||||
"sigs.k8s.io/cli-utils/pkg/util/factory"
|
||||
|
||||
// This is here rather than in the libraries because of
|
||||
// https://github.com/kubernetes-sigs/kustomize/issues/2060
|
||||
|
|
@ -42,9 +41,7 @@ func main() {
|
|||
flags := cmd.PersistentFlags()
|
||||
kubeConfigFlags := genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag()
|
||||
kubeConfigFlags.AddFlags(flags)
|
||||
matchVersionKubeConfigFlags := util.NewMatchVersionFlags(&factory.CachingRESTClientGetter{
|
||||
Delegate: kubeConfigFlags,
|
||||
})
|
||||
matchVersionKubeConfigFlags := util.NewMatchVersionFlags(kubeConfigFlags)
|
||||
matchVersionKubeConfigFlags.AddFlags(flags)
|
||||
flags.AddGoFlagSet(flag.CommandLine)
|
||||
f := util.NewFactory(matchVersionKubeConfigFlags)
|
||||
|
|
|
|||
|
|
@ -5,14 +5,11 @@ package taskrunner
|
|||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"k8s.io/apimachinery/pkg/api/meta"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/client-go/restmapper"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/cli-utils/pkg/apply/event"
|
||||
"sigs.k8s.io/cli-utils/pkg/kstatus/status"
|
||||
|
|
@ -304,30 +301,5 @@ func (w *WaitTask) updateRESTMapper(taskContext *TaskContext) {
|
|||
}
|
||||
|
||||
klog.V(5).Infof("resetting RESTMapper")
|
||||
ddRESTMapper, err := extractDeferredDiscoveryRESTMapper(w.Mapper)
|
||||
if err != nil {
|
||||
if klog.V(4).Enabled() {
|
||||
klog.Errorf("error resetting RESTMapper: %v", err)
|
||||
}
|
||||
}
|
||||
ddRESTMapper.Reset()
|
||||
}
|
||||
|
||||
// extractDeferredDiscoveryRESTMapper unwraps the provided RESTMapper
|
||||
// interface to get access to the underlying DeferredDiscoveryRESTMapper
|
||||
// that can be reset.
|
||||
func extractDeferredDiscoveryRESTMapper(mapper meta.RESTMapper) (
|
||||
*restmapper.DeferredDiscoveryRESTMapper,
|
||||
error,
|
||||
) {
|
||||
val := reflect.ValueOf(mapper)
|
||||
if val.Type().Kind() != reflect.Struct {
|
||||
return nil, fmt.Errorf("unexpected RESTMapper type: %s", val.Type().String())
|
||||
}
|
||||
fv := val.FieldByName("RESTMapper")
|
||||
ddRESTMapper, ok := fv.Interface().(*restmapper.DeferredDiscoveryRESTMapper)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("unexpected RESTMapper field type: %s", fv.Type())
|
||||
}
|
||||
return ddRESTMapper, nil
|
||||
meta.MaybeResetRESTMapper(w.Mapper)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,46 +0,0 @@
|
|||
// Copyright 2020 The Kubernetes Authors.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package factory
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"k8s.io/apimachinery/pkg/api/meta"
|
||||
"k8s.io/cli-runtime/pkg/genericclioptions"
|
||||
"k8s.io/client-go/discovery"
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
)
|
||||
|
||||
// CachingRESTClientGetter caches the RESTMapper so every call to
|
||||
// ToRESTMapper will get a reference to the same mapper.
|
||||
type CachingRESTClientGetter struct {
|
||||
mx sync.Mutex
|
||||
Delegate genericclioptions.RESTClientGetter
|
||||
|
||||
mapper meta.RESTMapper
|
||||
}
|
||||
|
||||
func (c *CachingRESTClientGetter) ToRESTConfig() (*rest.Config, error) {
|
||||
return c.Delegate.ToRESTConfig()
|
||||
}
|
||||
|
||||
func (c *CachingRESTClientGetter) ToDiscoveryClient() (discovery.CachedDiscoveryInterface, error) {
|
||||
return c.Delegate.ToDiscoveryClient()
|
||||
}
|
||||
|
||||
func (c *CachingRESTClientGetter) ToRESTMapper() (meta.RESTMapper, error) {
|
||||
c.mx.Lock()
|
||||
defer c.mx.Unlock()
|
||||
if c.mapper != nil {
|
||||
return c.mapper, nil
|
||||
}
|
||||
var err error
|
||||
c.mapper, err = c.Delegate.ToRESTMapper()
|
||||
return c.mapper, err
|
||||
}
|
||||
|
||||
func (c *CachingRESTClientGetter) ToRawKubeConfigLoader() clientcmd.ClientConfig {
|
||||
return c.Delegate.ToRawKubeConfigLoader()
|
||||
}
|
||||
|
|
@ -24,7 +24,6 @@ import (
|
|||
"sigs.k8s.io/cli-utils/pkg/apply"
|
||||
"sigs.k8s.io/cli-utils/pkg/common"
|
||||
"sigs.k8s.io/cli-utils/pkg/inventory"
|
||||
"sigs.k8s.io/cli-utils/pkg/util/factory"
|
||||
"sigs.k8s.io/cli-utils/test/e2e/customprovider"
|
||||
ctrl "sigs.k8s.io/controller-runtime"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
|
@ -357,9 +356,7 @@ func newCustomInvDestroyer() *apply.Destroyer {
|
|||
|
||||
func newFactory() util.Factory {
|
||||
kubeConfigFlags := genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag()
|
||||
matchVersionKubeConfigFlags := util.NewMatchVersionFlags(&factory.CachingRESTClientGetter{
|
||||
Delegate: kubeConfigFlags,
|
||||
})
|
||||
matchVersionKubeConfigFlags := util.NewMatchVersionFlags(kubeConfigFlags)
|
||||
return util.NewFactory(matchVersionKubeConfigFlags)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue