Explorar el Código

Add CreateStorageSet api to support storageSet.

sdk-team hace 6 años
padre
commit
e9799f0e93

+ 10 - 0
ChangeLog.txt

@@ -1,3 +1,13 @@
+2019-08-08 Version: 1.60.94
+- Add CreateStorageSet api to support storageSet.
+- Add DeleteStorageSet api to support storageSet.
+- Add ModifyStorageSetAttribute api to support storageSet.
+- Add DescribeStorageSets api to support storageSet.
+- Add DescribeStorageSetDetails api to support storageSet.
+- Add parameter StorageSetId,StorageSetPartitionNumber to api CreateDisk,RunInstances,CreateInstance support storageSet.
+- Add StorageSetId,StorageSetPartitionNumber with response of api DescribeDisks.
+- Add DescribeNetworkInterfaces to support filter by PrivateIpAddress.
+
 2019-08-08 Version: 1.60.93
 2019-08-08 Version: 1.60.93
 - Group, Plugin support tag authentication.
 - Group, Plugin support tag authentication.
 
 

+ 25 - 0
services/ecs/client.go

@@ -16,6 +16,8 @@ package ecs
 // Changes may cause incorrect behavior and will be lost if the code is regenerated.
 // Changes may cause incorrect behavior and will be lost if the code is regenerated.
 
 
 import (
 import (
+	"reflect"
+
 	"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
 	"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
 	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth"
 	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth"
 	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials/provider"
 	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials/provider"
@@ -26,10 +28,25 @@ type Client struct {
 	sdk.Client
 	sdk.Client
 }
 }
 
 
+// SetClientProperty Set Property by Reflect
+func SetClientProperty(client *Client, propertyName string, propertyValue interface{}) {
+	v := reflect.ValueOf(client).Elem()
+	if v.FieldByName(propertyName).IsValid() && v.FieldByName(propertyName).CanSet() {
+		v.FieldByName(propertyName).Set(reflect.ValueOf(propertyValue))
+	}
+}
+
+// SetEndpointDataToClient Set EndpointMap and ENdpointType
+func SetEndpointDataToClient(client *Client) {
+	SetClientProperty(client, "EndpointMap", GetEndpointMap())
+	SetClientProperty(client, "EndpointType", GetEndpointType())
+}
+
 // NewClient creates a sdk client with environment variables
 // NewClient creates a sdk client with environment variables
 func NewClient() (client *Client, err error) {
 func NewClient() (client *Client, err error) {
 	client = &Client{}
 	client = &Client{}
 	err = client.Init()
 	err = client.Init()
+	SetEndpointDataToClient(client)
 	return
 	return
 }
 }
 
 
@@ -44,6 +61,7 @@ func NewClientWithProvider(regionId string, providers ...provider.Provider) (cli
 		pc = provider.NewProviderChain(providers)
 		pc = provider.NewProviderChain(providers)
 	}
 	}
 	err = client.InitWithProviderChain(regionId, pc)
 	err = client.InitWithProviderChain(regionId, pc)
+	SetEndpointDataToClient(client)
 	return
 	return
 }
 }
 
 
