rebase: Bump sigs.k8s.io/controller-runtime from 0.14.4 to 0.14.6

Bumps [sigs.k8s.io/controller-runtime](https://github.com/kubernetes-sigs/controller-runtime) from 0.14.4 to 0.14.6.
- [Release notes](https://github.com/kubernetes-sigs/controller-runtime/releases)
- [Changelog](https://github.com/kubernetes-sigs/controller-runtime/blob/main/RELEASE.md)
- [Commits](https://github.com/kubernetes-sigs/controller-runtime/compare/v0.14.4...v0.14.6)

---
updated-dependencies:
- dependency-name: sigs.k8s.io/controller-runtime
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
This commit is contained in:
dependabot[bot] 2023-04-18 08:08:00 +00:00 committed by mergify[bot]
parent d8e6c37743
commit 08f32b8cf2
15 changed files with 151 additions and 104 deletions

2
go.mod
View File

@ -44,7 +44,7 @@ require (
k8s.io/mount-utils v0.26.2 k8s.io/mount-utils v0.26.2
k8s.io/pod-security-admission v0.0.0 k8s.io/pod-security-admission v0.0.0
k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 k8s.io/utils v0.0.0-20221128185143-99ec85e7a448
sigs.k8s.io/controller-runtime v0.14.4 sigs.k8s.io/controller-runtime v0.14.6
) )
require ( require (

4
go.sum
View File

@ -1790,8 +1790,8 @@ rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.35 h1:+xBL5uTc+BkPBwmMi3vYfUJjq+N3K+H6PXeETwf5cPI= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.35 h1:+xBL5uTc+BkPBwmMi3vYfUJjq+N3K+H6PXeETwf5cPI=
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.35/go.mod h1:WxjusMwXlKzfAs4p9km6XJRndVt2FROgMVCE4cdohFo= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.35/go.mod h1:WxjusMwXlKzfAs4p9km6XJRndVt2FROgMVCE4cdohFo=
sigs.k8s.io/controller-runtime v0.2.2/go.mod h1:9dyohw3ZtoXQuV1e766PHUn+cmrRCIcBh6XIMFNMZ+I= sigs.k8s.io/controller-runtime v0.2.2/go.mod h1:9dyohw3ZtoXQuV1e766PHUn+cmrRCIcBh6XIMFNMZ+I=
sigs.k8s.io/controller-runtime v0.14.4 h1:Kd/Qgx5pd2XUL08eOV2vwIq3L9GhIbJ5Nxengbd4/0M= sigs.k8s.io/controller-runtime v0.14.6 h1:oxstGVvXGNnMvY7TAESYk+lzr6S3V5VFxQ6d92KcwQA=
sigs.k8s.io/controller-runtime v0.14.4/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= sigs.k8s.io/controller-runtime v0.14.6/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0=
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k=
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=

2
vendor/modules.txt vendored
View File

@ -1306,7 +1306,7 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client
sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/metrics sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/metrics
sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/common/metrics sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/common/metrics
sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client
# sigs.k8s.io/controller-runtime v0.14.4 # sigs.k8s.io/controller-runtime v0.14.6
## explicit; go 1.19 ## explicit; go 1.19
sigs.k8s.io/controller-runtime/pkg/cache sigs.k8s.io/controller-runtime/pkg/cache
sigs.k8s.io/controller-runtime/pkg/cache/internal sigs.k8s.io/controller-runtime/pkg/cache/internal

View File

@ -452,6 +452,7 @@ func convertToByObject[T any](byGVK map[schema.GroupVersionKind]T, scheme *runti
if !ok { if !ok {
return nil, def, fmt.Errorf("object %T for GVK %q does not implement client.Object", obj, gvk) return nil, def, fmt.Errorf("object %T for GVK %q does not implement client.Object", obj, gvk)
} }
cObj.GetObjectKind().SetGroupVersionKind(gvk)
if byObject == nil { if byObject == nil {
byObject = map[client.Object]T{} byObject = map[client.Object]T{}
} }

View File

@ -95,6 +95,7 @@ func GVKForObject(obj runtime.Object, scheme *runtime.Scheme) (schema.GroupVersi
return gvk, nil return gvk, nil
} }
// Use the given scheme to retrieve all the GVKs for the object.
gvks, isUnversioned, err := scheme.ObjectKinds(obj) gvks, isUnversioned, err := scheme.ObjectKinds(obj)
if err != nil { if err != nil {
return schema.GroupVersionKind{}, err return schema.GroupVersionKind{}, err
@ -103,16 +104,39 @@ func GVKForObject(obj runtime.Object, scheme *runtime.Scheme) (schema.GroupVersi
return schema.GroupVersionKind{}, fmt.Errorf("cannot create group-version-kind for unversioned type %T", obj) return schema.GroupVersionKind{}, fmt.Errorf("cannot create group-version-kind for unversioned type %T", obj)
} }
if len(gvks) < 1 { switch {
return schema.GroupVersionKind{}, fmt.Errorf("no group-version-kinds associated with type %T", obj) case len(gvks) < 1:
} // If the object has no GVK, the object might not have been registered with the scheme.
if len(gvks) > 1 { // or it's not a valid object.
// this should only trigger for things like metav1.XYZ -- return schema.GroupVersionKind{}, fmt.Errorf("no GroupVersionKind associated with Go type %T, was the type registered with the Scheme?", obj)
// normal versioned types should be fine case len(gvks) > 1:
err := fmt.Errorf("multiple GroupVersionKinds associated with Go type %T within the Scheme, this can happen when a type is registered for multiple GVKs at the same time", obj)
// We've found multiple GVKs for the object.
currentGVK := obj.GetObjectKind().GroupVersionKind()
if !currentGVK.Empty() {
// If the base object has a GVK, check if it's in the list of GVKs before using it.
for _, gvk := range gvks {
if gvk == currentGVK {
return gvk, nil
}
}
return schema.GroupVersionKind{}, fmt.Errorf(
"%w: the object's supplied GroupVersionKind %q was not found in the Scheme's list; refusing to guess at one: %q", err, currentGVK, gvks)
}
// This should only trigger for things like metav1.XYZ --
// normal versioned types should be fine.
//
// See https://github.com/kubernetes-sigs/controller-runtime/issues/362
// for more information.
return schema.GroupVersionKind{}, fmt.Errorf( return schema.GroupVersionKind{}, fmt.Errorf(
"multiple group-version-kinds associated with type %T, refusing to guess at one", obj) "%w: callers can either fix their type registration to only register it once, or specify the GroupVersionKind to use for object passed in; refusing to guess at one: %q", err, gvks)
default:
// In any other case, we've found a single GVK for the object.
return gvks[0], nil
} }
return gvks[0], nil
} }
// RESTClientForGVK constructs a new rest.Interface capable of accessing the resource associated // RESTClientForGVK constructs a new rest.Interface capable of accessing the resource associated

View File

@ -33,7 +33,7 @@ type lazyRESTMapper struct {
mapper meta.RESTMapper mapper meta.RESTMapper
client *discovery.DiscoveryClient client *discovery.DiscoveryClient
knownGroups map[string]*restmapper.APIGroupResources knownGroups map[string]*restmapper.APIGroupResources
apiGroups *metav1.APIGroupList apiGroups []metav1.APIGroup
// mutex to provide thread-safe mapper reloading. // mutex to provide thread-safe mapper reloading.
mu sync.Mutex mu sync.Mutex
@ -45,6 +45,7 @@ func newLazyRESTMapperWithClient(discoveryClient *discovery.DiscoveryClient) (me
mapper: restmapper.NewDiscoveryRESTMapper([]*restmapper.APIGroupResources{}), mapper: restmapper.NewDiscoveryRESTMapper([]*restmapper.APIGroupResources{}),
client: discoveryClient, client: discoveryClient,
knownGroups: map[string]*restmapper.APIGroupResources{}, knownGroups: map[string]*restmapper.APIGroupResources{},
apiGroups: []metav1.APIGroup{},
}, nil }, nil
} }
@ -147,7 +148,7 @@ func (m *lazyRESTMapper) addKnownGroupAndReload(groupName string, versions ...st
// This operation requires 2 requests: /api and /apis, but only once. For all subsequent calls // This operation requires 2 requests: /api and /apis, but only once. For all subsequent calls
// this data will be taken from cache. // this data will be taken from cache.
if len(versions) == 0 { if len(versions) == 0 {
apiGroup, err := m.findAPIGroupByName(groupName) apiGroup, err := m.findAPIGroupByNameLocked(groupName)
if err != nil { if err != nil {
return err return err
} }
@ -176,11 +177,22 @@ func (m *lazyRESTMapper) addKnownGroupAndReload(groupName string, versions ...st
} }
// Update information for group resources about the API group by adding new versions. // Update information for group resources about the API group by adding new versions.
// Ignore the versions that are already registered.
for _, version := range versions { for _, version := range versions {
groupResources.Group.Versions = append(groupResources.Group.Versions, metav1.GroupVersionForDiscovery{ found := false
GroupVersion: metav1.GroupVersion{Group: groupName, Version: version}.String(), for _, v := range groupResources.Group.Versions {
Version: version, if v.Version == version {
}) found = true
break
}
}
if !found {
groupResources.Group.Versions = append(groupResources.Group.Versions, metav1.GroupVersionForDiscovery{
GroupVersion: metav1.GroupVersion{Group: groupName, Version: version}.String(),
Version: version,
})
}
} }
// Update data in the cache. // Update data in the cache.
@ -197,28 +209,34 @@ func (m *lazyRESTMapper) addKnownGroupAndReload(groupName string, versions ...st
return nil return nil
} }
// findAPIGroupByName returns API group by its name. // findAPIGroupByNameLocked returns API group by its name.
func (m *lazyRESTMapper) findAPIGroupByName(groupName string) (metav1.APIGroup, error) { func (m *lazyRESTMapper) findAPIGroupByNameLocked(groupName string) (metav1.APIGroup, error) {
// Ensure that required info about existing API groups is received and stored in the mapper. // Looking in the cache first.
// It will make 2 API calls to /api and /apis, but only once. for _, apiGroup := range m.apiGroups {
if m.apiGroups == nil { if groupName == apiGroup.Name {
apiGroups, err := m.client.ServerGroups() return apiGroup, nil
if err != nil {
return metav1.APIGroup{}, fmt.Errorf("failed to get server groups: %w", err)
}
if len(apiGroups.Groups) == 0 {
return metav1.APIGroup{}, fmt.Errorf("received an empty API groups list")
}
m.apiGroups = apiGroups
}
for i := range m.apiGroups.Groups {
if groupName == (&m.apiGroups.Groups[i]).Name {
return m.apiGroups.Groups[i], nil
} }
} }
// Update the cache if nothing was found.
apiGroups, err := m.client.ServerGroups()
if err != nil {
return metav1.APIGroup{}, fmt.Errorf("failed to get server groups: %w", err)
}
if len(apiGroups.Groups) == 0 {
return metav1.APIGroup{}, fmt.Errorf("received an empty API groups list")
}
m.apiGroups = apiGroups.Groups
// Looking in the cache again.
for _, apiGroup := range m.apiGroups {
if groupName == apiGroup.Name {
return apiGroup, nil
}
}
// If there is still nothing, return an error.
return metav1.APIGroup{}, fmt.Errorf("failed to find API group %s", groupName) return metav1.APIGroup{}, fmt.Errorf("failed to find API group %s", groupName)
} }

View File

@ -24,24 +24,20 @@ import (
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/apimachinery/pkg/runtime/serializer"
utilruntime "k8s.io/apimachinery/pkg/util/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"sigs.k8s.io/controller-runtime/pkg/config/v1alpha1" //nolint:staticcheck "sigs.k8s.io/controller-runtime/pkg/config/v1alpha1"
) )
// ControllerManagerConfiguration defines the functions necessary to parse a config file // ControllerManagerConfiguration defines the functions necessary to parse a config file
// and to configure the Options struct for the ctrl.Manager. // and to configure the Options struct for the ctrl.Manager.
//
// Deprecated: This package has been deprecated and will be removed in a future release.
type ControllerManagerConfiguration interface { type ControllerManagerConfiguration interface {
runtime.Object runtime.Object
// Complete returns the versioned configuration // Complete returns the versioned configuration
Complete() (v1alpha1.ControllerManagerConfigurationSpec, error) //nolint:staticcheck Complete() (v1alpha1.ControllerManagerConfigurationSpec, error)
} }
// DeferredFileLoader is used to configure the decoder for loading controller // DeferredFileLoader is used to configure the decoder for loading controller
// runtime component config types. // runtime component config types.
//
// Deprecated: This package has been deprecated and will be removed in a future release.
type DeferredFileLoader struct { type DeferredFileLoader struct {
ControllerManagerConfiguration ControllerManagerConfiguration
path string path string
@ -56,8 +52,6 @@ type DeferredFileLoader struct {
// Defaults: // Defaults:
// * Path: "./config.yaml" // * Path: "./config.yaml"
// * Kind: GenericControllerManagerConfiguration // * Kind: GenericControllerManagerConfiguration
//
// Deprecated: This package has been deprecated and will be removed in a future release.
func File() *DeferredFileLoader { func File() *DeferredFileLoader {
scheme := runtime.NewScheme() scheme := runtime.NewScheme()
utilruntime.Must(v1alpha1.AddToScheme(scheme)) utilruntime.Must(v1alpha1.AddToScheme(scheme))
@ -69,8 +63,6 @@ func File() *DeferredFileLoader {
} }
// Complete will use sync.Once to set the scheme. // Complete will use sync.Once to set the scheme.
//
// Deprecated: This package has been deprecated and will be removed in a future release.
func (d *DeferredFileLoader) Complete() (v1alpha1.ControllerManagerConfigurationSpec, error) { func (d *DeferredFileLoader) Complete() (v1alpha1.ControllerManagerConfigurationSpec, error) {
d.once.Do(d.loadFile) d.once.Do(d.loadFile)
if d.err != nil { if d.err != nil {
@ -79,33 +71,25 @@ func (d *DeferredFileLoader) Complete() (v1alpha1.ControllerManagerConfiguration
return d.ControllerManagerConfiguration.Complete() return d.ControllerManagerConfiguration.Complete()
} }
// AtPath will set the path to load the file for the decoder // AtPath will set the path to load the file for the decoder.
//
// Deprecated: This package has been deprecated and will be removed in a future release.
func (d *DeferredFileLoader) AtPath(path string) *DeferredFileLoader { func (d *DeferredFileLoader) AtPath(path string) *DeferredFileLoader {
d.path = path d.path = path
return d return d
} }
// OfKind will set the type to be used for decoding the file into. // OfKind will set the type to be used for decoding the file into.
//
// Deprecated: This package has been deprecated and will be removed in a future release.
func (d *DeferredFileLoader) OfKind(obj ControllerManagerConfiguration) *DeferredFileLoader { func (d *DeferredFileLoader) OfKind(obj ControllerManagerConfiguration) *DeferredFileLoader {
d.ControllerManagerConfiguration = obj d.ControllerManagerConfiguration = obj
return d return d
} }
// InjectScheme will configure the scheme to be used for decoding the file. // InjectScheme will configure the scheme to be used for decoding the file.
//
// Deprecated: This package has been deprecated and will be removed in a future release.
func (d *DeferredFileLoader) InjectScheme(scheme *runtime.Scheme) error { func (d *DeferredFileLoader) InjectScheme(scheme *runtime.Scheme) error {
d.scheme = scheme d.scheme = scheme
return nil return nil
} }
// loadFile is used from the mutex.Once to load the file. // loadFile is used from the mutex.Once to load the file.
//
// Deprecated: This package has been deprecated and will be removed in a future release.
func (d *DeferredFileLoader) loadFile() { func (d *DeferredFileLoader) loadFile() {
if d.scheme == nil { if d.scheme == nil {
d.err = fmt.Errorf("scheme not supplied to controller configuration loader") d.err = fmt.Errorf("scheme not supplied to controller configuration loader")

View File

@ -22,6 +22,4 @@ limitations under the License.
// This uses a deferred file decoding allowing you to chain your configuration // This uses a deferred file decoding allowing you to chain your configuration
// setup. You can pass this into manager.Options#File and it will load your // setup. You can pass this into manager.Options#File and it will load your
// config. // config.
//
// Deprecated: This package has been deprecated and will be removed in a future release.
package config package config

View File

@ -17,6 +17,4 @@ limitations under the License.
// Package v1alpha1 provides the ControllerManagerConfiguration used for // Package v1alpha1 provides the ControllerManagerConfiguration used for
// configuring ctrl.Manager // configuring ctrl.Manager
// +kubebuilder:object:generate=true // +kubebuilder:object:generate=true
//
// Deprecated: This package has been deprecated and will be removed in a future release.
package v1alpha1 package v1alpha1

View File

@ -23,18 +23,12 @@ import (
var ( var (
// GroupVersion is group version used to register these objects. // GroupVersion is group version used to register these objects.
//
// Deprecated: This package has been deprecated and will be removed in a future release.
GroupVersion = schema.GroupVersion{Group: "controller-runtime.sigs.k8s.io", Version: "v1alpha1"} GroupVersion = schema.GroupVersion{Group: "controller-runtime.sigs.k8s.io", Version: "v1alpha1"}
// SchemeBuilder is used to add go types to the GroupVersionKind scheme. // SchemeBuilder is used to add go types to the GroupVersionKind scheme.
//
// Deprecated: This package has been deprecated and will be removed in a future release.
SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}
// AddToScheme adds the types in this group-version to the given scheme. // AddToScheme adds the types in this group-version to the given scheme.
//
// Deprecated: This package has been deprecated and will be removed in a future release.
AddToScheme = SchemeBuilder.AddToScheme AddToScheme = SchemeBuilder.AddToScheme
) )

View File

@ -25,8 +25,6 @@ import (
) )
// ControllerManagerConfigurationSpec defines the desired state of GenericControllerManagerConfiguration. // ControllerManagerConfigurationSpec defines the desired state of GenericControllerManagerConfiguration.
//
// Deprecated: This package has been deprecated and will be removed in a future release.
type ControllerManagerConfigurationSpec struct { type ControllerManagerConfigurationSpec struct {
// SyncPeriod determines the minimum frequency at which watched resources are // SyncPeriod determines the minimum frequency at which watched resources are
// reconciled. A lower period will correct entropy more quickly, but reduce // reconciled. A lower period will correct entropy more quickly, but reduce
@ -77,8 +75,6 @@ type ControllerManagerConfigurationSpec struct {
// ControllerConfigurationSpec defines the global configuration for // ControllerConfigurationSpec defines the global configuration for
// controllers registered with the manager. // controllers registered with the manager.
//
// Deprecated: This package has been deprecated and will be removed in a future release.
type ControllerConfigurationSpec struct { type ControllerConfigurationSpec struct {
// GroupKindConcurrency is a map from a Kind to the number of concurrent reconciliation // GroupKindConcurrency is a map from a Kind to the number of concurrent reconciliation
// allowed for that controller. // allowed for that controller.
@ -153,20 +149,14 @@ type ControllerWebhook struct {
// +kubebuilder:object:root=true // +kubebuilder:object:root=true
// ControllerManagerConfiguration is the Schema for the GenericControllerManagerConfigurations API. // ControllerManagerConfiguration is the Schema for the GenericControllerManagerConfigurations API.
//
// Deprecated: This package has been deprecated and will be removed in a future release.
type ControllerManagerConfiguration struct { type ControllerManagerConfiguration struct {
metav1.TypeMeta `json:",inline"` metav1.TypeMeta `json:",inline"`
// ControllerManagerConfiguration returns the contfigurations for controllers // ControllerManagerConfiguration returns the contfigurations for controllers
//
// Deprecated: This package has been deprecated and will be removed in a future release.
ControllerManagerConfigurationSpec `json:",inline"` ControllerManagerConfigurationSpec `json:",inline"`
} }
// Complete returns the configuration for controller-runtime. // Complete returns the configuration for controller-runtime.
//
// Deprecated: This package has been deprecated and will be removed in a future release.
func (c *ControllerManagerConfigurationSpec) Complete() (ControllerManagerConfigurationSpec, error) { func (c *ControllerManagerConfigurationSpec) Complete() (ControllerManagerConfigurationSpec, error) {
return *c, nil return *c, nil
} }

View File

@ -141,7 +141,7 @@ func NewUnmanaged(name string, mgr manager.Manager, options Options) (Controller
} }
if options.RecoverPanic == nil { if options.RecoverPanic == nil {
options.RecoverPanic = mgr.GetControllerOptions().RecoverPanic //nolint:staticcheck options.RecoverPanic = mgr.GetControllerOptions().RecoverPanic
} }
// Create controller with dependencies set // Create controller with dependencies set

View File

@ -41,7 +41,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/cache" "sigs.k8s.io/controller-runtime/pkg/cache"
"sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/cluster" "sigs.k8s.io/controller-runtime/pkg/cluster"
"sigs.k8s.io/controller-runtime/pkg/config/v1alpha1" //nolint:staticcheck "sigs.k8s.io/controller-runtime/pkg/config/v1alpha1"
"sigs.k8s.io/controller-runtime/pkg/healthz" "sigs.k8s.io/controller-runtime/pkg/healthz"
"sigs.k8s.io/controller-runtime/pkg/internal/httpserver" "sigs.k8s.io/controller-runtime/pkg/internal/httpserver"
intrec "sigs.k8s.io/controller-runtime/pkg/internal/recorder" intrec "sigs.k8s.io/controller-runtime/pkg/internal/recorder"
@ -108,7 +108,7 @@ type controllerManager struct {
healthzHandler *healthz.Handler healthzHandler *healthz.Handler
// controllerOptions are the global controller options. // controllerOptions are the global controller options.
controllerOptions v1alpha1.ControllerConfigurationSpec //nolint:staticcheck controllerOptions v1alpha1.ControllerConfigurationSpec
// Logger is the logger that should be used by this manager. // Logger is the logger that should be used by this manager.
// If none is set, it defaults to log.Log global logger. // If none is set, it defaults to log.Log global logger.
@ -325,7 +325,7 @@ func (cm *controllerManager) GetLogger() logr.Logger {
return cm.logger return cm.logger
} }
func (cm *controllerManager) GetControllerOptions() v1alpha1.ControllerConfigurationSpec { //nolint:staticcheck func (cm *controllerManager) GetControllerOptions() v1alpha1.ControllerConfigurationSpec {
return cm.controllerOptions return cm.controllerOptions
} }
@ -528,7 +528,12 @@ func (cm *controllerManager) engageStopProcedure(stopComplete <-chan struct{}) e
// //
// The shutdown context immediately expires if the gracefulShutdownTimeout is not set. // The shutdown context immediately expires if the gracefulShutdownTimeout is not set.
var shutdownCancel context.CancelFunc var shutdownCancel context.CancelFunc
cm.shutdownCtx, shutdownCancel = context.WithTimeout(context.Background(), cm.gracefulShutdownTimeout) if cm.gracefulShutdownTimeout < 0 {
// We want to wait forever for the runnables to stop.
cm.shutdownCtx, shutdownCancel = context.WithCancel(context.Background())
} else {
cm.shutdownCtx, shutdownCancel = context.WithTimeout(context.Background(), cm.gracefulShutdownTimeout)
}
defer shutdownCancel() defer shutdownCancel()
// Start draining the errors before acquiring the lock to make sure we don't deadlock // Start draining the errors before acquiring the lock to make sure we don't deadlock

View File

@ -36,8 +36,8 @@ import (
"sigs.k8s.io/controller-runtime/pkg/cache" "sigs.k8s.io/controller-runtime/pkg/cache"
"sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/cluster" "sigs.k8s.io/controller-runtime/pkg/cluster"
"sigs.k8s.io/controller-runtime/pkg/config" //nolint:staticcheck "sigs.k8s.io/controller-runtime/pkg/config"
"sigs.k8s.io/controller-runtime/pkg/config/v1alpha1" //nolint:staticcheck "sigs.k8s.io/controller-runtime/pkg/config/v1alpha1"
"sigs.k8s.io/controller-runtime/pkg/healthz" "sigs.k8s.io/controller-runtime/pkg/healthz"
intrec "sigs.k8s.io/controller-runtime/pkg/internal/recorder" intrec "sigs.k8s.io/controller-runtime/pkg/internal/recorder"
"sigs.k8s.io/controller-runtime/pkg/leaderelection" "sigs.k8s.io/controller-runtime/pkg/leaderelection"
@ -94,11 +94,7 @@ type Manager interface {
GetLogger() logr.Logger GetLogger() logr.Logger
// GetControllerOptions returns controller global configuration options. // GetControllerOptions returns controller global configuration options.
// GetControllerOptions() v1alpha1.ControllerConfigurationSpec
// Deprecated: In a future version, the returned value is going to be replaced with a
// different type that doesn't rely on component configuration types.
// This is a temporary warning, and no action is needed as of today.
GetControllerOptions() v1alpha1.ControllerConfigurationSpec //nolint:staticcheck
} }
// Options are the arguments for creating a new Manager. // Options are the arguments for creating a new Manager.
@ -301,11 +297,7 @@ type Options struct {
// Controller contains global configuration options for controllers // Controller contains global configuration options for controllers
// registered within this manager. // registered within this manager.
// +optional // +optional
// Controller v1alpha1.ControllerConfigurationSpec
// Deprecated: In a future version, the type of this field is going to be replaced with a
// different struct that doesn't rely on component configuration types.
// This is a temporary warning, and no action is needed as of today.
Controller v1alpha1.ControllerConfigurationSpec //nolint:staticcheck
// makeBroadcaster allows deferring the creation of the broadcaster to // makeBroadcaster allows deferring the creation of the broadcaster to
// avoid leaking goroutines if we never call Start on this manager. It also // avoid leaking goroutines if we never call Start on this manager. It also
@ -464,8 +456,6 @@ func New(config *rest.Config, options Options) (Manager, error) {
// AndFrom will use a supplied type and convert to Options // AndFrom will use a supplied type and convert to Options
// any options already set on Options will be ignored, this is used to allow // any options already set on Options will be ignored, this is used to allow
// cli flags to override anything specified in the config file. // cli flags to override anything specified in the config file.
//
// Deprecated: This method will be removed in a future release.
func (o Options) AndFrom(loader config.ControllerManagerConfiguration) (Options, error) { func (o Options) AndFrom(loader config.ControllerManagerConfiguration) (Options, error) {
if inj, wantsScheme := loader.(inject.Scheme); wantsScheme { if inj, wantsScheme := loader.(inject.Scheme); wantsScheme {
err := inj.InjectScheme(o.Scheme) err := inj.InjectScheme(o.Scheme)
@ -531,8 +521,6 @@ func (o Options) AndFrom(loader config.ControllerManagerConfiguration) (Options,
} }
// AndFromOrDie will use options.AndFrom() and will panic if there are errors. // AndFromOrDie will use options.AndFrom() and will panic if there are errors.
//
// Deprecated: This method will be removed in a future release.
func (o Options) AndFromOrDie(loader config.ControllerManagerConfiguration) Options { func (o Options) AndFromOrDie(loader config.ControllerManagerConfiguration) Options {
o, err := o.AndFrom(loader) o, err := o.AndFrom(loader)
if err != nil { if err != nil {
@ -541,7 +529,7 @@ func (o Options) AndFromOrDie(loader config.ControllerManagerConfiguration) Opti
return o return o
} }
func (o Options) setLeaderElectionConfig(obj v1alpha1.ControllerManagerConfigurationSpec) Options { //nolint:staticcheck func (o Options) setLeaderElectionConfig(obj v1alpha1.ControllerManagerConfigurationSpec) Options {
if obj.LeaderElection == nil { if obj.LeaderElection == nil {
// The source does not have any configuration; noop // The source does not have any configuration; noop
return o return o

View File

@ -62,11 +62,44 @@ var (
Buckets: prometheus.ExponentialBuckets(0.001, 2, 10), Buckets: prometheus.ExponentialBuckets(0.001, 2, 10),
}, []string{"verb", "url"}) }, []string{"verb", "url"})
requestResult = prometheus.NewCounterVec(prometheus.CounterOpts{ // requestLatency is a Prometheus Histogram metric type partitioned by
Subsystem: RestClientSubsystem, // "verb", and "host" labels. It is used for the rest client latency metrics.
Name: ResultKey, requestLatency = prometheus.NewHistogramVec(
Help: "Number of HTTP requests, partitioned by status code, method, and host.", prometheus.HistogramOpts{
}, []string{"code", "method", "host"}) Name: "rest_client_request_duration_seconds",
Help: "Request latency in seconds. Broken down by verb, and host.",
Buckets: []float64{0.005, 0.025, 0.1, 0.25, 0.5, 1.0, 2.0, 4.0, 8.0, 15.0, 30.0, 60.0},
},
[]string{"verb", "host"},
)
requestSize = prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Name: "rest_client_request_size_bytes",
Help: "Request size in bytes. Broken down by verb and host.",
// 64 bytes to 16MB
Buckets: []float64{64, 256, 512, 1024, 4096, 16384, 65536, 262144, 1048576, 4194304, 16777216},
},
[]string{"verb", "host"},
)
responseSize = prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Name: "rest_client_response_size_bytes",
Help: "Response size in bytes. Broken down by verb and host.",
// 64 bytes to 16MB
Buckets: []float64{64, 256, 512, 1024, 4096, 16384, 65536, 262144, 1048576, 4194304, 16777216},
},
[]string{"verb", "host"},
)
requestResult = prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "rest_client_requests_total",
Help: "Number of HTTP requests, partitioned by status code, method, and host.",
},
[]string{"code", "method", "host"},
)
) )
func init() { func init() {
@ -76,11 +109,17 @@ func init() {
// registerClientMetrics sets up the client latency metrics from client-go. // registerClientMetrics sets up the client latency metrics from client-go.
func registerClientMetrics() { func registerClientMetrics() {
// register the metrics with our registry // register the metrics with our registry
Registry.MustRegister(requestLatency)
Registry.MustRegister(requestSize)
Registry.MustRegister(responseSize)
Registry.MustRegister(requestResult) Registry.MustRegister(requestResult)
// register the metrics with client-go // register the metrics with client-go
clientmetrics.Register(clientmetrics.RegisterOpts{ clientmetrics.Register(clientmetrics.RegisterOpts{
RequestResult: &resultAdapter{metric: requestResult}, RequestLatency: &LatencyAdapter{metric: requestLatency},
RequestSize: &sizeAdapter{metric: requestSize},
ResponseSize: &sizeAdapter{metric: responseSize},
RequestResult: &resultAdapter{metric: requestResult},
}) })
} }
@ -102,6 +141,14 @@ func (l *LatencyAdapter) Observe(_ context.Context, verb string, u url.URL, late
l.metric.WithLabelValues(verb, u.String()).Observe(latency.Seconds()) l.metric.WithLabelValues(verb, u.String()).Observe(latency.Seconds())
} }
type sizeAdapter struct {
metric *prometheus.HistogramVec
}
func (s *sizeAdapter) Observe(ctx context.Context, verb string, host string, size float64) {
s.metric.WithLabelValues(verb, host).Observe(size)
}
type resultAdapter struct { type resultAdapter struct {
metric *prometheus.CounterVec metric *prometheus.CounterVec
} }