2015-01-07 20:59:22 +00:00
/ *
Copyright 2014 Google Inc . All rights reserved .
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 clientcmd
import (
"github.com/spf13/pflag"
2014-12-17 13:03:03 +00:00
clientcmdapi "github.com/GoogleCloudPlatform/kubernetes/pkg/client/clientcmd/api"
2015-01-07 20:59:22 +00:00
)
// ConfigOverrides holds values that should override whatever information is pulled from the actual Config object. You can't
// simply use an actual Config object, because Configs hold maps, but overrides are restricted to "at most one"
type ConfigOverrides struct {
2014-12-17 13:03:03 +00:00
AuthInfo clientcmdapi . AuthInfo
ClusterInfo clientcmdapi . Cluster
2015-01-02 18:08:37 +00:00
Context clientcmdapi . Context
2015-01-07 20:59:22 +00:00
CurrentContext string
}
// ConfigOverrideFlags holds the flag names to be used for binding command line flags. Notice that this structure tightly
// corresponds to ConfigOverrides
type ConfigOverrideFlags struct {
AuthOverrideFlags AuthOverrideFlags
ClusterOverrideFlags ClusterOverrideFlags
2015-01-02 18:08:37 +00:00
ContextOverrideFlags ContextOverrideFlags
2015-01-07 20:59:22 +00:00
CurrentContext string
}
// AuthOverrideFlags holds the flag names to be used for binding command line flags for AuthInfo objects
type AuthOverrideFlags struct {
AuthPath string
2015-01-20 21:21:27 +00:00
AuthPathShort string
2015-01-07 20:59:22 +00:00
ClientCertificate string
ClientKey string
Token string
}
2015-01-02 18:08:37 +00:00
// ContextOverrideFlags holds the flag names to be used for binding command line flags for Cluster objects
type ContextOverrideFlags struct {
2015-01-30 22:47:40 +00:00
ClusterName string
AuthInfoName string
Namespace string
// allow the potential for shorter namespace flags for commands that tend to work across namespaces
NamespaceShort string
NamespacePath string
2015-01-02 18:08:37 +00:00
}
2015-01-07 20:59:22 +00:00
// ClusterOverride holds the flag names to be used for binding command line flags for Cluster objects
type ClusterOverrideFlags struct {
APIServer string
2015-01-20 21:21:27 +00:00
APIServerShort string
2015-01-07 20:59:22 +00:00
APIVersion string
CertificateAuthority string
InsecureSkipTLSVerify string
}
const (
2015-01-02 18:08:37 +00:00
FlagClusterName = "cluster"
FlagAuthInfoName = "user"
FlagContext = "context"
FlagNamespace = "namespace"
FlagNamespacePath = "ns-path"
FlagAPIServer = "server"
FlagAPIVersion = "api-version"
FlagAuthPath = "auth-path"
FlagInsecure = "insecure-skip-tls-verify"
FlagCertFile = "client-certificate"
FlagKeyFile = "client-key"
FlagCAFile = "certificate-authority"
FlagBearerToken = "token"
2015-01-07 20:59:22 +00:00
)
// RecommendedAuthOverrideFlags is a convenience method to return recommended flag names prefixed with a string of your choosing
func RecommendedAuthOverrideFlags ( prefix string ) AuthOverrideFlags {
return AuthOverrideFlags {
AuthPath : prefix + FlagAuthPath ,
ClientCertificate : prefix + FlagCertFile ,
ClientKey : prefix + FlagKeyFile ,
Token : prefix + FlagBearerToken ,
}
}
// RecommendedClusterOverrideFlags is a convenience method to return recommended flag names prefixed with a string of your choosing
func RecommendedClusterOverrideFlags ( prefix string ) ClusterOverrideFlags {
return ClusterOverrideFlags {
APIServer : prefix + FlagAPIServer ,
APIVersion : prefix + FlagAPIVersion ,
CertificateAuthority : prefix + FlagCAFile ,
InsecureSkipTLSVerify : prefix + FlagInsecure ,
}
}
// RecommendedConfigOverrideFlags is a convenience method to return recommended flag names prefixed with a string of your choosing
func RecommendedConfigOverrideFlags ( prefix string ) ConfigOverrideFlags {
return ConfigOverrideFlags {
AuthOverrideFlags : RecommendedAuthOverrideFlags ( prefix ) ,
ClusterOverrideFlags : RecommendedClusterOverrideFlags ( prefix ) ,
2015-01-02 18:08:37 +00:00
ContextOverrideFlags : RecommendedContextOverrideFlags ( prefix ) ,
2015-01-07 20:59:22 +00:00
CurrentContext : prefix + FlagContext ,
2015-01-02 18:08:37 +00:00
}
}
// RecommendedContextOverrideFlags is a convenience method to return recommended flag names prefixed with a string of your choosing
func RecommendedContextOverrideFlags ( prefix string ) ContextOverrideFlags {
return ContextOverrideFlags {
ClusterName : prefix + FlagClusterName ,
AuthInfoName : prefix + FlagAuthInfoName ,
Namespace : prefix + FlagNamespace ,
NamespacePath : prefix + FlagNamespacePath ,
2015-01-07 20:59:22 +00:00
}
}
2014-12-17 13:03:03 +00:00
// BindAuthInfoFlags is a convenience method to bind the specified flags to their associated variables
func BindAuthInfoFlags ( authInfo * clientcmdapi . AuthInfo , flags * pflag . FlagSet , flagNames AuthOverrideFlags ) {
2015-01-21 15:58:02 +00:00
flags . StringVarP ( & authInfo . AuthPath , flagNames . AuthPath , flagNames . AuthPathShort , "" , "Path to the auth info file. If missing, prompt the user. Only used if using https." )
2015-01-07 20:59:22 +00:00
flags . StringVar ( & authInfo . ClientCertificate , flagNames . ClientCertificate , "" , "Path to a client key file for TLS." )
flags . StringVar ( & authInfo . ClientKey , flagNames . ClientKey , "" , "Path to a client key file for TLS." )
flags . StringVar ( & authInfo . Token , flagNames . Token , "" , "Bearer token for authentication to the API server." )
}
2014-12-17 13:03:03 +00:00
// BindClusterFlags is a convenience method to bind the specified flags to their associated variables
func BindClusterFlags ( clusterInfo * clientcmdapi . Cluster , flags * pflag . FlagSet , flagNames ClusterOverrideFlags ) {
2015-01-21 15:58:02 +00:00
flags . StringVarP ( & clusterInfo . Server , flagNames . APIServer , flagNames . APIServerShort , "" , "The address of the Kubernetes API server" )
2015-01-07 20:59:22 +00:00
flags . StringVar ( & clusterInfo . APIVersion , flagNames . APIVersion , "" , "The API version to use when talking to the server" )
flags . StringVar ( & clusterInfo . CertificateAuthority , flagNames . CertificateAuthority , "" , "Path to a cert. file for the certificate authority." )
flags . BoolVar ( & clusterInfo . InsecureSkipTLSVerify , flagNames . InsecureSkipTLSVerify , false , "If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure." )
}
2014-12-17 13:03:03 +00:00
// BindOverrideFlags is a convenience method to bind the specified flags to their associated variables
func BindOverrideFlags ( overrides * ConfigOverrides , flags * pflag . FlagSet , flagNames ConfigOverrideFlags ) {
BindAuthInfoFlags ( & overrides . AuthInfo , flags , flagNames . AuthOverrideFlags )
BindClusterFlags ( & overrides . ClusterInfo , flags , flagNames . ClusterOverrideFlags )
2015-01-02 18:08:37 +00:00
BindContextFlags ( & overrides . Context , flags , flagNames . ContextOverrideFlags )
2015-01-07 20:59:22 +00:00
flags . StringVar ( & overrides . CurrentContext , flagNames . CurrentContext , "" , "The name of the kubeconfig context to use" )
2015-01-02 18:08:37 +00:00
}
// BindFlags is a convenience method to bind the specified flags to their associated variables
func BindContextFlags ( contextInfo * clientcmdapi . Context , flags * pflag . FlagSet , flagNames ContextOverrideFlags ) {
flags . StringVar ( & contextInfo . Cluster , flagNames . ClusterName , "" , "The name of the kubeconfig cluster to use" )
flags . StringVar ( & contextInfo . AuthInfo , flagNames . AuthInfoName , "" , "The name of the kubeconfig user to use" )
2015-01-30 22:47:40 +00:00
flags . StringVarP ( & contextInfo . Namespace , flagNames . Namespace , flagNames . NamespaceShort , "" , "If present, the namespace scope for this CLI request." )
2015-01-02 18:08:37 +00:00
flags . StringVar ( & contextInfo . NamespacePath , flagNames . NamespacePath , "" , "Path to the namespace info file that holds the namespace context to use for CLI requests." )
2015-01-07 20:59:22 +00:00
}