in openapi/invoker.go [122:196]
func (a *BasicInvoker) Init(ctx *cli.Context, product *meta.Product) error {
var err error
a.product = product
a.request = requests.NewCommonRequest()
a.request.Product = product.Code
a.request.RegionId = a.profile.RegionId
if v, ok := config.RegionFlag(ctx.Flags()).GetValue(); ok {
a.request.RegionId = v
} else if v, ok := config.RegionIdFlag(ctx.Flags()).GetValue(); ok {
a.request.RegionId = v
}
a.request.Version = product.Version
if v, ok := VersionFlag(ctx.Flags()).GetValue(); ok {
a.request.Version = v
}
if v, ok := EndpointFlag(ctx.Flags()).GetValue(); ok {
a.request.Domain = v
}
for _, s := range HeaderFlag(ctx.Flags()).GetValues() {
if k, v, ok := cli.SplitStringWithPrefix(s, "="); ok {
a.request.Headers[k] = v
if k == "Accept" {
if strings.Contains(v, "xml") {
a.request.AcceptFormat = "XML"
} else if strings.Contains(v, "json") {
a.request.AcceptFormat = "JSON"
}
}
if k == "Content-Type" {
a.request.SetContentType(v)
}
} else {
return fmt.Errorf("invaild flag --header `%s` use `--header HeaderName=Value`", s)
}
}
hint := "you can find it on https://help.aliyun.com"
if product.Version != "" {
hint = fmt.Sprintf("please use `aliyun help %s` get more information.", product.GetLowerCode())
}
if a.request.Version == "" {
return cli.NewErrorWithTip(fmt.Errorf("missing version for product %s", product.Code),
"Use flag `--version <YYYY-MM-DD>` to assign version, "+hint)
}
if a.request.RegionId == "" {
return cli.NewErrorWithTip(fmt.Errorf("missing region for product %s", product.Code),
"Use flag --region <regionId> to assign region, "+hint)
}
a.client, err = GetClient(a.profile, ctx)
if err != nil {
return fmt.Errorf("init client failed %s", err)
}
if vendorEnv, ok := os.LookupEnv("ALIBABA_CLOUD_VENDOR"); ok {
a.client.AppendUserAgent("vendor", vendorEnv)
}
a.client.AppendUserAgent("Aliyun-CLI", cli.GetVersion())
if a.request.Domain == "" {
a.request.Domain, err = product.GetEndpoint(a.request.RegionId, a.client)
if err != nil {
return cli.NewErrorWithTip(
fmt.Errorf("unknown endpoint for %s/%s! failed %s", product.GetLowerCode(), a.request.RegionId, err),
"Use flag --endpoint xxx.aliyuncs.com to assign endpoint, "+hint)
}
}
return nil
}