@@ -52,6 +70,7 @@ func NewClientWithProvider(regionId string, providers ...provider.Provider) (cli
 func NewClientWithOptions(regionId string, config *sdk.Config, credential auth.Credential) (client *Client, err error) {
 func NewClientWithOptions(regionId string, config *sdk.Config, credential auth.Credential) (client *Client, err error) {
 	client = &Client{}
 	client = &Client{}
 	err = client.InitWithOptions(regionId, config, credential)
 	err = client.InitWithOptions(regionId, config, credential)
+	SetEndpointDataToClient(client)
 	return
 	return
 }
 }
 
 
@@ -60,6 +79,7 @@ func NewClientWithOptions(regionId string, config *sdk.Config, credential auth.C
 func NewClientWithAccessKey(regionId, accessKeyId, accessKeySecret string) (client *Client, err error) {
 func NewClientWithAccessKey(regionId, accessKeyId, accessKeySecret string) (client *Client, err error) {
 	client = &Client{}
 	client = &Client{}
 	err = client.InitWithAccessKey(regionId, accessKeyId, accessKeySecret)
 	err = client.InitWithAccessKey(regionId, accessKeyId, accessKeySecret)
+	SetEndpointDataToClient(client)
 	return
 	return
 }
 }
 
 
@@ -68,6 +88,7 @@ func NewClientWithAccessKey(regionId, accessKeyId, accessKeySecret string) (clie
 func NewClientWithStsToken(regionId, stsAccessKeyId, stsAccessKeySecret, stsToken string) (client *Client, err error) {
 func NewClientWithStsToken(regionId, stsAccessKeyId, stsAccessKeySecret, stsToken string) (client *Client, err error) {
 	client = &Client{}
 	client = &Client{}
 	err = client.InitWithStsToken(regionId, stsAccessKeyId, stsAccessKeySecret, stsToken)
 	err = client.InitWithStsToken(regionId, stsAccessKeyId, stsAccessKeySecret, stsToken)
+	SetEndpointDataToClient(client)
 	return
 	return
 }
 }
 
 
@@ -76,6 +97,7 @@ func NewClientWithStsToken(regionId, stsAccessKeyId, stsAccessKeySecret, stsToke
 func NewClientWithRamRoleArn(regionId string, accessKeyId, accessKeySecret, roleArn, roleSessionName string) (client *Client, err error) {
 func NewClientWithRamRoleArn(regionId string, accessKeyId, accessKeySecret, roleArn, roleSessionName string) (client *Client, err error) {
 	client = &Client{}
 	client = &Client{}
 	err = client.InitWithRamRoleArn(regionId, accessKeyId, accessKeySecret, roleArn, roleSessionName)
 	err = client.InitWithRamRoleArn(regionId, accessKeyId, accessKeySecret, roleArn, roleSessionName)
+	SetEndpointDataToClient(client)
 	return
 	return
 }
 }
 
 
@@ -84,6 +106,7 @@ func NewClientWithRamRoleArn(regionId string, accessKeyId, accessKeySecret, role
 func NewClientWithRamRoleArnAndPolicy(regionId string, accessKeyId, accessKeySecret, roleArn, roleSessionName, policy string) (client *Client, err error) {
 func NewClientWithRamRoleArnAndPolicy(regionId string, accessKeyId, accessKeySecret, roleArn, roleSessionName, policy string) (client *Client, err error) {
 	client = &Client{}
 	client = &Client{}
 	err = client.InitWithRamRoleArnAndPolicy(regionId, accessKeyId, accessKeySecret, roleArn, roleSessionName, policy)
 	err = client.InitWithRamRoleArnAndPolicy(regionId, accessKeyId, accessKeySecret, roleArn, roleSessionName, policy)
+	SetEndpointDataToClient(client)
 	return
 	return
 }
 }
 
 
@@ -92,6 +115,7 @@ func NewClientWithRamRoleArnAndPolicy(regionId string, accessKeyId, accessKeySec
 func NewClientWithEcsRamRole(regionId string, roleName string) (client *Client, err error) {
 func NewClientWithEcsRamRole(regionId string, roleName string) (client *Client, err error) {
 	client = &Client{}
 	client = &Client{}
 	err = client.InitWithEcsRamRole(regionId, roleName)
 	err = client.InitWithEcsRamRole(regionId, roleName)
+	SetEndpointDataToClient(client)
 	return
 	return
 }
 }
 
 
@@ -100,5 +124,6 @@ func NewClientWithEcsRamRole(regionId string, roleName string) (client *Client,
 func NewClientWithRsaKeyPair(regionId string, publicKeyId, privateKey string, sessionExpiration int) (client *Client, err error) {
 func NewClientWithRsaKeyPair(regionId string, publicKeyId, privateKey string, sessionExpiration int) (client *Client, err error) {
 	client = &Client{}
 	client = &Client{}
 	err = client.InitWithRsaKeyPair(regionId, publicKeyId, privateKey, sessionExpiration)
 	err = client.InitWithRsaKeyPair(regionId, publicKeyId, privateKey, sessionExpiration)
+	SetEndpointDataToClient(client)
 	return
 	return
 }
 }

+ 21 - 19
services/ecs/create_disk.go

@@ -76,25 +76,27 @@ func (client *Client) CreateDiskWithCallback(request *CreateDiskRequest, callbac
 // CreateDiskRequest is the request struct for api CreateDisk
 // CreateDiskRequest is the request struct for api CreateDisk
 type CreateDiskRequest struct {
 type CreateDiskRequest struct {
 	*requests.RpcRequest
 	*requests.RpcRequest
-	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
-	SnapshotId           string           `position:"Query" name:"SnapshotId"`
-	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
-	ClientToken          string           `position:"Query" name:"ClientToken"`
-	PerformanceLevel     string           `position:"Query" name:"PerformanceLevel"`
-	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
-	Description          string           `position:"Query" name:"Description"`
-	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
-	DiskName             string           `position:"Query" name:"DiskName"`
-	ResourceGroupId      string           `position:"Query" name:"ResourceGroupId"`
-	InstanceId           string           `position:"Query" name:"InstanceId"`
-	Size                 requests.Integer `position:"Query" name:"Size"`
-	Encrypted            requests.Boolean `position:"Query" name:"Encrypted"`
-	DiskCategory         string           `position:"Query" name:"DiskCategory"`
-	ZoneId               string           `position:"Query" name:"ZoneId"`
-	Tag                  *[]CreateDiskTag `position:"Query" name:"Tag"  type:"Repeated"`
-	Arn                  *[]CreateDiskArn `position:"Query" name:"Arn"  type:"Repeated"`
-	KMSKeyId             string           `position:"Query" name:"KMSKeyId"`
-	AdvancedFeatures     string           `position:"Query" name:"AdvancedFeatures"`
+	ResourceOwnerId           requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	SnapshotId                string           `position:"Query" name:"SnapshotId"`
+	ResourceOwnerAccount      string           `position:"Query" name:"ResourceOwnerAccount"`
+	ClientToken               string           `position:"Query" name:"ClientToken"`
+	PerformanceLevel          string           `position:"Query" name:"PerformanceLevel"`
+	OwnerAccount              string           `position:"Query" name:"OwnerAccount"`
+	Description               string           `position:"Query" name:"Description"`
+	OwnerId                   requests.Integer `position:"Query" name:"OwnerId"`
+	DiskName                  string           `position:"Query" name:"DiskName"`
+	ResourceGroupId           string           `position:"Query" name:"ResourceGroupId"`
+	InstanceId                string           `position:"Query" name:"InstanceId"`
+	StorageSetId              string           `position:"Query" name:"StorageSetId"`
+	Size                      requests.Integer `position:"Query" name:"Size"`
+	Encrypted                 requests.Boolean `position:"Query" name:"Encrypted"`
+	DiskCategory              string           `position:"Query" name:"DiskCategory"`
+	ZoneId                    string           `position:"Query" name:"ZoneId"`
+	StorageSetPartitionNumber requests.Integer `position:"Query" name:"StorageSetPartitionNumber"`
+	Tag                       *[]CreateDiskTag `position:"Query" name:"Tag"  type:"Repeated"`
+	Arn                       *[]CreateDiskArn `position:"Query" name:"Arn"  type:"Repeated"`
+	KMSKeyId                  string           `position:"Query" name:"KMSKeyId"`
+	AdvancedFeatures          string           `position:"Query" name:"AdvancedFeatures"`
 }
 }
 
 
 // CreateDiskTag is a repeated param struct in CreateDiskRequest
 // CreateDiskTag is a repeated param struct in CreateDiskRequest

+ 2 - 0
services/ecs/create_instance.go

@@ -85,6 +85,7 @@ type CreateInstanceRequest struct {
 	ResourceGroupId               string                    `position:"Query" name:"ResourceGroupId"`
 	ResourceGroupId               string                    `position:"Query" name:"ResourceGroupId"`
 	HostName                      string                    `position:"Query" name:"HostName"`
 	HostName                      string                    `position:"Query" name:"HostName"`
 	Password                      string                    `position:"Query" name:"Password"`
 	Password                      string                    `position:"Query" name:"Password"`
+	StorageSetPartitionNumber     requests.Integer          `position:"Query" name:"StorageSetPartitionNumber"`
 	Tag                           *[]CreateInstanceTag      `position:"Query" name:"Tag"  type:"Repeated"`
 	Tag                           *[]CreateInstanceTag      `position:"Query" name:"Tag"  type:"Repeated"`
 	AutoRenewPeriod               requests.Integer          `position:"Query" name:"AutoRenewPeriod"`
 	AutoRenewPeriod               requests.Integer          `position:"Query" name:"AutoRenewPeriod"`
 	NodeControllerId              string                    `position:"Query" name:"NodeControllerId"`
 	NodeControllerId              string                    `position:"Query" name:"NodeControllerId"`
@@ -130,6 +131,7 @@ type CreateInstanceRequest struct {
 	ClusterId                     string                    `position:"Query" name:"ClusterId"`
 	ClusterId                     string                    `position:"Query" name:"ClusterId"`
 	CreditSpecification           string                    `position:"Query" name:"CreditSpecification"`
 	CreditSpecification           string                    `position:"Query" name:"CreditSpecification"`
 	DataDisk                      *[]CreateInstanceDataDisk `position:"Query" name:"DataDisk"  type:"Repeated"`
 	DataDisk                      *[]CreateInstanceDataDisk `position:"Query" name:"DataDisk"  type:"Repeated"`
+	StorageSetId                  string                    `position:"Query" name:"StorageSetId"`
 	SystemDiskSize                requests.Integer          `position:"Query" name:"SystemDisk.Size"`
 	SystemDiskSize                requests.Integer          `position:"Query" name:"SystemDisk.Size"`
 	SystemDiskDescription         string                    `position:"Query" name:"SystemDisk.Description"`
 	SystemDiskDescription         string                    `position:"Query" name:"SystemDisk.Description"`
 }
 }

+ 5 - 2
services/ecs/create_snapshot.go

@@ -81,11 +81,14 @@ type CreateSnapshotRequest struct {
 	ClientToken          string               `position:"Query" name:"ClientToken"`
 	ClientToken          string               `position:"Query" name:"ClientToken"`
 	OwnerAccount         string               `position:"Query" name:"OwnerAccount"`
 	OwnerAccount         string               `position:"Query" name:"OwnerAccount"`
 	Description          string               `position:"Query" name:"Description"`
 	Description          string               `position:"Query" name:"Description"`
-	DiskId               string               `position:"Query" name:"DiskId"`
 	SnapshotName         string               `position:"Query" name:"SnapshotName"`
 	SnapshotName         string               `position:"Query" name:"SnapshotName"`
+	OwnerId              requests.Integer     `position:"Query" name:"OwnerId"`
+	SourceSnapshotId     string               `position:"Query" name:"SourceSnapshotId"`
+	RemoveSourceSnapshot requests.Boolean     `position:"Query" name:"RemoveSourceSnapshot"`
+	DiskId               string               `position:"Query" name:"DiskId"`
 	RetentionDays        requests.Integer     `position:"Query" name:"RetentionDays"`
 	RetentionDays        requests.Integer     `position:"Query" name:"RetentionDays"`
 	Tag                  *[]CreateSnapshotTag `position:"Query" name:"Tag"  type:"Repeated"`
 	Tag                  *[]CreateSnapshotTag `position:"Query" name:"Tag"  type:"Repeated"`
-	OwnerId              requests.Integer     `position:"Query" name:"OwnerId"`
+	Category             string               `position:"Query" name:"Category"`
 }
 }
 
 
 // CreateSnapshotTag is a repeated param struct in CreateSnapshotRequest
 // CreateSnapshotTag is a repeated param struct in CreateSnapshotRequest

+ 112 - 0
services/ecs/create_storage_set.go

@@ -0,0 +1,112 @@
+package ecs
+
+//Licensed 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.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// CreateStorageSet invokes the ecs.CreateStorageSet API synchronously
+// api document: https://help.aliyun.com/api/ecs/createstorageset.html
+func (client *Client) CreateStorageSet(request *CreateStorageSetRequest) (response *CreateStorageSetResponse, err error) {
+	response = CreateCreateStorageSetResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// CreateStorageSetWithChan invokes the ecs.CreateStorageSet API asynchronously
+// api document: https://help.aliyun.com/api/ecs/createstorageset.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) CreateStorageSetWithChan(request *CreateStorageSetRequest) (<-chan *CreateStorageSetResponse, <-chan error) {
+	responseChan := make(chan *CreateStorageSetResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.CreateStorageSet(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// CreateStorageSetWithCallback invokes the ecs.CreateStorageSet API asynchronously
+// api document: https://help.aliyun.com/api/ecs/createstorageset.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) CreateStorageSetWithCallback(request *CreateStorageSetRequest, callback func(response *CreateStorageSetResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *CreateStorageSetResponse
+		var err error
+		defer close(result)
+		response, err = client.CreateStorageSet(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// CreateStorageSetRequest is the request struct for api CreateStorageSet
+type CreateStorageSetRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ClientToken          string           `position:"Query" name:"ClientToken"`
+	MaxPartitionNumber   requests.Integer `position:"Query" name:"MaxPartitionNumber"`
+	Description          string           `position:"Query" name:"Description"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	ZoneId               string           `position:"Query" name:"ZoneId"`
+	StorageSetName       string           `position:"Query" name:"StorageSetName"`
+}
+
+// CreateStorageSetResponse is the response struct for api CreateStorageSet
+type CreateStorageSetResponse struct {
+	*responses.BaseResponse
+	RequestId    string `json:"RequestId" xml:"RequestId"`
+	StorageSetId string `json:"StorageSetId" xml:"StorageSetId"`
+}
+
+// CreateCreateStorageSetRequest creates a request to invoke CreateStorageSet API
+func CreateCreateStorageSetRequest() (request *CreateStorageSetRequest) {
+	request = &CreateStorageSetRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Ecs", "2014-05-26", "CreateStorageSet", "ecs", "openAPI")
+	return
+}
+
+// CreateCreateStorageSetResponse creates a response to parse from CreateStorageSet response
+func CreateCreateStorageSetResponse() (response *CreateStorageSetResponse) {
+	response = &CreateStorageSetResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 111 - 0
services/ecs/delete_instances.go

@@ -0,0 +1,111 @@
+package ecs
+
+//Licensed 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.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DeleteInstances invokes the ecs.DeleteInstances API synchronously
+// api document: https://help.aliyun.com/api/ecs/deleteinstances.html
+func (client *Client) DeleteInstances(request *DeleteInstancesRequest) (response *DeleteInstancesResponse, err error) {
+	response = CreateDeleteInstancesResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DeleteInstancesWithChan invokes the ecs.DeleteInstances API asynchronously
+// api document: https://help.aliyun.com/api/ecs/deleteinstances.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteInstancesWithChan(request *DeleteInstancesRequest) (<-chan *DeleteInstancesResponse, <-chan error) {
+	responseChan := make(chan *DeleteInstancesResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DeleteInstances(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DeleteInstancesWithCallback invokes the ecs.DeleteInstances API asynchronously
+// api document: https://help.aliyun.com/api/ecs/deleteinstances.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteInstancesWithCallback(request *DeleteInstancesRequest, callback func(response *DeleteInstancesResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DeleteInstancesResponse
+		var err error
+		defer close(result)
+		response, err = client.DeleteInstances(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DeleteInstancesRequest is the request struct for api DeleteInstances
+type DeleteInstancesRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId       requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	InstanceId            *[]string        `position:"Query" name:"InstanceId"  type:"Repeated"`
+	DryRun                requests.Boolean `position:"Query" name:"DryRun"`
+	ResourceOwnerAccount  string           `position:"Query" name:"ResourceOwnerAccount"`
+	ClientToken           string           `position:"Query" name:"ClientToken"`
+	OwnerAccount          string           `position:"Query" name:"OwnerAccount"`
+	TerminateSubscription requests.Boolean `position:"Query" name:"TerminateSubscription"`
+	Force                 requests.Boolean `position:"Query" name:"Force"`
+	OwnerId               requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// DeleteInstancesResponse is the response struct for api DeleteInstances
+type DeleteInstancesResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateDeleteInstancesRequest creates a request to invoke DeleteInstances API
+func CreateDeleteInstancesRequest() (request *DeleteInstancesRequest) {
+	request = &DeleteInstancesRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Ecs", "2014-05-26", "DeleteInstances", "ecs", "openAPI")
+	return
+}
+
+// CreateDeleteInstancesResponse creates a response to parse from DeleteInstances response
+func CreateDeleteInstancesResponse() (response *DeleteInstancesResponse) {
+	response = &DeleteInstancesResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 108 - 0
services/ecs/delete_storage_set.go

@@ -0,0 +1,108 @@
+package ecs
+
+//Licensed 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.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DeleteStorageSet invokes the ecs.DeleteStorageSet API synchronously
+// api document: https://help.aliyun.com/api/ecs/deletestorageset.html
+func (client *Client) DeleteStorageSet(request *DeleteStorageSetRequest) (response *DeleteStorageSetResponse, err error) {
+	response = CreateDeleteStorageSetResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DeleteStorageSetWithChan invokes the ecs.DeleteStorageSet API asynchronously
+// api document: https://help.aliyun.com/api/ecs/deletestorageset.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteStorageSetWithChan(request *DeleteStorageSetRequest) (<-chan *DeleteStorageSetResponse, <-chan error) {
+	responseChan := make(chan *DeleteStorageSetResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DeleteStorageSet(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DeleteStorageSetWithCallback invokes the ecs.DeleteStorageSet API asynchronously
+// api document: https://help.aliyun.com/api/ecs/deletestorageset.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteStorageSetWithCallback(request *DeleteStorageSetRequest, callback func(response *DeleteStorageSetResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DeleteStorageSetResponse
+		var err error
+		defer close(result)
+		response, err = client.DeleteStorageSet(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DeleteStorageSetRequest is the request struct for api DeleteStorageSet
+type DeleteStorageSetRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ClientToken          string           `position:"Query" name:"ClientToken"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	StorageSetId         string           `position:"Query" name:"StorageSetId"`
+}
+
+// DeleteStorageSetResponse is the response struct for api DeleteStorageSet
+type DeleteStorageSetResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateDeleteStorageSetRequest creates a request to invoke DeleteStorageSet API
+func CreateDeleteStorageSetRequest() (request *DeleteStorageSetRequest) {
+	request = &DeleteStorageSetRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Ecs", "2014-05-26", "DeleteStorageSet", "ecs", "openAPI")
+	return
+}
+
+// CreateDeleteStorageSetResponse creates a response to parse from DeleteStorageSet response
+func CreateDeleteStorageSetResponse() (response *DeleteStorageSetResponse) {
+	response = &DeleteStorageSetResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 5 - 5
services/ecs/describe_disks.go

@@ -120,11 +120,11 @@ type DescribeDisksTag struct {
 // DescribeDisksResponse is the response struct for api DescribeDisks
 // DescribeDisksResponse is the response struct for api DescribeDisks
 type DescribeDisksResponse struct {
 type DescribeDisksResponse struct {
 	*responses.BaseResponse
 	*responses.BaseResponse
-	RequestId  string `json:"RequestId" xml:"RequestId"`
-	TotalCount int    `json:"TotalCount" xml:"TotalCount"`
-	PageNumber int    `json:"PageNumber" xml:"PageNumber"`
-	PageSize   int    `json:"PageSize" xml:"PageSize"`
-	Disks      Disks  `json:"Disks" xml:"Disks"`
+	RequestId  string               `json:"RequestId" xml:"RequestId"`
+	TotalCount int                  `json:"TotalCount" xml:"TotalCount"`
+	PageNumber int                  `json:"PageNumber" xml:"PageNumber"`
+	PageSize   int                  `json:"PageSize" xml:"PageSize"`
+	Disks      DisksInDescribeDisks `json:"Disks" xml:"Disks"`
 }
 }
 
 
 // CreateDescribeDisksRequest creates a request to invoke DescribeDisks API
 // CreateDescribeDisksRequest creates a request to invoke DescribeDisks API

+ 1 - 0
services/ecs/describe_invocation_results.go

@@ -86,6 +86,7 @@ type DescribeInvocationResultsRequest struct {
 	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
 	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
 	InstanceId           string           `position:"Query" name:"InstanceId"`
 	InstanceId           string           `position:"Query" name:"InstanceId"`
 	InvokeRecordStatus   string           `position:"Query" name:"InvokeRecordStatus"`
 	InvokeRecordStatus   string           `position:"Query" name:"InvokeRecordStatus"`
+	IncludeHistory       requests.Boolean `position:"Query" name:"IncludeHistory"`
 }
 }
 
 
 // DescribeInvocationResultsResponse is the response struct for api DescribeInvocationResults
 // DescribeInvocationResultsResponse is the response struct for api DescribeInvocationResults

+ 1 - 0
services/ecs/describe_network_interfaces.go

@@ -89,6 +89,7 @@ type DescribeNetworkInterfacesRequest struct {
 	OwnerAccount         string                          `position:"Query" name:"OwnerAccount"`
 	OwnerAccount         string                          `position:"Query" name:"OwnerAccount"`
 	OwnerId              requests.Integer                `position:"Query" name:"OwnerId"`
 	OwnerId              requests.Integer                `position:"Query" name:"OwnerId"`
 	VSwitchId            string                          `position:"Query" name:"VSwitchId"`
 	VSwitchId            string                          `position:"Query" name:"VSwitchId"`
+	PrivateIpAddress     *[]string                       `position:"Query" name:"PrivateIpAddress"  type:"Repeated"`
 	InstanceId           string                          `position:"Query" name:"InstanceId"`
 	InstanceId           string                          `position:"Query" name:"InstanceId"`
 	VpcId                string                          `position:"Query" name:"VpcId"`
 	VpcId                string                          `position:"Query" name:"VpcId"`
 	PrimaryIpAddress     string                          `position:"Query" name:"PrimaryIpAddress"`
 	PrimaryIpAddress     string                          `position:"Query" name:"PrimaryIpAddress"`

+ 116 - 0
services/ecs/describe_storage_set_details.go

@@ -0,0 +1,116 @@
+package ecs
+
+//Licensed 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.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DescribeStorageSetDetails invokes the ecs.DescribeStorageSetDetails API synchronously
+// api document: https://help.aliyun.com/api/ecs/describestoragesetdetails.html
+func (client *Client) DescribeStorageSetDetails(request *DescribeStorageSetDetailsRequest) (response *DescribeStorageSetDetailsResponse, err error) {
+	response = CreateDescribeStorageSetDetailsResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DescribeStorageSetDetailsWithChan invokes the ecs.DescribeStorageSetDetails API asynchronously
+// api document: https://help.aliyun.com/api/ecs/describestoragesetdetails.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeStorageSetDetailsWithChan(request *DescribeStorageSetDetailsRequest) (<-chan *DescribeStorageSetDetailsResponse, <-chan error) {
+	responseChan := make(chan *DescribeStorageSetDetailsResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DescribeStorageSetDetails(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DescribeStorageSetDetailsWithCallback invokes the ecs.DescribeStorageSetDetails API asynchronously
+// api document: https://help.aliyun.com/api/ecs/describestoragesetdetails.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeStorageSetDetailsWithCallback(request *DescribeStorageSetDetailsRequest, callback func(response *DescribeStorageSetDetailsResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DescribeStorageSetDetailsResponse
+		var err error
+		defer close(result)
+		response, err = client.DescribeStorageSetDetails(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DescribeStorageSetDetailsRequest is the request struct for api DescribeStorageSetDetails
+type DescribeStorageSetDetailsRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId           requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ClientToken               string           `position:"Query" name:"ClientToken"`
+	PageNumber                requests.Integer `position:"Query" name:"PageNumber"`
+	PageSize                  requests.Integer `position:"Query" name:"PageSize"`
+	StorageSetPartitionNumber requests.Integer `position:"Query" name:"StorageSetPartitionNumber"`
+	DiskIds                   string           `position:"Query" name:"DiskIds"`
+	ResourceOwnerAccount      string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount              string           `position:"Query" name:"OwnerAccount"`
+	OwnerId                   requests.Integer `position:"Query" name:"OwnerId"`
+	StorageSetId              string           `position:"Query" name:"StorageSetId"`
+}
+
+// DescribeStorageSetDetailsResponse is the response struct for api DescribeStorageSetDetails
+type DescribeStorageSetDetailsResponse struct {
+	*responses.BaseResponse
+	RequestId  string                           `json:"RequestId" xml:"RequestId"`
+	TotalCount int                              `json:"TotalCount" xml:"TotalCount"`
+	PageNumber int                              `json:"PageNumber" xml:"PageNumber"`
+	PageSize   int                              `json:"PageSize" xml:"PageSize"`
+	Disks      DisksInDescribeStorageSetDetails `json:"Disks" xml:"Disks"`
+}
+
+// CreateDescribeStorageSetDetailsRequest creates a request to invoke DescribeStorageSetDetails API
+func CreateDescribeStorageSetDetailsRequest() (request *DescribeStorageSetDetailsRequest) {
+	request = &DescribeStorageSetDetailsRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Ecs", "2014-05-26", "DescribeStorageSetDetails", "ecs", "openAPI")
+	return
+}
+
+// CreateDescribeStorageSetDetailsResponse creates a response to parse from DescribeStorageSetDetails response
+func CreateDescribeStorageSetDetailsResponse() (response *DescribeStorageSetDetailsResponse) {
+	response = &DescribeStorageSetDetailsResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 116 - 0
services/ecs/describe_storage_sets.go

@@ -0,0 +1,116 @@
+package ecs
+
+//Licensed 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.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DescribeStorageSets invokes the ecs.DescribeStorageSets API synchronously
+// api document: https://help.aliyun.com/api/ecs/describestoragesets.html
+func (client *Client) DescribeStorageSets(request *DescribeStorageSetsRequest) (response *DescribeStorageSetsResponse, err error) {
+	response = CreateDescribeStorageSetsResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DescribeStorageSetsWithChan invokes the ecs.DescribeStorageSets API asynchronously
+// api document: https://help.aliyun.com/api/ecs/describestoragesets.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeStorageSetsWithChan(request *DescribeStorageSetsRequest) (<-chan *DescribeStorageSetsResponse, <-chan error) {
+	responseChan := make(chan *DescribeStorageSetsResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DescribeStorageSets(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DescribeStorageSetsWithCallback invokes the ecs.DescribeStorageSets API asynchronously
+// api document: https://help.aliyun.com/api/ecs/describestoragesets.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeStorageSetsWithCallback(request *DescribeStorageSetsRequest, callback func(response *DescribeStorageSetsResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DescribeStorageSetsResponse
+		var err error
+		defer close(result)
+		response, err = client.DescribeStorageSets(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DescribeStorageSetsRequest is the request struct for api DescribeStorageSets
+type DescribeStorageSetsRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ClientToken          string           `position:"Query" name:"ClientToken"`
+	StorageSetIds        string           `position:"Query" name:"StorageSetIds"`
+	PageNumber           requests.Integer `position:"Query" name:"PageNumber"`
+	PageSize             requests.Integer `position:"Query" name:"PageSize"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	ZoneId               string           `position:"Query" name:"ZoneId"`
+	StorageSetName       string           `position:"Query" name:"StorageSetName"`
+}
+
+// DescribeStorageSetsResponse is the response struct for api DescribeStorageSets
+type DescribeStorageSetsResponse struct {
+	*responses.BaseResponse
+	RequestId   string      `json:"RequestId" xml:"RequestId"`
+	TotalCount  int         `json:"TotalCount" xml:"TotalCount"`
+	PageNumber  int         `json:"PageNumber" xml:"PageNumber"`
+	PageSize    int         `json:"PageSize" xml:"PageSize"`
+	StorageSets StorageSets `json:"StorageSets" xml:"StorageSets"`
+}
+
+// CreateDescribeStorageSetsRequest creates a request to invoke DescribeStorageSets API
+func CreateDescribeStorageSetsRequest() (request *DescribeStorageSetsRequest) {
+	request = &DescribeStorageSetsRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Ecs", "2014-05-26", "DescribeStorageSets", "ecs", "openAPI")
+	return
+}
+
+// CreateDescribeStorageSetsResponse creates a response to parse from DescribeStorageSets response
+func CreateDescribeStorageSetsResponse() (response *DescribeStorageSetsResponse) {
+	response = &DescribeStorageSetsResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 30 - 0
services/ecs/endpoint.go

@@ -0,0 +1,30 @@
+package ecs
+
+// EndpointMap Endpoint Data
+var EndpointMap map[string]string
+
+// EndpointType regional or central
+var EndpointType = "regional"
+
+// GetEndpointMap Get Endpoint Data Map
+func GetEndpointMap() map[string]string {
+	if EndpointMap == nil {
+		EndpointMap = map[string]string{
+			"cn-shenzhen":    "ecs-cn-hangzhou.aliyuncs.com",
+			"cn-qingdao":     "ecs-cn-hangzhou.aliyuncs.com",
+			"cn-beijing":     "ecs-cn-hangzhou.aliyuncs.com",
+			"cn-shanghai":    "ecs-cn-hangzhou.aliyuncs.com",
+			"cn-hongkong":    "ecs-cn-hangzhou.aliyuncs.com",
+			"ap-southeast-1": "ecs-cn-hangzhou.aliyuncs.com",
+			"us-east-1":      "ecs-cn-hangzhou.aliyuncs.com",
+			"us-west-1":      "ecs-cn-hangzhou.aliyuncs.com",
+			"cn-hangzhou":    "ecs-cn-hangzhou.aliyuncs.com",
+		}
+	}
+	return EndpointMap
+}
+
+// GetEndpointType Get Endpoint Type Value
+func GetEndpointType() string {
+	return EndpointType
+}

+ 4 - 2
services/ecs/modify_instance_charge_type.go

@@ -87,14 +87,16 @@ type ModifyInstanceChargeTypeRequest struct {
 	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
 	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
 	PeriodUnit           string           `position:"Query" name:"PeriodUnit"`
 	PeriodUnit           string           `position:"Query" name:"PeriodUnit"`
 	InstanceIds          string           `position:"Query" name:"InstanceIds"`
 	InstanceIds          string           `position:"Query" name:"InstanceIds"`
+	IsDetailFee          requests.Boolean `position:"Query" name:"IsDetailFee"`
 	InstanceChargeType   string           `position:"Query" name:"InstanceChargeType"`
 	InstanceChargeType   string           `position:"Query" name:"InstanceChargeType"`
 }
 }
 
 
 // ModifyInstanceChargeTypeResponse is the response struct for api ModifyInstanceChargeType
 // ModifyInstanceChargeTypeResponse is the response struct for api ModifyInstanceChargeType
 type ModifyInstanceChargeTypeResponse struct {
 type ModifyInstanceChargeTypeResponse struct {
 	*responses.BaseResponse
 	*responses.BaseResponse
-	RequestId string `json:"RequestId" xml:"RequestId"`
-	OrderId   string `json:"OrderId" xml:"OrderId"`
+	RequestId      string         `json:"RequestId" xml:"RequestId"`
+	OrderId        string         `json:"OrderId" xml:"OrderId"`
+	FeeOfInstances FeeOfInstances `json:"FeeOfInstances" xml:"FeeOfInstances"`
 }
 }
 
 
 // CreateModifyInstanceChargeTypeRequest creates a request to invoke ModifyInstanceChargeType API
 // CreateModifyInstanceChargeTypeRequest creates a request to invoke ModifyInstanceChargeType API

+ 110 - 0
services/ecs/modify_storage_set_attribute.go

@@ -0,0 +1,110 @@
+package ecs
+
+//Licensed 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.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// ModifyStorageSetAttribute invokes the ecs.ModifyStorageSetAttribute API synchronously
+// api document: https://help.aliyun.com/api/ecs/modifystoragesetattribute.html
+func (client *Client) ModifyStorageSetAttribute(request *ModifyStorageSetAttributeRequest) (response *ModifyStorageSetAttributeResponse, err error) {
+	response = CreateModifyStorageSetAttributeResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// ModifyStorageSetAttributeWithChan invokes the ecs.ModifyStorageSetAttribute API asynchronously
+// api document: https://help.aliyun.com/api/ecs/modifystoragesetattribute.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ModifyStorageSetAttributeWithChan(request *ModifyStorageSetAttributeRequest) (<-chan *ModifyStorageSetAttributeResponse, <-chan error) {
+	responseChan := make(chan *ModifyStorageSetAttributeResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.ModifyStorageSetAttribute(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// ModifyStorageSetAttributeWithCallback invokes the ecs.ModifyStorageSetAttribute API asynchronously
+// api document: https://help.aliyun.com/api/ecs/modifystoragesetattribute.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ModifyStorageSetAttributeWithCallback(request *ModifyStorageSetAttributeRequest, callback func(response *ModifyStorageSetAttributeResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *ModifyStorageSetAttributeResponse
+		var err error
+		defer close(result)
+		response, err = client.ModifyStorageSetAttribute(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// ModifyStorageSetAttributeRequest is the request struct for api ModifyStorageSetAttribute
+type ModifyStorageSetAttributeRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ClientToken          string           `position:"Query" name:"ClientToken"`
+	Description          string           `position:"Query" name:"Description"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	StorageSetId         string           `position:"Query" name:"StorageSetId"`
+	StorageSetName       string           `position:"Query" name:"StorageSetName"`
+}
+
+// ModifyStorageSetAttributeResponse is the response struct for api ModifyStorageSetAttribute
+type ModifyStorageSetAttributeResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateModifyStorageSetAttributeRequest creates a request to invoke ModifyStorageSetAttribute API
+func CreateModifyStorageSetAttributeRequest() (request *ModifyStorageSetAttributeRequest) {
+	request = &ModifyStorageSetAttributeRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Ecs", "2014-05-26", "ModifyStorageSetAttribute", "ecs", "openAPI")
+	return
+}
+
+// CreateModifyStorageSetAttributeResponse creates a response to parse from ModifyStorageSetAttribute response
+func CreateModifyStorageSetAttributeResponse() (response *ModifyStorageSetAttributeResponse) {
+	response = &ModifyStorageSetAttributeResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 6 - 1
services/ecs/run_instances.go

@@ -82,18 +82,20 @@ type RunInstancesRequest struct {
 	HpcClusterId                  string                          `position:"Query" name:"HpcClusterId"`
 	HpcClusterId                  string                          `position:"Query" name:"HpcClusterId"`
 	SecurityEnhancementStrategy   string                          `position:"Query" name:"SecurityEnhancementStrategy"`
 	SecurityEnhancementStrategy   string                          `position:"Query" name:"SecurityEnhancementStrategy"`
 	KeyPairName                   string                          `position:"Query" name:"KeyPairName"`
 	KeyPairName                   string                          `position:"Query" name:"KeyPairName"`
-	MinAmount                     requests.Integer                `position:"Query" name:"MinAmount"`
 	SpotPriceLimit                requests.Float                  `position:"Query" name:"SpotPriceLimit"`
 	SpotPriceLimit                requests.Float                  `position:"Query" name:"SpotPriceLimit"`
 	DeletionProtection            requests.Boolean                `position:"Query" name:"DeletionProtection"`
 	DeletionProtection            requests.Boolean                `position:"Query" name:"DeletionProtection"`
 	ResourceGroupId               string                          `position:"Query" name:"ResourceGroupId"`
 	ResourceGroupId               string                          `position:"Query" name:"ResourceGroupId"`
 	HostName                      string                          `position:"Query" name:"HostName"`
 	HostName                      string                          `position:"Query" name:"HostName"`
 	Password                      string                          `position:"Query" name:"Password"`
 	Password                      string                          `position:"Query" name:"Password"`
+	StorageSetPartitionNumber     requests.Integer                `position:"Query" name:"StorageSetPartitionNumber"`
 	Tag                           *[]RunInstancesTag              `position:"Query" name:"Tag"  type:"Repeated"`
 	Tag                           *[]RunInstancesTag              `position:"Query" name:"Tag"  type:"Repeated"`
 	AutoRenewPeriod               requests.Integer                `position:"Query" name:"AutoRenewPeriod"`
 	AutoRenewPeriod               requests.Integer                `position:"Query" name:"AutoRenewPeriod"`
+	CpuOptionsCore                requests.Integer                `position:"Query" name:"CpuOptions.Core"`
 	Period                        requests.Integer                `position:"Query" name:"Period"`
 	Period                        requests.Integer                `position:"Query" name:"Period"`
 	DryRun                        requests.Boolean                `position:"Query" name:"DryRun"`
 	DryRun                        requests.Boolean                `position:"Query" name:"DryRun"`
 	LaunchTemplateId              string                          `position:"Query" name:"LaunchTemplateId"`
 	LaunchTemplateId              string                          `position:"Query" name:"LaunchTemplateId"`
 	Ipv6AddressCount              requests.Integer                `position:"Query" name:"Ipv6AddressCount"`
 	Ipv6AddressCount              requests.Integer                `position:"Query" name:"Ipv6AddressCount"`
+	CpuOptionsNuma                string                          `position:"Query" name:"CpuOptions.Numa"`
 	OwnerId                       requests.Integer                `position:"Query" name:"OwnerId"`
 	OwnerId                       requests.Integer                `position:"Query" name:"OwnerId"`
 	CapacityReservationPreference string                          `position:"Query" name:"CapacityReservationPreference"`
 	CapacityReservationPreference string                          `position:"Query" name:"CapacityReservationPreference"`
 	VSwitchId                     string                          `position:"Query" name:"VSwitchId"`
 	VSwitchId                     string                          `position:"Query" name:"VSwitchId"`
@@ -114,6 +116,7 @@ type RunInstancesRequest struct {
 	SecurityGroupId               string                          `position:"Query" name:"SecurityGroupId"`
 	SecurityGroupId               string                          `position:"Query" name:"SecurityGroupId"`
 	InternetMaxBandwidthOut       requests.Integer                `position:"Query" name:"InternetMaxBandwidthOut"`
 	InternetMaxBandwidthOut       requests.Integer                `position:"Query" name:"InternetMaxBandwidthOut"`
 	Description                   string                          `position:"Query" name:"Description"`
 	Description                   string                          `position:"Query" name:"Description"`
+	CpuOptionsThreadsPerCore      requests.Integer                `position:"Query" name:"CpuOptions.ThreadsPerCore"`
 	SystemDiskCategory            string                          `position:"Query" name:"SystemDisk.Category"`
 	SystemDiskCategory            string                          `position:"Query" name:"SystemDisk.Category"`
 	CapacityReservationId         string                          `position:"Query" name:"CapacityReservationId"`
 	CapacityReservationId         string                          `position:"Query" name:"CapacityReservationId"`
 	SystemDiskPerformanceLevel    string                          `position:"Query" name:"SystemDisk.PerformanceLevel"`
 	SystemDiskPerformanceLevel    string                          `position:"Query" name:"SystemDisk.PerformanceLevel"`
@@ -134,8 +137,10 @@ type RunInstancesRequest struct {
 	DedicatedHostId               string                          `position:"Query" name:"DedicatedHostId"`
 	DedicatedHostId               string                          `position:"Query" name:"DedicatedHostId"`
 	CreditSpecification           string                          `position:"Query" name:"CreditSpecification"`
 	CreditSpecification           string                          `position:"Query" name:"CreditSpecification"`
 	SecurityGroupIds              *[]string                       `position:"Query" name:"SecurityGroupIds"  type:"Repeated"`
 	SecurityGroupIds              *[]string                       `position:"Query" name:"SecurityGroupIds"  type:"Repeated"`
+	SpotDuration                  requests.Integer                `position:"Query" name:"SpotDuration"`
 	DataDisk                      *[]RunInstancesDataDisk         `position:"Query" name:"DataDisk"  type:"Repeated"`
 	DataDisk                      *[]RunInstancesDataDisk         `position:"Query" name:"DataDisk"  type:"Repeated"`
 	LaunchTemplateVersion         requests.Integer                `position:"Query" name:"LaunchTemplateVersion"`
 	LaunchTemplateVersion         requests.Integer                `position:"Query" name:"LaunchTemplateVersion"`
+	StorageSetId                  string                          `position:"Query" name:"StorageSetId"`
 	SystemDiskSize                string                          `position:"Query" name:"SystemDisk.Size"`
 	SystemDiskSize                string                          `position:"Query" name:"SystemDisk.Size"`
 	SystemDiskDescription         string                          `position:"Query" name:"SystemDisk.Description"`
 	SystemDiskDescription         string                          `position:"Query" name:"SystemDisk.Description"`
 }
 }

+ 27 - 25
services/ecs/struct_disk.go

@@ -17,41 +17,43 @@ package ecs
 
 
 // Disk is a nested struct in ecs response
 // Disk is a nested struct in ecs response
 type Disk struct {
 type Disk struct {
+	Category                      string                        `json:"Category" xml:"Category"`
+	BdfId                         string                        `json:"BdfId" xml:"BdfId"`
+	ImageId                       string                        `json:"ImageId" xml:"ImageId"`
+	AutoSnapshotPolicyId          string                        `json:"AutoSnapshotPolicyId" xml:"AutoSnapshotPolicyId"`
+	DeleteAutoSnapshot            bool                          `json:"DeleteAutoSnapshot" xml:"DeleteAutoSnapshot"`
+	EnableAutomatedSnapshotPolicy bool                          `json:"EnableAutomatedSnapshotPolicy" xml:"EnableAutomatedSnapshotPolicy"`
 	DiskId                        string                        `json:"DiskId" xml:"DiskId"`
 	DiskId                        string                        `json:"DiskId" xml:"DiskId"`
+	Size                          int                           `json:"Size" xml:"Size"`
+	IOPS                          int                           `json:"IOPS" xml:"IOPS"`
 	RegionId                      string                        `json:"RegionId" xml:"RegionId"`
 	RegionId                      string                        `json:"RegionId" xml:"RegionId"`
-	ZoneId                        string                        `json:"ZoneId" xml:"ZoneId"`
-	DiskName                      string                        `json:"DiskName" xml:"DiskName"`
+	MountInstanceNum              int                           `json:"MountInstanceNum" xml:"MountInstanceNum"`
+	StorageSetId                  string                        `json:"StorageSetId" xml:"StorageSetId"`
+	ResourceGroupId               string                        `json:"ResourceGroupId" xml:"ResourceGroupId"`
+	InstanceId                    string                        `json:"InstanceId" xml:"InstanceId"`
 	Description                   string                        `json:"Description" xml:"Description"`
 	Description                   string                        `json:"Description" xml:"Description"`
 	Type                          string                        `json:"Type" xml:"Type"`
 	Type                          string                        `json:"Type" xml:"Type"`
-	Category                      string                        `json:"Category" xml:"Category"`
-	Size                          int                           `json:"Size" xml:"Size"`
-	ImageId                       string                        `json:"ImageId" xml:"ImageId"`
+	ExpiredTime                   string                        `json:"ExpiredTime" xml:"ExpiredTime"`
+	Device                        string                        `json:"Device" xml:"Device"`
+	CreationTime                  string                        `json:"CreationTime" xml:"CreationTime"`
+	IOPSRead                      int                           `json:"IOPSRead" xml:"IOPSRead"`
 	SourceSnapshotId              string                        `json:"SourceSnapshotId" xml:"SourceSnapshotId"`
 	SourceSnapshotId              string                        `json:"SourceSnapshotId" xml:"SourceSnapshotId"`
-	AutoSnapshotPolicyId          string                        `json:"AutoSnapshotPolicyId" xml:"AutoSnapshotPolicyId"`
+	StorageSetPartitionNumber     int                           `json:"StorageSetPartitionNumber" xml:"StorageSetPartitionNumber"`
 	ProductCode                   string                        `json:"ProductCode" xml:"ProductCode"`
 	ProductCode                   string                        `json:"ProductCode" xml:"ProductCode"`
 	Portable                      bool                          `json:"Portable" xml:"Portable"`
 	Portable                      bool                          `json:"Portable" xml:"Portable"`
-	Status                        string                        `json:"Status" xml:"Status"`
-	InstanceId                    string                        `json:"InstanceId" xml:"InstanceId"`
-	Device                        string                        `json:"Device" xml:"Device"`
-	DeleteWithInstance            bool                          `json:"DeleteWithInstance" xml:"DeleteWithInstance"`
-	DeleteAutoSnapshot            bool                          `json:"DeleteAutoSnapshot" xml:"DeleteAutoSnapshot"`
+	KMSKeyId                      string                        `json:"KMSKeyId" xml:"KMSKeyId"`
+	Encrypted                     bool                          `json:"Encrypted" xml:"Encrypted"`
 	EnableAutoSnapshot            bool                          `json:"EnableAutoSnapshot" xml:"EnableAutoSnapshot"`
 	EnableAutoSnapshot            bool                          `json:"EnableAutoSnapshot" xml:"EnableAutoSnapshot"`
-	EnableAutomatedSnapshotPolicy bool                          `json:"EnableAutomatedSnapshotPolicy" xml:"EnableAutomatedSnapshotPolicy"`
-	CreationTime                  string                        `json:"CreationTime" xml:"CreationTime"`
-	AttachedTime                  string                        `json:"AttachedTime" xml:"AttachedTime"`
 	DetachedTime                  string                        `json:"DetachedTime" xml:"DetachedTime"`
 	DetachedTime                  string                        `json:"DetachedTime" xml:"DetachedTime"`
+	DeleteWithInstance            bool                          `json:"DeleteWithInstance" xml:"DeleteWithInstance"`
+	ZoneId                        string                        `json:"ZoneId" xml:"ZoneId"`
 	DiskChargeType                string                        `json:"DiskChargeType" xml:"DiskChargeType"`
 	DiskChargeType                string                        `json:"DiskChargeType" xml:"DiskChargeType"`
-	ExpiredTime                   string                        `json:"ExpiredTime" xml:"ExpiredTime"`
-	ResourceGroupId               string                        `json:"ResourceGroupId" xml:"ResourceGroupId"`
-	Encrypted                     bool                          `json:"Encrypted" xml:"Encrypted"`
-	MountInstanceNum              int                           `json:"MountInstanceNum" xml:"MountInstanceNum"`
-	IOPS                          int                           `json:"IOPS" xml:"IOPS"`
-	IOPSRead                      int                           `json:"IOPSRead" xml:"IOPSRead"`
-	IOPSWrite                     int                           `json:"IOPSWrite" xml:"IOPSWrite"`
-	KMSKeyId                      string                        `json:"KMSKeyId" xml:"KMSKeyId"`
 	PerformanceLevel              string                        `json:"PerformanceLevel" xml:"PerformanceLevel"`
 	PerformanceLevel              string                        `json:"PerformanceLevel" xml:"PerformanceLevel"`
-	BdfId                         string                        `json:"BdfId" xml:"BdfId"`
-	OperationLocks                OperationLocksInDescribeDisks `json:"OperationLocks" xml:"OperationLocks"`
-	MountInstances                MountInstances                `json:"MountInstances" xml:"MountInstances"`
+	DiskName                      string                        `json:"DiskName" xml:"DiskName"`
+	Status                        string                        `json:"Status" xml:"Status"`
+	AttachedTime                  string                        `json:"AttachedTime" xml:"AttachedTime"`
+	IOPSWrite                     int                           `json:"IOPSWrite" xml:"IOPSWrite"`
 	Tags                          TagsInDescribeDisks           `json:"Tags" xml:"Tags"`
 	Tags                          TagsInDescribeDisks           `json:"Tags" xml:"Tags"`
+	MountInstances                MountInstances                `json:"MountInstances" xml:"MountInstances"`
+	OperationLocks                OperationLocksInDescribeDisks `json:"OperationLocks" xml:"OperationLocks"`
 }
 }

+ 21 - 0
services/ecs/struct_disks_in_describe_disks.go

@@ -0,0 +1,21 @@
+package ecs
+
+//Licensed 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.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// DisksInDescribeDisks is a nested struct in ecs response
+type DisksInDescribeDisks struct {
+	Disk []Disk `json:"Disk" xml:"Disk"`
+}

+ 21 - 0
services/ecs/struct_disks_in_describe_storage_set_details.go

@@ -0,0 +1,21 @@
+package ecs
+
+//Licensed 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.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// DisksInDescribeStorageSetDetails is a nested struct in ecs response
+type DisksInDescribeStorageSetDetails struct {
+	Disk []Disk `json:"Disk" xml:"Disk"`
+}

+ 23 - 0
services/ecs/struct_fee_of_instance.go

@@ -0,0 +1,23 @@
+package ecs
+
+//Licensed 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.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// FeeOfInstance is a nested struct in ecs response
+type FeeOfInstance struct {
+	InstanceId string `json:"InstanceId" xml:"InstanceId"`
+	Fee        string `json:"Fee" xml:"Fee"`
+	Currency   string `json:"Currency" xml:"Currency"`
+}

+ 21 - 0
services/ecs/struct_fee_of_instances.go

@@ -0,0 +1,21 @@
+package ecs
+
+//Licensed 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.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// FeeOfInstances is a nested struct in ecs response
+type FeeOfInstances struct {
+	FeeOfInstance []FeeOfInstance `json:"FeeOfInstance" xml:"FeeOfInstance"`
+}

+ 1 - 0
services/ecs/struct_reserved_instance.go

@@ -25,6 +25,7 @@ type ReservedInstance struct {
 	InstanceType         string                                    `json:"InstanceType" xml:"InstanceType"`
 	InstanceType         string                                    `json:"InstanceType" xml:"InstanceType"`
 	Scope                string                                    `json:"Scope" xml:"Scope"`
 	Scope                string                                    `json:"Scope" xml:"Scope"`
 	OfferingType         string                                    `json:"OfferingType" xml:"OfferingType"`
 	OfferingType         string                                    `json:"OfferingType" xml:"OfferingType"`
+	Platform             string                                    `json:"Platform" xml:"Platform"`
 	InstanceAmount       int                                       `json:"InstanceAmount" xml:"InstanceAmount"`
 	InstanceAmount       int                                       `json:"InstanceAmount" xml:"InstanceAmount"`
 	Status               string                                    `json:"Status" xml:"Status"`
 	Status               string                                    `json:"Status" xml:"Status"`
 	CreationTime         string                                    `json:"CreationTime" xml:"CreationTime"`
 	CreationTime         string                                    `json:"CreationTime" xml:"CreationTime"`

+ 27 - 0
services/ecs/struct_storage_set.go

@@ -0,0 +1,27 @@
+package ecs
+
+//Licensed 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.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// StorageSet is a nested struct in ecs response
+type StorageSet struct {
+	StorageSetId              string `json:"StorageSetId" xml:"StorageSetId"`
+	CreationTime              string `json:"CreationTime" xml:"CreationTime"`
+	StorageSetName            string `json:"StorageSetName" xml:"StorageSetName"`
+	Description               string `json:"Description" xml:"Description"`
+	StorageSetPartitionNumber int    `json:"StorageSetPartitionNumber" xml:"StorageSetPartitionNumber"`
+	RegionId                  string `json:"RegionId" xml:"RegionId"`
+	ZoneId                    string `json:"ZoneId" xml:"ZoneId"`
+}

+ 21 - 0
services/ecs/struct_storage_sets.go

@@ -0,0 +1,21 @@
+package ecs
+
+//Licensed 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.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// StorageSets is a nested struct in ecs response
+type StorageSets struct {
+	StorageSet []StorageSet `json:"StorageSet" xml:"StorageSet"`
+}