Browse Source

OTS SDK Auto Released By zhoucan.zc,Version:1.34.7

Signed-off-by: yixiong.jxy <yixiong.jxy@alibaba-inc.com>
yixiong.jxy 7 years ago
parent
commit
8a209cf30c

+ 3 - 0
ChangeLog.txt

@@ -1,3 +1,6 @@
+2018-10-29 Version: 1.34.7
+1, Add ots trigger api interface.
+
 2018-10-29 Version: 1.34.6
 1, update
 

+ 0 - 0
services/ots/bind_instance2_vpc.go


+ 0 - 0
services/ots/client.go


+ 115 - 0
services/ots/create_trigger.go

@@ -0,0 +1,115 @@
+package ots
+
+//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 (
+	"encoding/json"
+	"fmt"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/errors"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+func (client *Client) CreateTrigger(request *CreateTriggerRequest) (response *CreateTriggerResponse, err error) {
+	response = CreateCreateTriggerResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+func (client *Client) CreateTriggerWithChan(request *CreateTriggerRequest) (<-chan *CreateTriggerResponse, <-chan error) {
+	responseChan := make(chan *CreateTriggerResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.CreateTrigger(request)
+		responseChan <- response
+		errChan <- err
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+func (client *Client) CreateTriggerWithCallback(request *CreateTriggerRequest, callback func(response *CreateTriggerResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *CreateTriggerResponse
+		var err error
+		defer close(result)
+		response, err = client.CreateTrigger(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+type CreateTriggerRequest struct {
+	*requests.RoaRequest
+	InstanceName string `position:"Path" name:"InstanceName"`
+	ApiVersion   string `position:"Path" name:"ApiVersion"`
+	TableName    string `position:"Path" name:"TableName"`
+}
+
+type CreateTriggerResponse struct {
+	*responses.BaseResponse
+}
+
+func (resp *CreateTriggerResponse) GetBody() (body *CreateTriggerResponseBody, err error) {
+	body = &CreateTriggerResponseBody{}
+	bodyBuf := resp.GetHttpContentBytes()
+	err = json.Unmarshal(bodyBuf, body)
+	if err != nil {
+		errorMsg := fmt.Sprintf(CanNotUnmarshalRequestBodyMessage, string(bodyBuf))
+		return nil, errors.NewClientError(CanNotUnmarshalRequestBodyCode, errorMsg, err)
+	}
+	return
+}
+
+func NewCreateTriggerRequest(domain, instance, table string, body *CreateTriggerRequestBody) (request *CreateTriggerRequest, err error) {
+	request = &CreateTriggerRequest{
+		RoaRequest:   &requests.RoaRequest{},
+		InstanceName: instance,
+		TableName:    table,
+		ApiVersion:   ApiVersion,
+	}
+	request.InitWithApiInfo("Ots", "2017-11-11", "CreateTrigger", "/[ApiVersion]/instance/[InstanceName]/table/[TableName]/trigger", "", "")
+	request.Domain = domain
+	request.Method = "POST"
+
+	bodyBuf, err := json.Marshal(body)
+	if err != nil {
+		errorMsg := fmt.Sprintf(CanNotMarshalRequestBodyMessage, body)
+		return nil, errors.NewClientError(CanNotMarshalRequestBodyCode, errorMsg, err)
+	}
+	request.SetContent(bodyBuf)
+	return
+}
+
+func CreateCreateTriggerResponse() (response *CreateTriggerResponse) {
+	response = &CreateTriggerResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 0 - 0
services/ots/delete_instance.go


+ 0 - 0
services/ots/delete_tags.go


+ 100 - 0
services/ots/delete_trigger.go

@@ -0,0 +1,100 @@
+package ots
+
+//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"
+)
+
+func (client *Client) DeleteTrigger(request *DeleteTriggerRequest) (response *DeleteTriggerResponse, err error) {
+	response = CreateDeleteTriggerResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+func (client *Client) DeleteTriggerWithChan(request *DeleteTriggerRequest) (<-chan *DeleteTriggerResponse, <-chan error) {
+	responseChan := make(chan *DeleteTriggerResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DeleteTrigger(request)
+		responseChan <- response
+		errChan <- err
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+func (client *Client) DeleteTriggerWithCallback(request *DeleteTriggerRequest, callback func(response *DeleteTriggerResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DeleteTriggerResponse
+		var err error
+		defer close(result)
+		response, err = client.DeleteTrigger(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+type DeleteTriggerRequest struct {
+	*requests.RoaRequest
+	InstanceName string `position:"Path" name:"InstanceName"`
+	TriggerName  string `position:"Path" name:"TriggerName"`
+	ApiVersion   string `position:"Path" name:"ApiVersion"`
+	TableName    string `position:"Path" name:"TableName"`
+}
+
+type DeleteTriggerResponse struct {
+	*responses.BaseResponse
+}
+
+func NewDeleteTriggerRequest(domain, instance, table, trigger, triggerArn string) (request *DeleteTriggerRequest) {
+	triggerName := trigger
+	if triggerArn != "" {
+		triggerName += (TriggerQueryJointer + triggerArn)
+	}
+	request = &DeleteTriggerRequest{
+		RoaRequest:   &requests.RoaRequest{},
+		InstanceName: instance,
+		TableName:    table,
+		TriggerName:  triggerName,
+		ApiVersion:   ApiVersion,
+	}
+	request.InitWithApiInfo("Ots", "2017-11-11", "DeleteTrigger", "/[ApiVersion]/instance/[InstanceName]/table/[TableName]/trigger/[TriggerName]", "", "")
+	request.Domain = domain
+	request.Method = "DELETE"
+	return
+}
+
+func CreateDeleteTriggerResponse() (response *DeleteTriggerResponse) {
+	response = &DeleteTriggerResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 21 - 0
services/ots/error.go

@@ -0,0 +1,21 @@
+package ots
+
+//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.
+
+const (
+	CanNotMarshalRequestBodyCode    = "SDK.CanNotMarshalRequestBody"
+	CanNotMarshalRequestBodyMessage = "Can not marshal body(param = %v)"
+
+	CanNotUnmarshalRequestBodyCode    = "SDK.CanNotUnmarshalRequestBody"
+	CanNotUnmarshalRequestBodyMessage = "Can not unmarshal body(param = %s)"
+)

+ 0 - 0
services/ots/get_instance.go


+ 115 - 0
services/ots/get_trigger.go

@@ -0,0 +1,115 @@
+package ots
+
+//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 (
+	"encoding/json"
+	"fmt"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/errors"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+var TriggerQueryJointer = "?TriggerARN="
+
+func (client *Client) GetTrigger(request *GetTriggerRequest) (response *GetTriggerResponse, err error) {
+	response = CreateGetTriggerResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+func (client *Client) GetTriggerWithChan(request *GetTriggerRequest) (<-chan *GetTriggerResponse, <-chan error) {
+	responseChan := make(chan *GetTriggerResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.GetTrigger(request)
+		responseChan <- response
+		errChan <- err
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+func (client *Client) GetTriggerWithCallback(request *GetTriggerRequest, callback func(response *GetTriggerResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *GetTriggerResponse
+		var err error
+		defer close(result)
+		response, err = client.GetTrigger(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+type GetTriggerRequest struct {
+	*requests.RoaRequest
+	InstanceName string `position:"Path" name:"InstanceName"`
+	TriggerName  string `position:"Path" name:"TriggerName"`
+	ApiVersion   string `position:"Path" name:"ApiVersion"`
+	TableName    string `position:"Path" name:"TableName"`
+}
+
+type GetTriggerResponse struct {
+	*responses.BaseResponse
+}
+
+func (resp *GetTriggerResponse) GetBody() (body *GetTriggerResponseBody, err error) {
+	body = &GetTriggerResponseBody{}
+	bodyBuf := resp.GetHttpContentBytes()
+	err = json.Unmarshal(bodyBuf, body)
+	if err != nil {
+		errorMsg := fmt.Sprintf(CanNotUnmarshalRequestBodyMessage, string(bodyBuf))
+		return nil, errors.NewClientError(CanNotUnmarshalRequestBodyCode, errorMsg, err)
+	}
+	return
+}
+
+func NewGetTriggerRequest(domain, instance, table, trigger, triggerArn string) (request *GetTriggerRequest) {
+	triggerName := trigger
+	if triggerArn != "" {
+		triggerName += (TriggerQueryJointer + triggerArn)
+	}
+	request = &GetTriggerRequest{
+		RoaRequest:   &requests.RoaRequest{},
+		InstanceName: instance,
+		TableName:    table,
+		TriggerName:  triggerName,
+		ApiVersion:   ApiVersion,
+	}
+	request.InitWithApiInfo("Ots", "2017-11-11", "GetTrigger", "/[ApiVersion]/instance/[InstanceName]/table/[TableName]/trigger/[TriggerName]", "", "")
+	request.Domain = domain
+	return
+}
+
+func CreateGetTriggerResponse() (response *GetTriggerResponse) {
+	response = &GetTriggerResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 0 - 0
services/ots/insert_instance.go


+ 0 - 0
services/ots/insert_tags.go


+ 0 - 0
services/ots/list_cluster_type.go


+ 0 - 0
services/ots/list_instance.go


+ 0 - 0
services/ots/list_tags.go


+ 107 - 0
services/ots/list_trigger.go

@@ -0,0 +1,107 @@
+package ots
+
+//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 (
+	"encoding/json"
+	"fmt"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/errors"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+func (client *Client) ListTrigger(request *ListTriggerRequest) (response *ListTriggerResponse, err error) {
+	response = CreateListTriggerResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+func (client *Client) ListTriggerWithChan(request *ListTriggerRequest) (<-chan *ListTriggerResponse, <-chan error) {
+	responseChan := make(chan *ListTriggerResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.ListTrigger(request)
+		responseChan <- response
+		errChan <- err
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+func (client *Client) ListTriggerWithCallback(request *ListTriggerRequest, callback func(response *ListTriggerResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *ListTriggerResponse
+		var err error
+		defer close(result)
+		response, err = client.ListTrigger(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+type ListTriggerRequest struct {
+	*requests.RoaRequest
+	InstanceName string `position:"Path" name:"InstanceName"`
+	ApiVersion   string `position:"Path" name:"ApiVersion"`
+	TableName    string `position:"Path" name:"TableName"`
+}
+
+type ListTriggerResponse struct {
+	*responses.BaseResponse
+}
+
+func (resp *ListTriggerResponse) GetBody() (body *ListTriggerResponseBody, err error) {
+	body = &ListTriggerResponseBody{}
+	bodyBuf := resp.GetHttpContentBytes()
+	err = json.Unmarshal(bodyBuf, body)
+	if err != nil {
+		errorMsg := fmt.Sprintf(CanNotUnmarshalRequestBodyMessage, string(bodyBuf))
+		return nil, errors.NewClientError(CanNotUnmarshalRequestBodyCode, errorMsg, err)
+	}
+	return
+}
+
+func NewListTriggerRequest(domain, instance, table string) (request *ListTriggerRequest) {
+	request = &ListTriggerRequest{
+		RoaRequest:   &requests.RoaRequest{},
+		InstanceName: instance,
+		TableName:    table,
+		ApiVersion:   ApiVersion,
+	}
+	request.InitWithApiInfo("Ots", "2017-11-11", "ListTrigger", "/[ApiVersion]/instance/[InstanceName]/table/[TableName]/trigger", "", "")
+	request.Domain = domain
+	return
+}
+
+func CreateListTriggerResponse() (response *ListTriggerResponse) {
+	response = &ListTriggerResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 0 - 0
services/ots/list_vpc_info_by_instance.go


+ 0 - 0
services/ots/list_vpc_info_by_vpc.go


+ 59 - 0
services/ots/model.go

@@ -0,0 +1,59 @@
+package ots
+
+//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.
+
+const ApiVersion = "v1"
+
+type CreateTriggerRequestBody struct {
+	RoleArn     string
+	TriggerName string
+	TriggerArn  string
+	UdfInfo     *UdfInfo
+}
+
+type TriggerResponseBase struct {
+	Code    string
+	Message string
+}
+
+type CreateTriggerResponseBody struct {
+	TriggerResponseBase
+	Etag string
+}
+
+type GetTriggerResponseBody struct {
+	TriggerResponseBase
+	Trigger *TriggerInfo
+}
+
+type ListTriggerResponseBody struct {
+	TriggerResponseBase
+	Triggers []*TriggerInfo
+}
+
+type UdfInfo struct {
+	ServiceName  string
+	FunctionName string
+}
+
+type TriggerInfo struct {
+	TriggerName  string
+	TriggerArn   string
+	AssumeRole   string
+	CreateTime   int64
+	InstanceName string
+	DataTable    string
+	UdfInfo      *UdfInfo
+	Etag         string
+	TimerId      string
+}

+ 185 - 0
services/ots/sample/sample.go

@@ -0,0 +1,185 @@
+package main
+
+import (
+	"fmt"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/errors"
+	"github.com/aliyun/alibaba-cloud-sdk-go/services/ots"
+	"log"
+	"os"
+)
+
+var otsDomainTemplate = "ots.%s.aliyuncs.com"
+var triggerArnTemplate = "acs:fc:%s:%s:services/%s/functions/%s/triggers/%s"
+
+func main() {
+	akId := os.Getenv("ACCESSKEY_ID")
+	akSec := os.Getenv("ACCESSKEY_SECRET")
+
+	testInstance := "existInstance"
+	testTable := "StreamTable"
+	region := "cn-beijing"
+	uid := os.Getenv("USER_ID")
+
+	adapter, err := NewOTSAdapter(region, akId, akSec)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	// ERROR_ACCESS_DENIED
+
+	// ... ignore, return when ram checking permission failed for sub account
+
+	// ERROR_TRIGGER_NOT_EXIST, arn is empty
+	info, err := adapter.ReadTrigger(testInstance, testTable, "not-exist-trigger", "")
+	if err == nil {
+		log.Fatal("Unexpected trigger info:", info)
+	}
+	if ok, popErr := parsePopError(err); ok {
+		log.Println("http code:", popErr.HttpStatus())
+		log.Println("error code:", popErr.ErrorCode())
+		log.Println("error message:", popErr.Message())
+	} else {
+		log.Println("Unexpected error:", err)
+	}
+
+	// ERROR_TRIGGER_NOT_EXIST, arn is not empty
+	arn := fmt.Sprintf(triggerArnTemplate, region, uid, "fcService", "fcFunction", "not-exist-trigger")
+	err = adapter.DeleteTrigger(testInstance, testTable, "not-exist-trigger", arn)
+	if err == nil {
+		log.Fatal("Unexpected delete succeed")
+	}
+	if ok, popErr := parsePopError(err); ok {
+		log.Println("http code:", popErr.HttpStatus())
+		log.Println("error code:", popErr.ErrorCode())
+		log.Println("error message:", popErr.Message())
+	} else {
+		log.Println("Unexpected error:", err)
+	}
+
+	// ERROR_INVALID_ARGUMENT
+	info, err = adapter.ReadTrigger("notExistInstance", testTable, "not-exist-trigger", "")
+	if err == nil {
+		log.Fatal("Unexpected trigger info:", info)
+	}
+	if ok, popErr := parsePopError(err); ok {
+		log.Println("http code:", popErr.HttpStatus())
+		log.Println("error code:", popErr.ErrorCode())
+		log.Println("error message:", popErr.Message())
+	} else {
+		log.Println("Unexpected error:", err)
+	}
+
+	// CRUD
+	arn = fmt.Sprintf(triggerArnTemplate, region, uid, "fcService", "fcFunction", "testTrigger")
+	triggerMeta := &ots.CreateTriggerRequestBody{
+		TriggerName: "testTrigger",
+		TriggerArn:  arn,
+		RoleArn:     fmt.Sprintf("acs:ram::%s:role/aliyuntablestorestreamnotificationrole", uid),
+		UdfInfo: &ots.UdfInfo{
+			ServiceName:  "fcService",
+			FunctionName: "fcFunction",
+		},
+	}
+	// CREATE
+	newTrigger, err := adapter.CreateTrigger(testInstance, testTable, triggerMeta)
+	if err != nil {
+		log.Fatal("Create trigger failed:", err)
+	}
+	log.Println("new trigger id:", newTrigger.Etag)
+
+	// READ
+	info, err = adapter.ReadTrigger(testInstance, testTable, triggerMeta.TriggerName, arn)
+	if err != nil {
+		log.Fatal("Read trigger failed:", err)
+	}
+	log.Println("read trigger info:", info.Trigger)
+
+	// UPDATE
+	// not support update
+
+	// ERROR_RESOURCE_CONFLICT
+	conflictMeta := &ots.CreateTriggerRequestBody{
+		TriggerName: "testTrigger",
+		TriggerArn:  arn,
+		RoleArn:     fmt.Sprintf("acs:ram::%s:role/aliyuntablestorestreamnotificationrole", uid),
+		UdfInfo: &ots.UdfInfo{
+			ServiceName:  "fcService",
+			FunctionName: "fcFunction",
+		},
+	}
+	conflictTrigger, err := adapter.CreateTrigger(testInstance, testTable, conflictMeta)
+	if err == nil {
+		log.Fatal("Uexpected trigger:", conflictTrigger)
+	}
+	if ok, popErr := parsePopError(err); ok {
+		log.Println("http code:", popErr.HttpStatus())
+		log.Println("error code:", popErr.ErrorCode())
+		log.Println("error message:", popErr.Message())
+	} else {
+		log.Println("Unexpected error:", err)
+	}
+
+	// DELETE
+	err = adapter.DeleteTrigger(testInstance, testTable, triggerMeta.TriggerName, arn)
+	if err != nil {
+		log.Fatal("Delete trigger failed:", err)
+	}
+	log.Println("CRUD done")
+}
+
+type OTSAdapter struct {
+	client *ots.Client
+	domain string
+}
+
+func NewOTSAdapter(regionId string, accessKeyId, accessKeySecret string) (*OTSAdapter, error) {
+	client, err := ots.NewClientWithAccessKey(regionId, accessKeyId, accessKeySecret)
+	if err != nil {
+		return nil, err
+	}
+	return &OTSAdapter{client: client, domain: fmt.Sprintf(otsDomainTemplate, regionId)}, nil
+}
+
+func (o *OTSAdapter) CreateTrigger(instanceName, tableName string, triggerInfo *ots.CreateTriggerRequestBody) (resp *ots.CreateTriggerResponseBody, err error) {
+	req, err := ots.NewCreateTriggerRequest(o.domain, instanceName, tableName, triggerInfo)
+	if err != nil {
+		return
+	}
+	popResp, err := o.client.CreateTrigger(req)
+	if err != nil {
+		return
+	}
+	resp, err = popResp.GetBody()
+	return
+}
+
+func (o *OTSAdapter) ReadTrigger(instanceName, tableName, triggerName, triggerArn string) (triggerInfo *ots.GetTriggerResponseBody, err error) {
+	popResp, err := o.client.GetTrigger(ots.NewGetTriggerRequest(o.domain, instanceName, tableName, triggerName, triggerArn))
+	if err != nil {
+		return
+	}
+	triggerInfo, err = popResp.GetBody()
+	return
+}
+
+func (o *OTSAdapter) DeleteTrigger(instanceName, tableName, triggerName, triggerArn string) error {
+	_, err := o.client.DeleteTrigger(ots.NewDeleteTriggerRequest(o.domain, instanceName, tableName, triggerName, triggerArn))
+	return err
+}
+
+// fc应该用不到这个接口
+func (o *OTSAdapter) ListTriggers(instanceName, tableName string) (triggers *ots.ListTriggerResponseBody, err error) {
+	popResp, err := o.client.ListTrigger(ots.NewListTriggerRequest(o.domain, instanceName, tableName))
+	if err != nil {
+		return
+	}
+	triggers, err = popResp.GetBody()
+	return
+}
+
+func parsePopError(err error) (succeed bool, error *errors.ServerError) {
+	if sdkErr, ok := err.(*errors.ServerError); ok {
+		return true, sdkErr
+	}
+	return false, nil
+}

+ 0 - 0
services/ots/struct_cluster_type_infos.go


+ 0 - 0
services/ots/struct_instance_info.go


+ 0 - 0
services/ots/struct_instance_infos.go


+ 0 - 0
services/ots/struct_quota.go


+ 0 - 0
services/ots/struct_tag_info.go


+ 0 - 0
services/ots/struct_tag_infos_in_get_instance.go


+ 0 - 0
services/ots/struct_tag_infos_in_list_tags.go


+ 0 - 0
services/ots/struct_vpc_info.go


+ 0 - 0
services/ots/struct_vpc_infos_in_list_vpc_info_by_instance.go


+ 0 - 0
services/ots/struct_vpc_infos_in_list_vpc_info_by_vpc.go


+ 0 - 0
services/ots/unbind_instance2_vpc.go


+ 0 - 0
services/ots/update_instance.go