1
0
mirror of https://github.com/rancher/steve.git synced 2025-08-31 06:46:25 +00:00

Add support for modifying the created Factory clients (#602)

Add support for modifying the created Factory clients

This adds a new functional-opt based mechanism for configuring the factory clients, and provides a new function for allowing consumers to provide the QPS and Burst values for configuring clients.
This commit is contained in:
Kevin McDermott
2025-05-13 08:37:37 +01:00
committed by GitHub
parent ea01a40c8d
commit fc5eeae110
2 changed files with 73 additions and 3 deletions

View File

@@ -15,6 +15,13 @@ import (
"k8s.io/client-go/rest"
)
const (
// defaultQPS and defaultBurst are used to configure the rest.Config for
// factory created clients.
defaultQPS float32 = 10000
defaultBurst int = 100
)
type Factory struct {
impersonate bool
tableClientCfg *rest.Config
@@ -47,10 +54,41 @@ func (a *addQuery) WrappedRoundTripper() http.RoundTripper {
return a.next
}
func NewFactory(cfg *rest.Config, impersonate bool) (*Factory, error) {
type factoryOptions struct {
qps float32
burst int
}
func defaultFactoryOptions() *factoryOptions {
return &factoryOptions{
qps: defaultQPS,
burst: defaultBurst,
}
}
// WithQPSAndBurst configures the rest.Config used for creating the clients in
// the factory with the provided burst and qps configuration.
//
// See https://pkg.go.dev/k8s.io/client-go/rest#Config for more.
func WithQPSAndBurst(qps float32, burst int) FactoryOption {
return func(opts *factoryOptions) {
opts.qps = qps
opts.burst = burst
}
}
// FactoryOption is an option-func for configuring the newly created factory.
type FactoryOption func(*factoryOptions)
func NewFactory(cfg *rest.Config, impersonate bool, opts ...FactoryOption) (*Factory, error) {
clientCfg := rest.CopyConfig(cfg)
clientCfg.QPS = 10000
clientCfg.Burst = 100
options := defaultFactoryOptions()
for _, opt := range opts {
opt(options)
}
clientCfg.QPS = options.qps
clientCfg.Burst = options.burst
watchClientCfg := rest.CopyConfig(clientCfg)
watchClientCfg.Timeout = 30 * time.Minute

View File

@@ -0,0 +1,32 @@
package client
import (
"testing"
"github.com/stretchr/testify/assert"
"k8s.io/client-go/rest"
)
func TestWithQPSAndBurst(t *testing.T) {
fo := defaultFactoryOptions()
assert.Equal(t, defaultQPS, fo.qps)
assert.Equal(t, defaultBurst, fo.burst)
WithQPSAndBurst(50, 20)(fo)
assert.Equal(t, float32(50.0), fo.qps)
assert.Equal(t, 20, fo.burst)
}
func TestNewFactoryWithOptions(t *testing.T) {
cfg := &rest.Config{
QPS: 5.0,
Burst: 10,
}
f, err := NewFactory(cfg, false, WithQPSAndBurst(50, 20))
assert.NoError(t, err)
assert.Equal(t, float32(50.0), f.clientCfg.QPS)
assert.Equal(t, 20, f.clientCfg.Burst)
}