mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
Merge pull request #66702 from xlgao-zju/search-kubeconfig
Automatic merge from submit-queue (batch tested with PRs 62441, 66702, 67254, 67421, 65309). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. [kubeadm] Apply means to search for existing KubeConfig files in standard locations across kubeadm **What this PR does / why we need it**: Apply means to search for existing KubeConfig files in standard locations across kubeadm. Tasklist: - [x] Use the Join of Dir and File name instead of DefaultKubeConfig - [x] Refactor token.go::findExistingKubeConfig() into a utility in cmd/kubeadm/app/cmd/util - [x] Use the utility in config, upgrade and some of the phases commands that use --kubeconfig **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: ref [kubernetes/kubeadm/#805](https://github.com/kubernetes/kubeadm/issues/805) **Special notes for your reviewer**: /assign @neolit123 **Release note**: ```release-note NONE ```
This commit is contained in:
commit
7f7a967f9f
@ -66,7 +66,6 @@ go_library(
|
|||||||
"//staging/src/k8s.io/client-go/kubernetes:go_default_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/api:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/tools/bootstrap/token/util: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/tools/clientcmd/api:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/util/cert:go_default_library",
|
"//staging/src/k8s.io/client-go/util/cert:go_default_library",
|
||||||
"//vendor/github.com/ghodss/yaml:go_default_library",
|
"//vendor/github.com/ghodss/yaml:go_default_library",
|
||||||
|
@ -34,6 +34,7 @@ import (
|
|||||||
kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme"
|
kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme"
|
||||||
kubeadmapiv1alpha2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha2"
|
kubeadmapiv1alpha2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha2"
|
||||||
kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3"
|
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"
|
phaseutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases"
|
||||||
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/componentconfigs"
|
"k8s.io/kubernetes/cmd/kubeadm/app/componentconfigs"
|
||||||
@ -60,8 +61,8 @@ var (
|
|||||||
|
|
||||||
// NewCmdConfig returns cobra.Command for "kubeadm config" command
|
// NewCmdConfig returns cobra.Command for "kubeadm config" command
|
||||||
func NewCmdConfig(out io.Writer) *cobra.Command {
|
func NewCmdConfig(out io.Writer) *cobra.Command {
|
||||||
|
kubeConfigFile := constants.GetAdminKubeConfigPath()
|
||||||
|
|
||||||
var kubeConfigFile string
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "config",
|
Use: "config",
|
||||||
Short: "Manage configuration for a kubeadm cluster persisted in a ConfigMap in the cluster.",
|
Short: "Manage configuration for a kubeadm cluster persisted in a ConfigMap in the cluster.",
|
||||||
@ -79,8 +80,9 @@ func NewCmdConfig(out io.Writer) *cobra.Command {
|
|||||||
RunE: cmdutil.SubCmdRunE("config"),
|
RunE: cmdutil.SubCmdRunE("config"),
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.PersistentFlags().StringVar(&kubeConfigFile, "kubeconfig", "/etc/kubernetes/admin.conf", "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(NewCmdConfigPrintDefault(out))
|
||||||
cmd.AddCommand(NewCmdConfigMigrate(out))
|
cmd.AddCommand(NewCmdConfigMigrate(out))
|
||||||
cmd.AddCommand(NewCmdConfigUpload(out, &kubeConfigFile))
|
cmd.AddCommand(NewCmdConfigUpload(out, &kubeConfigFile))
|
||||||
|
@ -20,7 +20,7 @@ import "github.com/spf13/pflag"
|
|||||||
|
|
||||||
// AddKubeConfigFlag adds the --kubeconfig flag to the given flagset
|
// AddKubeConfigFlag adds the --kubeconfig flag to the given flagset
|
||||||
func AddKubeConfigFlag(fs *pflag.FlagSet, kubeConfigFile *string) {
|
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
|
// AddConfigFlag adds the --config flag to the given flagset
|
||||||
|
@ -27,7 +27,9 @@ import (
|
|||||||
kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme"
|
kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme"
|
||||||
kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3"
|
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/apis/kubeadm/validation"
|
||||||
|
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
|
||||||
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
||||||
|
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/features"
|
"k8s.io/kubernetes/cmd/kubeadm/app/features"
|
||||||
dnsaddon "k8s.io/kubernetes/cmd/kubeadm/app/phases/addons/dns"
|
dnsaddon "k8s.io/kubernetes/cmd/kubeadm/app/phases/addons/dns"
|
||||||
proxyaddon "k8s.io/kubernetes/cmd/kubeadm/app/phases/addons/proxy"
|
proxyaddon "k8s.io/kubernetes/cmd/kubeadm/app/phases/addons/proxy"
|
||||||
@ -98,8 +100,9 @@ func getAddonsSubCommands() []*cobra.Command {
|
|||||||
// Default values for the cobra help text
|
// Default values for the cobra help text
|
||||||
kubeadmscheme.Scheme.Default(cfg)
|
kubeadmscheme.Scheme.Default(cfg)
|
||||||
|
|
||||||
var cfgPath, kubeConfigFile, featureGatesString string
|
var cfgPath, featureGatesString string
|
||||||
var subCmds []*cobra.Command
|
var subCmds []*cobra.Command
|
||||||
|
kubeConfigFile := kubeadmconstants.GetAdminKubeConfigPath()
|
||||||
|
|
||||||
subCmdProperties := []struct {
|
subCmdProperties := []struct {
|
||||||
use string
|
use string
|
||||||
@ -136,11 +139,11 @@ func getAddonsSubCommands() []*cobra.Command {
|
|||||||
Short: properties.short,
|
Short: properties.short,
|
||||||
Long: properties.long,
|
Long: properties.long,
|
||||||
Example: properties.examples,
|
Example: properties.examples,
|
||||||
Run: runAddonsCmdFunc(properties.cmdFunc, cfg, &kubeConfigFile, &cfgPath, &featureGatesString),
|
Run: runAddonsCmdFunc(properties.cmdFunc, cfg, kubeConfigFile, &cfgPath, &featureGatesString),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add flags to the 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")
|
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(&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.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`)
|
cmd.Flags().StringVar(&cfg.ImageRepository, "image-repository", cfg.ImageRepository, `Choose a container registry to pull control plane images from`)
|
||||||
@ -164,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)
|
// 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 following statement build a clousure that wraps a call to a cmdFunc, binding
|
||||||
// the function itself with the specific parameters of each sub command.
|
// the function itself with the specific parameters of each sub command.
|
||||||
@ -183,7 +186,8 @@ func runAddonsCmdFunc(cmdFunc func(cfg *kubeadmapi.InitConfiguration, client cli
|
|||||||
|
|
||||||
internalcfg := &kubeadmapi.InitConfiguration{}
|
internalcfg := &kubeadmapi.InitConfiguration{}
|
||||||
kubeadmscheme.Scheme.Convert(cfg, internalcfg, nil)
|
kubeadmscheme.Scheme.Convert(cfg, internalcfg, nil)
|
||||||
client, err := kubeconfigutil.ClientSetFromFile(*kubeConfigFile)
|
kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile)
|
||||||
|
client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile)
|
||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
internalcfg, err = configutil.ConfigFileAndDefaultsToInternalConfig(*cfgPath, cfg)
|
internalcfg, err = configutil.ConfigFileAndDefaultsToInternalConfig(*cfgPath, cfg)
|
||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
|
@ -31,6 +31,7 @@ import (
|
|||||||
"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation"
|
"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
|
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
|
||||||
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
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/clusterinfo"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/phases/bootstraptoken/node"
|
"k8s.io/kubernetes/cmd/kubeadm/app/phases/bootstraptoken/node"
|
||||||
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
||||||
@ -86,7 +87,8 @@ var (
|
|||||||
|
|
||||||
// NewCmdBootstrapToken returns the Cobra command for running the mark-master phase
|
// NewCmdBootstrapToken returns the Cobra command for running the mark-master phase
|
||||||
func NewCmdBootstrapToken() *cobra.Command {
|
func NewCmdBootstrapToken() *cobra.Command {
|
||||||
var kubeConfigFile string
|
kubeConfigFile := kubeadmconstants.GetAdminKubeConfigPath()
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "bootstrap-token",
|
Use: "bootstrap-token",
|
||||||
Short: "Manage kubeadm-specific bootstrap token functions",
|
Short: "Manage kubeadm-specific bootstrap token functions",
|
||||||
@ -94,9 +96,10 @@ func NewCmdBootstrapToken() *cobra.Command {
|
|||||||
Aliases: []string{"bootstraptoken"},
|
Aliases: []string{"bootstraptoken"},
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.PersistentFlags().StringVar(&kubeConfigFile, "kubeconfig", "/etc/kubernetes/admin.conf", "The KubeConfig file to use when talking to the cluster")
|
options.AddKubeConfigFlag(cmd.PersistentFlags(), &kubeConfigFile)
|
||||||
|
|
||||||
// Add subcommands
|
// Add subcommands
|
||||||
|
kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile)
|
||||||
cmd.AddCommand(NewSubCmdBootstrapTokenAll(&kubeConfigFile))
|
cmd.AddCommand(NewSubCmdBootstrapTokenAll(&kubeConfigFile))
|
||||||
cmd.AddCommand(NewSubCmdBootstrapToken(&kubeConfigFile))
|
cmd.AddCommand(NewSubCmdBootstrapToken(&kubeConfigFile))
|
||||||
cmd.AddCommand(NewSubCmdClusterInfo(&kubeConfigFile))
|
cmd.AddCommand(NewSubCmdClusterInfo(&kubeConfigFile))
|
||||||
|
@ -208,6 +208,7 @@ func NewCmdKubeletConfigUpload() *cobra.Command {
|
|||||||
internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, cfg)
|
internalcfg, err := configutil.ConfigFileAndDefaultsToInternalConfig(cfgPath, cfg)
|
||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
|
|
||||||
|
kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile)
|
||||||
client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile)
|
client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile)
|
||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
|
|
||||||
@ -310,6 +311,7 @@ func NewCmdKubeletConfigEnableDynamic() *cobra.Command {
|
|||||||
kubeletVersion, err := version.ParseSemantic(kubeletVersionStr)
|
kubeletVersion, err := version.ParseSemantic(kubeletVersionStr)
|
||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
|
|
||||||
|
kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile)
|
||||||
client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile)
|
client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile)
|
||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
|
|
||||||
|
@ -22,7 +22,9 @@ import (
|
|||||||
kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme"
|
kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme"
|
||||||
kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3"
|
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/apis/kubeadm/validation"
|
||||||
|
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
|
||||||
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
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"
|
markmasterphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/markmaster"
|
||||||
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
||||||
configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config"
|
configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config"
|
||||||
@ -51,7 +53,9 @@ func NewCmdMarkMaster() *cobra.Command {
|
|||||||
// Default values for the cobra help text
|
// Default values for the cobra help text
|
||||||
kubeadmscheme.Scheme.Default(cfg)
|
kubeadmscheme.Scheme.Default(cfg)
|
||||||
|
|
||||||
var cfgPath, kubeConfigFile string
|
var cfgPath string
|
||||||
|
kubeConfigFile := kubeadmconstants.GetAdminKubeConfigPath()
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "mark-master",
|
Use: "mark-master",
|
||||||
Short: "Mark a node as master",
|
Short: "Mark a node as master",
|
||||||
@ -63,6 +67,7 @@ func NewCmdMarkMaster() *cobra.Command {
|
|||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile)
|
||||||
client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile)
|
client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile)
|
||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
|
|
||||||
@ -80,7 +85,7 @@ func NewCmdMarkMaster() *cobra.Command {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", "/etc/kubernetes/admin.conf", "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(&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`)
|
cmd.Flags().StringVar(&cfg.NodeRegistration.Name, "node-name", cfg.NodeRegistration.Name, `The node name to which label and taints should apply`)
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@ import (
|
|||||||
kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme"
|
kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme"
|
||||||
kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3"
|
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/apis/kubeadm/validation"
|
||||||
|
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
|
||||||
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/features"
|
"k8s.io/kubernetes/cmd/kubeadm/app/features"
|
||||||
@ -74,7 +75,8 @@ func getSelfhostingSubCommand() *cobra.Command {
|
|||||||
// Default values for the cobra help text
|
// Default values for the cobra help text
|
||||||
kubeadmscheme.Scheme.Default(cfg)
|
kubeadmscheme.Scheme.Default(cfg)
|
||||||
|
|
||||||
var cfgPath, kubeConfigFile, featureGatesString string
|
var cfgPath, featureGatesString string
|
||||||
|
kubeConfigFile := constants.GetAdminKubeConfigPath()
|
||||||
|
|
||||||
// Creates the UX Command
|
// Creates the UX Command
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
@ -94,6 +96,7 @@ func getSelfhostingSubCommand() *cobra.Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Gets the kubernetes client
|
// Gets the kubernetes client
|
||||||
|
kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile)
|
||||||
client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile)
|
client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile)
|
||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
|
|
||||||
@ -122,7 +125,7 @@ func getSelfhostingSubCommand() *cobra.Command {
|
|||||||
|
|
||||||
// flags that are not bound to the configuration object
|
// 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
|
// 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")
|
options.AddKubeConfigFlag(cmd.Flags(), &kubeConfigFile)
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ import (
|
|||||||
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3"
|
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"
|
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/uploadconfig"
|
"k8s.io/kubernetes/cmd/kubeadm/app/phases/uploadconfig"
|
||||||
@ -49,7 +50,8 @@ var (
|
|||||||
// NewCmdUploadConfig returns the Cobra command for running the uploadconfig phase
|
// NewCmdUploadConfig returns the Cobra command for running the uploadconfig phase
|
||||||
func NewCmdUploadConfig() *cobra.Command {
|
func NewCmdUploadConfig() *cobra.Command {
|
||||||
cfg := &kubeadmapiv1alpha3.InitConfiguration{}
|
cfg := &kubeadmapiv1alpha3.InitConfiguration{}
|
||||||
var cfgPath, kubeConfigFile string
|
kubeConfigFile := kubeadmconstants.GetAdminKubeConfigPath()
|
||||||
|
var cfgPath string
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "upload-config",
|
Use: "upload-config",
|
||||||
@ -61,6 +63,8 @@ func NewCmdUploadConfig() *cobra.Command {
|
|||||||
if len(cfgPath) == 0 {
|
if len(cfgPath) == 0 {
|
||||||
kubeadmutil.CheckErr(fmt.Errorf("the --config flag is mandatory"))
|
kubeadmutil.CheckErr(fmt.Errorf("the --config flag is mandatory"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile)
|
||||||
client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile)
|
client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile)
|
||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
|
|
||||||
@ -77,7 +81,7 @@ func NewCmdUploadConfig() *cobra.Command {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.Flags().StringVar(&kubeConfigFile, "kubeconfig", "/etc/kubernetes/admin.conf", "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")
|
cmd.Flags().StringVar(&cfgPath, "config", "", "Path to a kubeadm config file. WARNING: Usage of a configuration file is experimental")
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
|
@ -34,7 +34,6 @@ import (
|
|||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
bootstrapapi "k8s.io/client-go/tools/bootstrap/token/api"
|
bootstrapapi "k8s.io/client-go/tools/bootstrap/token/api"
|
||||||
bootstraputil "k8s.io/client-go/tools/bootstrap/token/util"
|
bootstraputil "k8s.io/client-go/tools/bootstrap/token/util"
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
|
||||||
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
||||||
kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme"
|
kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme"
|
||||||
kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3"
|
kubeadmapiv1alpha3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha3"
|
||||||
@ -42,6 +41,7 @@ import (
|
|||||||
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
|
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
|
||||||
phaseutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases"
|
phaseutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases"
|
||||||
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
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"
|
tokenphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/bootstraptoken/node"
|
||||||
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/util/apiclient"
|
"k8s.io/kubernetes/cmd/kubeadm/app/util/apiclient"
|
||||||
@ -49,11 +49,9 @@ import (
|
|||||||
kubeconfigutil "k8s.io/kubernetes/cmd/kubeadm/app/util/kubeconfig"
|
kubeconfigutil "k8s.io/kubernetes/cmd/kubeadm/app/util/kubeconfig"
|
||||||
)
|
)
|
||||||
|
|
||||||
const defaultKubeConfig = "/etc/kubernetes/admin.conf"
|
|
||||||
|
|
||||||
// NewCmdToken returns cobra.Command for token management
|
// NewCmdToken returns cobra.Command for token management
|
||||||
func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command {
|
func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command {
|
||||||
var kubeConfigFile string
|
kubeConfigFile := kubeadmconstants.GetAdminKubeConfigPath()
|
||||||
var dryRun bool
|
var dryRun bool
|
||||||
tokenCmd := &cobra.Command{
|
tokenCmd := &cobra.Command{
|
||||||
Use: "token",
|
Use: "token",
|
||||||
@ -85,8 +83,7 @@ func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command {
|
|||||||
RunE: cmdutil.SubCmdRunE("token"),
|
RunE: cmdutil.SubCmdRunE("token"),
|
||||||
}
|
}
|
||||||
|
|
||||||
tokenCmd.PersistentFlags().StringVar(&kubeConfigFile,
|
options.AddKubeConfigFlag(tokenCmd.PersistentFlags(), &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")
|
|
||||||
tokenCmd.PersistentFlags().BoolVar(&dryRun,
|
tokenCmd.PersistentFlags().BoolVar(&dryRun,
|
||||||
"dry-run", dryRun, "Whether to enable dry-run mode or not")
|
"dry-run", dryRun, "Whether to enable dry-run mode or not")
|
||||||
|
|
||||||
@ -123,7 +120,7 @@ func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command {
|
|||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
|
|
||||||
glog.V(1).Infoln("[token] getting Clientsets from KubeConfig file")
|
glog.V(1).Infoln("[token] getting Clientsets from KubeConfig file")
|
||||||
kubeConfigFile = findExistingKubeConfig(kubeConfigFile)
|
kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile)
|
||||||
client, err := getClientset(kubeConfigFile, dryRun)
|
client, err := getClientset(kubeConfigFile, dryRun)
|
||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
|
|
||||||
@ -150,7 +147,7 @@ func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command {
|
|||||||
This command will list all bootstrap tokens for you.
|
This command will list all bootstrap tokens for you.
|
||||||
`),
|
`),
|
||||||
Run: func(tokenCmd *cobra.Command, args []string) {
|
Run: func(tokenCmd *cobra.Command, args []string) {
|
||||||
kubeConfigFile = findExistingKubeConfig(kubeConfigFile)
|
kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile)
|
||||||
client, err := getClientset(kubeConfigFile, dryRun)
|
client, err := getClientset(kubeConfigFile, dryRun)
|
||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
|
|
||||||
@ -174,7 +171,7 @@ func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command {
|
|||||||
if len(args) < 1 {
|
if len(args) < 1 {
|
||||||
kubeadmutil.CheckErr(fmt.Errorf("missing subcommand; 'token delete' is missing token of form %q", bootstrapapi.BootstrapTokenIDPattern))
|
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)
|
client, err := getClientset(kubeConfigFile, dryRun)
|
||||||
kubeadmutil.CheckErr(err)
|
kubeadmutil.CheckErr(err)
|
||||||
|
|
||||||
@ -357,16 +354,3 @@ func getClientset(file string, dryRun bool) (clientset.Interface, error) {
|
|||||||
}
|
}
|
||||||
return kubeconfigutil.ClientSetFromFile(file)
|
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 != 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)
|
|
||||||
return rules.GetDefaultFilename()
|
|
||||||
}
|
|
||||||
|
@ -26,6 +26,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
|
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
|
||||||
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
||||||
|
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/features"
|
"k8s.io/kubernetes/cmd/kubeadm/app/features"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -45,7 +46,7 @@ type applyPlanFlags struct {
|
|||||||
// NewCmdUpgrade returns the cobra command for `kubeadm upgrade`
|
// NewCmdUpgrade returns the cobra command for `kubeadm upgrade`
|
||||||
func NewCmdUpgrade(out io.Writer) *cobra.Command {
|
func NewCmdUpgrade(out io.Writer) *cobra.Command {
|
||||||
flags := &applyPlanFlags{
|
flags := &applyPlanFlags{
|
||||||
kubeConfigPath: "/etc/kubernetes/admin.conf",
|
kubeConfigPath: kubeadmconstants.GetAdminKubeConfigPath(),
|
||||||
cfgPath: "",
|
cfgPath: "",
|
||||||
featureGatesString: "",
|
featureGatesString: "",
|
||||||
allowExperimentalUpgrades: false,
|
allowExperimentalUpgrades: false,
|
||||||
@ -61,6 +62,7 @@ func NewCmdUpgrade(out io.Writer) *cobra.Command {
|
|||||||
RunE: cmdutil.SubCmdRunE("upgrade"),
|
RunE: cmdutil.SubCmdRunE("upgrade"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flags.kubeConfigPath = cmdutil.FindExistingKubeConfig(flags.kubeConfigPath)
|
||||||
cmd.AddCommand(NewCmdApply(flags))
|
cmd.AddCommand(NewCmdApply(flags))
|
||||||
cmd.AddCommand(NewCmdPlan(flags))
|
cmd.AddCommand(NewCmdPlan(flags))
|
||||||
cmd.AddCommand(NewCmdDiff(out))
|
cmd.AddCommand(NewCmdDiff(out))
|
||||||
|
@ -10,6 +10,7 @@ go_library(
|
|||||||
importpath = "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util",
|
importpath = "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util",
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
deps = [
|
||||||
|
"//cmd/kubeadm/app/constants:go_default_library",
|
||||||
"//cmd/kubeadm/app/util/kubeconfig:go_default_library",
|
"//cmd/kubeadm/app/util/kubeconfig:go_default_library",
|
||||||
"//cmd/kubeadm/app/util/pubkeypin:go_default_library",
|
"//cmd/kubeadm/app/util/pubkeypin:go_default_library",
|
||||||
"//pkg/util/normalizer:go_default_library",
|
"//pkg/util/normalizer:go_default_library",
|
||||||
|
@ -20,6 +20,9 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"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
|
// 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
|
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 != 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, kubeadmconstants.GetAdminKubeConfigPath())
|
||||||
|
return rules.GetDefaultFilename()
|
||||||
|
}
|
||||||
|
@ -18,6 +18,7 @@ package constants
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@ -38,7 +39,7 @@ func TestGetStaticPodDirectory(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestGetAdminKubeConfigPath(t *testing.T) {
|
func TestGetAdminKubeConfigPath(t *testing.T) {
|
||||||
expected := "/etc/kubernetes/admin.conf"
|
expected := filepath.Join(KubernetesDir, AdminKubeConfigFileName)
|
||||||
actual := GetAdminKubeConfigPath()
|
actual := GetAdminKubeConfigPath()
|
||||||
|
|
||||||
if actual != expected {
|
if actual != expected {
|
||||||
|
Loading…
Reference in New Issue
Block a user