From 866631fab123d5656714258a140a39dce2e4edeb Mon Sep 17 00:00:00 2001 From: Xianglin Gao Date: Thu, 26 Jul 2018 17:47:35 +0800 Subject: [PATCH 1/4] Move defaultKubeConfig to constants.go Signed-off-by: Xianglin Gao --- cmd/kubeadm/app/cmd/config.go | 3 ++- cmd/kubeadm/app/cmd/phases/addons.go | 3 ++- cmd/kubeadm/app/cmd/phases/bootstraptoken.go | 3 ++- cmd/kubeadm/app/cmd/phases/markmaster.go | 3 ++- cmd/kubeadm/app/cmd/phases/selfhosting.go | 3 ++- cmd/kubeadm/app/cmd/phases/uploadconfig.go | 2 +- cmd/kubeadm/app/cmd/token.go | 9 ++++----- cmd/kubeadm/app/cmd/upgrade/upgrade.go | 3 ++- cmd/kubeadm/app/constants/constants.go | 3 +++ cmd/kubeadm/app/constants/constants_test.go | 2 +- 10 files changed, 21 insertions(+), 13 deletions(-) diff --git a/cmd/kubeadm/app/cmd/config.go b/cmd/kubeadm/app/cmd/config.go index 80a76bd3cf9..f6e0328e9d4 100644 --- a/cmd/kubeadm/app/cmd/config.go +++ b/cmd/kubeadm/app/cmd/config.go @@ -38,6 +38,7 @@ import ( cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" "k8s.io/kubernetes/cmd/kubeadm/app/componentconfigs" "k8s.io/kubernetes/cmd/kubeadm/app/constants" + kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/features" "k8s.io/kubernetes/cmd/kubeadm/app/images" "k8s.io/kubernetes/cmd/kubeadm/app/phases/uploadconfig" @@ -79,7 +80,7 @@ func NewCmdConfig(out io.Writer) *cobra.Command { RunE: cmdutil.SubCmdRunE("config"), } - cmd.PersistentFlags().StringVar(&kubeConfigFile, "kubeconfig", "/etc/kubernetes/admin.conf", "The KubeConfig file to use when talking to the cluster.") + cmd.PersistentFlags().StringVar(&kubeConfigFile, "kubeconfig", kubeadmconstants.DefaultKubeConfig, "The KubeConfig file to use when talking to the cluster.") cmd.AddCommand(NewCmdConfigPrintDefault(out)) cmd.AddCommand(NewCmdConfigMigrate(out)) diff --git a/cmd/kubeadm/app/cmd/phases/addons.go b/cmd/kubeadm/app/cmd/phases/addons.go index 9a3fa07119c..840ee3dad09 100644 --- a/cmd/kubeadm/app/cmd/phases/addons.go +++ b/cmd/kubeadm/app/cmd/phases/addons.go @@ -28,6 +28,7 @@ import ( kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3" "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation" cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" + kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/features" dnsaddon "k8s.io/kubernetes/cmd/kubeadm/app/phases/addons/dns" proxyaddon "k8s.io/kubernetes/cmd/kubeadm/app/phases/addons/proxy" @@ -140,7 +141,7 @@ func getAddonsSubCommands() []*cobra.Command { } // Add flags to the command - cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", "/etc/kubernetes/admin.conf", "The KubeConfig file to use when talking to the cluster") + cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", kubeadmconstants.DefaultKubeConfig, "The KubeConfig file to use when talking to the cluster") cmd.Flags().StringVar(&cfgPath, "config", cfgPath, "Path to a kubeadm config file. WARNING: Usage of a configuration file is experimental") cmd.Flags().StringVar(&cfg.KubernetesVersion, "kubernetes-version", cfg.KubernetesVersion, `Choose a specific Kubernetes version for the control plane`) cmd.Flags().StringVar(&cfg.ImageRepository, "image-repository", cfg.ImageRepository, `Choose a container registry to pull control plane images from`) diff --git a/cmd/kubeadm/app/cmd/phases/bootstraptoken.go b/cmd/kubeadm/app/cmd/phases/bootstraptoken.go index f9ff7412ce6..e3eebd05394 100644 --- a/cmd/kubeadm/app/cmd/phases/bootstraptoken.go +++ b/cmd/kubeadm/app/cmd/phases/bootstraptoken.go @@ -31,6 +31,7 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" + kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/phases/bootstraptoken/clusterinfo" "k8s.io/kubernetes/cmd/kubeadm/app/phases/bootstraptoken/node" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" @@ -94,7 +95,7 @@ func NewCmdBootstrapToken() *cobra.Command { Aliases: []string{"bootstraptoken"}, } - cmd.PersistentFlags().StringVar(&kubeConfigFile, "kubeconfig", "/etc/kubernetes/admin.conf", "The KubeConfig file to use when talking to the cluster") + cmd.PersistentFlags().StringVar(&kubeConfigFile, "kubeconfig", kubeadmconstants.DefaultKubeConfig, "The KubeConfig file to use when talking to the cluster") // Add subcommands cmd.AddCommand(NewSubCmdBootstrapTokenAll(&kubeConfigFile)) diff --git a/cmd/kubeadm/app/cmd/phases/markmaster.go b/cmd/kubeadm/app/cmd/phases/markmaster.go index 2780830734d..804496fe649 100644 --- a/cmd/kubeadm/app/cmd/phases/markmaster.go +++ b/cmd/kubeadm/app/cmd/phases/markmaster.go @@ -23,6 +23,7 @@ import ( kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3" "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation" cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" + kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" markmasterphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/markmaster" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config" @@ -80,7 +81,7 @@ func NewCmdMarkMaster() *cobra.Command { }, } - cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", "/etc/kubernetes/admin.conf", "The KubeConfig file to use when talking to the cluster") + cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", kubeadmconstants.DefaultKubeConfig, "The KubeConfig file to use when talking to the cluster") cmd.Flags().StringVar(&cfgPath, "config", cfgPath, "Path to kubeadm config file. WARNING: Usage of a configuration file is experimental") cmd.Flags().StringVar(&cfg.NodeRegistration.Name, "node-name", cfg.NodeRegistration.Name, `The node name to which label and taints should apply`) diff --git a/cmd/kubeadm/app/cmd/phases/selfhosting.go b/cmd/kubeadm/app/cmd/phases/selfhosting.go index d627436f19c..40943aaf570 100644 --- a/cmd/kubeadm/app/cmd/phases/selfhosting.go +++ b/cmd/kubeadm/app/cmd/phases/selfhosting.go @@ -28,6 +28,7 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation" cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" "k8s.io/kubernetes/cmd/kubeadm/app/constants" + kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/features" "k8s.io/kubernetes/cmd/kubeadm/app/phases/selfhosting" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" @@ -122,7 +123,7 @@ func getSelfhostingSubCommand() *cobra.Command { // flags that are not bound to the configuration object // Note: All flags that are not bound to the cfg object should be whitelisted in cmd/kubeadm/app/apis/kubeadm/validation/validation.go - cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", "/etc/kubernetes/admin.conf", "The KubeConfig file to use when talking to the cluster") + cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", kubeadmconstants.DefaultKubeConfig, "The KubeConfig file to use when talking to the cluster") return cmd } diff --git a/cmd/kubeadm/app/cmd/phases/uploadconfig.go b/cmd/kubeadm/app/cmd/phases/uploadconfig.go index 9a8c1b8f247..5d473de3b19 100644 --- a/cmd/kubeadm/app/cmd/phases/uploadconfig.go +++ b/cmd/kubeadm/app/cmd/phases/uploadconfig.go @@ -77,7 +77,7 @@ func NewCmdUploadConfig() *cobra.Command { }, } - cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", "/etc/kubernetes/admin.conf", "The KubeConfig file to use when talking to the cluster") + cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", kubeadmconstants.DefaultKubeConfig, "The KubeConfig file to use when talking to the cluster") cmd.Flags().StringVar(&cfgPath, "config", "", "Path to a kubeadm config file. WARNING: Usage of a configuration file is experimental") return cmd diff --git a/cmd/kubeadm/app/cmd/token.go b/cmd/kubeadm/app/cmd/token.go index 61330e02da7..be111df0359 100644 --- a/cmd/kubeadm/app/cmd/token.go +++ b/cmd/kubeadm/app/cmd/token.go @@ -42,6 +42,7 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" phaseutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases" cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" + kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" tokenphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/bootstraptoken/node" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" "k8s.io/kubernetes/cmd/kubeadm/app/util/apiclient" @@ -49,8 +50,6 @@ import ( kubeconfigutil "k8s.io/kubernetes/cmd/kubeadm/app/util/kubeconfig" ) -const defaultKubeConfig = "/etc/kubernetes/admin.conf" - // NewCmdToken returns cobra.Command for token management func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command { var kubeConfigFile string @@ -86,7 +85,7 @@ func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command { } tokenCmd.PersistentFlags().StringVar(&kubeConfigFile, - "kubeconfig", defaultKubeConfig, "The KubeConfig file to use when talking to the cluster. If the flag is not set a set of standard locations are searched for an existing KubeConfig file") + "kubeconfig", kubeadmconstants.DefaultKubeConfig, "The KubeConfig file to use when talking to the cluster. If the flag is not set a set of standard locations are searched for an existing KubeConfig file") tokenCmd.PersistentFlags().BoolVar(&dryRun, "dry-run", dryRun, "Whether to enable dry-run mode or not") @@ -361,12 +360,12 @@ func getClientset(file string, dryRun bool) (clientset.Interface, error) { func findExistingKubeConfig(file string) string { // The user did provide a --kubeconfig flag. Respect that and threat it as an // explicit path without building a DefaultClientConfigLoadingRules object. - if file != defaultKubeConfig { + if file != kubeadmconstants.DefaultKubeConfig { return file } // The user did not provide a --kubeconfig flag. Find a config in the standard // locations using DefaultClientConfigLoadingRules, but also consider `defaultKubeConfig`. rules := clientcmd.NewDefaultClientConfigLoadingRules() - rules.Precedence = append(rules.Precedence, defaultKubeConfig) + rules.Precedence = append(rules.Precedence, kubeadmconstants.DefaultKubeConfig) return rules.GetDefaultFilename() } diff --git a/cmd/kubeadm/app/cmd/upgrade/upgrade.go b/cmd/kubeadm/app/cmd/upgrade/upgrade.go index 5c2bd108ecf..812e5acdec6 100644 --- a/cmd/kubeadm/app/cmd/upgrade/upgrade.go +++ b/cmd/kubeadm/app/cmd/upgrade/upgrade.go @@ -26,6 +26,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" + kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/features" ) @@ -45,7 +46,7 @@ type applyPlanFlags struct { // NewCmdUpgrade returns the cobra command for `kubeadm upgrade` func NewCmdUpgrade(out io.Writer) *cobra.Command { flags := &applyPlanFlags{ - kubeConfigPath: "/etc/kubernetes/admin.conf", + kubeConfigPath: kubeadmconstants.DefaultKubeConfig, cfgPath: "", featureGatesString: "", allowExperimentalUpgrades: false, diff --git a/cmd/kubeadm/app/constants/constants.go b/cmd/kubeadm/app/constants/constants.go index b48cd4effd9..d22dd35c878 100644 --- a/cmd/kubeadm/app/constants/constants.go +++ b/cmd/kubeadm/app/constants/constants.go @@ -302,6 +302,9 @@ const ( // YAMLDocumentSeparator is the separator for YAML documents // TODO: Find a better place for this constant YAMLDocumentSeparator = "---\n" + + // DefaultKubeConfig is the default localtion of KubeConfig + DefaultKubeConfig = "/etc/kubernetes/admin.conf" ) var ( diff --git a/cmd/kubeadm/app/constants/constants_test.go b/cmd/kubeadm/app/constants/constants_test.go index 7bcec426224..09bf2b1897f 100644 --- a/cmd/kubeadm/app/constants/constants_test.go +++ b/cmd/kubeadm/app/constants/constants_test.go @@ -38,7 +38,7 @@ func TestGetStaticPodDirectory(t *testing.T) { } func TestGetAdminKubeConfigPath(t *testing.T) { - expected := "/etc/kubernetes/admin.conf" + expected := DefaultKubeConfig actual := GetAdminKubeConfigPath() if actual != expected { From ebce14b36eac91cbf889e13c7e9f80e5ce1db570 Mon Sep 17 00:00:00 2001 From: Xianglin Gao Date: Thu, 2 Aug 2018 20:59:43 +0800 Subject: [PATCH 2/4] Use the Join of Dir and File name instead of DefaultKubeConfig Signed-off-by: Xianglin Gao --- cmd/kubeadm/app/cmd/config.go | 3 ++- cmd/kubeadm/app/cmd/phases/addons.go | 3 ++- cmd/kubeadm/app/cmd/phases/bootstraptoken.go | 3 ++- cmd/kubeadm/app/cmd/phases/markmaster.go | 4 +++- cmd/kubeadm/app/cmd/phases/selfhosting.go | 3 ++- cmd/kubeadm/app/cmd/phases/uploadconfig.go | 3 ++- cmd/kubeadm/app/cmd/token.go | 23 +++++--------------- cmd/kubeadm/app/cmd/upgrade/upgrade.go | 3 ++- cmd/kubeadm/app/cmd/util/BUILD | 1 + cmd/kubeadm/app/cmd/util/cmdutil.go | 17 +++++++++++++++ cmd/kubeadm/app/constants/constants.go | 3 --- cmd/kubeadm/app/constants/constants_test.go | 3 ++- 12 files changed, 40 insertions(+), 29 deletions(-) diff --git a/cmd/kubeadm/app/cmd/config.go b/cmd/kubeadm/app/cmd/config.go index f6e0328e9d4..b515a690421 100644 --- a/cmd/kubeadm/app/cmd/config.go +++ b/cmd/kubeadm/app/cmd/config.go @@ -21,6 +21,7 @@ import ( "fmt" "io" "io/ioutil" + "path/filepath" "strings" "github.com/golang/glog" @@ -80,7 +81,7 @@ func NewCmdConfig(out io.Writer) *cobra.Command { RunE: cmdutil.SubCmdRunE("config"), } - cmd.PersistentFlags().StringVar(&kubeConfigFile, "kubeconfig", kubeadmconstants.DefaultKubeConfig, "The KubeConfig file to use when talking to the cluster.") + cmd.PersistentFlags().StringVar(&kubeConfigFile, "kubeconfig", filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), "The KubeConfig file to use when talking to the cluster.") cmd.AddCommand(NewCmdConfigPrintDefault(out)) cmd.AddCommand(NewCmdConfigMigrate(out)) diff --git a/cmd/kubeadm/app/cmd/phases/addons.go b/cmd/kubeadm/app/cmd/phases/addons.go index 840ee3dad09..252538e6318 100644 --- a/cmd/kubeadm/app/cmd/phases/addons.go +++ b/cmd/kubeadm/app/cmd/phases/addons.go @@ -17,6 +17,7 @@ limitations under the License. package phases import ( + "path/filepath" "strings" "github.com/golang/glog" @@ -141,7 +142,7 @@ func getAddonsSubCommands() []*cobra.Command { } // Add flags to the command - cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", kubeadmconstants.DefaultKubeConfig, "The KubeConfig file to use when talking to the cluster") + cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), "The KubeConfig file to use when talking to the cluster") cmd.Flags().StringVar(&cfgPath, "config", cfgPath, "Path to a kubeadm config file. WARNING: Usage of a configuration file is experimental") cmd.Flags().StringVar(&cfg.KubernetesVersion, "kubernetes-version", cfg.KubernetesVersion, `Choose a specific Kubernetes version for the control plane`) cmd.Flags().StringVar(&cfg.ImageRepository, "image-repository", cfg.ImageRepository, `Choose a container registry to pull control plane images from`) diff --git a/cmd/kubeadm/app/cmd/phases/bootstraptoken.go b/cmd/kubeadm/app/cmd/phases/bootstraptoken.go index e3eebd05394..23293095db2 100644 --- a/cmd/kubeadm/app/cmd/phases/bootstraptoken.go +++ b/cmd/kubeadm/app/cmd/phases/bootstraptoken.go @@ -18,6 +18,7 @@ package phases import ( "fmt" + "path/filepath" "github.com/golang/glog" "github.com/spf13/cobra" @@ -95,7 +96,7 @@ func NewCmdBootstrapToken() *cobra.Command { Aliases: []string{"bootstraptoken"}, } - cmd.PersistentFlags().StringVar(&kubeConfigFile, "kubeconfig", kubeadmconstants.DefaultKubeConfig, "The KubeConfig file to use when talking to the cluster") + cmd.PersistentFlags().StringVar(&kubeConfigFile, "kubeconfig", filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), "The KubeConfig file to use when talking to the cluster") // Add subcommands cmd.AddCommand(NewSubCmdBootstrapTokenAll(&kubeConfigFile)) diff --git a/cmd/kubeadm/app/cmd/phases/markmaster.go b/cmd/kubeadm/app/cmd/phases/markmaster.go index 804496fe649..a1dec564d9b 100644 --- a/cmd/kubeadm/app/cmd/phases/markmaster.go +++ b/cmd/kubeadm/app/cmd/phases/markmaster.go @@ -17,6 +17,8 @@ limitations under the License. package phases import ( + "path/filepath" + "github.com/spf13/cobra" kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" @@ -81,7 +83,7 @@ func NewCmdMarkMaster() *cobra.Command { }, } - cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", kubeadmconstants.DefaultKubeConfig, "The KubeConfig file to use when talking to the cluster") + cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), "The KubeConfig file to use when talking to the cluster") cmd.Flags().StringVar(&cfgPath, "config", cfgPath, "Path to kubeadm config file. WARNING: Usage of a configuration file is experimental") cmd.Flags().StringVar(&cfg.NodeRegistration.Name, "node-name", cfg.NodeRegistration.Name, `The node name to which label and taints should apply`) diff --git a/cmd/kubeadm/app/cmd/phases/selfhosting.go b/cmd/kubeadm/app/cmd/phases/selfhosting.go index 40943aaf570..0a0d9b38eca 100644 --- a/cmd/kubeadm/app/cmd/phases/selfhosting.go +++ b/cmd/kubeadm/app/cmd/phases/selfhosting.go @@ -18,6 +18,7 @@ package phases import ( "os" + "path/filepath" "strings" "time" @@ -123,7 +124,7 @@ func getSelfhostingSubCommand() *cobra.Command { // flags that are not bound to the configuration object // Note: All flags that are not bound to the cfg object should be whitelisted in cmd/kubeadm/app/apis/kubeadm/validation/validation.go - cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", kubeadmconstants.DefaultKubeConfig, "The KubeConfig file to use when talking to the cluster") + cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), "The KubeConfig file to use when talking to the cluster") return cmd } diff --git a/cmd/kubeadm/app/cmd/phases/uploadconfig.go b/cmd/kubeadm/app/cmd/phases/uploadconfig.go index 5d473de3b19..4ff0bf2b4a2 100644 --- a/cmd/kubeadm/app/cmd/phases/uploadconfig.go +++ b/cmd/kubeadm/app/cmd/phases/uploadconfig.go @@ -18,6 +18,7 @@ package phases import ( "fmt" + "path/filepath" "github.com/spf13/cobra" @@ -77,7 +78,7 @@ func NewCmdUploadConfig() *cobra.Command { }, } - cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", kubeadmconstants.DefaultKubeConfig, "The KubeConfig file to use when talking to the cluster") + cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), "The KubeConfig file to use when talking to the cluster") cmd.Flags().StringVar(&cfgPath, "config", "", "Path to a kubeadm config file. WARNING: Usage of a configuration file is experimental") return cmd diff --git a/cmd/kubeadm/app/cmd/token.go b/cmd/kubeadm/app/cmd/token.go index be111df0359..b35c5cb17e8 100644 --- a/cmd/kubeadm/app/cmd/token.go +++ b/cmd/kubeadm/app/cmd/token.go @@ -20,6 +20,7 @@ import ( "fmt" "io" "os" + "path/filepath" "strings" "text/tabwriter" "time" @@ -34,7 +35,6 @@ import ( clientset "k8s.io/client-go/kubernetes" bootstrapapi "k8s.io/client-go/tools/bootstrap/token/api" bootstraputil "k8s.io/client-go/tools/bootstrap/token/util" - "k8s.io/client-go/tools/clientcmd" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3" @@ -85,7 +85,7 @@ func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command { } tokenCmd.PersistentFlags().StringVar(&kubeConfigFile, - "kubeconfig", kubeadmconstants.DefaultKubeConfig, "The KubeConfig file to use when talking to the cluster. If the flag is not set a set of standard locations are searched for an existing KubeConfig file") + "kubeconfig", filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), "The KubeConfig file to use when talking to the cluster. If the flag is not set a set of standard locations are searched for an existing KubeConfig file") tokenCmd.PersistentFlags().BoolVar(&dryRun, "dry-run", dryRun, "Whether to enable dry-run mode or not") @@ -122,7 +122,7 @@ func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command { kubeadmutil.CheckErr(err) glog.V(1).Infoln("[token] getting Clientsets from KubeConfig file") - kubeConfigFile = findExistingKubeConfig(kubeConfigFile) + kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) client, err := getClientset(kubeConfigFile, dryRun) kubeadmutil.CheckErr(err) @@ -149,7 +149,7 @@ func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command { This command will list all bootstrap tokens for you. `), Run: func(tokenCmd *cobra.Command, args []string) { - kubeConfigFile = findExistingKubeConfig(kubeConfigFile) + kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) client, err := getClientset(kubeConfigFile, dryRun) kubeadmutil.CheckErr(err) @@ -173,7 +173,7 @@ func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command { if len(args) < 1 { kubeadmutil.CheckErr(fmt.Errorf("missing subcommand; 'token delete' is missing token of form %q", bootstrapapi.BootstrapTokenIDPattern)) } - kubeConfigFile = findExistingKubeConfig(kubeConfigFile) + kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) client, err := getClientset(kubeConfigFile, dryRun) kubeadmutil.CheckErr(err) @@ -356,16 +356,3 @@ func getClientset(file string, dryRun bool) (clientset.Interface, error) { } return kubeconfigutil.ClientSetFromFile(file) } - -func findExistingKubeConfig(file string) string { - // The user did provide a --kubeconfig flag. Respect that and threat it as an - // explicit path without building a DefaultClientConfigLoadingRules object. - if file != kubeadmconstants.DefaultKubeConfig { - return file - } - // The user did not provide a --kubeconfig flag. Find a config in the standard - // locations using DefaultClientConfigLoadingRules, but also consider `defaultKubeConfig`. - rules := clientcmd.NewDefaultClientConfigLoadingRules() - rules.Precedence = append(rules.Precedence, kubeadmconstants.DefaultKubeConfig) - return rules.GetDefaultFilename() -} diff --git a/cmd/kubeadm/app/cmd/upgrade/upgrade.go b/cmd/kubeadm/app/cmd/upgrade/upgrade.go index 812e5acdec6..31b85e7315a 100644 --- a/cmd/kubeadm/app/cmd/upgrade/upgrade.go +++ b/cmd/kubeadm/app/cmd/upgrade/upgrade.go @@ -18,6 +18,7 @@ package upgrade import ( "io" + "path/filepath" "strings" "github.com/spf13/cobra" @@ -46,7 +47,7 @@ type applyPlanFlags struct { // NewCmdUpgrade returns the cobra command for `kubeadm upgrade` func NewCmdUpgrade(out io.Writer) *cobra.Command { flags := &applyPlanFlags{ - kubeConfigPath: kubeadmconstants.DefaultKubeConfig, + kubeConfigPath: filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), cfgPath: "", featureGatesString: "", allowExperimentalUpgrades: false, diff --git a/cmd/kubeadm/app/cmd/util/BUILD b/cmd/kubeadm/app/cmd/util/BUILD index db04f0dfda9..63418fadf02 100644 --- a/cmd/kubeadm/app/cmd/util/BUILD +++ b/cmd/kubeadm/app/cmd/util/BUILD @@ -10,6 +10,7 @@ go_library( importpath = "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util", visibility = ["//visibility:public"], deps = [ + "//cmd/kubeadm/app/constants:go_default_library", "//cmd/kubeadm/app/util/kubeconfig:go_default_library", "//cmd/kubeadm/app/util/pubkeypin:go_default_library", "//pkg/util/normalizer:go_default_library", diff --git a/cmd/kubeadm/app/cmd/util/cmdutil.go b/cmd/kubeadm/app/cmd/util/cmdutil.go index 87dcdff67f0..cf9042f4ae8 100644 --- a/cmd/kubeadm/app/cmd/util/cmdutil.go +++ b/cmd/kubeadm/app/cmd/util/cmdutil.go @@ -18,8 +18,11 @@ package util import ( "fmt" + "path/filepath" "github.com/spf13/cobra" + "k8s.io/client-go/tools/clientcmd" + kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" ) // SubCmdRunE returns a function that handles a case where a subcommand must be specified @@ -57,3 +60,17 @@ func ValidateExactArgNumber(args []string, supportedArgs []string) error { } return nil } + +// FindExistingKubeConfig returns the localtion of kubeconfig +func FindExistingKubeConfig(file string) string { + // The user did provide a --kubeconfig flag. Respect that and threat it as an + // explicit path without building a DefaultClientConfigLoadingRules object. + if file != filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName) { + return file + } + // The user did not provide a --kubeconfig flag. Find a config in the standard + // locations using DefaultClientConfigLoadingRules, but also consider `defaultKubeConfig`. + rules := clientcmd.NewDefaultClientConfigLoadingRules() + rules.Precedence = append(rules.Precedence, filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName)) + return rules.GetDefaultFilename() +} diff --git a/cmd/kubeadm/app/constants/constants.go b/cmd/kubeadm/app/constants/constants.go index d22dd35c878..b48cd4effd9 100644 --- a/cmd/kubeadm/app/constants/constants.go +++ b/cmd/kubeadm/app/constants/constants.go @@ -302,9 +302,6 @@ const ( // YAMLDocumentSeparator is the separator for YAML documents // TODO: Find a better place for this constant YAMLDocumentSeparator = "---\n" - - // DefaultKubeConfig is the default localtion of KubeConfig - DefaultKubeConfig = "/etc/kubernetes/admin.conf" ) var ( diff --git a/cmd/kubeadm/app/constants/constants_test.go b/cmd/kubeadm/app/constants/constants_test.go index 09bf2b1897f..f2bdd5ae9a9 100644 --- a/cmd/kubeadm/app/constants/constants_test.go +++ b/cmd/kubeadm/app/constants/constants_test.go @@ -18,6 +18,7 @@ package constants import ( "fmt" + "path/filepath" "strings" "testing" @@ -38,7 +39,7 @@ func TestGetStaticPodDirectory(t *testing.T) { } func TestGetAdminKubeConfigPath(t *testing.T) { - expected := DefaultKubeConfig + expected := filepath.Join(KubernetesDir, AdminKubeConfigFileName) actual := GetAdminKubeConfigPath() if actual != expected { From 99161aa3c9bc6f7e3ca0e1de1a901e9fbd582ddf Mon Sep 17 00:00:00 2001 From: Xianglin Gao Date: Sat, 4 Aug 2018 17:57:40 +0800 Subject: [PATCH 3/4] Use AddKubeConfigFlag everywhere in kubeadm Signed-off-by: Xianglin Gao --- cmd/kubeadm/app/cmd/config.go | 8 ++++---- cmd/kubeadm/app/cmd/options/generic.go | 2 +- cmd/kubeadm/app/cmd/phases/addons.go | 14 ++++++++------ cmd/kubeadm/app/cmd/phases/bootstraptoken.go | 8 ++++---- cmd/kubeadm/app/cmd/phases/markmaster.go | 10 ++++++---- cmd/kubeadm/app/cmd/phases/selfhosting.go | 9 +++++---- cmd/kubeadm/app/cmd/phases/uploadconfig.go | 9 ++++++--- cmd/kubeadm/app/cmd/token.go | 6 ++---- cmd/kubeadm/app/cmd/util/cmdutil.go | 2 +- 9 files changed, 37 insertions(+), 31 deletions(-) diff --git a/cmd/kubeadm/app/cmd/config.go b/cmd/kubeadm/app/cmd/config.go index b515a690421..bc645afb84b 100644 --- a/cmd/kubeadm/app/cmd/config.go +++ b/cmd/kubeadm/app/cmd/config.go @@ -21,7 +21,6 @@ import ( "fmt" "io" "io/ioutil" - "path/filepath" "strings" "github.com/golang/glog" @@ -35,11 +34,11 @@ import ( kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" kubeadmapiv1alpha2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha2" kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3" + "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" phaseutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases" cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" "k8s.io/kubernetes/cmd/kubeadm/app/componentconfigs" "k8s.io/kubernetes/cmd/kubeadm/app/constants" - kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/features" "k8s.io/kubernetes/cmd/kubeadm/app/images" "k8s.io/kubernetes/cmd/kubeadm/app/phases/uploadconfig" @@ -62,8 +61,8 @@ var ( // NewCmdConfig returns cobra.Command for "kubeadm config" command func NewCmdConfig(out io.Writer) *cobra.Command { + kubeConfigFile := constants.GetAdminKubeConfigPath() - var kubeConfigFile string cmd := &cobra.Command{ Use: "config", Short: "Manage configuration for a kubeadm cluster persisted in a ConfigMap in the cluster.", @@ -81,8 +80,9 @@ func NewCmdConfig(out io.Writer) *cobra.Command { RunE: cmdutil.SubCmdRunE("config"), } - cmd.PersistentFlags().StringVar(&kubeConfigFile, "kubeconfig", filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), "The KubeConfig file to use when talking to the cluster.") + options.AddKubeConfigFlag(cmd.PersistentFlags(), &kubeConfigFile) + kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) cmd.AddCommand(NewCmdConfigPrintDefault(out)) cmd.AddCommand(NewCmdConfigMigrate(out)) cmd.AddCommand(NewCmdConfigUpload(out, &kubeConfigFile)) diff --git a/cmd/kubeadm/app/cmd/options/generic.go b/cmd/kubeadm/app/cmd/options/generic.go index 7aa8d82f98c..77bee3333bc 100644 --- a/cmd/kubeadm/app/cmd/options/generic.go +++ b/cmd/kubeadm/app/cmd/options/generic.go @@ -20,7 +20,7 @@ import "github.com/spf13/pflag" // AddKubeConfigFlag adds the --kubeconfig flag to the given flagset func AddKubeConfigFlag(fs *pflag.FlagSet, kubeConfigFile *string) { - fs.StringVar(kubeConfigFile, "kubeconfig", *kubeConfigFile, "The KubeConfig file to use when talking to the cluster") + fs.StringVar(kubeConfigFile, "kubeconfig", *kubeConfigFile, "The KubeConfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file.") } // AddConfigFlag adds the --config flag to the given flagset diff --git a/cmd/kubeadm/app/cmd/phases/addons.go b/cmd/kubeadm/app/cmd/phases/addons.go index 252538e6318..3ef7ad4555b 100644 --- a/cmd/kubeadm/app/cmd/phases/addons.go +++ b/cmd/kubeadm/app/cmd/phases/addons.go @@ -17,7 +17,6 @@ limitations under the License. package phases import ( - "path/filepath" "strings" "github.com/golang/glog" @@ -28,6 +27,7 @@ import ( kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3" "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation" + "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/features" @@ -100,8 +100,9 @@ func getAddonsSubCommands() []*cobra.Command { // Default values for the cobra help text kubeadmscheme.Scheme.Default(cfg) - var cfgPath, kubeConfigFile, featureGatesString string + var cfgPath, featureGatesString string var subCmds []*cobra.Command + kubeConfigFile := kubeadmconstants.GetAdminKubeConfigPath() subCmdProperties := []struct { use string @@ -138,11 +139,11 @@ func getAddonsSubCommands() []*cobra.Command { Short: properties.short, Long: properties.long, Example: properties.examples, - Run: runAddonsCmdFunc(properties.cmdFunc, cfg, &kubeConfigFile, &cfgPath, &featureGatesString), + Run: runAddonsCmdFunc(properties.cmdFunc, cfg, kubeConfigFile, &cfgPath, &featureGatesString), } // Add flags to the command - cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), "The KubeConfig file to use when talking to the cluster") + options.AddKubeConfigFlag(cmd.Flags(), &kubeConfigFile) cmd.Flags().StringVar(&cfgPath, "config", cfgPath, "Path to a kubeadm config file. WARNING: Usage of a configuration file is experimental") cmd.Flags().StringVar(&cfg.KubernetesVersion, "kubernetes-version", cfg.KubernetesVersion, `Choose a specific Kubernetes version for the control plane`) cmd.Flags().StringVar(&cfg.ImageRepository, "image-repository", cfg.ImageRepository, `Choose a container registry to pull control plane images from`) @@ -166,7 +167,7 @@ func getAddonsSubCommands() []*cobra.Command { } // runAddonsCmdFunc creates a cobra.Command Run function, by composing the call to the given cmdFunc with necessary additional steps (e.g preparation of input parameters) -func runAddonsCmdFunc(cmdFunc func(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error, cfg *kubeadmapiv1alpha3.InitConfiguration, kubeConfigFile *string, cfgPath *string, featureGatesString *string) func(cmd *cobra.Command, args []string) { +func runAddonsCmdFunc(cmdFunc func(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error, cfg *kubeadmapiv1alpha3.InitConfiguration, kubeConfigFile string, cfgPath *string, featureGatesString *string) func(cmd *cobra.Command, args []string) { // the following statement build a clousure that wraps a call to a cmdFunc, binding // the function itself with the specific parameters of each sub command. @@ -185,7 +186,8 @@ func runAddonsCmdFunc(cmdFunc func(cfg *kubeadmapi.InitConfiguration, client cli internalcfg := &kubeadmapi.InitConfiguration{} kubeadmscheme.Scheme.Convert(cfg, internalcfg, nil) - client, err := kubeconfigutil.ClientSetFromFile(*kubeConfigFile) + kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) + client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile) kubeadmutil.CheckErr(err) internalcfg, err = configutil.ConfigFileAndDefaultsToInternalConfig(*cfgPath, cfg) kubeadmutil.CheckErr(err) diff --git a/cmd/kubeadm/app/cmd/phases/bootstraptoken.go b/cmd/kubeadm/app/cmd/phases/bootstraptoken.go index 23293095db2..6e49b4c7088 100644 --- a/cmd/kubeadm/app/cmd/phases/bootstraptoken.go +++ b/cmd/kubeadm/app/cmd/phases/bootstraptoken.go @@ -18,7 +18,6 @@ package phases import ( "fmt" - "path/filepath" "github.com/golang/glog" "github.com/spf13/cobra" @@ -32,7 +31,7 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" - kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" + kubeadmconstants"k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/phases/bootstraptoken/clusterinfo" "k8s.io/kubernetes/cmd/kubeadm/app/phases/bootstraptoken/node" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" @@ -88,7 +87,8 @@ var ( // NewCmdBootstrapToken returns the Cobra command for running the mark-master phase func NewCmdBootstrapToken() *cobra.Command { - var kubeConfigFile string + kubeConfigFile := kubeadmconstants.GetAdminKubeConfigPath() + cmd := &cobra.Command{ Use: "bootstrap-token", Short: "Manage kubeadm-specific bootstrap token functions", @@ -96,7 +96,7 @@ func NewCmdBootstrapToken() *cobra.Command { Aliases: []string{"bootstraptoken"}, } - cmd.PersistentFlags().StringVar(&kubeConfigFile, "kubeconfig", filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), "The KubeConfig file to use when talking to the cluster") + options.AddKubeConfigFlag(cmd.PersistentFlags(), &kubeConfigFile) // Add subcommands cmd.AddCommand(NewSubCmdBootstrapTokenAll(&kubeConfigFile)) diff --git a/cmd/kubeadm/app/cmd/phases/markmaster.go b/cmd/kubeadm/app/cmd/phases/markmaster.go index a1dec564d9b..42a2fcf3b00 100644 --- a/cmd/kubeadm/app/cmd/phases/markmaster.go +++ b/cmd/kubeadm/app/cmd/phases/markmaster.go @@ -17,13 +17,12 @@ limitations under the License. package phases import ( - "path/filepath" - "github.com/spf13/cobra" kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3" "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation" + "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" markmasterphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/markmaster" @@ -54,7 +53,9 @@ func NewCmdMarkMaster() *cobra.Command { // Default values for the cobra help text kubeadmscheme.Scheme.Default(cfg) - var cfgPath, kubeConfigFile string + var cfgPath string + kubeConfigFile := kubeadmconstants.GetAdminKubeConfigPath() + cmd := &cobra.Command{ Use: "mark-master", Short: "Mark a node as master", @@ -66,6 +67,7 @@ func NewCmdMarkMaster() *cobra.Command { kubeadmutil.CheckErr(err) } + kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile) kubeadmutil.CheckErr(err) @@ -83,7 +85,7 @@ func NewCmdMarkMaster() *cobra.Command { }, } - cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), "The KubeConfig file to use when talking to the cluster") + options.AddKubeConfigFlag(cmd.Flags(), &kubeConfigFile) cmd.Flags().StringVar(&cfgPath, "config", cfgPath, "Path to kubeadm config file. WARNING: Usage of a configuration file is experimental") cmd.Flags().StringVar(&cfg.NodeRegistration.Name, "node-name", cfg.NodeRegistration.Name, `The node name to which label and taints should apply`) diff --git a/cmd/kubeadm/app/cmd/phases/selfhosting.go b/cmd/kubeadm/app/cmd/phases/selfhosting.go index 0a0d9b38eca..96f146b3a1d 100644 --- a/cmd/kubeadm/app/cmd/phases/selfhosting.go +++ b/cmd/kubeadm/app/cmd/phases/selfhosting.go @@ -18,7 +18,6 @@ package phases import ( "os" - "path/filepath" "strings" "time" @@ -27,9 +26,9 @@ import ( kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3" "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation" + "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" "k8s.io/kubernetes/cmd/kubeadm/app/constants" - kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/features" "k8s.io/kubernetes/cmd/kubeadm/app/phases/selfhosting" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" @@ -76,7 +75,8 @@ func getSelfhostingSubCommand() *cobra.Command { // Default values for the cobra help text kubeadmscheme.Scheme.Default(cfg) - var cfgPath, kubeConfigFile, featureGatesString string + var cfgPath, featureGatesString string + kubeConfigFile := constants.GetAdminKubeConfigPath() // Creates the UX Command cmd := &cobra.Command{ @@ -96,6 +96,7 @@ func getSelfhostingSubCommand() *cobra.Command { } // Gets the kubernetes client + kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile) kubeadmutil.CheckErr(err) @@ -124,7 +125,7 @@ func getSelfhostingSubCommand() *cobra.Command { // flags that are not bound to the configuration object // Note: All flags that are not bound to the cfg object should be whitelisted in cmd/kubeadm/app/apis/kubeadm/validation/validation.go - cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), "The KubeConfig file to use when talking to the cluster") + options.AddKubeConfigFlag(cmd.Flags(), &kubeConfigFile) return cmd } diff --git a/cmd/kubeadm/app/cmd/phases/uploadconfig.go b/cmd/kubeadm/app/cmd/phases/uploadconfig.go index 4ff0bf2b4a2..d2f1bc90418 100644 --- a/cmd/kubeadm/app/cmd/phases/uploadconfig.go +++ b/cmd/kubeadm/app/cmd/phases/uploadconfig.go @@ -18,12 +18,12 @@ package phases import ( "fmt" - "path/filepath" "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3" + "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/phases/uploadconfig" @@ -50,7 +50,8 @@ var ( // NewCmdUploadConfig returns the Cobra command for running the uploadconfig phase func NewCmdUploadConfig() *cobra.Command { cfg := &kubeadmapiv1alpha3.InitConfiguration{} - var cfgPath, kubeConfigFile string + kubeConfigFile := kubeadmconstants.GetAdminKubeConfigPath() + var cfgPath string cmd := &cobra.Command{ Use: "upload-config", @@ -62,6 +63,8 @@ func NewCmdUploadConfig() *cobra.Command { if len(cfgPath) == 0 { kubeadmutil.CheckErr(fmt.Errorf("the --config flag is mandatory")) } + + kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile) kubeadmutil.CheckErr(err) @@ -78,7 +81,7 @@ func NewCmdUploadConfig() *cobra.Command { }, } - cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), "The KubeConfig file to use when talking to the cluster") + options.AddKubeConfigFlag(cmd.Flags(), &kubeConfigFile) cmd.Flags().StringVar(&cfgPath, "config", "", "Path to a kubeadm config file. WARNING: Usage of a configuration file is experimental") return cmd diff --git a/cmd/kubeadm/app/cmd/token.go b/cmd/kubeadm/app/cmd/token.go index b35c5cb17e8..b10b90aee4d 100644 --- a/cmd/kubeadm/app/cmd/token.go +++ b/cmd/kubeadm/app/cmd/token.go @@ -20,7 +20,6 @@ import ( "fmt" "io" "os" - "path/filepath" "strings" "text/tabwriter" "time" @@ -52,7 +51,7 @@ import ( // NewCmdToken returns cobra.Command for token management func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command { - var kubeConfigFile string + kubeConfigFile := kubeadmconstants.GetAdminKubeConfigPath() var dryRun bool tokenCmd := &cobra.Command{ Use: "token", @@ -84,8 +83,7 @@ func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command { RunE: cmdutil.SubCmdRunE("token"), } - tokenCmd.PersistentFlags().StringVar(&kubeConfigFile, - "kubeconfig", filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), "The KubeConfig file to use when talking to the cluster. If the flag is not set a set of standard locations are searched for an existing KubeConfig file") + options.AddKubeConfigFlag(tokenCmd.PersistentFlags(), &kubeConfigFile) tokenCmd.PersistentFlags().BoolVar(&dryRun, "dry-run", dryRun, "Whether to enable dry-run mode or not") diff --git a/cmd/kubeadm/app/cmd/util/cmdutil.go b/cmd/kubeadm/app/cmd/util/cmdutil.go index cf9042f4ae8..ad63ba0d5fc 100644 --- a/cmd/kubeadm/app/cmd/util/cmdutil.go +++ b/cmd/kubeadm/app/cmd/util/cmdutil.go @@ -69,7 +69,7 @@ func FindExistingKubeConfig(file string) string { return file } // The user did not provide a --kubeconfig flag. Find a config in the standard - // locations using DefaultClientConfigLoadingRules, but also consider `defaultKubeConfig`. + // locations using DefaultClientConfigLoadingRules, but also consider the default config path. rules := clientcmd.NewDefaultClientConfigLoadingRules() rules.Precedence = append(rules.Precedence, filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName)) return rules.GetDefaultFilename() From 2cccbf9d0cbf8d806d62906c237fa8082ca3d12d Mon Sep 17 00:00:00 2001 From: Xianglin Gao Date: Tue, 7 Aug 2018 23:31:19 +0800 Subject: [PATCH 4/4] Use FindExistingKubeConfig in the phases which use the --kubeconfig Signed-off-by: Xianglin Gao --- cmd/kubeadm/app/cmd/BUILD | 1 - cmd/kubeadm/app/cmd/phases/bootstraptoken.go | 3 ++- cmd/kubeadm/app/cmd/phases/kubelet.go | 2 ++ cmd/kubeadm/app/cmd/upgrade/upgrade.go | 4 ++-- cmd/kubeadm/app/cmd/util/cmdutil.go | 6 +++--- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/cmd/kubeadm/app/cmd/BUILD b/cmd/kubeadm/app/cmd/BUILD index 991374a427b..d0f731775b1 100644 --- a/cmd/kubeadm/app/cmd/BUILD +++ b/cmd/kubeadm/app/cmd/BUILD @@ -66,7 +66,6 @@ go_library( "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/tools/bootstrap/token/api:go_default_library", "//staging/src/k8s.io/client-go/tools/bootstrap/token/util:go_default_library", - "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd/api:go_default_library", "//staging/src/k8s.io/client-go/util/cert:go_default_library", "//vendor/github.com/ghodss/yaml:go_default_library", diff --git a/cmd/kubeadm/app/cmd/phases/bootstraptoken.go b/cmd/kubeadm/app/cmd/phases/bootstraptoken.go index 6e49b4c7088..84d4be99498 100644 --- a/cmd/kubeadm/app/cmd/phases/bootstraptoken.go +++ b/cmd/kubeadm/app/cmd/phases/bootstraptoken.go @@ -31,7 +31,7 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" - kubeadmconstants"k8s.io/kubernetes/cmd/kubeadm/app/constants" + kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/phases/bootstraptoken/clusterinfo" "k8s.io/kubernetes/cmd/kubeadm/app/phases/bootstraptoken/node" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" @@ -99,6 +99,7 @@ func NewCmdBootstrapToken() *cobra.Command { options.AddKubeConfigFlag(cmd.PersistentFlags(), &kubeConfigFile) // Add subcommands + kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) cmd.AddCommand(NewSubCmdBootstrapTokenAll(&kubeConfigFile)) cmd.AddCommand(NewSubCmdBootstrapToken(&kubeConfigFile)) cmd.AddCommand(NewSubCmdClusterInfo(&kubeConfigFile)) diff --git a/cmd/kubeadm/app/cmd/phases/kubelet.go b/cmd/kubeadm/app/cmd/phases/kubelet.go index 6482413ec5b..927121b4b0f 100644 --- a/cmd/kubeadm/app/cmd/phases/kubelet.go +++ b/cmd/kubeadm/app/cmd/phases/kubelet.go @@ -208,6 +208,7 @@ func NewCmdKubeletConfigUpload() *cobra.Command { internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, cfg) kubeadmutil.CheckErr(err) + kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile) kubeadmutil.CheckErr(err) @@ -310,6 +311,7 @@ func NewCmdKubeletConfigEnableDynamic() *cobra.Command { kubeletVersion, err := version.ParseSemantic(kubeletVersionStr) kubeadmutil.CheckErr(err) + kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile) kubeadmutil.CheckErr(err) diff --git a/cmd/kubeadm/app/cmd/upgrade/upgrade.go b/cmd/kubeadm/app/cmd/upgrade/upgrade.go index 31b85e7315a..c0e337993cb 100644 --- a/cmd/kubeadm/app/cmd/upgrade/upgrade.go +++ b/cmd/kubeadm/app/cmd/upgrade/upgrade.go @@ -18,7 +18,6 @@ package upgrade import ( "io" - "path/filepath" "strings" "github.com/spf13/cobra" @@ -47,7 +46,7 @@ type applyPlanFlags struct { // NewCmdUpgrade returns the cobra command for `kubeadm upgrade` func NewCmdUpgrade(out io.Writer) *cobra.Command { flags := &applyPlanFlags{ - kubeConfigPath: filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName), + kubeConfigPath: kubeadmconstants.GetAdminKubeConfigPath(), cfgPath: "", featureGatesString: "", allowExperimentalUpgrades: false, @@ -63,6 +62,7 @@ func NewCmdUpgrade(out io.Writer) *cobra.Command { RunE: cmdutil.SubCmdRunE("upgrade"), } + flags.kubeConfigPath = cmdutil.FindExistingKubeConfig(flags.kubeConfigPath) cmd.AddCommand(NewCmdApply(flags)) cmd.AddCommand(NewCmdPlan(flags)) cmd.AddCommand(NewCmdDiff(out)) diff --git a/cmd/kubeadm/app/cmd/util/cmdutil.go b/cmd/kubeadm/app/cmd/util/cmdutil.go index ad63ba0d5fc..748e80d2fb6 100644 --- a/cmd/kubeadm/app/cmd/util/cmdutil.go +++ b/cmd/kubeadm/app/cmd/util/cmdutil.go @@ -18,9 +18,9 @@ package util import ( "fmt" - "path/filepath" "github.com/spf13/cobra" + "k8s.io/client-go/tools/clientcmd" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" ) @@ -65,12 +65,12 @@ func ValidateExactArgNumber(args []string, supportedArgs []string) error { func FindExistingKubeConfig(file string) string { // The user did provide a --kubeconfig flag. Respect that and threat it as an // explicit path without building a DefaultClientConfigLoadingRules object. - if file != filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName) { + if file != kubeadmconstants.GetAdminKubeConfigPath() { return file } // The user did not provide a --kubeconfig flag. Find a config in the standard // locations using DefaultClientConfigLoadingRules, but also consider the default config path. rules := clientcmd.NewDefaultClientConfigLoadingRules() - rules.Precedence = append(rules.Precedence, filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.AdminKubeConfigFileName)) + rules.Precedence = append(rules.Precedence, kubeadmconstants.GetAdminKubeConfigPath()) return rules.GetDefaultFilename() }