Skip to content
Snippets Groups Projects
Commit ce194ca2 authored by Jessica Yuen's avatar Jessica Yuen
Browse files

Initialize namespace to 'default' if not specified


If the namespace is not provided in the target kubeconfig context, use
'default'.

Also squashes a bug where the namespace, server flags may have been
ignored during init.

Signed-off-by: default avatarJessica Yuen <im.jessicayuen@gmail.com>
parent d9a6d444
No related branches found
No related tags found
No related merge requests found
......@@ -105,35 +105,11 @@ var envAddCmd = &cobra.Command{
name := args[0]
server, namespace, context, err := commonEnvFlags(flags)
server, namespace, err := resolveEnvFlags(flags)
if err != nil {
return err
}
if len(namespace) == 0 {
namespace = defaultNamespace
}
if len(server) == 0 {
// If server is not provided, use the provided context.
// If context is also not provided, use the current context.
var ctx *string
if len(context) != 0 {
ctx = &context
}
var ns string
server, ns, err = resolveContext(ctx)
if err != nil {
return err
}
// If namespace is not provided, use the default namespace provided in the context.
if !flags.Changed(flagEnvNamespace) {
namespace = ns
}
}
appDir, err := os.Getwd()
if err != nil {
return err
......@@ -296,22 +272,7 @@ var envSetCmd = &cobra.Command{
return err
}
server, namespace, context, err := commonEnvFlags(flags)
if err != nil {
return err
}
// If namespace flag is provided but without a value, use the default namespace.
if flags.Changed(flagEnvNamespace) && len(namespace) == 0 {
namespace = defaultNamespace
}
if len(context) != 0 {
server, _, err = resolveContext(&context)
if err != nil {
return err
}
}
server, namespace, err := resolveEnvFlags(flags)
c, err := kubecfg.NewEnvSetCmd(originalName, name, server, namespace, manager)
if err != nil {
......@@ -361,3 +322,25 @@ func commonEnvFlags(flags *pflag.FlagSet) (server, namespace, context string, er
return server, namespace, context, nil
}
func resolveEnvFlags(flags *pflag.FlagSet) (string, string, error) {
server, ns, context, err := commonEnvFlags(flags)
if err != nil {
return "", "", err
}
if server == "" {
// server is not provided -- use the context.
server, ns, err = resolveContext(context)
if err != nil {
return "", "", err
}
}
namespace := defaultNamespace
if ns != "" {
namespace = ns
}
return server, namespace, nil
}
......@@ -56,24 +56,13 @@ var initCmd = &cobra.Command{
return err
}
context, err := flags.GetString(flagEnvContext)
server, namespace, err := resolveEnvFlags(flags)
if err != nil {
return err
}
log.Infof("Creating a new app '%s' at path '%s'", appName, appRoot)
// Find the URI and namespace of the current cluster, if it exists.
var ctx *string
if len(context) != 0 {
ctx = &context
}
uri, namespace, err := resolveContext(ctx)
if err != nil {
return err
}
c, err := kubecfg.NewInitCmd(appName, appRoot, specFlag, &uri, &namespace)
c, err := kubecfg.NewInitCmd(appName, appRoot, specFlag, &server, &namespace)
if err != nil {
return err
}
......
......@@ -134,33 +134,35 @@ func namespaceFor(c clientcmd.ClientConfig, overrides *clientcmd.ConfigOverrides
return ns, err
}
// resolveContext returns the server and namespace of the cluster at the provided
// context. If context is nil, the current context is used.
func resolveContext(context *string) (server, namespace string, err error) {
// resolveContext returns the server and namespace of the cluster at the
// provided context. If the context string is empty, the default context is
// used.
func resolveContext(context string) (server, namespace string, err error) {
rawConfig, err := clientConfig.RawConfig()
if err != nil {
return "", "", err
}
ctxName := rawConfig.CurrentContext
if context != nil {
ctxName = *context
}
ctx := rawConfig.Contexts[ctxName]
if ctx == nil {
if len(ctxName) == 0 && ctxName == rawConfig.CurrentContext {
// use the default context where context is empty
if context == "" {
if rawConfig.CurrentContext == "" {
// User likely does not have a kubeconfig file.
return "", "", fmt.Errorf("No current context found. Make sure a kubeconfig file is present")
}
context = rawConfig.CurrentContext
}
return "", "", fmt.Errorf("context '%s' does not exist in the kubeconfig file", ctxName)
ctx := rawConfig.Contexts[context]
if ctx == nil {
return "", "", fmt.Errorf("context '%s' does not exist in the kubeconfig file", context)
}
log.Infof("Using context '%s' from the kubeconfig file specified at the environment variable $KUBECONFIG", ctxName)
log.Infof("Using context '%s' from the kubeconfig file specified at the environment variable $KUBECONFIG", context)
cluster, exists := rawConfig.Clusters[ctx.Cluster]
if !exists {
return "", "", fmt.Errorf("No cluster with name '%s' exists", ctx.Cluster)
}
return cluster.Server, ctx.Namespace, nil
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment