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

use the upstream construction for kubeconfig evaluation #19335

Merged
merged 5 commits into from
Apr 13, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
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
2,987 changes: 825 additions & 2,162 deletions contrib/completions/bash/oc

Large diffs are not rendered by default.

2,987 changes: 825 additions & 2,162 deletions contrib/completions/zsh/oc

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion hack/import-restrictions.json
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,6 @@
"github.com/openshift/origin/pkg/build/registry/buildconfig",
"github.com/openshift/origin/pkg/build/util",
"github.com/openshift/origin/pkg/bulk",
"github.com/openshift/origin/pkg/client/cmd",
"github.com/openshift/origin/pkg/client/config",
"github.com/openshift/origin/pkg/cmd/flagtypes",
"github.com/openshift/origin/pkg/cmd/server/admin",
Expand Down
55 changes: 0 additions & 55 deletions pkg/client/config/loader.go

This file was deleted.

16 changes: 4 additions & 12 deletions pkg/client/cmd/clientcmd.go → pkg/cmd/infra/router/clientcmd.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package cmd
package router
Copy link
Contributor

Choose a reason for hiding this comment

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

This one sucks, a bit. Is there a plan to clean it up later on?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This one sucks, a bit. Is there a plan to clean it up later on?

I was planning on never touching it again.

@knobunc @pravisankar this is highlighting that the router uses a different construction for kubeconfig flags and files than anyone else. It was already like this. This pull just makes it very obvious.


import (
"fmt"
Expand All @@ -17,7 +17,6 @@ import (

kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"

"github.com/openshift/origin/pkg/client/config"
"github.com/openshift/origin/pkg/cmd/flagtypes"
"github.com/openshift/origin/pkg/cmd/util"
)
Expand Down Expand Up @@ -64,13 +63,6 @@ func (cfg *Config) Bind(flags *pflag.FlagSet) {
}
}

// BindToFile is used when this config will not be bound to flags, but should load the config file
// from disk if available.
func (cfg *Config) BindToFile() *Config {
cfg.clientConfig = DefaultClientConfig(pflag.NewFlagSet("empty", pflag.ContinueOnError))
return cfg
}

