Merge pull request #3667 from RainbowMango/pr_fix_create_policy_issue

[CA] update sdk version to fix scaling policy cannot create issue
This commit is contained in:
Kubernetes Prow Robot 2020-11-04 06:08:03 -08:00 committed by GitHub
commit a0685e1184
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 1338 additions and 1943 deletions

View File

@ -1,7 +1,10 @@
package converter
import "reflect"
type Converter interface {
CovertStringToInterface(value string) (interface{}, error)
CovertStringToPrimitiveTypeAndSetField(field reflect.Value, value string, isPtr bool) error
}
func StringConverterFactory(vType string) Converter {

View File

@ -1,6 +1,9 @@
package converter
import "strconv"
import (
"reflect"
"strconv"
)
type Int32Converter struct{}
@ -12,6 +15,20 @@ func (i Int32Converter) CovertStringToInterface(value string) (interface{}, erro
return int32(0), err
}
func (i Int32Converter) CovertStringToPrimitiveTypeAndSetField(field reflect.Value, value string, isPtr bool) error {
v, err := i.CovertStringToInterface(value)
if err != nil {
return err
}
val := v.(int32)
if isPtr {
field.Set(reflect.ValueOf(&val))
} else {
field.Set(reflect.ValueOf(val))
}
return nil
}
type Int64Converter struct{}
func (i Int64Converter) CovertStringToInterface(value string) (interface{}, error) {
@ -22,6 +39,20 @@ func (i Int64Converter) CovertStringToInterface(value string) (interface{}, erro
return int64(0), err
}
func (i Int64Converter) CovertStringToPrimitiveTypeAndSetField(field reflect.Value, value string, isPtr bool) error {
v, err := i.CovertStringToInterface(value)
if err != nil {
return err
}
val := v.(int64)
if isPtr {
field.Set(reflect.ValueOf(&val))
} else {
field.Set(reflect.ValueOf(val))
}
return nil
}
type Float32Converter struct{}
func (i Float32Converter) CovertStringToInterface(value string) (interface{}, error) {
@ -32,6 +63,20 @@ func (i Float32Converter) CovertStringToInterface(value string) (interface{}, er
return float32(0), err
}
func (i Float32Converter) CovertStringToPrimitiveTypeAndSetField(field reflect.Value, value string, isPtr bool) error {
v, err := i.CovertStringToInterface(value)
if err != nil {
return err
}
val := v.(float32)
if isPtr {
field.Set(reflect.ValueOf(&val))
} else {
field.Set(reflect.ValueOf(val))
}
return nil
}
type Float64Converter struct{}
func (i Float64Converter) CovertStringToInterface(value string) (interface{}, error) {
@ -42,6 +87,20 @@ func (i Float64Converter) CovertStringToInterface(value string) (interface{}, er
return float64(0), err
}
func (i Float64Converter) CovertStringToPrimitiveTypeAndSetField(field reflect.Value, value string, isPtr bool) error {
v, err := i.CovertStringToInterface(value)
if err != nil {
return err
}
val := v.(float64)
if isPtr {
field.Set(reflect.ValueOf(&val))
} else {
field.Set(reflect.ValueOf(val))
}
return nil
}
type BooleanConverter struct{}
func (i BooleanConverter) CovertStringToInterface(value string) (interface{}, error) {
@ -52,8 +111,32 @@ func (i BooleanConverter) CovertStringToInterface(value string) (interface{}, er
return false, err
}
func (i BooleanConverter) CovertStringToPrimitiveTypeAndSetField(field reflect.Value, value string, isPtr bool) error {
v, err := i.CovertStringToInterface(value)
if err != nil {
return err
}
val := v.(bool)
if isPtr {
field.Set(reflect.ValueOf(&val))
} else {
field.Set(reflect.ValueOf(val))
}
return nil
}
type StringConverter struct{}
func (i StringConverter) CovertStringToInterface(value string) (interface{}, error) {
return value, nil
}
func (i StringConverter) CovertStringToPrimitiveTypeAndSetField(field reflect.Value, value string, isPtr bool) error {
val := value
if isPtr {
field.Set(reflect.ValueOf(&val))
} else {
field.Set(reflect.ValueOf(val))
}
return nil
}

View File

@ -31,6 +31,8 @@ const (
type FieldDef struct {
LocationType LocationType
Name string
JsonTag string
KindName string
}
func NewFieldDef() *FieldDef {
@ -46,3 +48,13 @@ func (field *FieldDef) WithName(name string) *FieldDef {
field.Name = name
return field
}
func (field *FieldDef) WithJsonTag(tag string) *FieldDef {
field.JsonTag = tag
return field
}
func (field *FieldDef) WithKindName(kindName string) *FieldDef {
field.KindName = kindName
return field
}

View File

@ -20,11 +20,12 @@
package def
type HttpRequestDef struct {
BodyJson interface{}
RequestFields []*FieldDef
Path string
Method string
ContentType string
Method string
Path string
ContentType string
RequestFields []*FieldDef
ResponseFields []*FieldDef
Response interface{}
}
type HttpRequestDefBuilder struct {
@ -33,7 +34,8 @@ type HttpRequestDefBuilder struct {
func NewHttpRequestDefBuilder() *HttpRequestDefBuilder {
httpRequestDef := &HttpRequestDef{
RequestFields: []*FieldDef{},
RequestFields: []*FieldDef{},
ResponseFields: []*FieldDef{},
}
HttpRequestDefBuilder := &HttpRequestDefBuilder{
httpRequestDef: httpRequestDef,
@ -56,8 +58,8 @@ func (builder *HttpRequestDefBuilder) WithContentType(contentType string) *HttpR
return builder
}
func (builder *HttpRequestDefBuilder) WithBodyJson(bodyJson interface{}) *HttpRequestDefBuilder {
builder.httpRequestDef.BodyJson = bodyJson
func (builder *HttpRequestDefBuilder) WithResponse(response interface{}) *HttpRequestDefBuilder {
builder.httpRequestDef.Response = response
return builder
}
@ -66,6 +68,11 @@ func (builder *HttpRequestDefBuilder) WithRequestField(field *FieldDef) *HttpReq
return builder
}
func (builder *HttpRequestDefBuilder) WithResponseField(field *FieldDef) *HttpRequestDefBuilder {
builder.httpRequestDef.ResponseFields = append(builder.httpRequestDef.ResponseFields, field)
return builder
}
func (builder *HttpRequestDefBuilder) Build() *HttpRequestDef {
return builder.httpRequestDef
}

View File

@ -1,45 +0,0 @@
// Copyright 2020 Huawei Technologies Co.,Ltd.
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you 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 def
type HttpResponseDef struct {
BodyJson interface{}
}
type HttpResponseDefBuilder struct {
httpResponseDef *HttpResponseDef
}
func NewHttpResponseDefBuilder() *HttpResponseDefBuilder {
HttpResponseDef := &HttpResponseDef{}
HttpResponseDefBuilder := &HttpResponseDefBuilder{
httpResponseDef: HttpResponseDef,
}
return HttpResponseDefBuilder
}
func (builder *HttpResponseDefBuilder) WithBodyJson(bodyJson interface{}) *HttpResponseDefBuilder {
builder.httpResponseDef.BodyJson = bodyJson
return builder
}
func (builder *HttpResponseDefBuilder) Build() *HttpResponseDef {
return builder.httpResponseDef
}

View File

@ -21,15 +21,18 @@ package core
import (
"bytes"
"encoding/json"
jsoniter "github.com/json-iterator/go"
"io/ioutil"
"errors"
"fmt"
"k8s.io/autoscaler/cluster-autoscaler/cloudprovider/huaweicloud/huaweicloud-sdk-go-v3/core/auth"
"k8s.io/autoscaler/cluster-autoscaler/cloudprovider/huaweicloud/huaweicloud-sdk-go-v3/core/converter"
"k8s.io/autoscaler/cluster-autoscaler/cloudprovider/huaweicloud/huaweicloud-sdk-go-v3/core/def"
"k8s.io/autoscaler/cluster-autoscaler/cloudprovider/huaweicloud/huaweicloud-sdk-go-v3/core/impl"
"k8s.io/autoscaler/cluster-autoscaler/cloudprovider/huaweicloud/huaweicloud-sdk-go-v3/core/request"
"k8s.io/autoscaler/cluster-autoscaler/cloudprovider/huaweicloud/huaweicloud-sdk-go-v3/core/response"
"k8s.io/autoscaler/cluster-autoscaler/cloudprovider/huaweicloud/huaweicloud-sdk-go-v3/core/sdkerr"
jsoniter "github.com/json-iterator/go"
"io/ioutil"
"reflect"
"strings"
)
@ -53,7 +56,7 @@ func (hc *HcHttpClient) WithCredential(credential auth.ICredential) *HcHttpClien
return hc
}
func (hc *HcHttpClient) Sync(req interface{}, reqDef *def.HttpRequestDef, responseDef *def.HttpResponseDef) (*response.DefaultHttpResponse, error) {
func (hc *HcHttpClient) Sync(req interface{}, reqDef *def.HttpRequestDef) (interface{}, error) {
httpRequest, err := hc.buildRequest(req, reqDef)
if err != nil {
return nil, err
@ -64,15 +67,14 @@ func (hc *HcHttpClient) Sync(req interface{}, reqDef *def.HttpRequestDef, respon
return nil, err
}
return hc.extractResponse(resp, responseDef)
return hc.extractResponse(resp, reqDef)
}
func (hc *HcHttpClient) buildRequest(req interface{}, reqDef *def.HttpRequestDef) (*request.DefaultHttpRequest, error) {
builder := request.NewHttpRequestBuilder().
WithEndpoint(hc.endpoint).
WithMethod(reqDef.Method).
WithPath(reqDef.Path).
WithBody(reqDef.BodyJson)
WithPath(reqDef.Path)
if reqDef.ContentType != "" {
builder.AddHeaderParam("Content-Type", reqDef.ContentType)
@ -92,74 +94,135 @@ func (hc *HcHttpClient) buildRequest(req interface{}, reqDef *def.HttpRequestDef
}
func (hc *HcHttpClient) fillParamsFromReq(req interface{}, reqDef *def.HttpRequestDef, builder *request.HttpRequestBuilder) (*request.HttpRequestBuilder, error) {
toBytes, err := hc.convertToBytes(req)
if err != nil {
return nil, err
}
attrMaps := hc.GetFieldJsonTags(req)
for _, fieldDef := range reqDef.RequestFields {
value := jsoniter.Get(toBytes.Bytes(), fieldDef.Name).ToString()
if value == "" {
value, err := hc.GetFieldValueByName(fieldDef.Name, attrMaps, req)
if err != nil {
return nil, err
}
if !value.IsValid() {
continue
}
switch fieldDef.LocationType {
case def.Header:
builder.AddHeaderParam(fieldDef.Name, value)
builder.AddHeaderParam(fieldDef.JsonTag, fmt.Sprintf("%v", value))
case def.Path:
builder.AddPathParam(fieldDef.Name, value)
builder.AddPathParam(fieldDef.JsonTag, fmt.Sprintf("%v", value))
case def.Query:
builder.AddQueryParam(fieldDef.Name, value)
builder.AddQueryParam(fieldDef.JsonTag, value)
case def.Body:
builder.WithBody(value.Interface())
}
}
return builder, err
return builder, nil
}
func (hc *HcHttpClient) convertToBytes(req interface{}) (*bytes.Buffer, error) {
buf := &bytes.Buffer{}
err := json.NewEncoder(buf).Encode(req)
func (hc *HcHttpClient) GetFieldJsonTags(structName interface{}) map[string]string {
attrMaps := make(map[string]string)
t := reflect.TypeOf(structName)
if t.Kind() == reflect.Ptr {
t = t.Elem()
}
fieldNum := t.NumField()
for i := 0; i < fieldNum; i++ {
jsonTag := t.Field(i).Tag.Get("json")
if jsonTag != "" {
attrMaps[t.Field(i).Name] = jsonTag
}
}
return attrMaps
}
func (hc *HcHttpClient) GetFieldValueByName(name string, jsonTag map[string]string, structName interface{}) (reflect.Value, error) {
v := reflect.ValueOf(structName)
if v.Kind() == reflect.Ptr {
v = v.Elem()
}
value := v.FieldByName(name)
if value.Kind() == reflect.Ptr {
if value.IsNil() {
if strings.Contains(jsonTag[name], "omitempty") {
return reflect.ValueOf(nil), nil
}
return reflect.ValueOf(nil), errors.New("request field " + name + " read null value")
}
return value.Elem(), nil
}
if value.Kind() == reflect.Struct {
v, err := jsoniter.Marshal(value.Interface())
if strings.HasPrefix(string(v), "\"") {
return reflect.ValueOf(strings.Trim(string(v), "\"")), err
} else {
return reflect.ValueOf(string(v)), err
}
}
return value, nil
}
func (hc *HcHttpClient) extractResponse(resp *response.DefaultHttpResponse, reqDef *def.HttpRequestDef) (interface{}, error) {
if resp.GetStatusCode() >= 400 {
return nil, sdkerr.NewServiceResponseError(resp.Response)
}
err := hc.deserializeResponse(resp, reqDef)
if err != nil {
return nil, err
}
return buf, nil
return reqDef.Response, nil
}
func (hc *HcHttpClient) extractResponse(resp *response.DefaultHttpResponse, responseDef *def.HttpResponseDef) (*response.DefaultHttpResponse, error) {
if resp.GetStatusCode() >= 400 {
return resp, sdkerr.NewServiceResponseError(resp.Response)
}
func (hc *HcHttpClient) deserializeResponse(resp *response.DefaultHttpResponse, reqDef *def.HttpRequestDef) error {
data, err := ioutil.ReadAll(resp.Response.Body)
if err != nil {
if closeErr := resp.Response.Body.Close(); closeErr != nil {
return nil, err
return err
}
return nil, err
return err
}
if err := resp.Response.Body.Close(); err != nil {
return nil, err
return err
} else {
resp.Response.Body = ioutil.NopCloser(bytes.NewBuffer(data))
}
if len(data) == 0 {
return resp, nil
}
err = jsoniter.Unmarshal(data, responseDef.BodyJson)
if err != nil {
if strings.HasPrefix(string(data), "{") {
return nil, sdkerr.ServiceResponseError{
StatusCode: resp.GetStatusCode(),
RequestId: resp.GetHeader("X-Request-Id"),
ErrorMessage: err.Error(),
hasBody := false
for _, item := range reqDef.ResponseFields {
if item.LocationType == def.Header {
err := hc.deserializeResponseHeaders(resp, reqDef, item)
if err != nil {
return sdkerr.ServiceResponseError{
StatusCode: resp.GetStatusCode(),
RequestId: resp.GetHeader("X-Request-Id"),
ErrorMessage: err.Error(),
}
}
}
dataOfListOrString := "{ \"body\" : " + string(data) + "}"
err = jsoniter.Unmarshal([]byte(dataOfListOrString), responseDef.BodyJson)
if item.LocationType == def.Body {
hasBody = true
dataOfListOrString := "{ \"body\" : " + string(data) + "}"
err = jsoniter.Unmarshal([]byte(dataOfListOrString), &reqDef.Response)
if err != nil {
return sdkerr.ServiceResponseError{
StatusCode: resp.GetStatusCode(),
RequestId: resp.GetHeader("X-Request-Id"),
ErrorMessage: err.Error(),
}
}
}
}
if len(data) != 0 && !hasBody {
err = jsoniter.Unmarshal(data, &reqDef.Response)
if err != nil {
return nil, sdkerr.ServiceResponseError{
return sdkerr.ServiceResponseError{
StatusCode: resp.GetStatusCode(),
RequestId: resp.GetHeader("X-Request-Id"),
ErrorMessage: err.Error(),
@ -167,6 +230,44 @@ func (hc *HcHttpClient) extractResponse(resp *response.DefaultHttpResponse, resp
}
}
resp.BodyJson = responseDef.BodyJson
return resp, nil
return nil
}
func (hc *HcHttpClient) deserializeResponseHeaders(resp *response.DefaultHttpResponse, reqDef *def.HttpRequestDef, item *def.FieldDef) error {
isPtr, fieldKind := GetFieldInfo(reqDef, item)
v := reflect.ValueOf(reqDef.Response)
if v.Kind() == reflect.Ptr {
v = v.Elem()
}
fieldValue := v.FieldByName(item.Name)
headerValue := resp.GetHeader(item.JsonTag)
sdkConverter := converter.StringConverterFactory(fieldKind)
if sdkConverter == nil {
return errors.New("failed to convert " + item.JsonTag)
}
err := sdkConverter.CovertStringToPrimitiveTypeAndSetField(fieldValue, headerValue, isPtr)
if err != nil {
return err
}
return nil
}
func GetFieldInfo(reqDef *def.HttpRequestDef, item *def.FieldDef) (bool, string) {
var fieldKind string
var isPtr = false
t := reflect.TypeOf(reqDef.Response)
if t.Kind() == reflect.Ptr {
isPtr = true
t = t.Elem()
}
field, _ := t.FieldByName(item.Name)
if field.Type.Kind() == reflect.Ptr {
fieldKind = field.Type.Elem().Kind().String()
} else {
fieldKind = field.Type.Kind().String()
}
return isPtr, fieldKind
}

View File

@ -24,6 +24,7 @@ import (
"encoding/json"
"fmt"
"net/http"
"reflect"
"strings"
)
@ -31,7 +32,7 @@ type DefaultHttpRequest struct {
endpoint string
path string
method string
queryParams map[string]string
queryParams map[string]interface{}
pathParams map[string]string
autoFilledPathParams map[string]string
headerParams map[string]string
@ -65,7 +66,7 @@ func (httpRequest *DefaultHttpRequest) GetMethod() string {
return httpRequest.method
}
func (httpRequest *DefaultHttpRequest) GetQueryParams() map[string]string {
func (httpRequest *DefaultHttpRequest) GetQueryParams() map[string]interface{} {
return httpRequest.queryParams
}
@ -134,18 +135,13 @@ func (httpRequest *DefaultHttpRequest) fillQueryParams(req *http.Request) {
}
q := req.URL.Query()
for key, value := range httpRequest.GetQueryParams() {
if strings.HasPrefix(value, "[") {
var valueList []interface{}
err := json.Unmarshal([]byte(value), &valueList)
if err == nil {
for item := range valueList {
q.Add(key, fmt.Sprintf("%v", valueList[item]))
}
} else {
q.Add(key, value)
if reflect.TypeOf(value).Kind() == reflect.Struct && value.(reflect.Value).Kind() == reflect.Slice {
s := value.(reflect.Value)
for i := 0; i < s.Len(); i++ {
q.Add(key, fmt.Sprintf("%v", s.Index(i)))
}
} else {
q.Add(key, value)
q.Add(key, fmt.Sprintf("%v", value))
}
}
req.URL.RawQuery = q.Encode()
@ -163,7 +159,7 @@ type HttpRequestBuilder struct {
func NewHttpRequestBuilder() *HttpRequestBuilder {
httpRequest := &DefaultHttpRequest{
queryParams: make(map[string]string),
queryParams: make(map[string]interface{}),
headerParams: make(map[string]string),
pathParams: make(map[string]string),
autoFilledPathParams: make(map[string]string),
@ -189,7 +185,7 @@ func (builder *HttpRequestBuilder) WithMethod(method string) *HttpRequestBuilder
return builder
}
func (builder *HttpRequestBuilder) AddQueryParam(key string, value string) *HttpRequestBuilder {
func (builder *HttpRequestBuilder) AddQueryParam(key string, value interface{}) *HttpRequestBuilder {
builder.httpRequest.queryParams[key] = value
return builder
}

View File

@ -24,11 +24,11 @@ import "bytes"
type HttpRequest interface {
Builder() *HttpRequestBuilder
GetEndpoint() string
GetPath() string
GetMethod() string
GetQueryParams() map[string]string
GetPath() string
GetHeaderParams() map[string]string
GetPathPrams() map[string]string
GetQueryParams() map[string]interface{}
GetBody() interface{}
GetBodyToBytes() (*bytes.Buffer, error)
}

View File

@ -27,7 +27,6 @@ import (
type DefaultHttpResponse struct {
Response *http.Response
BodyJson interface{}
}
func NewDefaultHttpResponse(response *http.Response) *DefaultHttpResponse {
@ -60,10 +59,6 @@ func (r *DefaultHttpResponse) GetBody() string {
return string(body)
}
func (r *DefaultHttpResponse) GetBodyJson() interface{} {
return r.BodyJson
}
func (r *DefaultHttpResponse) GetHeader(key string) string {
header := r.Response.Header
return header.Get(key)

View File

@ -1,6 +1,7 @@
package sdktime
import (
"fmt"
"strings"
"time"
)
@ -23,6 +24,13 @@ func (t *SdkTime) UnmarshalJSON(data []byte) error {
return nil
}
func (t SdkTime) String() string {
return time.Time(t).Format(`2006-01-02T15:04:05Z`)
func (t SdkTime) MarshalJSON() ([]byte, error) {
rs := []byte(fmt.Sprintf(`"%s"`, t.String()))
return rs, nil
}
func (t SdkTime) String() string {
// return time.Time(t).Format(`2006-01-02T15:04:05Z`)
// temp solution for: https://github.com/huaweicloud/huaweicloud-sdk-go-v3/issues/8
return time.Time(t).Format(`2006-01-02T15:04Z`)
}

View File

@ -20,468 +20,429 @@ func AsClientBuilder() *http_client.HcHttpClientBuilder {
//批量删除指定弹性伸缩配置。被伸缩组使用的伸缩配置不能被删除。单次最多删除伸缩配置个数为50。
func (c *AsClient) BatchDeleteScalingConfigs(request *model.BatchDeleteScalingConfigsRequest) (*model.BatchDeleteScalingConfigsResponse, error) {
requestDef := GenReqDefForBatchDeleteScalingConfigs(request)
resp, responseDef := GenRespForBatchDeleteScalingConfigs()
requestDef := GenReqDefForBatchDeleteScalingConfigs()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.BatchDeleteScalingConfigsResponse), nil
}
}
//通过生命周期操作令牌或者通过实例ID和生命周期挂钩名称对伸缩实例指定的挂钩进行回调操作。如果在超时时间结束前已完成自定义操作选择终止或继续完成生命周期操作。如果需要更多时间完成自定义操作选择延长超时时间实例保持等待状态的时间将增加1小时。只有实例的生命周期挂钩状态为 HANGING 时才可以进行回调操作。
func (c *AsClient) CompleteLifecycleAction(request *model.CompleteLifecycleActionRequest) (*model.CompleteLifecycleActionResponse, error) {
requestDef := GenReqDefForCompleteLifecycleAction(request)
resp, responseDef := GenRespForCompleteLifecycleAction()
requestDef := GenReqDefForCompleteLifecycleAction()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.CompleteLifecycleActionResponse), nil
}
}
//创建生命周期挂钩可为伸缩组添加一个或多个生命周期挂钩最多添加5个。添加生命周期挂钩后当伸缩组进行伸缩活动时实例将被生命周期挂钩挂起并置于等待状态正在加入伸缩组或正在移出伸缩组实例将保持此状态直至超时时间结束或者用户手动回调。用户能够在实例保持等待状态的时间段内执行自定义操作例如用户可以在新启动的实例上安装或配置软件也可以在实例终止前从实例中下载日志文件。
func (c *AsClient) CreateLifyCycleHook(request *model.CreateLifyCycleHookRequest) (*model.CreateLifyCycleHookResponse, error) {
requestDef := GenReqDefForCreateLifyCycleHook(request)
resp, responseDef := GenRespForCreateLifyCycleHook()
requestDef := GenReqDefForCreateLifyCycleHook()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.CreateLifyCycleHookResponse), nil
}
}
//创建弹性伸缩配置。伸缩配置是伸缩组内实例弹性云服务器云主机的模板定义了伸缩组内待添加的实例的规格数据。伸缩配置与伸缩组是解耦的同一伸缩配置可以被多个伸缩组使用。默认最多可以创建100个伸缩配置。
func (c *AsClient) CreateScalingConfig(request *model.CreateScalingConfigRequest) (*model.CreateScalingConfigResponse, error) {
requestDef := GenReqDefForCreateScalingConfig(request)
resp, responseDef := GenRespForCreateScalingConfig()
requestDef := GenReqDefForCreateScalingConfig()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.CreateScalingConfigResponse), nil
}
}
//伸缩组是具有相同应用场景的实例的集合是启停伸缩策略和进行伸缩活动的基本单位。伸缩组内定义了最大实例数、期望实例数、最小实例数、虚拟私有云、子网、负载均衡等信息。默认最多可以创建10个伸缩组。如果伸缩组配置了负载均衡在添加或移除实例时会自动为实例绑定或解绑负载均衡监听器。如果伸缩组使用负载均衡健康检查方式伸缩组中的实例需要启用负载均衡器的监听端口才能通过健康检查。端口启用可在安全组中进行配置可参考添加安全组规则进行操作。
func (c *AsClient) CreateScalingGroup(request *model.CreateScalingGroupRequest) (*model.CreateScalingGroupResponse, error) {
requestDef := GenReqDefForCreateScalingGroup(request)
resp, responseDef := GenRespForCreateScalingGroup()
requestDef := GenReqDefForCreateScalingGroup()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.CreateScalingGroupResponse), nil
}
}
//给弹性伸缩组配置通知功能。每调用一次该接口伸缩组即配置一个通知主题及其通知场景每个伸缩组最多可以增加5个主题。通知主题由用户事先在SMN创建并进行订阅当通知主题对应的通知场景出现时伸缩组会向用户的订阅终端发送通知。
func (c *AsClient) CreateScalingNotification(request *model.CreateScalingNotificationRequest) (*model.CreateScalingNotificationResponse, error) {
requestDef := GenReqDefForCreateScalingNotification(request)
resp, responseDef := GenRespForCreateScalingNotification()
requestDef := GenReqDefForCreateScalingNotification()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.CreateScalingNotificationResponse), nil
}
}
//创建弹性伸缩策略。伸缩策略定义了伸缩组内实例的扩张和收缩操作。如果执行伸缩策略造成伸缩组期望实例数与伸缩组内实例数不符,弹性伸缩会自动调整实例资源,以匹配期望实例数。当前伸缩策略支持告警触发策略,周期触发策略,定时触发策略。在策略执行具体动作中,可设置实例变化的个数,或根据当前实例的百分比数进行伸缩。
func (c *AsClient) CreateScalingPolicy(request *model.CreateScalingPolicyRequest) (*model.CreateScalingPolicyResponse, error) {
requestDef := GenReqDefForCreateScalingPolicy(request)
resp, responseDef := GenRespForCreateScalingPolicy()
requestDef := GenReqDefForCreateScalingPolicy()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.CreateScalingPolicyResponse), nil
}
}
//创建或删除指定资源的标签。每个伸缩组最多添加10个标签。
func (c *AsClient) CreateScalingTags(request *model.CreateScalingTagsRequest) (*model.CreateScalingTagsResponse, error) {
requestDef := GenReqDefForCreateScalingTags(request)
resp, responseDef := GenRespForCreateScalingTags()
requestDef := GenReqDefForCreateScalingTags()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.CreateScalingTagsResponse), nil
}
}
//删除一个指定生命周期挂钩。伸缩组进行伸缩活动时,不允许删除该伸缩组内的生命周期挂钩。
func (c *AsClient) DeleteLifecycleHook(request *model.DeleteLifecycleHookRequest) (*model.DeleteLifecycleHookResponse, error) {
requestDef := GenReqDefForDeleteLifecycleHook(request)
resp, responseDef := GenRespForDeleteLifecycleHook()
requestDef := GenReqDefForDeleteLifecycleHook()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.DeleteLifecycleHookResponse), nil
}
}
//删除一个指定弹性伸缩配置。
func (c *AsClient) DeleteScalingConfig(request *model.DeleteScalingConfigRequest) (*model.DeleteScalingConfigResponse, error) {
requestDef := GenReqDefForDeleteScalingConfig(request)
resp, responseDef := GenRespForDeleteScalingConfig()
requestDef := GenReqDefForDeleteScalingConfig()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.DeleteScalingConfigResponse), nil
}
}
//删除一个指定弹性伸缩组。force_delete属性表示如果伸缩组存在ECS实例或正在进行伸缩活动是否强制删除伸缩组并移出和释放ECS实例。默认值为no表示不强制删除伸缩组。如果force_delete的值为no必须满足以下两个条件才能删除伸缩组条件一伸缩组没有正在进行的伸缩活动。条件二伸缩组当前的ECS实例数量current_instance_number为0。如果force_delete的值为yes伸缩组会被置于DELETING状态拒绝接收新的伸缩活动请求然后等待已有的伸缩活动完成最后将伸缩组内所有ECS实例移出伸缩组用户手动添加的ECS实例会被移出伸缩组弹性伸缩自动创建的ECS实例会被自动删除并删除伸缩组。
func (c *AsClient) DeleteScalingGroup(request *model.DeleteScalingGroupRequest) (*model.DeleteScalingGroupResponse, error) {
requestDef := GenReqDefForDeleteScalingGroup(request)
resp, responseDef := GenRespForDeleteScalingGroup()
requestDef := GenReqDefForDeleteScalingGroup()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.DeleteScalingGroupResponse), nil
}
}
//从弹性伸缩组中移出一个指定实例。实例处于INSERVICE且移出后实例数不能小于伸缩组的最小实例数时才可以移出。当伸缩组没有伸缩活动时才能移出实例。
func (c *AsClient) DeleteScalingInstance(request *model.DeleteScalingInstanceRequest) (*model.DeleteScalingInstanceResponse, error) {
requestDef := GenReqDefForDeleteScalingInstance(request)
resp, responseDef := GenRespForDeleteScalingInstance()
requestDef := GenReqDefForDeleteScalingInstance()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.DeleteScalingInstanceResponse), nil
}
}
//删除指定的弹性伸缩组中指定的通知。
func (c *AsClient) DeleteScalingNotification(request *model.DeleteScalingNotificationRequest) (*model.DeleteScalingNotificationResponse, error) {
requestDef := GenReqDefForDeleteScalingNotification(request)
resp, responseDef := GenRespForDeleteScalingNotification()
requestDef := GenReqDefForDeleteScalingNotification()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.DeleteScalingNotificationResponse), nil
}
}
//删除一个指定弹性伸缩策略。
func (c *AsClient) DeleteScalingPolicy(request *model.DeleteScalingPolicyRequest) (*model.DeleteScalingPolicyResponse, error) {
requestDef := GenReqDefForDeleteScalingPolicy(request)
resp, responseDef := GenRespForDeleteScalingPolicy()
requestDef := GenReqDefForDeleteScalingPolicy()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.DeleteScalingPolicyResponse), nil
}
}
//创建或删除指定资源的标签。每个伸缩组最多添加10个标签。
func (c *AsClient) DeleteScalingTags(request *model.DeleteScalingTagsRequest) (*model.DeleteScalingTagsResponse, error) {
requestDef := GenReqDefForDeleteScalingTags(request)
resp, responseDef := GenRespForDeleteScalingTags()
requestDef := GenReqDefForDeleteScalingTags()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.DeleteScalingTagsResponse), nil
}
}
//启用或停止一个指定弹性伸缩组。已停用状态的伸缩组,不会自动触发任何伸缩活动。当伸缩组正在进行伸缩活动,即使停用,正在进行的伸缩活动也不会立即停止。
func (c *AsClient) EnableOrDisableScalingGroup(request *model.EnableOrDisableScalingGroupRequest) (*model.EnableOrDisableScalingGroupResponse, error) {
requestDef := GenReqDefForEnableOrDisableScalingGroup(request)
resp, responseDef := GenRespForEnableOrDisableScalingGroup()
requestDef := GenReqDefForEnableOrDisableScalingGroup()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.EnableOrDisableScalingGroupResponse), nil
}
}
//立即执行或启用或停止一个指定弹性伸缩策略。当伸缩组、伸缩策略状态处于INSERVICE时伸缩策略才能被正确执行否则会执行失败。
func (c *AsClient) ExecuteScalingPolicy(request *model.ExecuteScalingPolicyRequest) (*model.ExecuteScalingPolicyResponse, error) {
requestDef := GenReqDefForExecuteScalingPolicy(request)
resp, responseDef := GenRespForExecuteScalingPolicy()
requestDef := GenReqDefForExecuteScalingPolicy()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ExecuteScalingPolicyResponse), nil
}
}
//添加生命周期挂钩后当伸缩组进行伸缩活动时实例将被挂钩挂起并置于等待状态根据输入条件过滤查询弹性伸缩组中伸缩实例的挂起信息。可根据实例ID进行条件过滤查询。若不加过滤条件默认查询指定伸缩组内所有实例挂起信息。
func (c *AsClient) ListHookInstances(request *model.ListHookInstancesRequest) (*model.ListHookInstancesResponse, error) {
requestDef := GenReqDefForListHookInstances(request)
resp, responseDef := GenRespForListHookInstances()
requestDef := GenReqDefForListHookInstances()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListHookInstancesResponse), nil
}
}
//根据伸缩组ID查询生命周期挂钩列表。
func (c *AsClient) ListLifeCycleHooks(request *model.ListLifeCycleHooksRequest) (*model.ListLifeCycleHooksResponse, error) {
requestDef := GenReqDefForListLifeCycleHooks(request)
resp, responseDef := GenRespForListLifeCycleHooks()
requestDef := GenReqDefForListLifeCycleHooks()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListLifeCycleHooksResponse), nil
}
}
//根据项目ID查询指定资源类型的资源实例。资源、资源tag默认按照创建时间倒序。
func (c *AsClient) ListResourceInstances(request *model.ListResourceInstancesRequest) (*model.ListResourceInstancesResponse, error) {
requestDef := GenReqDefForListResourceInstances(request)
resp, responseDef := GenRespForListResourceInstances()
requestDef := GenReqDefForListResourceInstances()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListResourceInstancesResponse), nil
}
}
//根据输入条件过滤查询伸缩活动日志。查询结果分页显示。可根据起始时间截止时间起始行号记录数进行条件过滤查询。若不加过滤条件默认查询最多20条伸缩活动日志信息。
func (c *AsClient) ListScalingActivityLogs(request *model.ListScalingActivityLogsRequest) (*model.ListScalingActivityLogsResponse, error) {
requestDef := GenReqDefForListScalingActivityLogs(request)
resp, responseDef := GenRespForListScalingActivityLogs()
requestDef := GenReqDefForListScalingActivityLogs()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListScalingActivityLogsResponse), nil
}
}
//根据输入条件过滤查询弹性伸缩配置。查询结果分页显示。可以根据伸缩配置名称镜像ID起始行号记录条数进行条件过滤查询。若不加过滤条件默认最多查询租户下20条伸缩配置信息。
func (c *AsClient) ListScalingConfigs(request *model.ListScalingConfigsRequest) (*model.ListScalingConfigsResponse, error) {
requestDef := GenReqDefForListScalingConfigs(request)
resp, responseDef := GenRespForListScalingConfigs()
requestDef := GenReqDefForListScalingConfigs()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListScalingConfigsResponse), nil
}
}
//根据输入条件过滤查询弹性伸缩组列表。查询结果分页显示。可根据伸缩组名称伸缩配置ID伸缩组状态企业项目ID起始行号记录条数进行条件过滤查询。若不加过滤条件默认最多查询租户下20条伸缩组信息。
func (c *AsClient) ListScalingGroups(request *model.ListScalingGroupsRequest) (*model.ListScalingGroupsResponse, error) {
requestDef := GenReqDefForListScalingGroups(request)
resp, responseDef := GenRespForListScalingGroups()
requestDef := GenReqDefForListScalingGroups()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListScalingGroupsResponse), nil
}
}
//根据输入条件过滤查询弹性伸缩组中实例信息。查询结果分页显示。可根据实例在伸缩组中的生命周期状态实例健康状态实例保护状态起始行号记录条数进行条件过滤查询。若不加过滤条件默认查询组内最多20条实例信息
func (c *AsClient) ListScalingInstances(request *model.ListScalingInstancesRequest) (*model.ListScalingInstancesResponse, error) {
requestDef := GenReqDefForListScalingInstances(request)
resp, responseDef := GenRespForListScalingInstances()
requestDef := GenReqDefForListScalingInstances()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListScalingInstancesResponse), nil
}
}
//根据伸缩组ID查询指定弹性伸缩组的通知列表。
func (c *AsClient) ListScalingNotifications(request *model.ListScalingNotificationsRequest) (*model.ListScalingNotificationsResponse, error) {
requestDef := GenReqDefForListScalingNotifications(request)
resp, responseDef := GenRespForListScalingNotifications()
requestDef := GenReqDefForListScalingNotifications()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListScalingNotificationsResponse), nil
}
}
//根据输入条件过滤查询弹性伸缩策略。查询结果分页显示。可根据伸缩策略名称策略类型伸缩策略ID起始行号记录数进行条件过滤查询。若不加过滤条件默认查询租户下指定伸缩组内最多20条伸缩策略信息。
func (c *AsClient) ListScalingPolicies(request *model.ListScalingPoliciesRequest) (*model.ListScalingPoliciesResponse, error) {
requestDef := GenReqDefForListScalingPolicies(request)
resp, responseDef := GenRespForListScalingPolicies()
requestDef := GenReqDefForListScalingPolicies()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListScalingPoliciesResponse), nil
}
}
//根据输入条件过滤查询策略执行的历史记录。查询结果分页显示。可根据日志ID伸缩资源类型伸缩资源ID策略执行类型查询额起始查询截止时间查询起始行号查询记录数进行条件过滤查询。若不加过滤条件默认查询最多20条策略执行日志信息。
func (c *AsClient) ListScalingPolicyExecuteLogs(request *model.ListScalingPolicyExecuteLogsRequest) (*model.ListScalingPolicyExecuteLogsResponse, error) {
requestDef := GenReqDefForListScalingPolicyExecuteLogs(request)
resp, responseDef := GenRespForListScalingPolicyExecuteLogs()
requestDef := GenReqDefForListScalingPolicyExecuteLogs()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListScalingPolicyExecuteLogsResponse), nil
}
}
//根据项目ID和资源ID查询指定资源类型的资源标签列表。
func (c *AsClient) ListScalingTagInfosByResourceId(request *model.ListScalingTagInfosByResourceIdRequest) (*model.ListScalingTagInfosByResourceIdResponse, error) {
requestDef := GenReqDefForListScalingTagInfosByResourceId(request)
resp, responseDef := GenRespForListScalingTagInfosByResourceId()
requestDef := GenReqDefForListScalingTagInfosByResourceId()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListScalingTagInfosByResourceIdResponse), nil
}
}
//根据项目ID查询指定资源类型的标签列表。
func (c *AsClient) ListScalingTagInfosByTenantId(request *model.ListScalingTagInfosByTenantIdRequest) (*model.ListScalingTagInfosByTenantIdResponse, error) {
requestDef := GenReqDefForListScalingTagInfosByTenantId(request)
resp, responseDef := GenRespForListScalingTagInfosByTenantId()
requestDef := GenReqDefForListScalingTagInfosByTenantId()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListScalingTagInfosByTenantIdResponse), nil
}
}
//根据伸缩组ID及生命周期挂钩名称查询指定的生命周期挂钩详情。
func (c *AsClient) ShowLifeCycleHook(request *model.ShowLifeCycleHookRequest) (*model.ShowLifeCycleHookResponse, error) {
requestDef := GenReqDefForShowLifeCycleHook(request)
resp, responseDef := GenRespForShowLifeCycleHook()
requestDef := GenReqDefForShowLifeCycleHook()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ShowLifeCycleHookResponse), nil
}
}
//根据伸缩组ID查询指定弹性伸缩组下的伸缩策略和伸缩实例的配额总数及已使用配额数。
func (c *AsClient) ShowPolicyAndInstanceQuota(request *model.ShowPolicyAndInstanceQuotaRequest) (*model.ShowPolicyAndInstanceQuotaResponse, error) {
requestDef := GenReqDefForShowPolicyAndInstanceQuota(request)
resp, responseDef := GenRespForShowPolicyAndInstanceQuota()
requestDef := GenReqDefForShowPolicyAndInstanceQuota()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ShowPolicyAndInstanceQuotaResponse), nil
}
}
//查询指定租户下的弹性伸缩组、伸缩配置、伸缩带宽策略、伸缩策略和伸缩实例的配额总数及已使用配额数。
func (c *AsClient) ShowResourceQuota(request *model.ShowResourceQuotaRequest) (*model.ShowResourceQuotaResponse, error) {
requestDef := GenReqDefForShowResourceQuota(request)
resp, responseDef := GenRespForShowResourceQuota()
requestDef := GenReqDefForShowResourceQuota()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ShowResourceQuotaResponse), nil
}
}
//根据伸缩配置ID查询一个弹性伸缩配置的详细信息。
func (c *AsClient) ShowScalingConfig(request *model.ShowScalingConfigRequest) (*model.ShowScalingConfigResponse, error) {
requestDef := GenReqDefForShowScalingConfig(request)
resp, responseDef := GenRespForShowScalingConfig()
requestDef := GenReqDefForShowScalingConfig()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ShowScalingConfigResponse), nil
}
}
//查询一个指定弹性伸缩组详情。
func (c *AsClient) ShowScalingGroup(request *model.ShowScalingGroupRequest) (*model.ShowScalingGroupResponse, error) {
requestDef := GenReqDefForShowScalingGroup(request)
resp, responseDef := GenRespForShowScalingGroup()
requestDef := GenReqDefForShowScalingGroup()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ShowScalingGroupResponse), nil
}
}
//查询指定弹性伸缩策略信息。
func (c *AsClient) ShowScalingPolicy(request *model.ShowScalingPolicyRequest) (*model.ShowScalingPolicyResponse, error) {
requestDef := GenReqDefForShowScalingPolicy(request)
resp, responseDef := GenRespForShowScalingPolicy()
requestDef := GenReqDefForShowScalingPolicy()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ShowScalingPolicyResponse), nil
}
}
//修改一个指定生命周期挂钩中的信息。
func (c *AsClient) UpdateLifeCycleHook(request *model.UpdateLifeCycleHookRequest) (*model.UpdateLifeCycleHookResponse, error) {
requestDef := GenReqDefForUpdateLifeCycleHook(request)
resp, responseDef := GenRespForUpdateLifeCycleHook()
requestDef := GenReqDefForUpdateLifeCycleHook()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.UpdateLifeCycleHookResponse), nil
}
}
//修改一个指定弹性伸缩组中的信息。更换伸缩组的伸缩配置,伸缩组中已经存在的使用之前伸缩配置创建的云服务器云主机不受影响。伸缩组为没有正在进行的伸缩活动时,可以修改伸缩组的子网、可用区和负载均衡配置。当伸缩组的期望实例数改变时,会触发伸缩活动加入或移出实例。期望实例数必须大于或等于最小实例数,必须小于或等于最大实例数。
func (c *AsClient) UpdateScalingGroup(request *model.UpdateScalingGroupRequest) (*model.UpdateScalingGroupResponse, error) {
requestDef := GenReqDefForUpdateScalingGroup(request)
resp, responseDef := GenRespForUpdateScalingGroup()
requestDef := GenReqDefForUpdateScalingGroup()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.UpdateScalingGroupResponse), nil
}
}
//批量移出伸缩组中的实例或批量添加伸缩组外的实例。批量对伸缩组中的实例设置或取消其实例保护属性。批量将伸缩组中的实例转入或移出备用状态。
func (c *AsClient) UpdateScalingGroupInstance(request *model.UpdateScalingGroupInstanceRequest) (*model.UpdateScalingGroupInstanceResponse, error) {
requestDef := GenReqDefForUpdateScalingGroupInstance(request)
resp, responseDef := GenRespForUpdateScalingGroupInstance()
requestDef := GenReqDefForUpdateScalingGroupInstance()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.UpdateScalingGroupInstanceResponse), nil
}
}
//修改指定弹性伸缩策略。
func (c *AsClient) UpdateScalingPolicy(request *model.UpdateScalingPolicyRequest) (*model.UpdateScalingPolicyResponse, error) {
requestDef := GenReqDefForUpdateScalingPolicy(request)
resp, responseDef := GenRespForUpdateScalingPolicy()
requestDef := GenReqDefForUpdateScalingPolicy()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.UpdateScalingPolicyResponse), nil
}
}

