1
0
mirror of https://github.com/rancher/norman.git synced 2025-04-27 11:11:21 +00:00
norman/restwatch/rest.go
2024-06-04 15:32:09 +05:30

50 lines
1.0 KiB
Go

package restwatch
import (
"time"
"github.com/rancher/wrangler/v3/pkg/ratelimit"
"k8s.io/client-go/rest"
)
type WatchClient interface {
WatchClient() rest.Interface
}
func UnversionedRESTClientFor(config *rest.Config) (rest.Interface, error) {
// k8s <= 1.16 would not rate limit when calling UnversionedRESTClientFor(config)
// this keeps that behavior which seems to be relied on in Rancher.
if config.QPS == 0.0 && config.RateLimiter == nil {
config.RateLimiter = ratelimit.None
}
client, err := rest.UnversionedRESTClientFor(config)
if err != nil {
return nil, err
}
if config.Timeout == 0 {
return client, err
}
newConfig := *config
newConfig.Timeout = 30 * time.Minute
watchClient, err := rest.UnversionedRESTClientFor(&newConfig)
if err != nil {
return nil, err
}
return &clientWithWatch{
RESTClient: client,
watchClient: watchClient,
}, nil
}
type clientWithWatch struct {
*rest.RESTClient
watchClient *rest.RESTClient
}
func (c *clientWithWatch) WatchClient() rest.Interface {
return c.watchClient
}