// OpenShiftConfig returns the OpenShift configuration
func (cfg *Config) OpenShiftConfig() *restclient.Config {
err := cfg.bindEnv()
Expand Down Expand Up @@ -205,9 +197,9 @@ func (cfg *Config) bindEnv() error {
}

func DefaultClientConfig(flags *pflag.FlagSet) kclientcmd.ClientConfig {
loadingRules := config.NewOpenShiftClientConfigLoadingRules()
flags.StringVar(&loadingRules.ExplicitPath, config.OpenShiftConfigFlagName, "", "Path to the config file to use for CLI requests.")
cobra.MarkFlagFilename(flags, config.OpenShiftConfigFlagName)
loadingRules := kclientcmd.NewDefaultClientConfigLoadingRules()
flags.StringVar(&loadingRules.ExplicitPath, kclientcmd.OpenShiftKubeConfigFlagName, "", "Path to the config file to use for CLI requests.")
cobra.MarkFlagFilename(flags, kclientcmd.OpenShiftKubeConfigFlagName)

// set our explicit defaults
defaultOverrides := &kclientcmd.ConfigOverrides{ClusterDefaults: kclientcmdapi.Cluster{Server: os.Getenv("KUBERNETES_MASTER")}}
Expand Down
7 changes: 3 additions & 4 deletions pkg/cmd/infra/router/f5.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"

clientcmd "github.com/openshift/origin/pkg/client/cmd"
"github.com/openshift/origin/pkg/cmd/util"
cmdversion "github.com/openshift/origin/pkg/cmd/version"
projectinternalclientset "github.com/openshift/origin/pkg/project/generated/internalclientset"
Expand Down Expand Up @@ -42,7 +41,7 @@ var (
// F5RouterOptions represent the complete structure needed to start an F5 router
// sync process.
type F5RouterOptions struct {
Config *clientcmd.Config
Config *Config

F5Router
RouterSelection
Expand Down Expand Up @@ -138,12 +137,12 @@ func (o *F5Router) Validate() error {
// NewCommandF5Router provides CLI handler for the F5 router sync plugin.
func NewCommandF5Router(name string) *cobra.Command {
options := &F5RouterOptions{
Config: clientcmd.NewConfig(),
Config: NewConfig(),
}
options.Config.FromFile = true

cmd := &cobra.Command{
Use: fmt.Sprintf("%s%s", name, clientcmd.ConfigSyntax),
Use: fmt.Sprintf("%s%s", name, ConfigSyntax),
Short: "Start an F5 route synchronizer",
Long: f5Long,
Run: func(c *cobra.Command, args []string) {
Expand Down
7 changes: 3 additions & 4 deletions pkg/cmd/infra/router/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"

clientcmd "github.com/openshift/origin/pkg/client/cmd"
"github.com/openshift/origin/pkg/cmd/server/crypto"
"github.com/openshift/origin/pkg/cmd/util"
cmdversion "github.com/openshift/origin/pkg/cmd/version"
Expand Down Expand Up @@ -63,7 +62,7 @@ var routerLong = templates.LongDesc(`
that you must have a cluster-wide administrative role to view all namespaces.`)

type TemplateRouterOptions struct {
Config *clientcmd.Config
Config *Config

TemplateRouter
RouterStats
Expand Down Expand Up @@ -138,12 +137,12 @@ func (o *RouterStats) Bind(flag *pflag.FlagSet) {
// NewCommndTemplateRouter provides CLI handler for the template router backend
func NewCommandTemplateRouter(name string) *cobra.Command {
options := &TemplateRouterOptions{
Config: clientcmd.NewConfig(),
Config: NewConfig(),
}
options.Config.FromFile = true

cmd := &cobra.Command{
Use: fmt.Sprintf("%s%s", name, clientcmd.ConfigSyntax),
Use: fmt.Sprintf("%s%s", name, ConfigSyntax),
Short: "Start a router",
Long: routerLong,
Run: func(c *cobra.Command, args []string) {
Expand Down
12 changes: 6 additions & 6 deletions pkg/oc/admin/diagnostics/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import (
"os"

"k8s.io/client-go/tools/clientcmd"
kclientcmd "k8s.io/client-go/tools/clientcmd"
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"

"github.com/openshift/origin/pkg/client/config"
"github.com/openshift/origin/pkg/oc/admin/diagnostics/diagnostics/util"
)

Expand All @@ -32,12 +32,12 @@ func (o DiagnosticsOptions) detectClientConfig() (expected bool, detected bool)
return false, false
}
o.Logger().Notice("CED2011", "Determining if client configuration exists for client/cluster diagnostics")
confFlagName := config.OpenShiftConfigFlagName
confFlagName := kclientcmd.OpenShiftKubeConfigFlagName
confFlagValue := o.ClientFlags.Lookup(confFlagName).Value.String()
successfulLoad := false

var foundPath string
rules := config.NewOpenShiftClientConfigLoadingRules()
rules := kclientcmd.NewDefaultClientConfigLoadingRules()
paths := append([]string{confFlagValue}, rules.Precedence...)
for index, path := range paths {
errmsg := ""
Expand All @@ -47,8 +47,8 @@ func (o DiagnosticsOptions) detectClientConfig() (expected bool, detected bool)
case len(paths) - 1: // config in ~/.kube
// no error message indicated if it is not there... user didn't say it would be
default: // can be multiple paths from the env var in theory; all cases should go here
if len(os.Getenv(config.OpenShiftConfigPathEnvVar)) != 0 {
errmsg = fmt.Sprintf("Env var %s specified that client config could be at %s\n", config.OpenShiftConfigPathEnvVar, path)
if len(os.Getenv(kclientcmd.RecommendedConfigPathEnvVar)) != 0 {
errmsg = fmt.Sprintf("Env var %s specified that client config could be at %s\n", kclientcmd.RecommendedConfigPathEnvVar, path)
}
}

Expand Down Expand Up @@ -88,7 +88,7 @@ location for use by the client and diagnostics.
for _, path := range util.AdminKubeConfigPaths {
msg := fmt.Sprintf("Looking for a possible client config at %s\n", path)
if o.canOpenConfigFile(path, msg) {
o.Logger().Warn("DCli1003", fmt.Sprintf(adminWarningF, config.OpenShiftConfigPathEnvVar, path, config.RecommendedHomeFile))
o.Logger().Warn("DCli1003", fmt.Sprintf(adminWarningF, kclientcmd.RecommendedConfigPathEnvVar, path, kclientcmd.RecommendedHomeFile))
break
}
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/oc/admin/diagnostics/diagnostics.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ import (

kutilerrors "k8s.io/apimachinery/pkg/util/errors"
"k8s.io/apimachinery/pkg/util/sets"
kclientcmd "k8s.io/client-go/tools/clientcmd"
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"

"github.com/openshift/origin/pkg/client/config"
"github.com/openshift/origin/pkg/cmd/flagtypes"
poddiag "github.com/openshift/origin/pkg/oc/admin/diagnostics/diagnostics/client/pod/in_pod"
networkpoddiag "github.com/openshift/origin/pkg/oc/admin/diagnostics/diagnostics/cluster/network/in_pod"
Expand Down Expand Up @@ -223,7 +223,7 @@ func (o *DiagnosticsOptions) bindCommonFlags(flags *flag.FlagSet) {
func (o *DiagnosticsOptions) bindClientFlags(flags *flag.FlagSet) {
o.ClientFlags = flag.NewFlagSet("client", flag.ContinueOnError) // hide the extensive set of client flags
o.Factory = osclientcmd.New(o.ClientFlags) // that would otherwise be added to this command
flags.AddFlag(o.ClientFlags.Lookup(config.OpenShiftConfigFlagName))
flags.AddFlag(o.ClientFlags.Lookup(kclientcmd.OpenShiftKubeConfigFlagName))
flags.AddFlag(o.ClientFlags.Lookup("context")) // TODO: find k8s constant
flags.StringVar(&o.ClientClusterContext, options.FlagClusterContextName, "", "Client context to use for cluster administrator")
flags.BoolVar(&o.PreventModification, options.FlagPreventModificationName, false, "If true, may be set to prevent diagnostics making any changes via the API")
Expand Down
2 changes: 1 addition & 1 deletion pkg/oc/admin/prune/images.go
Original file line number Diff line number Diff line change
Expand Up @@ -763,7 +763,7 @@ func getClientAndMasterVersions(client discovery.DiscoveryInterface, timeout tim

select {
case err, closed := <-done:
if strings.HasSuffix(fmt.Sprintf("%v", err), "connection refused") || clientcmd.IsConfigurationMissing(err) || kclientcmd.IsConfigurationInvalid(err) {
if strings.HasSuffix(fmt.Sprintf("%v", err), "connection refused") || kclientcmd.IsEmptyConfig(err) || kclientcmd.IsConfigurationInvalid(err) {
return nil, nil, err
}
if closed && err != nil {
Expand Down
4 changes: 2 additions & 2 deletions pkg/oc/bootstrap/docker/openshift/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ import (
"github.com/golang/glog"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
kclientcmd "k8s.io/client-go/tools/clientcmd"
"k8s.io/client-go/util/homedir"
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"

clientconfig "github.com/openshift/origin/pkg/client/config"
configapi "github.com/openshift/origin/pkg/cmd/server/apis/config"
_ "github.com/openshift/origin/pkg/cmd/server/apis/config/install"
configapilatest "github.com/openshift/origin/pkg/cmd/server/apis/config/latest"
Expand All @@ -38,7 +38,7 @@ var (
BasePorts = []int{4001, 7001, 8443, 10250, DefaultDNSPort}
RouterPorts = []int{80, 443}
AllPorts = append(RouterPorts, BasePorts...)
SocatPidFile = filepath.Join(homedir.HomeDir(), clientconfig.OpenShiftConfigHomeDir, "socat-8443.pid")
SocatPidFile = filepath.Join(homedir.HomeDir(), kclientcmd.RecommendedHomeDir, "socat-8443.pid")
)

// Helper contains methods and utilities to help with OpenShift startup
Expand Down
2 changes: 1 addition & 1 deletion pkg/oc/bootstrap/docker/openshift/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func setCurrentProject(f *clientcmd.Factory, name string, out io.Writer) error {
}

func LoggedInUserFactory() (*clientcmd.Factory, error) {
cfg, err := config.NewOpenShiftClientConfigLoadingRules().Load()
cfg, err := kclientcmd.NewDefaultClientConfigLoadingRules().Load()
if err != nil {
return nil, err
}
Expand Down
3 changes: 1 addition & 2 deletions pkg/oc/bootstrap/docker/up.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ import (
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"

userv1client "github.com/openshift/client-go/user/clientset/versioned"
osclientcmd "github.com/openshift/origin/pkg/client/cmd"
cmdutil "github.com/openshift/origin/pkg/cmd/util"
"github.com/openshift/origin/pkg/cmd/util/variable"
oauthclientinternal "github.com/openshift/origin/pkg/oauth/generated/internalclientset"
Expand Down Expand Up @@ -228,7 +227,7 @@ func (c *ClusterUpConfig) Complete(cmd *cobra.Command, out io.Writer) error {
// Get the default client config for login
var err error
flags := pflag.NewFlagSet("", pflag.ContinueOnError)
c.defaultClientConfig, err = osclientcmd.DefaultClientConfig(flags).RawConfig()
c.defaultClientConfig, err = kcmdutil.DefaultClientConfig(flags).RawConfig()
if err != nil {
if !os.IsNotExist(err) {
return err
Expand Down
4 changes: 3 additions & 1 deletion pkg/oc/cli/cmd/process.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,8 +162,10 @@ func RunProcess(f *clientcmd.Factory, in io.Reader, out, errout io.Writer, cmd *
}
}

// the namespace
namespace, explicit, err := f.DefaultNamespace()
if err != nil {
// we only need to fail on namespace acquisition if we're actually taking action. Otherwise the namespace can be enforced later
if err != nil && !local {
return err
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/oc/cli/cmd/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ func (o VersionOptions) RunVersion() error {

select {
case err, closed := <-done:
if strings.HasSuffix(fmt.Sprintf("%v", err), "connection refused") || clientcmd.IsConfigurationMissing(err) || kclientcmd.IsConfigurationInvalid(err) {
if strings.HasSuffix(fmt.Sprintf("%v", err), "connection refused") || kclientcmd.IsEmptyConfig(err) || kclientcmd.IsConfigurationInvalid(err) {
return nil
}
if closed && err != nil {
Expand Down
12 changes: 6 additions & 6 deletions pkg/oc/cli/cmd/wrappers.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"flag"
"fmt"
"io"
"path"
"strings"

"github.com/spf13/cobra"
Expand All @@ -19,7 +20,6 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"

cmdconfig "github.com/openshift/origin/pkg/client/config"
cmdutil "github.com/openshift/origin/pkg/cmd/util"
"github.com/openshift/origin/pkg/oc/cli/cmd/create"
"github.com/openshift/origin/pkg/oc/cli/describe"
Expand Down Expand Up @@ -735,13 +735,13 @@ var (
// NewCmdConfig is a wrapper for the Kubernetes cli config command
func NewCmdConfig(parentName, name string, f *clientcmd.Factory, out, errOut io.Writer) *cobra.Command {
pathOptions := &kclientcmd.PathOptions{
GlobalFile: cmdconfig.RecommendedHomeFile,
EnvVar: cmdconfig.OpenShiftConfigPathEnvVar,
ExplicitFileFlag: cmdconfig.OpenShiftConfigFlagName,
GlobalFile: kclientcmd.RecommendedHomeFile,
EnvVar: kclientcmd.RecommendedConfigPathEnvVar,
ExplicitFileFlag: kclientcmd.OpenShiftKubeConfigFlagName,

GlobalFileSubpath: cmdconfig.OpenShiftConfigHomeDirFileName,
GlobalFileSubpath: path.Join(kclientcmd.RecommendedHomeDir, kclientcmd.RecommendedFileName),

LoadingRules: cmdconfig.NewOpenShiftClientConfigLoadingRules(),
LoadingRules: kclientcmd.NewDefaultClientConfigLoadingRules(),
}
pathOptions.LoadingRules.DoNotResolvePaths = true

Expand Down
33 changes: 4 additions & 29 deletions pkg/oc/cli/config/loader.go
Original file line number Diff line number Diff line change
@@ -1,47 +1,22 @@
package config

import (
"os"
"path/filepath"

"github.com/spf13/cobra"

"k8s.io/client-go/tools/clientcmd"
kclientcmd "k8s.io/client-go/tools/clientcmd"
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"

"github.com/openshift/origin/pkg/client/config"
)

// NewOpenShiftClientConfigLoadingRules returns file priority loading rules for OpenShift.
// 1. --config value
// 2. if KUBECONFIG env var has a value, use it. Otherwise, ~/.kube/config file
func NewOpenShiftClientConfigLoadingRules() *clientcmd.ClientConfigLoadingRules {
chain := []string{}

envVarFile := os.Getenv(config.OpenShiftConfigPathEnvVar)
if len(envVarFile) != 0 {
chain = append(chain, filepath.SplitList(envVarFile)...)
} else {
chain = append(chain, config.RecommendedHomeFile)
}

return &clientcmd.ClientConfigLoadingRules{
Precedence: chain,
MigrationRules: config.CurrentMigrationRules(),
}
}

func NewPathOptions(cmd *cobra.Command) *kclientcmd.PathOptions {
return NewPathOptionsWithConfig(kcmdutil.GetFlagString(cmd, config.OpenShiftConfigFlagName))
return NewPathOptionsWithConfig(kcmdutil.GetFlagString(cmd, kclientcmd.OpenShiftKubeConfigFlagName))
}

func NewPathOptionsWithConfig(configPath string) *kclientcmd.PathOptions {
return &kclientcmd.PathOptions{
GlobalFile: config.RecommendedHomeFile,
GlobalFile: kclientcmd.RecommendedHomeFile,

EnvVar: config.OpenShiftConfigPathEnvVar,
ExplicitFileFlag: config.OpenShiftConfigFlagName,
EnvVar: kclientcmd.RecommendedConfigPathEnvVar,
ExplicitFileFlag: kclientcmd.OpenShiftKubeConfigFlagName,

LoadingRules: &kclientcmd.ClientConfigLoadingRules{
ExplicitPath: configPath,
Expand Down
Loading