Skip to content

Commit

Permalink
set user agent and timeout for remote cluster client
Browse files Browse the repository at this point in the history
  • Loading branch information
nader-ziada committed Jan 8, 2021
1 parent 953ad25 commit e127b3a
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 3 deletions.
9 changes: 9 additions & 0 deletions controllers/remote/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,20 @@ package remote

import (
"context"
"time"

"github.com/pkg/errors"
restclient "k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
kcfg "sigs.k8s.io/cluster-api/util/kubeconfig"
"sigs.k8s.io/cluster-api/util/rest"
"sigs.k8s.io/controller-runtime/pkg/client"
)

const (
defaultClientTimeout = 10 * time.Second
)

// ClusterClientGetter returns a new remote client.
type ClusterClientGetter func(ctx context.Context, c client.Client, cluster client.ObjectKey) (client.Client, error)

Expand Down Expand Up @@ -54,5 +60,8 @@ func RESTConfig(ctx context.Context, c client.Reader, cluster client.ObjectKey)
return nil, errors.Wrapf(err, "failed to create REST configuration for Cluster %s/%s", cluster.Namespace, cluster.Name)
}

restConfig.UserAgent = rest.DefaultClusterAPIUserAgent()
restConfig.Timeout = defaultClientTimeout

return restConfig, nil
}
3 changes: 0 additions & 3 deletions controllers/remote/cluster_cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,6 @@ import (
)

const (
defaultClientTimeout = 10 * time.Second

healthCheckPollInterval = 10 * time.Second
healthCheckRequestTimeout = 5 * time.Second
healthCheckUnhealthyThreshold = 10
Expand Down Expand Up @@ -123,7 +121,6 @@ func (t *ClusterCacheTracker) newClusterAccessor(ctx context.Context, cluster cl
if err != nil {
return nil, errors.Wrapf(err, "error fetching REST client config for remote cluster %q", cluster.String())
}
config.Timeout = defaultClientTimeout

// Create a mapper for it
mapper, err := apiutil.NewDynamicRESTMapper(config)
Expand Down
3 changes: 3 additions & 0 deletions controllers/remote/cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package remote

import (
"testing"
"time"

. "github.com/onsi/gomega"

Expand Down Expand Up @@ -103,6 +104,8 @@ func TestNewClusterClient(t *testing.T) {
restConfig, err := RESTConfig(ctx, client, clusterWithValidKubeConfig)
gs.Expect(err).NotTo(HaveOccurred())
gs.Expect(restConfig.Host).To(Equal("https://test-cluster-api.nodomain.example.com:6443"))
gs.Expect(restConfig.UserAgent).To(Equal("remote.test/unknown (darwin/amd64) cluster.x-k8s.io/unknown"))
gs.Expect(restConfig.Timeout).To(Equal(10 * time.Second))
})

t.Run("cluster with no kubeconfig", func(t *testing.T) {
Expand Down
77 changes: 77 additions & 0 deletions util/rest/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/*
Copyright 2021 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package rest

import (
"fmt"
"os"
"path/filepath"
gruntime "runtime"
"strings"

"sigs.k8s.io/cluster-api/cmd/version"
)

const (
unknowString = "unknown"
)

func buildUserAgent(command, version, os, arch, commit string) string {
return fmt.Sprintf(
"%s/%s (%s/%s) cluster.x-k8s.io/%s", command, version, os, arch, commit)
}

// DefaultClusterAPIUserAgent returns a User-Agent string built from static global vars.
func DefaultClusterAPIUserAgent() string {
return buildUserAgent(
adjustCommand(os.Args[0]),
adjustVersion(version.Get().GitVersion),
gruntime.GOOS,
gruntime.GOARCH,
adjustCommit(version.Get().GitCommit))
}

// adjustCommit returns sufficient significant figures of the commit's git hash.
func adjustCommit(c string) string {
if len(c) == 0 {
return unknowString
}
if len(c) > 7 {
return c[:7]
}
return c
}

// adjustVersion strips "alpha", "beta", etc. from version in form
// major.minor.patch-[alpha|beta|etc].
func adjustVersion(v string) string {
if len(v) == 0 {
return unknowString
}
seg := strings.SplitN(v, "-", 2)
return seg[0]
}

// adjustCommand returns the last component of the
// OS-specific command path for use in User-Agent.
func adjustCommand(p string) string {
// Unlikely, but better than returning "".
if len(p) == 0 {
return unknowString
}
return filepath.Base(p)
}

0 comments on commit e127b3a

Please sign in to comment.