Merge pull request #6157 from LieAlbertTriAdrian/master
update aliyungo common package
This commit is contained in:
commit
9e97497536
44
vendor/github.com/denverdino/aliyungo/common/client.go
generated
vendored
Executable file → Normal file
44
vendor/github.com/denverdino/aliyungo/common/client.go
generated
vendored
Executable file → Normal file
|
@ -9,10 +9,10 @@ import (
|
|||
"log"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"time"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/denverdino/aliyungo/util"
|
||||
)
|
||||
|
@ -43,7 +43,11 @@ type Client struct {
|
|||
// Initialize properties of a client instance
|
||||
func (client *Client) Init(endpoint, version, accessKeyId, accessKeySecret string) {
|
||||
client.AccessKeyId = accessKeyId
|
||||
client.AccessKeySecret = accessKeySecret + "&"
|
||||
ak := accessKeySecret
|
||||
if !strings.HasSuffix(ak, "&") {
|
||||
ak += "&"
|
||||
}
|
||||
client.AccessKeySecret = ak
|
||||
client.debug = false
|
||||
handshakeTimeout, err := strconv.Atoi(os.Getenv("TLSHandshakeTimeout"))
|
||||
if err != nil {
|
||||
|
@ -53,8 +57,8 @@ func (client *Client) Init(endpoint, version, accessKeyId, accessKeySecret strin
|
|||
client.httpClient = &http.Client{}
|
||||
} else {
|
||||
t := &http.Transport{
|
||||
TLSHandshakeTimeout: time.Duration(handshakeTimeout) * time.Second,}
|
||||
client.httpClient = &http.Client{Transport: t,}
|
||||
TLSHandshakeTimeout: time.Duration(handshakeTimeout) * time.Second}
|
||||
client.httpClient = &http.Client{Transport: t}
|
||||
}
|
||||
client.endpoint = endpoint
|
||||
client.version = version
|
||||
|
@ -65,7 +69,7 @@ func (client *Client) NewInit(endpoint, version, accessKeyId, accessKeySecret, s
|
|||
client.Init(endpoint, version, accessKeyId, accessKeySecret)
|
||||
client.serviceCode = serviceCode
|
||||
client.regionID = regionID
|
||||
client.setEndpointByLocation(regionID, serviceCode, accessKeyId, accessKeySecret)
|
||||
client.setEndpointByLocation(regionID, serviceCode, accessKeyId, accessKeySecret, client.securityToken)
|
||||
}
|
||||
|
||||
// Intialize client object when all properties are ready
|
||||
|
@ -79,16 +83,21 @@ func (client *Client) InitClient() *Client {
|
|||
client.httpClient = &http.Client{}
|
||||
} else {
|
||||
t := &http.Transport{
|
||||
TLSHandshakeTimeout: time.Duration(handshakeTimeout) * time.Second,}
|
||||
client.httpClient = &http.Client{Transport: t,}
|
||||
TLSHandshakeTimeout: time.Duration(handshakeTimeout) * time.Second}
|
||||
client.httpClient = &http.Client{Transport: t}
|
||||
}
|
||||
client.setEndpointByLocation(client.regionID, client.serviceCode, client.AccessKeyId, client.AccessKeySecret)
|
||||
client.setEndpointByLocation(client.regionID, client.serviceCode, client.AccessKeyId, client.AccessKeySecret, client.securityToken)
|
||||
return client
|
||||
}
|
||||
|
||||
func (client *Client) NewInitForAssumeRole(endpoint, version, accessKeyId, accessKeySecret, serviceCode string, regionID Region, securityToken string) {
|
||||
client.NewInit(endpoint, version, accessKeyId, accessKeySecret, serviceCode, regionID)
|
||||
client.securityToken = securityToken
|
||||
}
|
||||
|
||||
//NewClient using location service
|
||||
func (client *Client) setEndpointByLocation(region Region, serviceCode, accessKeyId, accessKeySecret string) {
|
||||
locationClient := NewLocationClient(accessKeyId, accessKeySecret)
|
||||
func (client *Client) setEndpointByLocation(region Region, serviceCode, accessKeyId, accessKeySecret, securityToken string) {
|
||||
locationClient := NewLocationClient(accessKeyId, accessKeySecret, securityToken)
|
||||
ep := locationClient.DescribeOpenAPIEndpoint(region, serviceCode)
|
||||
if ep == "" {
|
||||
ep = loadEndpointFromFile(region, serviceCode)
|
||||
|
@ -218,11 +227,6 @@ func (client *Client) SetAccessKeySecret(secret string) {
|
|||
client.AccessKeySecret = secret + "&"
|
||||
}
|
||||
|
||||
// SetAccessKeySecret sets securityToken
|
||||
func (client *Client) SetSecurityToken(securityToken string) {
|
||||
client.securityToken = securityToken
|
||||
}
|
||||
|
||||
// SetDebug sets debug mode to log the request/response message
|
||||
func (client *Client) SetDebug(debug bool) {
|
||||
client.debug = debug
|
||||
|
@ -242,6 +246,11 @@ func (client *Client) SetUserAgent(userAgent string) {
|
|||
client.userAgent = userAgent
|
||||
}
|
||||
|
||||
//set SecurityToken
|
||||
func (client *Client) SetSecurityToken(securityToken string) {
|
||||
client.securityToken = securityToken
|
||||
}
|
||||
|
||||
// Invoke sends the raw HTTP request for ECS services
|
||||
func (client *Client) Invoke(action string, args interface{}, response interface{}) error {
|
||||
if err := client.ensureProperties(); err != nil {
|
||||
|
@ -268,6 +277,7 @@ func (client *Client) Invoke(action string, args interface{}, response interface
|
|||
|
||||
// TODO move to util and add build val flag
|
||||
httpReq.Header.Set("X-SDK-Client", `AliyunGO/`+Version+client.businessInfo)
|
||||
|
||||
httpReq.Header.Set("User-Agent", httpReq.UserAgent()+" "+client.userAgent)
|
||||
|
||||
t0 := time.Now()
|
||||
|
@ -341,6 +351,7 @@ func (client *Client) InvokeByFlattenMethod(action string, args interface{}, res
|
|||
|
||||
// TODO move to util and add build val flag
|
||||
httpReq.Header.Set("X-SDK-Client", `AliyunGO/`+Version+client.businessInfo)
|
||||
|
||||
httpReq.Header.Set("User-Agent", httpReq.UserAgent()+" "+client.userAgent)
|
||||
|
||||
t0 := time.Now()
|
||||
|
@ -397,7 +408,6 @@ func (client *Client) InvokeByAnyMethod(method, action, path string, args interf
|
|||
|
||||
request := Request{}
|
||||
request.init(client.version, action, client.AccessKeyId, client.securityToken, client.regionID)
|
||||
|
||||
data := util.ConvertToQueryValues(request)
|
||||
util.SetQueryValues(args, &data)
|
||||
|
||||
|
|
|
@ -18,6 +18,51 @@ const (
|
|||
|
||||
var (
|
||||
endpoints = make(map[Region]map[string]string)
|
||||
|
||||
SpecailEnpoints = map[Region]map[string]string{
|
||||
APNorthEast1: {
|
||||
"ecs": "https://ecs.ap-northeast-1.aliyuncs.com",
|
||||
"slb": "https://slb.ap-northeast-1.aliyuncs.com",
|
||||
"rds": "https://rds.ap-northeast-1.aliyuncs.com",
|
||||
"vpc": "https://vpc.ap-northeast-1.aliyuncs.com",
|
||||
},
|
||||
APSouthEast2: {
|
||||
"ecs": "https://ecs.ap-southeast-2.aliyuncs.com",
|
||||
"slb": "https://slb.ap-southeast-2.aliyuncs.com",
|
||||
"rds": "https://rds.ap-southeast-2.aliyuncs.com",
|
||||
"vpc": "https://vpc.ap-southeast-2.aliyuncs.com",
|
||||
},
|
||||
APSouthEast3: {
|
||||
"ecs": "https://ecs.ap-southeast-3.aliyuncs.com",
|
||||
"slb": "https://slb.ap-southeast-3.aliyuncs.com",
|
||||
"rds": "https://rds.ap-southeast-3.aliyuncs.com",
|
||||
"vpc": "https://vpc.ap-southeast-3.aliyuncs.com",
|
||||
},
|
||||
MEEast1: {
|
||||
"ecs": "https://ecs.me-east-1.aliyuncs.com",
|
||||
"slb": "https://slb.me-east-1.aliyuncs.com",
|
||||
"rds": "https://rds.me-east-1.aliyuncs.com",
|
||||
"vpc": "https://vpc.me-east-1.aliyuncs.com",
|
||||
},
|
||||
EUCentral1: {
|
||||
"ecs": "https://ecs.eu-central-1.aliyuncs.com",
|
||||
"slb": "https://slb.eu-central-1.aliyuncs.com",
|
||||
"rds": "https://rds.eu-central-1.aliyuncs.com",
|
||||
"vpc": "https://vpc.eu-central-1.aliyuncs.com",
|
||||
},
|
||||
Zhangjiakou: {
|
||||
"ecs": "https://ecs.cn-zhangjiakou.aliyuncs.com",
|
||||
"slb": "https://slb.cn-zhangjiakou.aliyuncs.com",
|
||||
"rds": "https://rds.cn-zhangjiakou.aliyuncs.com",
|
||||
"vpc": "https://vpc.cn-zhangjiakou.aliyuncs.com",
|
||||
},
|
||||
Huhehaote: {
|
||||
"ecs": "https://ecs.cn-huhehaote.aliyuncs.com",
|
||||
"slb": "https://slb.cn-huhehaote.aliyuncs.com",
|
||||
"rds": "https://rds.cn-huhehaote.aliyuncs.com",
|
||||
"vpc": "https://vpc.cn-huhehaote.aliyuncs.com",
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
//init endpoints from file
|
||||
|
@ -25,18 +70,39 @@ func init() {
|
|||
|
||||
}
|
||||
|
||||
func NewLocationClient(accessKeyId, accessKeySecret string) *Client {
|
||||
type LocationClient struct {
|
||||
Client
|
||||
}
|
||||
|
||||
func NewLocationClient(accessKeyId, accessKeySecret, securityToken string) *LocationClient {
|
||||
endpoint := os.Getenv("LOCATION_ENDPOINT")
|
||||
if endpoint == "" {
|
||||
endpoint = locationDefaultEndpoint
|
||||
}
|
||||
|
||||
client := &Client{}
|
||||
client := &LocationClient{}
|
||||
client.Init(endpoint, locationAPIVersion, accessKeyId, accessKeySecret)
|
||||
client.securityToken = securityToken
|
||||
return client
|
||||
}
|
||||
|
||||
func (client *Client) DescribeEndpoint(args *DescribeEndpointArgs) (*DescribeEndpointResponse, error) {
|
||||
func NewLocationClientWithSecurityToken(accessKeyId, accessKeySecret, securityToken string) *LocationClient {
|
||||
endpoint := os.Getenv("LOCATION_ENDPOINT")
|
||||
if endpoint == "" {
|
||||
endpoint = locationDefaultEndpoint
|
||||
}
|
||||
|
||||
client := &LocationClient{}
|
||||
client.WithEndpoint(endpoint).
|
||||
WithVersion(locationAPIVersion).
|
||||
WithAccessKeyId(accessKeyId).
|
||||
WithAccessKeySecret(accessKeySecret).
|
||||
WithSecurityToken(securityToken).
|
||||
InitClient()
|
||||
return client
|
||||
}
|
||||
|
||||
func (client *LocationClient) DescribeEndpoint(args *DescribeEndpointArgs) (*DescribeEndpointResponse, error) {
|
||||
response := &DescribeEndpointResponse{}
|
||||
err := client.Invoke("DescribeEndpoint", args, response)
|
||||
if err != nil {
|
||||
|
@ -45,6 +111,15 @@ func (client *Client) DescribeEndpoint(args *DescribeEndpointArgs) (*DescribeEnd
|
|||
return response, err
|
||||
}
|
||||
|
||||
func (client *LocationClient) DescribeEndpoints(args *DescribeEndpointsArgs) (*DescribeEndpointsResponse, error) {
|
||||
response := &DescribeEndpointsResponse{}
|
||||
err := client.Invoke("DescribeEndpoints", args, response)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return response, err
|
||||
}
|
||||
|
||||
func getProductRegionEndpoint(region Region, serviceCode string) string {
|
||||
if sp, ok := endpoints[region]; ok {
|
||||
if endpoint, ok := sp[serviceCode]; ok {
|
||||
|
@ -61,34 +136,34 @@ func setProductRegionEndpoint(region Region, serviceCode string, endpoint string
|
|||
}
|
||||
}
|
||||
|
||||
func (client *Client) DescribeOpenAPIEndpoint(region Region, serviceCode string) string {
|
||||
func (client *LocationClient) DescribeOpenAPIEndpoint(region Region, serviceCode string) string {
|
||||
if endpoint := getProductRegionEndpoint(region, serviceCode); endpoint != "" {
|
||||
return endpoint
|
||||
}
|
||||
|
||||
defaultProtocols := HTTP_PROTOCOL
|
||||
|
||||
args := &DescribeEndpointArgs{
|
||||
args := &DescribeEndpointsArgs{
|
||||
Id: region,
|
||||
ServiceCode: serviceCode,
|
||||
Type: "openAPI",
|
||||
}
|
||||
|
||||
endpoint, err := client.DescribeEndpoint(args)
|
||||
if err != nil || endpoint.Endpoint == "" {
|
||||
endpoint, err := client.DescribeEndpoints(args)
|
||||
if err != nil || len(endpoint.Endpoints.Endpoint) <= 0 {
|
||||
return ""
|
||||
}
|
||||
|
||||
for _, protocol := range endpoint.Protocols.Protocols {
|
||||
for _, protocol := range endpoint.Endpoints.Endpoint[0].Protocols.Protocols {
|
||||
if strings.ToLower(protocol) == HTTPS_PROTOCOL {
|
||||
defaultProtocols = HTTPS_PROTOCOL
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
ep := fmt.Sprintf("%s://%s", defaultProtocols, endpoint.Endpoint)
|
||||
ep := fmt.Sprintf("%s://%s", defaultProtocols, endpoint.Endpoints.Endpoint[0].Endpoint)
|
||||
|
||||
setProductRegionEndpoint(region, serviceCode, ep)
|
||||
//setProductRegionEndpoint(region, serviceCode, ep)
|
||||
return ep
|
||||
}
|
||||
|
||||
|
@ -97,13 +172,11 @@ func loadEndpointFromFile(region Region, serviceCode string) string {
|
|||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
var endpoints Endpoints
|
||||
err = xml.Unmarshal(data, &endpoints)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
for _, endpoint := range endpoints.Endpoint {
|
||||
if endpoint.RegionIds.RegionId == string(region) {
|
||||
for _, product := range endpoint.Products.Product {
|
||||
|
|
|
@ -1346,4 +1346,14 @@
|
|||
<Product><ProductName>Slb</ProductName><DomainName>slb.cn-zhangjiakou.aliyuncs.com</DomainName></Product>
|
||||
</Products>
|
||||
</Endpoint>
|
||||
<Endpoint name="cn-huhehaote">
|
||||
<RegionIds><RegionId>cn-huhehaote</RegionId></RegionIds>
|
||||
<Products>
|
||||
<Product><ProductName>Rds</ProductName><DomainName>rds.cn-huhehaote.aliyuncs.com</DomainName></Product>
|
||||
<Product><ProductName>Ecs</ProductName><DomainName>ecs.cn-huhehaote.aliyuncs.com</DomainName></Product>
|
||||
<Product><ProductName>Vpc</ProductName><DomainName>vpc.cn-huhehaote.aliyuncs.com</DomainName></Product>
|
||||
<Product><ProductName>Cms</ProductName><DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName></Product>
|
||||
<Product><ProductName>Slb</ProductName><DomainName>slb.cn-huhehaote.aliyuncs.com</DomainName></Product>
|
||||
</Products>
|
||||
</Endpoint>
|
||||
</Endpoints>
|
||||
|
|
|
@ -12,11 +12,15 @@ const (
|
|||
Shenzhen = Region("cn-shenzhen")
|
||||
Shanghai = Region("cn-shanghai")
|
||||
Zhangjiakou = Region("cn-zhangjiakou")
|
||||
Huhehaote = Region("cn-huhehaote")
|
||||
|
||||
APSouthEast1 = Region("ap-southeast-1")
|
||||
APNorthEast1 = Region("ap-northeast-1")
|
||||
APSouthEast2 = Region("ap-southeast-2")
|
||||
APSouthEast3 = Region("ap-southeast-3")
|
||||
APSouthEast5 = Region("ap-southeast-5")
|
||||
|
||||
APSouth1 = Region("ap-south-1")
|
||||
|
||||
USWest1 = Region("us-west-1")
|
||||
USEast1 = Region("us-east-1")
|
||||
|
@ -24,12 +28,17 @@ const (
|
|||
MEEast1 = Region("me-east-1")
|
||||
|
||||
EUCentral1 = Region("eu-central-1")
|
||||
|
||||
ShenZhenFinance = Region("cn-shenzhen-finance-1")
|
||||
ShanghaiFinance = Region("cn-shanghai-finance-1")
|
||||
)
|
||||
|
||||
var ValidRegions = []Region{
|
||||
Hangzhou, Qingdao, Beijing, Shenzhen, Hongkong, Shanghai, Zhangjiakou,
|
||||
Hangzhou, Qingdao, Beijing, Shenzhen, Hongkong, Shanghai, Zhangjiakou, Huhehaote,
|
||||
USWest1, USEast1,
|
||||
APNorthEast1, APSouthEast1, APSouthEast2, APSouthEast3,
|
||||
APNorthEast1, APSouthEast1, APSouthEast2, APSouthEast3, APSouthEast5,
|
||||
APSouth1,
|
||||
MEEast1,
|
||||
EUCentral1,
|
||||
ShenZhenFinance, ShanghaiFinance,
|
||||
}
|
||||
|
|
|
@ -36,6 +36,23 @@ type DescribeEndpointResponse struct {
|
|||
EndpointItem
|
||||
}
|
||||
|
||||
type DescribeEndpointsArgs struct {
|
||||
Id Region
|
||||
ServiceCode string
|
||||
Type string
|
||||
}
|
||||
|
||||
type DescribeEndpointsResponse struct {
|
||||
Response
|
||||
Endpoints APIEndpoints
|
||||
RequestId string
|
||||
Success bool
|
||||
}
|
||||
|
||||
type APIEndpoints struct {
|
||||
Endpoint []EndpointItem
|
||||
}
|
||||
|
||||
type NetType string
|
||||
|
||||
const (
|
||||
|
@ -48,6 +65,7 @@ type TimeType string
|
|||
const (
|
||||
Hour = TimeType("Hour")
|
||||
Day = TimeType("Day")
|
||||
Week = TimeType("Week")
|
||||
Month = TimeType("Month")
|
||||
Year = TimeType("Year")
|
||||
)
|
||||
|
|
|
@ -602,10 +602,10 @@
|
|||
"revision": "6d212800a42e8ab5c146b8ace3490ee17e5225f9"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "2+1TPdvFj4W1QS5drkFr+ibM3G0=",
|
||||
"checksumSHA1": "5k4kiVJsn0CilLDx+gMjglXY6vs=",
|
||||
"path": "github.com/denverdino/aliyungo/common",
|
||||
"revision": "ec0e57291175fc9b06c62977f384756642285aab",
|
||||
"revisionTime": "2017-11-27T16:20:29Z"
|
||||
"revision": "ebad04655e0385f021ed264c89ef4b93958e7204",
|
||||
"revisionTime": "2018-04-17T07:55:37Z"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "y4Ay4E5HqT25sweC/Bl9/odNWaI=",
|
||||
|
|
Loading…
Reference in New Issue