Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding in customized user-agent #69

Merged
merged 2 commits into from
Sep 19, 2017
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion pkg/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,37 @@ limitations under the License.
package client

import (
"fmt"
"runtime"

"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"

"github.com/heptio/ark/pkg/buildinfo"
)

// Config returns a *rest.Config, using either the kubeconfig (if specified) or an in-cluster
// configuration.
func Config(kubeconfig string) (*rest.Config, error) {
func Config(kubeconfig, baseName string) (*rest.Config, error) {
loader := clientcmd.NewDefaultClientConfigLoadingRules()
loader.ExplicitPath = kubeconfig
clientConfig, err := clientcmd.BuildConfigFromKubeconfigGetter("", loader.Load)
if err != nil {
return nil, err
}

clientConfig.UserAgent = buildUserAgent(
baseName,
buildinfo.Version,
runtime.GOOS,
runtime.GOARCH,
buildinfo.GitSHA)

return clientConfig, nil
}

// buildUserAgent builds a User-Agent string from given args.
func buildUserAgent(command, version, os, arch, commit string) string {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that we have buildinfo.GitTreeState, could you have it so the commit portion of the user agent string appends -dirty if it's dirty?

return fmt.Sprintf(
"%s/%s (%s/%s) %s", command, version, os, arch, commit)
}
8 changes: 5 additions & 3 deletions pkg/client/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,14 @@ type Factory interface {
type factory struct {
flags *pflag.FlagSet
kubeconfig string
baseName string
}

// NewFactory returns a Factory.
func NewFactory() Factory {
func NewFactory(baseName string) Factory {
f := &factory{
flags: pflag.NewFlagSet("", pflag.ContinueOnError),
flags: pflag.NewFlagSet("", pflag.ContinueOnError),
baseName: baseName,
}
f.flags.StringVar(&f.kubeconfig, "kubeconfig", "", "Path to the kubeconfig file to use to talk to the Kubernetes apiserver. If unset, try the environment variable KUBECONFIG, as well as in-cluster configuration")

Expand All @@ -51,7 +53,7 @@ func (f *factory) BindFlags(flags *pflag.FlagSet) {
}

func (f *factory) Client() (clientset.Interface, error) {
clientConfig, err := Config(f.kubeconfig)
clientConfig, err := Config(f.kubeconfig, f.baseName)
if err != nil {
return nil, err
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/cmd/ark/ark.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,14 @@ and operationally robust way to back up your application state and
associated data.`,
}

f := client.NewFactory()
f := client.NewFactory(name)
f.BindFlags(c.PersistentFlags())

c.AddCommand(
backup.NewCommand(f),
schedule.NewCommand(f),
restore.NewCommand(f),
server.NewCommand(),
server.NewCommand(name),
version.NewCommand(),
)

Expand Down
8 changes: 4 additions & 4 deletions pkg/cmd/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,15 @@ import (
"github.com/heptio/ark/pkg/util/kube"
)

func NewCommand() *cobra.Command {
func NewCommand(baseName string) *cobra.Command {
var kubeconfig string

var command = &cobra.Command{
Use: "server",
Short: "Run the ark server",
Long: "Run the ark server",
Run: func(c *cobra.Command, args []string) {
s, err := newServer(kubeconfig)
s, err := newServer(kubeconfig, baseName+"-server")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: you could just use c.Parent().Name() and c.Name() to construct this rather than passing in the baseName and hardcoding "server"

cmd.CheckError(err)

cmd.CheckError(s.run())
Expand All @@ -89,8 +89,8 @@ type server struct {
cancelFunc context.CancelFunc
}

func newServer(kubeconfig string) (*server, error) {
clientConfig, err := client.Config(kubeconfig)
func newServer(kubeconfig, baseName string) (*server, error) {
clientConfig, err := client.Config(kubeconfig, baseName)
if err != nil {
return nil, err
}
Expand Down