2014-12-17 13:03:03 +00:00
/ *
2016-06-03 00:25:58 +00:00
Copyright 2014 The Kubernetes Authors .
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 (
2017-09-14 09:14:42 +00:00
"fmt"
2014-12-17 13:03:03 +00:00
"io"
2015-04-08 14:32:32 +00:00
"path"
2014-12-17 13:03:03 +00:00
"strconv"
"github.com/spf13/cobra"
2017-01-20 18:06:17 +00:00
"k8s.io/client-go/tools/clientcmd"
2016-10-07 22:24:42 +00:00
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
2016-10-20 14:41:46 +00:00
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
2017-07-07 04:04:11 +00:00
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
2014-12-17 13:03:03 +00:00
)
2016-07-30 03:34:13 +00:00
// NewCmdConfig creates a command object for the "config" action, and adds all child commands to it.
2016-10-20 14:41:46 +00:00
func NewCmdConfig ( pathOptions * clientcmd . PathOptions , out , errOut io . Writer ) * cobra . Command {
2015-04-08 14:32:32 +00:00
if len ( pathOptions . ExplicitFileFlag ) == 0 {
pathOptions . ExplicitFileFlag = clientcmd . RecommendedConfigPathFlag
}
2014-12-17 13:03:03 +00:00
cmd := & cobra . Command {
2015-03-11 17:22:08 +00:00
Use : "config SUBCOMMAND" ,
2017-01-25 01:01:55 +00:00
Short : i18n . T ( "Modify kubeconfig files" ) ,
2016-10-07 22:24:42 +00:00
Long : templates . LongDesc ( `
Modify kubeconfig files using subcommands like "kubectl config set current-context my-context"
2015-04-10 12:54:22 +00:00
2016-10-07 22:24:42 +00:00
The loading order follows these rules :
1. If the -- ` + pathOptions.ExplicitFileFlag + ` flag is set , then only that file is loaded . The flag may only be set once and no merging takes place .
2. If $ ` + pathOptions.EnvVar + ` environment variable is set , then it is used a list of paths ( normal path delimitting rules for your system ) . These paths are merged . When a value is modified , it is modified in the file that defines the stanza . When a value is created , it is created in the first file that exists . If no files in the chain exist , then it creates the last file in the list .
3. Otherwise , ` + path.Join("$ { HOME}", pathOptions.GlobalFileSubpath) + ` is used and no merging takes place . ` ) ,
2016-10-20 14:41:46 +00:00
Run : cmdutil . DefaultSubCommandRun ( errOut ) ,
2014-12-17 13:03:03 +00:00
}
// file paths are common to all sub commands
2015-04-08 14:32:32 +00:00
cmd . PersistentFlags ( ) . StringVar ( & pathOptions . LoadingRules . ExplicitPath , pathOptions . ExplicitFileFlag , pathOptions . LoadingRules . ExplicitPath , "use a particular kubeconfig file" )
2014-12-17 13:03:03 +00:00
2017-02-19 22:56:11 +00:00
cmd . AddCommand ( NewCmdConfigView ( out , errOut , pathOptions ) )
2014-12-17 13:03:03 +00:00
cmd . AddCommand ( NewCmdConfigSetCluster ( out , pathOptions ) )
cmd . AddCommand ( NewCmdConfigSetAuthInfo ( out , pathOptions ) )
cmd . AddCommand ( NewCmdConfigSetContext ( out , pathOptions ) )
cmd . AddCommand ( NewCmdConfigSet ( out , pathOptions ) )
cmd . AddCommand ( NewCmdConfigUnset ( out , pathOptions ) )
2016-01-12 05:54:24 +00:00
cmd . AddCommand ( NewCmdConfigCurrentContext ( out , pathOptions ) )
2014-12-17 13:03:03 +00:00
cmd . AddCommand ( NewCmdConfigUseContext ( out , pathOptions ) )
2016-07-05 09:23:32 +00:00
cmd . AddCommand ( NewCmdConfigGetContexts ( out , pathOptions ) )
2016-07-30 03:34:13 +00:00
cmd . AddCommand ( NewCmdConfigGetClusters ( out , pathOptions ) )
cmd . AddCommand ( NewCmdConfigDeleteCluster ( out , pathOptions ) )
2017-03-12 14:29:11 +00:00
cmd . AddCommand ( NewCmdConfigDeleteContext ( out , errOut , pathOptions ) )
2017-05-19 16:07:54 +00:00
cmd . AddCommand ( NewCmdConfigRenameContext ( out , pathOptions ) )
2014-12-17 13:03:03 +00:00
return cmd
}
func toBool ( propertyValue string ) ( bool , error ) {
boolValue := false
if len ( propertyValue ) != 0 {
var err error
boolValue , err = strconv . ParseBool ( propertyValue )
if err != nil {
return false , err
}
}
return boolValue , nil
}
2017-09-14 09:14:42 +00:00
func helpErrorf ( cmd * cobra . Command , format string , args ... interface { } ) error {
cmd . Help ( )
msg := fmt . Sprintf ( format , args ... )
return fmt . Errorf ( "%s\n" , msg )
}