2014-12-17 13:03:03 +00:00
/ *
2015-05-01 16:19:44 +00:00
Copyright 2014 The Kubernetes Authors All rights reserved .
2014-12-17 13:03:03 +00:00
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
package config
import (
2015-04-08 14:32:32 +00:00
"errors"
2014-12-17 13:03:03 +00:00
"io"
2015-02-05 01:47:52 +00:00
"github.com/golang/glog"
2014-12-17 13:03:03 +00:00
"github.com/spf13/cobra"
2015-08-05 22:03:47 +00:00
"k8s.io/kubernetes/pkg/client/clientcmd"
clientcmdapi "k8s.io/kubernetes/pkg/client/clientcmd/api"
"k8s.io/kubernetes/pkg/client/clientcmd/api/latest"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/util"
2014-12-17 13:03:03 +00:00
)
2015-04-10 18:30:08 +00:00
type ViewOptions struct {
2015-04-10 12:54:22 +00:00
ConfigAccess ConfigAccess
Merge util . BoolFlag
Flatten bool
Minify bool
2015-04-17 22:36:31 +00:00
RawByteData bool
2014-12-17 13:03:03 +00:00
}
2015-03-11 17:22:08 +00:00
const (
2015-04-10 18:30:08 +00:00
view_long = ` displays Merged kubeconfig settings or a specified kubeconfig file .
2014-12-17 13:03:03 +00:00
2015-03-11 17:22:08 +00:00
You can use -- output = template -- template = TEMPLATE to extract specific values . `
2015-08-12 16:50:09 +00:00
view_example = ` # Show Merged kubeconfig settings .
2015-02-20 21:28:43 +00:00
$ kubectl config view
2015-02-05 01:47:52 +00:00
2015-08-12 16:50:09 +00:00
# Get the password for the e2e user
2015-02-20 14:03:38 +00:00
$ kubectl config view - o template -- template = ' { { range . users } } { { if eq . name "e2e" } } { { index . user . password } } { { end } } { { end } } ' `
2015-03-11 17:22:08 +00:00
)
2015-04-10 12:54:22 +00:00
func NewCmdConfigView ( out io . Writer , ConfigAccess ConfigAccess ) * cobra . Command {
options := & ViewOptions { ConfigAccess : ConfigAccess }
2015-03-11 17:22:08 +00:00
cmd := & cobra . Command {
Use : "view" ,
2015-04-10 18:30:08 +00:00
Short : "displays Merged kubeconfig settings or a specified kubeconfig file." ,
2015-03-11 17:22:08 +00:00
Long : view_long ,
Example : view_example ,
2014-12-17 13:03:03 +00:00
Run : func ( cmd * cobra . Command , args [ ] string ) {
2015-04-10 18:30:08 +00:00
options . Complete ( )
2015-02-20 14:27:34 +00:00
2015-02-24 20:06:24 +00:00
printer , _ , err := cmdutil . PrinterForCommand ( cmd )
2014-12-17 13:03:03 +00:00
if err != nil {
2015-02-05 01:47:52 +00:00
glog . FatalDepth ( 1 , err )
}
2015-02-20 14:03:38 +00:00
version := cmdutil . OutputVersion ( cmd , latest . Version )
printer = kubectl . NewVersionedPrinter ( printer , clientcmdapi . Scheme , version )
2015-04-10 18:30:08 +00:00
if err := options . Run ( out , printer ) ; err != nil {
2015-02-05 01:47:52 +00:00
glog . FatalDepth ( 1 , err )
}
2015-02-20 14:03:38 +00:00
2014-12-17 13:03:03 +00:00
} ,
}
2015-02-20 14:27:34 +00:00
cmdutil . AddPrinterFlags ( cmd )
2015-02-05 01:47:52 +00:00
// Default to yaml
cmd . Flags ( ) . Set ( "output" , "yaml" )
2015-02-20 14:27:34 +00:00
2015-04-10 18:30:08 +00:00
options . Merge . Default ( true )
cmd . Flags ( ) . Var ( & options . Merge , "merge" , "merge together the full hierarchy of kubeconfig files" )
2015-04-17 22:36:31 +00:00
cmd . Flags ( ) . BoolVar ( & options . RawByteData , "raw" , false , "display raw byte data" )
2015-04-10 18:30:08 +00:00
cmd . Flags ( ) . BoolVar ( & options . Flatten , "flatten" , false , "flatten the resulting kubeconfig file into self contained output (useful for creating portable kubeconfig files)" )
cmd . Flags ( ) . BoolVar ( & options . Minify , "minify" , false , "remove all information not used by current-context from the output" )
2014-12-17 13:03:03 +00:00
return cmd
}
2015-04-10 18:30:08 +00:00
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
}
2015-04-17 22:36:31 +00:00
} else if ! o . RawByteData {
clientcmdapi . ShortenConfig ( config )
2015-04-10 18:30:08 +00:00
}
err = printer . PrintObj ( config , out )
if err != nil {
return err
}
return nil
}
func ( o * ViewOptions ) Complete ( ) bool {
2015-04-10 12:54:22 +00:00
if o . ConfigAccess . IsExplicitFile ( ) {
2015-04-10 18:30:08 +00:00
if ! o . Merge . Provided ( ) {
o . Merge . Set ( "false" )
2015-02-20 14:27:34 +00:00
}
}
return true
}
2015-04-10 18:30:08 +00:00
func ( o ViewOptions ) loadConfig ( ) ( * clientcmdapi . Config , error ) {
err := o . Validate ( )
2014-12-17 13:03:03 +00:00
if err != nil {
2015-02-05 01:47:52 +00:00
return nil , err
2014-12-17 13:03:03 +00:00
}
2015-04-08 14:32:32 +00:00
config , err := o . getStartingConfig ( )
2015-02-05 01:47:52 +00:00
return config , err
2014-12-17 13:03:03 +00:00
}
2015-04-10 18:30:08 +00:00
func ( o ViewOptions ) Validate ( ) error {
2015-04-10 12:54:22 +00:00
if ! o . Merge . Value ( ) && ! o . ConfigAccess . IsExplicitFile ( ) {
return errors . New ( "if merge==false a precise file must to specified" )
}
return nil
2014-12-17 13:03:03 +00:00
}
// getStartingConfig returns the Config object built from the sources specified by the options, the filename read (only if it was a single file), and an error if something goes wrong
2015-04-10 18:30:08 +00:00
func ( o * ViewOptions ) getStartingConfig ( ) ( * clientcmdapi . Config , error ) {
2014-12-17 13:03:03 +00:00
switch {
2015-04-10 18:30:08 +00:00
case ! o . Merge . Value ( ) :
2015-04-10 12:54:22 +00:00
return clientcmd . LoadFromFile ( o . ConfigAccess . GetExplicitFile ( ) )
2015-04-08 14:32:32 +00:00
2014-12-17 13:03:03 +00:00
default :
2015-04-10 12:54:22 +00:00
return o . ConfigAccess . GetStartingConfig ( )
2014-12-17 13:03:03 +00:00
}
}