View File

@ -20,552 +20,506 @@ func EcsClientBuilder() *http_client.HcHttpClientBuilder {
//将云服务器加入云服务器组。添加成功后,如果该云服务器组是反亲和性策略的,则该云服务器与云服务器组中的其他成员尽量分散地创建在不同主机上。如果该云服务器时故障域类型的,则该云服务器会拥有故障域属性。
func (c *EcsClient) AddServerGroupMember(request *model.AddServerGroupMemberRequest) (*model.AddServerGroupMemberResponse, error) {
requestDef := GenReqDefForAddServerGroupMember(request)
resp, responseDef := GenRespForAddServerGroupMember()
requestDef := GenReqDefForAddServerGroupMember()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.AddServerGroupMemberResponse), nil
}
}
//把磁盘挂载到弹性云服务器上。
func (c *EcsClient) AttachServerVolume(request *model.AttachServerVolumeRequest) (*model.AttachServerVolumeResponse, error) {
requestDef := GenReqDefForAttachServerVolume(request)
resp, responseDef := GenRespForAttachServerVolume()
requestDef := GenReqDefForAttachServerVolume()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.AttachServerVolumeResponse), nil
}
}
//给云服务器添加一张或多张网卡。
func (c *EcsClient) BatchAddServerNics(request *model.BatchAddServerNicsRequest) (*model.BatchAddServerNicsResponse, error) {
requestDef := GenReqDefForBatchAddServerNics(request)
resp, responseDef := GenRespForBatchAddServerNics()
requestDef := GenReqDefForBatchAddServerNics()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.BatchAddServerNicsResponse), nil
}
}
//- 为指定云服务器批量添加标签。 - 标签管理服务TMS使用该接口批量管理云服务器的标签。
func (c *EcsClient) BatchCreateServerTags(request *model.BatchCreateServerTagsRequest) (*model.BatchCreateServerTagsResponse, error) {
requestDef := GenReqDefForBatchCreateServerTags(request)
resp, responseDef := GenRespForBatchCreateServerTags()
requestDef := GenReqDefForBatchCreateServerTags()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.BatchCreateServerTagsResponse), nil
}
}
//卸载并删除云服务器中的一张或多张网卡。
func (c *EcsClient) BatchDeleteServerNics(request *model.BatchDeleteServerNicsRequest) (*model.BatchDeleteServerNicsResponse, error) {
requestDef := GenReqDefForBatchDeleteServerNics(request)
resp, responseDef := GenRespForBatchDeleteServerNics()
requestDef := GenReqDefForBatchDeleteServerNics()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.BatchDeleteServerNicsResponse), nil
}
}
//- 为指定云服务器批量删除标签。 - 标签管理服务TMS使用该接口批量管理云服务器的标签。
func (c *EcsClient) BatchDeleteServerTags(request *model.BatchDeleteServerTagsRequest) (*model.BatchDeleteServerTagsResponse, error) {
requestDef := GenReqDefForBatchDeleteServerTags(request)
resp, responseDef := GenRespForBatchDeleteServerTags()
requestDef := GenReqDefForBatchDeleteServerTags()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.BatchDeleteServerTagsResponse), nil
}
}
//根据给定的云服务器ID列表批量重启云服务器一次最多可以重启1000台。
func (c *EcsClient) BatchRebootServers(request *model.BatchRebootServersRequest) (*model.BatchRebootServersResponse, error) {
requestDef := GenReqDefForBatchRebootServers(request)
resp, responseDef := GenRespForBatchRebootServers()
requestDef := GenReqDefForBatchRebootServers()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.BatchRebootServersResponse), nil
}
}
//根据给定的云服务器ID列表批量启动云服务器一次最多可以启动1000台。
func (c *EcsClient) BatchStartServers(request *model.BatchStartServersRequest) (*model.BatchStartServersResponse, error) {
requestDef := GenReqDefForBatchStartServers(request)
resp, responseDef := GenRespForBatchStartServers()
requestDef := GenReqDefForBatchStartServers()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.BatchStartServersResponse), nil
}
}
//根据给定的云服务器ID列表批量关闭云服务器一次最多可以关闭1000台。
func (c *EcsClient) BatchStopServers(request *model.BatchStopServersRequest) (*model.BatchStopServersResponse, error) {
requestDef := GenReqDefForBatchStopServers(request)
resp, responseDef := GenRespForBatchStopServers()
requestDef := GenReqDefForBatchStopServers()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.BatchStopServersResponse), nil
}
}
//切换弹性云服务器操作系统。支持弹性云服务器数据盘不变的情况下,使用新镜像重装系统盘。 调用该接口后,系统将卸载系统盘,然后使用新镜像重新创建系统盘,并挂载至弹性云服务器,实现切换操作系统功能。
func (c *EcsClient) ChangeServerOsWithCloudInit(request *model.ChangeServerOsWithCloudInitRequest) (*model.ChangeServerOsWithCloudInitResponse, error) {
requestDef := GenReqDefForChangeServerOsWithCloudInit(request)
resp, responseDef := GenRespForChangeServerOsWithCloudInit()
requestDef := GenReqDefForChangeServerOsWithCloudInit()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ChangeServerOsWithCloudInitResponse), nil
}
}
//创建一台或多台按需付费方式的云服务器。 弹性云服务器的登录鉴权方式包括两种:密钥对、密码。为安全起见,推荐使用密钥对方式。 - 密钥对 密钥对指使用密钥对作为弹性云服务器的鉴权方式。 接口调用方法使用key_name字段指定弹性云服务器登录时使用的密钥文件。 - 密码 密码指使用设置初始密码方式作为弹性云服务器的鉴权方式此时您可以通过用户名密码方式登录弹性云服务器Linux操作系统时为root用户的初始密码Windows操作系统时为Administrator用户的初始密码。 接口调用方法使用adminPass字段指定管理员帐号的初始登录密码。对于镜像已安装Cloud-init的Linux云服务器如果需要使用密文密码可以使用user_data字段进行密码注入。 > 对于安装Cloud-init镜像的Linux云服务器云主机若指定user_data字段则adminPass字段无效。
func (c *EcsClient) CreatePostPaidServers(request *model.CreatePostPaidServersRequest) (*model.CreatePostPaidServersResponse, error) {
requestDef := GenReqDefForCreatePostPaidServers(request)
resp, responseDef := GenRespForCreatePostPaidServers()
requestDef := GenReqDefForCreatePostPaidServers()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.CreatePostPaidServersResponse), nil
}
}
//创建弹性云服务器组。 与原生的创建云服务器组接口不同之处在于该接口支持企业项目细粒度权限的校验。
func (c *EcsClient) CreateServerGroup(request *model.CreateServerGroupRequest) (*model.CreateServerGroupResponse, error) {
requestDef := GenReqDefForCreateServerGroup(request)
resp, responseDef := GenRespForCreateServerGroup()
requestDef := GenReqDefForCreateServerGroup()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.CreateServerGroupResponse), nil
}
}
//创建一台或多台云服务器。 指该接口兼容《弹性云服务器接口参考》创建云服务器v1的功能同时合入新功能支持创建包年/包月的弹性云服务器。 弹性云服务器的登录鉴权方式包括两种:密钥对、密码。为安全起见,推荐使用密钥对方式。 - 密钥对 指使用密钥对作为弹性云服务器的鉴权方式。 接口调用方法使用key_name字段指定弹性云服务器登录时使用的密钥文件。 - 密码 指使用设置初始密码方式作为弹性云服务器的鉴权方式此时您可以通过用户名密码方式登录弹性云服务器Linux操作系统时为root用户的初始密码Windows操作系统时为Administrator用户的初始密码。 接口调用方法使用adminPass字段指定管理员帐号的初始登录密码。对于镜像已安装Cloud-init的Linux云服务器如果需要使用密文密码可以使用user_data字段进行密码注入。 > 对于安装Cloud-init镜像的Linux云服务器云主机若指定user_data字段则adminPass字段无效。
func (c *EcsClient) CreateServers(request *model.CreateServersRequest) (*model.CreateServersResponse, error) {
requestDef := GenReqDefForCreateServers(request)
resp, responseDef := GenRespForCreateServers()
requestDef := GenReqDefForCreateServers()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.CreateServersResponse), nil
}
}
//删除云服务器组。 与原生的删除云服务器组接口不同之处在于该接口支持企业项目细粒度权限的校验。
func (c *EcsClient) DeleteServerGroup(request *model.DeleteServerGroupRequest) (*model.DeleteServerGroupResponse, error) {
requestDef := GenReqDefForDeleteServerGroup(request)
resp, responseDef := GenRespForDeleteServerGroup()
requestDef := GenReqDefForDeleteServerGroup()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.DeleteServerGroupResponse), nil
}
}
//将弹性云服务器移出云服务器组。移出后,该云服务器与云服务器组中的成员不再遵从反亲和策略。
func (c *EcsClient) DeleteServerGroupMember(request *model.DeleteServerGroupMemberRequest) (*model.DeleteServerGroupMemberResponse, error) {
requestDef := GenReqDefForDeleteServerGroupMember(request)
resp, responseDef := GenRespForDeleteServerGroupMember()
requestDef := GenReqDefForDeleteServerGroupMember()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.DeleteServerGroupMemberResponse), nil
}
}
//删除云服务器指定元数据。
func (c *EcsClient) DeleteServerMetadata(request *model.DeleteServerMetadataRequest) (*model.DeleteServerMetadataResponse, error) {
requestDef := GenReqDefForDeleteServerMetadata(request)
resp, responseDef := GenRespForDeleteServerMetadata()
requestDef := GenReqDefForDeleteServerMetadata()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.DeleteServerMetadataResponse), nil
}
}
//根据指定的云服务器ID列表删除云服务器。 系统支持删除单台云服务器和批量删除多台云服务器操作批量删除云服务器时一次最多可以删除1000台。
func (c *EcsClient) DeleteServers(request *model.DeleteServersRequest) (*model.DeleteServersResponse, error) {
requestDef := GenReqDefForDeleteServers(request)
resp, responseDef := GenRespForDeleteServers()
requestDef := GenReqDefForDeleteServers()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.DeleteServersResponse), nil
}
}
//从弹性云服务器中卸载磁盘。
func (c *EcsClient) DetachServerVolume(request *model.DetachServerVolumeRequest) (*model.DetachServerVolumeResponse, error) {
requestDef := GenReqDefForDetachServerVolume(request)
resp, responseDef := GenRespForDetachServerVolume()
requestDef := GenReqDefForDetachServerVolume()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.DetachServerVolumeResponse), nil
}
}
//查询云服务器规格详情信息和规格扩展信息列表。
func (c *EcsClient) ListFlavors(request *model.ListFlavorsRequest) (*model.ListFlavorsResponse, error) {
requestDef := GenReqDefForListFlavors(request)
resp, responseDef := GenRespForListFlavors()
requestDef := GenReqDefForListFlavors()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListFlavorsResponse), nil
}
}
//变更规格时,部分规格的云服务器之间不能互相变更。您可以通过本接口,通过指定弹性云服务器规格,查询该规格可以变更的规格列表。
func (c *EcsClient) ListResizeFlavors(request *model.ListResizeFlavorsRequest) (*model.ListResizeFlavorsResponse, error) {
requestDef := GenReqDefForListResizeFlavors(request)
resp, responseDef := GenRespForListResizeFlavors()
requestDef := GenReqDefForListResizeFlavors()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListResizeFlavorsResponse), nil
}
}
//查询弹性云服务器挂载的磁盘信息。
func (c *EcsClient) ListServerBlockDevices(request *model.ListServerBlockDevicesRequest) (*model.ListServerBlockDevicesResponse, error) {
requestDef := GenReqDefForListServerBlockDevices(request)
resp, responseDef := GenRespForListServerBlockDevices()
requestDef := GenReqDefForListServerBlockDevices()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListServerBlockDevicesResponse), nil
}
}
//查询云服务器网卡信息。
func (c *EcsClient) ListServerInterfaces(request *model.ListServerInterfacesRequest) (*model.ListServerInterfacesResponse, error) {
requestDef := GenReqDefForListServerInterfaces(request)
resp, responseDef := GenRespForListServerInterfaces()
requestDef := GenReqDefForListServerInterfaces()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListServerInterfacesResponse), nil
}
}
//根据用户请求条件从数据库筛选、查询所有的弹性云服务器,并关联相关表获取到弹性云服务器的详细信息。 该接口支持查询弹性云服务器计费方式,以及是否被冻结。
func (c *EcsClient) ListServersDetails(request *model.ListServersDetailsRequest) (*model.ListServersDetailsResponse, error) {
requestDef := GenReqDefForListServersDetails(request)
resp, responseDef := GenRespForListServersDetails()
requestDef := GenReqDefForListServersDetails()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ListServersDetailsResponse), nil
}
}
//为弹性云服务器添加一个安全组。 添加多个安全组时建议最多为弹性云服务器添加5个安全组。
func (c *EcsClient) NovaAssociateSecurityGroup(request *model.NovaAssociateSecurityGroupRequest) (*model.NovaAssociateSecurityGroupResponse, error) {
requestDef := GenReqDefForNovaAssociateSecurityGroup(request)
resp, responseDef := GenRespForNovaAssociateSecurityGroup()
requestDef := GenReqDefForNovaAssociateSecurityGroup()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.NovaAssociateSecurityGroupResponse), nil
}
}
//创建SSH密钥或把公钥导入系统生成密钥对。 创建SSH密钥成功后请把响应数据中的私钥内容保存到本地文件用户使用该私钥登录云服务器云主机。为保证云服务器云主机器安全私钥数据只能读取一次请妥善保管。
func (c *EcsClient) NovaCreateKeypair(request *model.NovaCreateKeypairRequest) (*model.NovaCreateKeypairResponse, error) {
requestDef := GenReqDefForNovaCreateKeypair(request)
resp, responseDef := GenRespForNovaCreateKeypair()
requestDef := GenReqDefForNovaCreateKeypair()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.NovaCreateKeypairResponse), nil
}
}
//创建一台弹性云服务器。 弹性云服务器创建完成后,如需开启自动恢复功能,可以调用配置云服务器自动恢复的接口,具体使用请参见管理云服务器自动恢复动作。 该接口在云服务器创建失败后不支持自动回滚。若需要自动回滚能力可以调用POST /v1/{project_id}/cloudservers接口具体使用请参见创建云服务器按需
func (c *EcsClient) NovaCreateServers(request *model.NovaCreateServersRequest) (*model.NovaCreateServersResponse, error) {
requestDef := GenReqDefForNovaCreateServers(request)
resp, responseDef := GenRespForNovaCreateServers()
requestDef := GenReqDefForNovaCreateServers()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.NovaCreateServersResponse), nil
}
}
//根据SSH密钥的名称删除指定SSH密钥。
func (c *EcsClient) NovaDeleteKeypair(request *model.NovaDeleteKeypairRequest) (*model.NovaDeleteKeypairResponse, error) {
requestDef := GenReqDefForNovaDeleteKeypair(request)
resp, responseDef := GenRespForNovaDeleteKeypair()
requestDef := GenReqDefForNovaDeleteKeypair()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.NovaDeleteKeypairResponse), nil
}
}
//删除一台云服务器。
func (c *EcsClient) NovaDeleteServer(request *model.NovaDeleteServerRequest) (*model.NovaDeleteServerResponse, error) {
requestDef := GenReqDefForNovaDeleteServer(request)
resp, responseDef := GenRespForNovaDeleteServer()
requestDef := GenReqDefForNovaDeleteServer()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.NovaDeleteServerResponse), nil
}
}
//移除弹性云服务器中的安全组。
func (c *EcsClient) NovaDisassociateSecurityGroup(request *model.NovaDisassociateSecurityGroupRequest) (*model.NovaDisassociateSecurityGroupResponse, error) {
requestDef := GenReqDefForNovaDisassociateSecurityGroup(request)
resp, responseDef := GenRespForNovaDisassociateSecurityGroup()
requestDef := GenReqDefForNovaDisassociateSecurityGroup()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.NovaDisassociateSecurityGroupResponse), nil
}
}
//查询可用域列表。
func (c *EcsClient) NovaListAvailabilityZones(request *model.NovaListAvailabilityZonesRequest) (*model.NovaListAvailabilityZonesResponse, error) {
requestDef := GenReqDefForNovaListAvailabilityZones(request)
resp, responseDef := GenRespForNovaListAvailabilityZones()
requestDef := GenReqDefForNovaListAvailabilityZones()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.NovaListAvailabilityZonesResponse), nil
}
}
//查询SSH密钥信息列表。
func (c *EcsClient) NovaListKeypairs(request *model.NovaListKeypairsRequest) (*model.NovaListKeypairsResponse, error) {
requestDef := GenReqDefForNovaListKeypairs(request)
resp, responseDef := GenRespForNovaListKeypairs()
requestDef := GenReqDefForNovaListKeypairs()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.NovaListKeypairsResponse), nil
}
}
//查询指定弹性云服务器的安全组。
func (c *EcsClient) NovaListServerSecurityGroups(request *model.NovaListServerSecurityGroupsRequest) (*model.NovaListServerSecurityGroupsResponse, error) {
requestDef := GenReqDefForNovaListServerSecurityGroups(request)
resp, responseDef := GenRespForNovaListServerSecurityGroups()
requestDef := GenReqDefForNovaListServerSecurityGroups()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.NovaListServerSecurityGroupsResponse), nil
}
}
//查询云服务器详情信息列表。
func (c *EcsClient) NovaListServersDetails(request *model.NovaListServersDetailsRequest) (*model.NovaListServersDetailsResponse, error) {
requestDef := GenReqDefForNovaListServersDetails(request)
resp, responseDef := GenRespForNovaListServersDetails()
requestDef := GenReqDefForNovaListServersDetails()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.NovaListServersDetailsResponse), nil
}
}
//根据云服务器ID查询云服务器的详细信息。
func (c *EcsClient) NovaShowServer(request *model.NovaShowServerRequest) (*model.NovaShowServerResponse, error) {
requestDef := GenReqDefForNovaShowServer(request)
resp, responseDef := GenRespForNovaShowServer()
requestDef := GenReqDefForNovaShowServer()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.NovaShowServerResponse), nil
}
}
//重装弹性云服务器的操作系统。支持弹性云服务器数据盘不变的情况下,使用原镜像重装系统盘。 调用该接口后,系统将卸载系统盘,然后使用原镜像重新创建系统盘,并挂载至弹性云服务器,实现重装操作系统功能。
func (c *EcsClient) ReinstallServerWithCloudInit(request *model.ReinstallServerWithCloudInitRequest) (*model.ReinstallServerWithCloudInitResponse, error) {
requestDef := GenReqDefForReinstallServerWithCloudInit(request)
resp, responseDef := GenRespForReinstallServerWithCloudInit()
requestDef := GenReqDefForReinstallServerWithCloudInit()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ReinstallServerWithCloudInitResponse), nil
}
}
//重置弹性云服务器管理帐号root用户或Administrator用户的密码。
func (c *EcsClient) ResetServerPassword(request *model.ResetServerPasswordRequest) (*model.ResetServerPasswordResponse, error) {
requestDef := GenReqDefForResetServerPassword(request)
resp, responseDef := GenRespForResetServerPassword()
requestDef := GenReqDefForResetServerPassword()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ResetServerPasswordResponse), nil
}
}
//当您创建的弹性云服务器规格无法满足业务需要时可以变更云服务器规格升级vCPU、内存。具体接口的使用请参见本节内容。 变更规格时,部分规格的云服务器之间不能互相变更。 您可以通过接口“/v1/{project_id}/cloudservers/resize_flavors?{instance_uuid,source_flavor_id,source_flavor_name}”查询支持列表。
func (c *EcsClient) ResizePostPaidServer(request *model.ResizePostPaidServerRequest) (*model.ResizePostPaidServerResponse, error) {
requestDef := GenReqDefForResizePostPaidServer(request)
resp, responseDef := GenRespForResizePostPaidServer()
requestDef := GenReqDefForResizePostPaidServer()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ResizePostPaidServerResponse), nil
}
}
//变更云服务器规格。 v1.1版本指该接口兼容v1接口的功能同时合入新功能支持变更包年/包月弹性云服务器的规格。 注意事项: - 该接口可以使用合作伙伴自身的AK/SK或者token调用也可以用合作伙伴子客户的AK/SK或者token来调用。 - 如果使用AK/SK认证方式示例代码中region请参考[地区和终端节点](https://developer.huaweicloud.com/endpoint)中“弹性云服务 ECS”下“区域”的内容serviceName英文服务名称缩写请指定为ECS。 - Endpoint请参考[地区和终端节点](https://developer.huaweicloud.com/endpoint)中“弹性云服务 ECS”下“终端节点Endpoint”的内容。
func (c *EcsClient) ResizeServer(request *model.ResizeServerRequest) (*model.ResizeServerResponse, error) {
requestDef := GenReqDefForResizeServer(request)
resp, responseDef := GenRespForResizeServer()
requestDef := GenReqDefForResizeServer()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ResizeServerResponse), nil
}
}
//查询弹性云服务器是否支持一键重置密码。
func (c *EcsClient) ShowResetPasswordFlag(request *model.ShowResetPasswordFlagRequest) (*model.ShowResetPasswordFlagResponse, error) {
requestDef := GenReqDefForShowResetPasswordFlag(request)
resp, responseDef := GenRespForShowResetPasswordFlag()
requestDef := GenReqDefForShowResetPasswordFlag()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ShowResetPasswordFlagResponse), nil
}
}
//查询弹性云服务器的详细信息。 该接口支持查询弹性云服务器的计费方式,以及是否被冻结。
func (c *EcsClient) ShowServer(request *model.ShowServerRequest) (*model.ShowServerResponse, error) {
requestDef := GenReqDefForShowServer(request)
resp, responseDef := GenRespForShowServer()
requestDef := GenReqDefForShowServer()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ShowServerResponse), nil
}
}
//查询租户配额信息。
func (c *EcsClient) ShowServerLimits(request *model.ShowServerLimitsRequest) (*model.ShowServerLimitsResponse, error) {
requestDef := GenReqDefForShowServerLimits(request)
resp, responseDef := GenRespForShowServerLimits()
requestDef := GenReqDefForShowServerLimits()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ShowServerLimitsResponse), nil
}
}
//获取弹性云服务器VNC远程登录地址。
func (c *EcsClient) ShowServerRemoteConsole(request *model.ShowServerRemoteConsoleRequest) (*model.ShowServerRemoteConsoleResponse, error) {
requestDef := GenReqDefForShowServerRemoteConsole(request)
resp, responseDef := GenRespForShowServerRemoteConsole()
requestDef := GenReqDefForShowServerRemoteConsole()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ShowServerRemoteConsoleResponse), nil
}
}
//- 查询指定云服务器的标签信息。 - 标签管理服务TMS使用该接口查询指定云服务器的全部标签数据。
func (c *EcsClient) ShowServerTags(request *model.ShowServerTagsRequest) (*model.ShowServerTagsResponse, error) {
requestDef := GenReqDefForShowServerTags(request)
resp, responseDef := GenRespForShowServerTags()
requestDef := GenReqDefForShowServerTags()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ShowServerTagsResponse), nil
}
}
//修改云服务器信息目前支持修改云服务器名称及描述和hostname。
func (c *EcsClient) UpdateServer(request *model.UpdateServerRequest) (*model.UpdateServerResponse, error) {
requestDef := GenReqDefForUpdateServer(request)
resp, responseDef := GenRespForUpdateServer()
requestDef := GenReqDefForUpdateServer()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.UpdateServerResponse), nil
}
}
//更新云服务器元数据。 - 如果元数据中没有待更新字段,则自动添加该字段。 - 如果元数据中已存在待更新字段,则直接更新字段值。 - 如果元数据中的字段不再请求参数中,则保持不变
func (c *EcsClient) UpdateServerMetadata(request *model.UpdateServerMetadataRequest) (*model.UpdateServerMetadataResponse, error) {
requestDef := GenReqDefForUpdateServerMetadata(request)
resp, responseDef := GenRespForUpdateServerMetadata()
requestDef := GenReqDefForUpdateServerMetadata()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.UpdateServerMetadataResponse), nil
}
}
//查询Job的执行状态。 对于创建云服务器、删除云服务器、云服务器批量操作和网卡操作等异步API命令下发后会返回job_id通过job_id可以查询任务的执行状态。
func (c *EcsClient) ShowJob(request *model.ShowJobRequest) (*model.ShowJobResponse, error) {
requestDef := GenReqDefForShowJob(request)
resp, responseDef := GenRespForShowJob()
requestDef := GenReqDefForShowJob()
if _, err := c.hcClient.Sync(request, requestDef, responseDef); err != nil {
if resp, err := c.hcClient.Sync(request, requestDef); err != nil {
return nil, err
} else {
return resp, nil
return resp.(*model.ShowJobResponse), nil
}
}

View File

@ -121,8 +121,8 @@ func (hcp *huaweicloudCloudProvider) NodeGroupForNode(node *apiv1.Node) (cloudpr
return nil, err
}
for i := range instances {
if instanceID == instances[i].Id {
for j := range instances {
if instanceID == instances[j].Id {
pinnedGroup := hcp.autoScalingGroup[i]
return &pinnedGroup, nil
}

View File

@ -179,6 +179,11 @@ func (csm *cloudServiceManager) GetInstances(groupID string) ([]cloudprovider.In
instances := make([]cloudprovider.Instance, 0, len(*response.ScalingGroupInstances))
for _, sgi := range *response.ScalingGroupInstances {
// When a new instance joining to the scaling group, the instance id maybe empty(nil).
if sgi.InstanceId == nil {
klog.Infof("ignore instance without instance id, maybe instance is joining.")
continue
}
instance := cloudprovider.Instance{
Id: *sgi.InstanceId,
Status: csm.transformInstanceState(*sgi.LifeCycleState, *sgi.HealthStatus),
@ -266,9 +271,9 @@ func (csm *cloudServiceManager) ListScalingGroups() ([]AutoScalingGroup, error)
return nil, fmt.Errorf("failed to list scaling groups due to can not get as client")
}
requiredState := huaweicloudsdkasmodel.GetListScalingGroupsRequestScalingGroupStatusEnum().INSERVICE
// requiredState := huaweicloudsdkasmodel.GetListScalingGroupsRequestScalingGroupStatusEnum().INSERVICE
opts := &huaweicloudsdkasmodel.ListScalingGroupsRequest{
ScalingGroupStatus: &requiredState,
// ScalingGroupStatus: &requiredState,
}
response, err := asClient.ListScalingGroups(opts)
if err != nil {