in pkg/cmd/config/create_authinfo.go [211:357]
func (o *createAuthInfoOptions) modifyAuthInfo(existingAuthInfo clientcmdapi.AuthInfo) clientcmdapi.AuthInfo {
modifiedAuthInfo := existingAuthInfo
var setToken, setBasic bool
if o.clientCertificate.Provided() {
certPath := o.clientCertificate.Value()
if o.embedCertData.Value() {
modifiedAuthInfo.ClientCertificateData, _ = ioutil.ReadFile(certPath)
modifiedAuthInfo.ClientCertificate = ""
} else {
certPath, _ = filepath.Abs(certPath)
modifiedAuthInfo.ClientCertificate = certPath
if len(modifiedAuthInfo.ClientCertificate) > 0 {
modifiedAuthInfo.ClientCertificateData = nil
}
}
}
if o.clientKey.Provided() {
keyPath := o.clientKey.Value()
if o.embedCertData.Value() {
modifiedAuthInfo.ClientKeyData, _ = ioutil.ReadFile(keyPath)
modifiedAuthInfo.ClientKey = ""
} else {
keyPath, _ = filepath.Abs(keyPath)
modifiedAuthInfo.ClientKey = keyPath
if len(modifiedAuthInfo.ClientKey) > 0 {
modifiedAuthInfo.ClientKeyData = nil
}
}
}
if o.token.Provided() {
modifiedAuthInfo.Token = o.token.Value()
setToken = len(modifiedAuthInfo.Token) > 0
}
if o.username.Provided() {
modifiedAuthInfo.Username = o.username.Value()
setBasic = setBasic || len(modifiedAuthInfo.Username) > 0
}
if o.password.Provided() {
modifiedAuthInfo.Password = o.password.Value()
setBasic = setBasic || len(modifiedAuthInfo.Password) > 0
}
if o.authProvider.Provided() {
newName := o.authProvider.Value()
// Only overwrite if the existing auth-provider is nil, or different than the newly specified one.
if modifiedAuthInfo.AuthProvider == nil || modifiedAuthInfo.AuthProvider.Name != newName {
modifiedAuthInfo.AuthProvider = &clientcmdapi.AuthProviderConfig{
Name: newName,
}
}
}
if modifiedAuthInfo.AuthProvider != nil {
if modifiedAuthInfo.AuthProvider.Config == nil {
modifiedAuthInfo.AuthProvider.Config = make(map[string]string)
}
for _, toRemove := range o.authProviderArgsToRemove {
delete(modifiedAuthInfo.AuthProvider.Config, toRemove)
}
for key, value := range o.authProviderArgs {
modifiedAuthInfo.AuthProvider.Config[key] = value
}
}
if o.execCommand.Provided() {
newExecCommand := o.execCommand.Value()
// create new Exec if doesn't exist, otherwise just modify the command
if modifiedAuthInfo.Exec == nil {
modifiedAuthInfo.Exec = &clientcmdapi.ExecConfig{
Command: newExecCommand,
}
} else {
modifiedAuthInfo.Exec.Command = newExecCommand
// explicitly reset exec arguments
modifiedAuthInfo.Exec.Args = nil
}
}
// modify next values only if Exec exists, ignore these changes otherwise
if modifiedAuthInfo.Exec != nil {
if o.execAPIVersion.Provided() {
modifiedAuthInfo.Exec.APIVersion = o.execAPIVersion.Value()
}
// rewrite exec arguments list with new values
if o.execArgs != nil {
modifiedAuthInfo.Exec.Args = o.execArgs
}
// iterate over the existing exec env values and remove the specified
if o.execEnvToRemove != nil {
newExecEnv := []clientcmdapi.ExecEnvVar{}
for _, value := range modifiedAuthInfo.Exec.Env {
needToRemove := false
for _, elemToRemove := range o.execEnvToRemove {
if value.Name == elemToRemove {
needToRemove = true
break
}
}
if !needToRemove {
newExecEnv = append(newExecEnv, value)
}
}
modifiedAuthInfo.Exec.Env = newExecEnv
}
// update or create specified environment variables for the exec plugin
if o.execEnv != nil {
newEnv := []clientcmdapi.ExecEnvVar{}
for newEnvName, newEnvValue := range o.execEnv {
needToCreate := true
for i := 0; i < len(modifiedAuthInfo.Exec.Env); i++ {
if modifiedAuthInfo.Exec.Env[i].Name == newEnvName {
// update the existing value
needToCreate = false
modifiedAuthInfo.Exec.Env[i].Value = newEnvValue
break
}
}
if needToCreate {
// create a new env value
newEnv = append(newEnv, clientcmdapi.ExecEnvVar{Name: newEnvName, Value: newEnvValue})
}
}
modifiedAuthInfo.Exec.Env = append(modifiedAuthInfo.Exec.Env, newEnv...)
}
}
// If any auth info was set, make sure any other existing auth types are cleared
if setToken || setBasic {
if !setToken {
modifiedAuthInfo.Token = ""
}
if !setBasic {
modifiedAuthInfo.Username = ""
modifiedAuthInfo.Password = ""
}
}
return modifiedAuthInfo
}