func (o ViewOptions) Run(out io.Writer, printer kubectl.ResourcePrinter) error { config, err := o.loadConfig() if err != nil { return err } if o.Minify { if err := clientcmdapi.MinifyConfig(config); err != nil { return err } } if o.Flatten { if err := clientcmdapi.FlattenConfig(config); err != nil { return err } } else if !o.RawByteData { clientcmdapi.ShortenConfig(config) } err = printer.PrintObj(config, out) if err != nil { return err } return nil }
// minifyConfig is a wrapper around `clientcmdapi.MinifyConfig()` that // sets the current context to the given context before calling // `clientcmdapi.MinifyConfig()`. func minifyConfig(clientConfig *clientcmdapi.Config, context string) (*clientcmdapi.Config, error) { // MinifyConfig inline-modifies the passed clientConfig. So we make a // copy of it before passing the config to it. A shallow copy is // sufficient because the underlying fields will be reconstructed by // MinifyConfig anyway. newClientConfig := *clientConfig newClientConfig.CurrentContext = context err := clientcmdapi.MinifyConfig(&newClientConfig) if err != nil { return nil, err } return &newClientConfig, nil }
func (o *CreateKubeconfigOptions) Run() error { serviceAccount, err := o.SAClient.Get(o.SAName) if err != nil { return err } for _, reference := range serviceAccount.Secrets { secret, err := o.SecretsClient.Get(reference.Name) if err != nil { continue } if serviceaccounts.IsValidServiceAccountToken(serviceAccount, secret) { token, exists := secret.Data[kapi.ServiceAccountTokenKey] if !exists { return fmt.Errorf("service account token %q for service account %q did not contain token data", secret.Name, serviceAccount.Name) } cfg := &o.RawConfig if err := clientcmdapi.MinifyConfig(cfg); err != nil { return fmt.Errorf("invalid configuration, unable to create new config file: %v", err) } ctx := cfg.Contexts[cfg.CurrentContext] ctx.Namespace = o.ContextNamespace // rename the current context cfg.CurrentContext = o.SAName cfg.Contexts = map[string]*clientcmdapi.Context{ cfg.CurrentContext: ctx, } // use the server name ctx.AuthInfo = o.SAName cfg.AuthInfos = map[string]*clientcmdapi.AuthInfo{ ctx.AuthInfo: { Token: string(token), }, } out, err := kclientcmd.Write(*cfg) if err != nil { return err } fmt.Fprintf(o.Out, string(out)) return nil } } return fmt.Errorf("could not find a service account token for service account %q", serviceAccount.Name) }