in config/configure.go [109:234]
func doConfigure(ctx *cli.Context, profileName string, mode string) error {
w := ctx.Stdout()
conf, err := loadConfiguration()
if err != nil {
return err
}
if profileName == "" {
if conf.CurrentProfile == "" {
profileName = "default"
} else {
profileName = conf.CurrentProfile
originMode := string(conf.GetCurrentProfile(ctx).Mode)
if mode == "" {
mode = originMode
} else if mode != originMode {
cli.Printf(w, "Warning: You are changing the authentication type of profile '%s' from '%s' to '%s'\n", profileName, originMode, mode)
}
}
}
if mode == "" {
mode = "AK"
}
cp, ok := conf.GetProfile(profileName)
if !ok {
cp = conf.NewProfile(profileName)
}
cli.Printf(w, "Configuring profile '%s' in '%s' authenticate mode...\n", profileName, mode)
if mode != "" {
switch AuthenticateMode(mode) {
case AK:
cp.Mode = AK
configureAK(w, &cp)
case StsToken:
cp.Mode = StsToken
configureStsToken(w, &cp)
case RamRoleArn:
cp.Mode = RamRoleArn
configureRamRoleArn(w, &cp)
case EcsRamRole:
cp.Mode = EcsRamRole
configureEcsRamRole(w, &cp)
case RamRoleArnWithEcs:
cp.Mode = RamRoleArnWithEcs
configureRamRoleArnWithEcs(w, &cp)
case ChainableRamRoleArn:
cp.Mode = ChainableRamRoleArn
configureChainableRamRoleArn(w, &cp)
case RsaKeyPair:
cp.Mode = RsaKeyPair
configureRsaKeyPair(w, &cp)
case External:
cp.Mode = External
configureExternal(w, &cp)
case CredentialsURI:
cp.Mode = CredentialsURI
configureCredentialsURI(w, &cp)
case OIDC:
cp.Mode = OIDC
configureOIDC(w, &cp)
case CloudSSO:
cp.Mode = CloudSSO
// parameter from command has higher priority, use it directly
if CloudSSOSignInUrlFlag(ctx.Flags()).IsAssigned() {
cp.CloudSSOSignInUrl, _ = CloudSSOSignInUrlFlag(ctx.Flags()).GetValue()
}
if CloudSSOAccountIdFlag(ctx.Flags()).IsAssigned() {
cp.CloudSSOAccountId, _ = CloudSSOAccountIdFlag(ctx.Flags()).GetValue()
}
if CloudSSOAccessConfigFlag(ctx.Flags()).IsAssigned() {
cp.CloudSSOAccessConfig, _ = CloudSSOAccessConfigFlag(ctx.Flags()).GetValue()
}
err := configureCloudSSO(w, &cp)
if err != nil {
return err
}
default:
return fmt.Errorf("unexcepted authenticate mode: %s", mode)
}
} else {
configureAK(w, &cp)
}
// configure common
if cp.Mode != CloudSSO || cp.RegionId == "" {
cli.Printf(w, "Default Region Id [%s]: ", cp.RegionId)
cp.RegionId = ReadInput(cp.RegionId)
}
if cp.Mode != CloudSSO || cp.OutputFormat == "" {
cli.Printf(w, "Default Output Format [%s]: json (Only support json)\n", cp.OutputFormat)
// cp.OutputFormat = ReadInput(cp.OutputFormat)
cp.OutputFormat = "json"
}
if cp.Mode != CloudSSO || cp.Language == "" {
cli.Printf(w, "Default Language [zh|en] %s: ", cp.Language)
cp.Language = ReadInput(cp.Language)
if cp.Language != "zh" && cp.Language != "en" {
cp.Language = i18n.GetLanguage()
}
}
//fmt.Printf("User site: [china|international|japan] %s", cp.Site)
//cp.Site = ReadInput(cp.Site)
cli.Printf(w, "Saving profile[%s] ...", profileName)
conf.PutProfile(cp)
conf.CurrentProfile = cp.Name
err = hookSaveConfiguration(SaveConfiguration)(conf)
// cp 要在下文的 DoHello 中使用,所以 需要建立 parent 的关系
cp.parent = conf
if err != nil {
return err
}
cli.Printf(w, "Done.\n")
DoHello(ctx, &cp)
return nil
}