mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Merge pull request #4053 from deads2k/deads-add-envvar-flag
add flag to manage $KUBCONFIG files
This commit is contained in:
commit
1f2c907991
@ -361,10 +361,11 @@ Available Commands:
|
|||||||
--client-key="": Path to a client key file for TLS.
|
--client-key="": Path to a client key file for TLS.
|
||||||
--cluster="": The name of the kubeconfig cluster to use
|
--cluster="": The name of the kubeconfig cluster to use
|
||||||
--context="": The name of the kubeconfig context to use
|
--context="": The name of the kubeconfig context to use
|
||||||
|
--envvar=false: use the .kubeconfig from $KUBECONFIG
|
||||||
--global=false: use the .kubeconfig from /home/username
|
--global=false: use the .kubeconfig from /home/username
|
||||||
--insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
--insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
||||||
--kubeconfig="": use a particular .kubeconfig file
|
--kubeconfig="": use a particular .kubeconfig file
|
||||||
--local=true: use the .kubeconfig in the current directory
|
--local=false: use the .kubeconfig in the current directory
|
||||||
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
||||||
--log_dir=: If non-empty, write log files in this directory
|
--log_dir=: If non-empty, write log files in this directory
|
||||||
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
||||||
@ -416,11 +417,12 @@ Usage:
|
|||||||
--client-key="": Path to a client key file for TLS.
|
--client-key="": Path to a client key file for TLS.
|
||||||
--cluster="": The name of the kubeconfig cluster to use
|
--cluster="": The name of the kubeconfig cluster to use
|
||||||
--context="": The name of the kubeconfig context to use
|
--context="": The name of the kubeconfig context to use
|
||||||
|
--envvar=false: use the .kubeconfig from $KUBECONFIG
|
||||||
--global=false: use the .kubeconfig from /home/username
|
--global=false: use the .kubeconfig from /home/username
|
||||||
-h, --help=false: help for view
|
-h, --help=false: help for view
|
||||||
--insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
--insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
||||||
--kubeconfig="": use a particular .kubeconfig file
|
--kubeconfig="": use a particular .kubeconfig file
|
||||||
--local=true: use the .kubeconfig in the current directory
|
--local=false: use the .kubeconfig in the current directory
|
||||||
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
||||||
--log_dir=: If non-empty, write log files in this directory
|
--log_dir=: If non-empty, write log files in this directory
|
||||||
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
||||||
@ -460,11 +462,12 @@ Usage:
|
|||||||
--client-key="": Path to a client key file for TLS.
|
--client-key="": Path to a client key file for TLS.
|
||||||
--cluster="": The name of the kubeconfig cluster to use
|
--cluster="": The name of the kubeconfig cluster to use
|
||||||
--context="": The name of the kubeconfig context to use
|
--context="": The name of the kubeconfig context to use
|
||||||
|
--envvar=false: use the .kubeconfig from $KUBECONFIG
|
||||||
--global=false: use the .kubeconfig from /home/username
|
--global=false: use the .kubeconfig from /home/username
|
||||||
-h, --help=false: help for set-cluster
|
-h, --help=false: help for set-cluster
|
||||||
--insecure-skip-tls-verify=false: insecure-skip-tls-verify for the cluster entry in .kubeconfig
|
--insecure-skip-tls-verify=false: insecure-skip-tls-verify for the cluster entry in .kubeconfig
|
||||||
--kubeconfig="": use a particular .kubeconfig file
|
--kubeconfig="": use a particular .kubeconfig file
|
||||||
--local=true: use the .kubeconfig in the current directory
|
--local=false: use the .kubeconfig in the current directory
|
||||||
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
||||||
--log_dir=: If non-empty, write log files in this directory
|
--log_dir=: If non-empty, write log files in this directory
|
||||||
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
||||||
@ -503,11 +506,12 @@ Usage:
|
|||||||
--client-key=: client-key for the user entry in .kubeconfig
|
--client-key=: client-key for the user entry in .kubeconfig
|
||||||
--cluster="": The name of the kubeconfig cluster to use
|
--cluster="": The name of the kubeconfig cluster to use
|
||||||
--context="": The name of the kubeconfig context to use
|
--context="": The name of the kubeconfig context to use
|
||||||
|
--envvar=false: use the .kubeconfig from $KUBECONFIG
|
||||||
--global=false: use the .kubeconfig from /home/username
|
--global=false: use the .kubeconfig from /home/username
|
||||||
-h, --help=false: help for set-credentials
|
-h, --help=false: help for set-credentials
|
||||||
--insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
--insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
||||||
--kubeconfig="": use a particular .kubeconfig file
|
--kubeconfig="": use a particular .kubeconfig file
|
||||||
--local=true: use the .kubeconfig in the current directory
|
--local=false: use the .kubeconfig in the current directory
|
||||||
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
||||||
--log_dir=: If non-empty, write log files in this directory
|
--log_dir=: If non-empty, write log files in this directory
|
||||||
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
||||||
@ -546,11 +550,12 @@ Usage:
|
|||||||
--client-key="": Path to a client key file for TLS.
|
--client-key="": Path to a client key file for TLS.
|
||||||
--cluster=: cluster for the context entry in .kubeconfig
|
--cluster=: cluster for the context entry in .kubeconfig
|
||||||
--context="": The name of the kubeconfig context to use
|
--context="": The name of the kubeconfig context to use
|
||||||
|
--envvar=false: use the .kubeconfig from $KUBECONFIG
|
||||||
--global=false: use the .kubeconfig from /home/username
|
--global=false: use the .kubeconfig from /home/username
|
||||||
-h, --help=false: help for set-context
|
-h, --help=false: help for set-context
|
||||||
--insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
--insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
||||||
--kubeconfig="": use a particular .kubeconfig file
|
--kubeconfig="": use a particular .kubeconfig file
|
||||||
--local=true: use the .kubeconfig in the current directory
|
--local=false: use the .kubeconfig in the current directory
|
||||||
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
||||||
--log_dir=: If non-empty, write log files in this directory
|
--log_dir=: If non-empty, write log files in this directory
|
||||||
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
||||||
@ -589,11 +594,12 @@ Usage:
|
|||||||
--client-key="": Path to a client key file for TLS.
|
--client-key="": Path to a client key file for TLS.
|
||||||
--cluster="": The name of the kubeconfig cluster to use
|
--cluster="": The name of the kubeconfig cluster to use
|
||||||
--context="": The name of the kubeconfig context to use
|
--context="": The name of the kubeconfig context to use
|
||||||
|
--envvar=false: use the .kubeconfig from $KUBECONFIG
|
||||||
--global=false: use the .kubeconfig from /home/username
|
--global=false: use the .kubeconfig from /home/username
|
||||||
-h, --help=false: help for config
|
-h, --help=false: help for config
|
||||||
--insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
--insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
||||||
--kubeconfig="": use a particular .kubeconfig file
|
--kubeconfig="": use a particular .kubeconfig file
|
||||||
--local=true: use the .kubeconfig in the current directory
|
--local=false: use the .kubeconfig in the current directory
|
||||||
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
||||||
--log_dir=: If non-empty, write log files in this directory
|
--log_dir=: If non-empty, write log files in this directory
|
||||||
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
||||||
@ -630,11 +636,12 @@ Usage:
|
|||||||
--client-key="": Path to a client key file for TLS.
|
--client-key="": Path to a client key file for TLS.
|
||||||
--cluster="": The name of the kubeconfig cluster to use
|
--cluster="": The name of the kubeconfig cluster to use
|
||||||
--context="": The name of the kubeconfig context to use
|
--context="": The name of the kubeconfig context to use
|
||||||
|
--envvar=false: use the .kubeconfig from $KUBECONFIG
|
||||||
--global=false: use the .kubeconfig from /home/username
|
--global=false: use the .kubeconfig from /home/username
|
||||||
-h, --help=false: help for config
|
-h, --help=false: help for config
|
||||||
--insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
--insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
||||||
--kubeconfig="": use a particular .kubeconfig file
|
--kubeconfig="": use a particular .kubeconfig file
|
||||||
--local=true: use the .kubeconfig in the current directory
|
--local=false: use the .kubeconfig in the current directory
|
||||||
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
||||||
--log_dir=: If non-empty, write log files in this directory
|
--log_dir=: If non-empty, write log files in this directory
|
||||||
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
||||||
@ -668,11 +675,12 @@ Usage:
|
|||||||
--client-key="": Path to a client key file for TLS.
|
--client-key="": Path to a client key file for TLS.
|
||||||
--cluster="": The name of the kubeconfig cluster to use
|
--cluster="": The name of the kubeconfig cluster to use
|
||||||
--context="": The name of the kubeconfig context to use
|
--context="": The name of the kubeconfig context to use
|
||||||
|
--envvar=false: use the .kubeconfig from $KUBECONFIG
|
||||||
--global=false: use the .kubeconfig from /home/username
|
--global=false: use the .kubeconfig from /home/username
|
||||||
-h, --help=false: help for config
|
-h, --help=false: help for config
|
||||||
--insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
--insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
||||||
--kubeconfig="": use a particular .kubeconfig file
|
--kubeconfig="": use a particular .kubeconfig file
|
||||||
--local=true: use the .kubeconfig in the current directory
|
--local=false: use the .kubeconfig in the current directory
|
||||||
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
||||||
--log_dir=: If non-empty, write log files in this directory
|
--log_dir=: If non-empty, write log files in this directory
|
||||||
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
||||||
|
@ -17,6 +17,7 @@ limitations under the License.
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
@ -31,6 +32,7 @@ import (
|
|||||||
type pathOptions struct {
|
type pathOptions struct {
|
||||||
local bool
|
local bool
|
||||||
global bool
|
global bool
|
||||||
|
envvar bool
|
||||||
specifiedFile string
|
specifiedFile string
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,8 +49,9 @@ func NewCmdConfig(out io.Writer) *cobra.Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// file paths are common to all sub commands
|
// file paths are common to all sub commands
|
||||||
cmd.PersistentFlags().BoolVar(&pathOptions.local, "local", true, "use the .kubeconfig in the current directory")
|
cmd.PersistentFlags().BoolVar(&pathOptions.local, "local", false, "use the .kubeconfig in the current directory")
|
||||||
cmd.PersistentFlags().BoolVar(&pathOptions.global, "global", false, "use the .kubeconfig from "+os.Getenv("HOME"))
|
cmd.PersistentFlags().BoolVar(&pathOptions.global, "global", false, "use the .kubeconfig from "+os.Getenv("HOME"))
|
||||||
|
cmd.PersistentFlags().BoolVar(&pathOptions.envvar, "envvar", false, "use the .kubeconfig from $KUBECONFIG")
|
||||||
cmd.PersistentFlags().StringVar(&pathOptions.specifiedFile, "kubeconfig", "", "use a particular .kubeconfig file")
|
cmd.PersistentFlags().StringVar(&pathOptions.specifiedFile, "kubeconfig", "", "use a particular .kubeconfig file")
|
||||||
|
|
||||||
cmd.AddCommand(NewCmdConfigView(out, pathOptions))
|
cmd.AddCommand(NewCmdConfigView(out, pathOptions))
|
||||||
@ -65,18 +68,53 @@ func NewCmdConfig(out io.Writer) *cobra.Command {
|
|||||||
func (o *pathOptions) getStartingConfig() (*clientcmdapi.Config, string, error) {
|
func (o *pathOptions) getStartingConfig() (*clientcmdapi.Config, string, error) {
|
||||||
filename := ""
|
filename := ""
|
||||||
config := clientcmdapi.NewConfig()
|
config := clientcmdapi.NewConfig()
|
||||||
switch {
|
|
||||||
case o.global:
|
|
||||||
filename = os.Getenv("HOME") + "/.kube/.kubeconfig"
|
|
||||||
config = getConfigFromFileOrDie(filename)
|
|
||||||
|
|
||||||
case len(o.specifiedFile) > 0:
|
if len(o.specifiedFile) > 0 {
|
||||||
filename = o.specifiedFile
|
filename = o.specifiedFile
|
||||||
config = getConfigFromFileOrDie(filename)
|
config = getConfigFromFileOrDie(filename)
|
||||||
|
}
|
||||||
|
|
||||||
|
if o.global {
|
||||||
|
if len(filename) > 0 {
|
||||||
|
return nil, "", fmt.Errorf("already loading from %v, cannot specify global as well", filename)
|
||||||
|
}
|
||||||
|
|
||||||
|
filename = os.Getenv("HOME") + "/.kube/.kubeconfig"
|
||||||
|
config = getConfigFromFileOrDie(filename)
|
||||||
|
}
|
||||||
|
|
||||||
|
if o.envvar {
|
||||||
|
if len(filename) > 0 {
|
||||||
|
return nil, "", fmt.Errorf("already loading from %v, cannot specify global as well", filename)
|
||||||
|
}
|
||||||
|
|
||||||
|
filename = os.Getenv(clientcmd.RecommendedConfigPathEnvVar)
|
||||||
|
if len(filename) == 0 {
|
||||||
|
return nil, "", fmt.Errorf("environment variable %v does not have a value", clientcmd.RecommendedConfigPathEnvVar)
|
||||||
|
}
|
||||||
|
|
||||||
|
config = getConfigFromFileOrDie(filename)
|
||||||
|
}
|
||||||
|
|
||||||
|
if o.local {
|
||||||
|
if len(filename) > 0 {
|
||||||
|
return nil, "", fmt.Errorf("already loading from %v, cannot specify global as well", filename)
|
||||||
|
}
|
||||||
|
|
||||||
case o.local:
|
|
||||||
filename = ".kubeconfig"
|
filename = ".kubeconfig"
|
||||||
config = getConfigFromFileOrDie(filename)
|
config = getConfigFromFileOrDie(filename)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// no specific flag was set, first attempt to use the envvar, then use local
|
||||||
|
if len(filename) == 0 {
|
||||||
|
if len(os.Getenv(clientcmd.RecommendedConfigPathEnvVar)) > 0 {
|
||||||
|
filename = os.Getenv(clientcmd.RecommendedConfigPathEnvVar)
|
||||||
|
config = getConfigFromFileOrDie(filename)
|
||||||
|
} else {
|
||||||
|
filename = ".kubeconfig"
|
||||||
|
config = getConfigFromFileOrDie(filename)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return config, filename, nil
|
return config, filename, nil
|
||||||
|
@ -19,6 +19,7 @@ package config
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
@ -82,7 +83,7 @@ func (o *viewOptions) getStartingConfig() (*clientcmdapi.Config, string, error)
|
|||||||
switch {
|
switch {
|
||||||
case o.merge:
|
case o.merge:
|
||||||
loadingRules := clientcmd.NewClientConfigLoadingRules()
|
loadingRules := clientcmd.NewClientConfigLoadingRules()
|
||||||
loadingRules.EnvVarPath = ""
|
loadingRules.EnvVarPath = os.Getenv("KUBECONFIG")
|
||||||
loadingRules.CommandLinePath = o.pathOptions.specifiedFile
|
loadingRules.CommandLinePath = o.pathOptions.specifiedFile
|
||||||
|
|
||||||
overrides := &clientcmd.ConfigOverrides{}
|
overrides := &clientcmd.ConfigOverrides{}
|
||||||
|
Loading…
Reference in New Issue
Block a user