// Namespace calls the nested method, and if an empty config error is returned // it checks for the same default as kubectl - the value of POD_NAMESPACE or // "default". func (c defaultingClientConfig) Namespace() (string, bool, error) { namespace, ok, err := c.nested.Namespace() if err == nil { return namespace, ok, nil } if !kclientcmd.IsEmptyConfig(err) { return "", false, err } // TODO: can we inject the namespace as a file in the secret? namespace = os.Getenv("POD_NAMESPACE") if len(namespace) == 0 { return api.NamespaceDefault, false, nil } return namespace, true, nil }
// Namespace calls the nested method, and if an empty config error is returned // it checks for the same default as kubectl - the value of POD_NAMESPACE or // "default". func (c defaultingClientConfig) Namespace() (string, bool, error) { namespace, ok, err := c.nested.Namespace() if err == nil { return namespace, ok, nil } if !kclientcmd.IsEmptyConfig(err) { return "", false, err } // This way assumes you've set the POD_NAMESPACE environment variable using the downward API. // This check has to be done first for backwards compatibility with the way InClusterConfig was originally set up if ns := os.Getenv("POD_NAMESPACE"); ns != "" { return ns, true, nil } // Fall back to the namespace associated with the service account token, if available if data, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace"); err == nil { if ns := strings.TrimSpace(string(data)); len(ns) > 0 { return ns, true, nil } } return api.NamespaceDefault, false, nil }
// ClientConfig returns a complete client config func (c defaultingClientConfig) ClientConfig() (*kclient.Config, error) { cfg, err := c.nested.ClientConfig() if err == nil { return cfg, nil } if !kclientcmd.IsEmptyConfig(err) { return nil, err } // TODO: need to expose inClusterConfig upstream and use that if icc, err := kclient.InClusterConfig(); err == nil { glog.V(4).Infof("Using in-cluster configuration") return icc, nil } return nil, fmt.Errorf(`No configuration file found, please login or point to an existing file: 1. Via the command-line flag --config 2. Via the KUBECONFIG environment variable 3. In your home directory as ~/.kube/config To view or setup config directly use the 'config' command.`) }