Skip to content

Commit

Permalink
Merge pull request openshift#19335 from deads2k/cli-25-configpatch
Browse files Browse the repository at this point in the history
use the upstream construction for kubeconfig evaluation
  • Loading branch information
openshift-merge-robot authored and mjudeikis committed Apr 17, 2018
2 parents 39cd4a0 + 156c979 commit 0caf177
Show file tree
Hide file tree
Showing 25 changed files with 1,751 additions and 4,563 deletions.
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

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

0 comments on commit 0caf177

Please sign in to comment.