alicloud/resource_alicloud_esa_site_delivery_task.go (644 lines of code) (raw):
// Package alicloud. This file is generated automatically. Please do not modify it manually, thank you!
package alicloud
import (
"encoding/json"
"fmt"
"log"
"strings"
"time"
"github.com/PaesslerAG/jsonpath"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
)
func resourceAliCloudEsaSiteDeliveryTask() *schema.Resource {
return &schema.Resource{
Create: resourceAliCloudEsaSiteDeliveryTaskCreate,
Read: resourceAliCloudEsaSiteDeliveryTaskRead,
Update: resourceAliCloudEsaSiteDeliveryTaskUpdate,
Delete: resourceAliCloudEsaSiteDeliveryTaskDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Timeouts: &schema.ResourceTimeout{
Create: schema.DefaultTimeout(5 * time.Minute),
Update: schema.DefaultTimeout(5 * time.Minute),
Delete: schema.DefaultTimeout(5 * time.Minute),
},
Schema: map[string]*schema.Schema{
"business_type": {
Type: schema.TypeString,
Required: true,
},
"data_center": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"delivery_type": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"discard_rate": {
Type: schema.TypeFloat,
Optional: true,
},
"field_name": {
Type: schema.TypeString,
Required: true,
},
"http_delivery": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"compress": {
Type: schema.TypeString,
Optional: true,
},
"log_body_suffix": {
Type: schema.TypeString,
Optional: true,
},
"header_param": {
Type: schema.TypeMap,
Optional: true,
},
"standard_auth_param": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"private_key": {
Type: schema.TypeString,
Optional: true,
},
"url_path": {
Type: schema.TypeString,
Optional: true,
},
"expired_time": {
Type: schema.TypeInt,
Optional: true,
},
},
},
},
"standard_auth_on": {
Type: schema.TypeBool,
Optional: true,
},
"log_body_prefix": {
Type: schema.TypeString,
Optional: true,
},
"query_param": {
Type: schema.TypeMap,
Optional: true,
},
"dest_url": {
Type: schema.TypeString,
Optional: true,
},
"max_batch_size": {
Type: schema.TypeInt,
Optional: true,
},
"max_retry": {
Type: schema.TypeInt,
Optional: true,
},
"transform_timeout": {
Type: schema.TypeInt,
Optional: true,
},
"max_batch_mb": {
Type: schema.TypeInt,
Optional: true,
},
},
},
},
"kafka_delivery": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"compress": {
Type: schema.TypeString,
Optional: true,
},
"user_name": {
Type: schema.TypeString,
Optional: true,
},
"machanism_type": {
Type: schema.TypeString,
Optional: true,
},
"brokers": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{Type: schema.TypeString},
},
"balancer": {
Type: schema.TypeString,
Optional: true,
},
"topic": {
Type: schema.TypeString,
Optional: true,
},
"user_auth": {
Type: schema.TypeBool,
Optional: true,
},
"password": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"oss_delivery": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"bucket_name": {
Type: schema.TypeString,
Optional: true,
},
"region": {
Type: schema.TypeString,
Optional: true,
},
"prefix_path": {
Type: schema.TypeString,
Optional: true,
},
"aliuid": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"s3_delivery": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"secret_key": {
Type: schema.TypeString,
Optional: true,
},
"endpoint": {
Type: schema.TypeString,
Optional: true,
},
"vertify_type": {
Type: schema.TypeString,
Optional: true,
},
"region": {
Type: schema.TypeString,
Optional: true,
},
"bucket_path": {
Type: schema.TypeString,
Optional: true,
},
"server_side_encryption": {
Type: schema.TypeBool,
Optional: true,
},
"access_key": {
Type: schema.TypeString,
Optional: true,
},
"prefix_path": {
Type: schema.TypeString,
Optional: true,
},
"s3_cmpt": {
Type: schema.TypeBool,
Optional: true,
},
},
},
},
"site_id": {
Type: schema.TypeInt,
Required: true,
ForceNew: true,
},
"sls_delivery": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"sls_project": {
Type: schema.TypeString,
Optional: true,
},
"sls_region": {
Type: schema.TypeString,
Optional: true,
},
"sls_log_store": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"status": {
Type: schema.TypeString,
Optional: true,
Computed: true,
},
"task_name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
},
}
}
func resourceAliCloudEsaSiteDeliveryTaskCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
action := "CreateSiteDeliveryTask"
var request map[string]interface{}
var response map[string]interface{}
query := make(map[string]interface{})
var err error
request = make(map[string]interface{})
if v, ok := d.GetOk("site_id"); ok {
request["SiteId"] = v
}
if v, ok := d.GetOk("task_name"); ok {
request["TaskName"] = v
}
request["RegionId"] = client.RegionId
objectDataLocalMap := make(map[string]interface{})
if v := d.Get("http_delivery"); !IsNil(v) {
transformTimeout1, _ := jsonpath.Get("$[0].transform_timeout", v)
if transformTimeout1 != nil && transformTimeout1 != "" {
objectDataLocalMap["TransformTimeout"] = transformTimeout1
}
standardAuthParam := make(map[string]interface{})
privateKey1, _ := jsonpath.Get("$[0].standard_auth_param[0].private_key", v)
if privateKey1 != nil && privateKey1 != "" {
standardAuthParam["PrivateKey"] = privateKey1
}
expiredTime1, _ := jsonpath.Get("$[0].standard_auth_param[0].expired_time", v)
if expiredTime1 != nil && expiredTime1 != "" {
standardAuthParam["ExpiredTime"] = expiredTime1
}
urlPath1, _ := jsonpath.Get("$[0].standard_auth_param[0].url_path", v)
if urlPath1 != nil && urlPath1 != "" {
standardAuthParam["UrlPath"] = urlPath1
}
objectDataLocalMap["StandardAuthParam"] = standardAuthParam
maxBatchMB1, _ := jsonpath.Get("$[0].max_batch_mb", v)
if maxBatchMB1 != nil && maxBatchMB1 != "" {
objectDataLocalMap["MaxBatchMB"] = maxBatchMB1
}
logBodyPrefix1, _ := jsonpath.Get("$[0].log_body_prefix", v)
if logBodyPrefix1 != nil && logBodyPrefix1 != "" {
objectDataLocalMap["LogBodyPrefix"] = logBodyPrefix1
}
destUrl1, _ := jsonpath.Get("$[0].dest_url", v)
if destUrl1 != nil && destUrl1 != "" {
objectDataLocalMap["DestUrl"] = destUrl1
}
headerParam1, _ := jsonpath.Get("$[0].header_param", v)
if headerParam1 != nil && headerParam1 != "" {
objectDataLocalMap["HeaderParam"] = headerParam1
}
compress1, _ := jsonpath.Get("$[0].compress", v)
if compress1 != nil && compress1 != "" {
objectDataLocalMap["Compress"] = compress1
}
maxRetry1, _ := jsonpath.Get("$[0].max_retry", v)
if maxRetry1 != nil && maxRetry1 != "" {
objectDataLocalMap["MaxRetry"] = maxRetry1
}
standardAuthOn1, _ := jsonpath.Get("$[0].standard_auth_on", v)
if standardAuthOn1 != nil && standardAuthOn1 != "" {
objectDataLocalMap["StandardAuthOn"] = standardAuthOn1
}
queryParam1, _ := jsonpath.Get("$[0].query_param", v)
if queryParam1 != nil && queryParam1 != "" {
objectDataLocalMap["QueryParam"] = queryParam1
}
maxBatchSize1, _ := jsonpath.Get("$[0].max_batch_size", v)
if maxBatchSize1 != nil && maxBatchSize1 != "" {
objectDataLocalMap["MaxBatchSize"] = maxBatchSize1
}
logBodySuffix1, _ := jsonpath.Get("$[0].log_body_suffix", v)
if logBodySuffix1 != nil && logBodySuffix1 != "" {
objectDataLocalMap["LogBodySuffix"] = logBodySuffix1
}
objectDataLocalMapJson, err := json.Marshal(objectDataLocalMap)
if err != nil {
return WrapError(err)
}
request["HttpDelivery"] = string(objectDataLocalMapJson)
}
objectDataLocalMap1 := make(map[string]interface{})
if v := d.Get("oss_delivery"); !IsNil(v) {
bucketName1, _ := jsonpath.Get("$[0].bucket_name", v)
if bucketName1 != nil && bucketName1 != "" {
objectDataLocalMap1["BucketName"] = bucketName1
}
region1, _ := jsonpath.Get("$[0].region", v)
if region1 != nil && region1 != "" {
objectDataLocalMap1["Region"] = region1
}
aliuid1, _ := jsonpath.Get("$[0].aliuid", v)
if aliuid1 != nil && aliuid1 != "" {
objectDataLocalMap1["Aliuid"] = aliuid1
}
prefixPath1, _ := jsonpath.Get("$[0].prefix_path", v)
if prefixPath1 != nil && prefixPath1 != "" {
objectDataLocalMap1["PrefixPath"] = prefixPath1
}
objectDataLocalMap1Json, err := json.Marshal(objectDataLocalMap1)
if err != nil {
return WrapError(err)
}
request["OssDelivery"] = string(objectDataLocalMap1Json)
}
objectDataLocalMap2 := make(map[string]interface{})
if v := d.Get("kafka_delivery"); !IsNil(v) {
compress3, _ := jsonpath.Get("$[0].compress", v)
if compress3 != nil && compress3 != "" {
objectDataLocalMap2["Compress"] = compress3
}
machanismType1, _ := jsonpath.Get("$[0].machanism_type", v)
if machanismType1 != nil && machanismType1 != "" {
objectDataLocalMap2["MachanismType"] = machanismType1
}
userAuth1, _ := jsonpath.Get("$[0].user_auth", v)
if userAuth1 != nil && userAuth1 != "" {
objectDataLocalMap2["UserAuth"] = userAuth1
}
password1, _ := jsonpath.Get("$[0].password", v)
if password1 != nil && password1 != "" {
objectDataLocalMap2["Password"] = password1
}
topic1, _ := jsonpath.Get("$[0].topic", v)
if topic1 != nil && topic1 != "" {
objectDataLocalMap2["Topic"] = topic1
}
userName1, _ := jsonpath.Get("$[0].user_name", v)
if userName1 != nil && userName1 != "" {
objectDataLocalMap2["UserName"] = userName1
}
brokers1, _ := jsonpath.Get("$[0].brokers", v)
if brokers1 != nil && brokers1 != "" {
objectDataLocalMap2["Brokers"] = brokers1
}
balancer1, _ := jsonpath.Get("$[0].balancer", v)
if balancer1 != nil && balancer1 != "" {
objectDataLocalMap2["Balancer"] = balancer1
}
objectDataLocalMap2Json, err := json.Marshal(objectDataLocalMap2)
if err != nil {
return WrapError(err)
}
request["KafkaDelivery"] = string(objectDataLocalMap2Json)
}
request["FieldName"] = d.Get("field_name")
objectDataLocalMap3 := make(map[string]interface{})
if v := d.Get("sls_delivery"); !IsNil(v) {
sLSProject1, _ := jsonpath.Get("$[0].sls_project", v)
if sLSProject1 != nil && sLSProject1 != "" {
objectDataLocalMap3["SLSProject"] = sLSProject1
}
sLSRegion1, _ := jsonpath.Get("$[0].sls_region", v)
if sLSRegion1 != nil && sLSRegion1 != "" {
objectDataLocalMap3["SLSRegion"] = sLSRegion1
}
sLSLogStore1, _ := jsonpath.Get("$[0].sls_log_store", v)
if sLSLogStore1 != nil && sLSLogStore1 != "" {
objectDataLocalMap3["SLSLogStore"] = sLSLogStore1
}
objectDataLocalMap3Json, err := json.Marshal(objectDataLocalMap3)
if err != nil {
return WrapError(err)
}
request["SlsDelivery"] = string(objectDataLocalMap3Json)
}
request["DataCenter"] = d.Get("data_center")
objectDataLocalMap4 := make(map[string]interface{})
if v := d.Get("s3_delivery"); !IsNil(v) {
prefixPath3, _ := jsonpath.Get("$[0].prefix_path", v)
if prefixPath3 != nil && prefixPath3 != "" {
objectDataLocalMap4["PrefixPath"] = prefixPath3
}
accessKey1, _ := jsonpath.Get("$[0].access_key", v)
if accessKey1 != nil && accessKey1 != "" {
objectDataLocalMap4["AccessKey"] = accessKey1
}
s3Cmpt1, _ := jsonpath.Get("$[0].s3_cmpt", v)
if s3Cmpt1 != nil && s3Cmpt1 != "" {
objectDataLocalMap4["S3Cmpt"] = s3Cmpt1
}
region3, _ := jsonpath.Get("$[0].region", v)
if region3 != nil && region3 != "" {
objectDataLocalMap4["Region"] = region3
}
serverSideEncryption1, _ := jsonpath.Get("$[0].server_side_encryption", v)
if serverSideEncryption1 != nil && serverSideEncryption1 != "" {
objectDataLocalMap4["ServerSideEncryption"] = serverSideEncryption1
}
vertifyType1, _ := jsonpath.Get("$[0].vertify_type", v)
if vertifyType1 != nil && vertifyType1 != "" {
objectDataLocalMap4["VertifyType"] = vertifyType1
}
bucketPath1, _ := jsonpath.Get("$[0].bucket_path", v)
if bucketPath1 != nil && bucketPath1 != "" {
objectDataLocalMap4["BucketPath"] = bucketPath1
}
endpoint1, _ := jsonpath.Get("$[0].endpoint", v)
if endpoint1 != nil && endpoint1 != "" {
objectDataLocalMap4["Endpoint"] = endpoint1
}
secretKey1, _ := jsonpath.Get("$[0].secret_key", v)
if secretKey1 != nil && secretKey1 != "" {
objectDataLocalMap4["SecretKey"] = secretKey1
}
objectDataLocalMap4Json, err := json.Marshal(objectDataLocalMap4)
if err != nil {
return WrapError(err)
}
request["S3Delivery"] = string(objectDataLocalMap4Json)
}
request["BusinessType"] = d.Get("business_type")
if v, ok := d.GetOk("discard_rate"); ok {
request["DiscardRate"] = v
}
request["DeliveryType"] = d.Get("delivery_type")
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
response, err = client.RpcPost("ESA", "2024-09-10", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, "alicloud_esa_site_delivery_task", action, AlibabaCloudSdkGoERROR)
}
d.SetId(fmt.Sprintf("%v:%v", response["SiteId"], response["TaskName"]))
return resourceAliCloudEsaSiteDeliveryTaskUpdate(d, meta)
}
func resourceAliCloudEsaSiteDeliveryTaskRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
esaServiceV2 := EsaServiceV2{client}
objectRaw, err := esaServiceV2.DescribeEsaSiteDeliveryTask(d.Id())
if err != nil {
if !d.IsNewResource() && NotFoundError(err) {
log.Printf("[DEBUG] Resource alicloud_esa_site_delivery_task DescribeEsaSiteDeliveryTask Failed!!! %s", err)
d.SetId("")
return nil
}
return WrapError(err)
}
d.Set("business_type", objectRaw["BusinessType"])
d.Set("data_center", objectRaw["DataCenter"])
d.Set("delivery_type", objectRaw["DeliveryType"])
d.Set("discard_rate", objectRaw["DiscardRate"])
d.Set("field_name", objectRaw["FieldList"])
d.Set("status", objectRaw["Status"])
d.Set("site_id", objectRaw["SiteId"])
d.Set("task_name", objectRaw["TaskName"])
return nil
}
func resourceAliCloudEsaSiteDeliveryTaskUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
var request map[string]interface{}
var response map[string]interface{}
var query map[string]interface{}
update := false
d.Partial(true)
var err error
parts := strings.Split(d.Id(), ":")
action := "UpdateSiteDeliveryTask"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["SiteId"] = parts[0]
request["TaskName"] = parts[1]
request["RegionId"] = client.RegionId
if !d.IsNewResource() && d.HasChange("discard_rate") {
update = true
request["DiscardRate"] = d.Get("discard_rate")
}
if !d.IsNewResource() && d.HasChange("business_type") {
update = true
}
request["BusinessType"] = d.Get("business_type")
if !d.IsNewResource() && d.HasChange("field_name") {
update = true
}
request["FieldName"] = d.Get("field_name")
if update {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("ESA", "2024-09-10", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
update = false
parts = strings.Split(d.Id(), ":")
action = "UpdateSiteDeliveryTaskStatus"
request = make(map[string]interface{})
query = make(map[string]interface{})
query["SiteId"] = parts[0]
query["TaskName"] = parts[1]
query["RegionId"] = client.RegionId
if d.HasChange("status") {
update = true
}
if v, ok := d.GetOk("status"); ok {
query["Method"] = StringPointer(v.(string))
}
if update {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcGet("ESA", "2024-09-10", action, query, request)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
d.Partial(false)
return resourceAliCloudEsaSiteDeliveryTaskRead(d, meta)
}
func resourceAliCloudEsaSiteDeliveryTaskDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
parts := strings.Split(d.Id(), ":")
action := "DeleteSiteDeliveryTask"
var request map[string]interface{}
var response map[string]interface{}
query := make(map[string]interface{})
var err error
request = make(map[string]interface{})
request["SiteId"] = parts[0]
request["TaskName"] = parts[1]
request["RegionId"] = client.RegionId
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError {
response, err = client.RpcPost("ESA", "2024-09-10", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if NotFoundError(err) {
return nil
}
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
return nil
}