alibabacloudstack/resource_apsarastack_oss_bucket_kms.go (170 lines of code) (raw):

package alibabacloudstack import ( "fmt" "log" "github.com/PaesslerAG/jsonpath" "github.com/aliyun/aliyun-oss-go-sdk/oss" "github.com/aliyun/terraform-provider-alibabacloudstack/alibabacloudstack/connectivity" "github.com/aliyun/terraform-provider-alibabacloudstack/alibabacloudstack/errmsgs" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) func resourceAlibabacloudStackOssBucketKms() *schema.Resource { resource := &schema.Resource{ DeprecationMessage: "oss_bucket already includes corresponding functions", Schema: map[string]*schema.Schema{ "bucket": { Type: schema.TypeString, Required: true, ForceNew: true, }, "sse_algorithm": { Type: schema.TypeString, Required: true, ForceNew: true, }, "kms_data_encryption": { Type: schema.TypeString, Optional: true, ForceNew: true, }, "kms_master_key_id": { Type: schema.TypeString, Optional: true, ForceNew: true, }, // "content3": { // Type: schema.TypeString, // Optional: true, // ConflictsWith: []string{"source3"}, // }, // // "acl3": { // Type: schema.TypeString, // Default: oss.ACLPrivate, // Optional: true, // ValidateFunc: validation.StringInSlice([]string{"private", "public-read", "public-read-write"}, false), // }, // // "content_type3": { // Type: schema.TypeString, // Optional: true, // Computed: true, // }, }, } setResourceFunc(resource, resourceAlibabacloudStackOssBucketKmsCreate, resourceAlibabacloudStackOssBucketKmsRead, nil, resourceAlibabacloudStackOssBucketKmsDelete) return resource } func resourceAlibabacloudStackOssBucketKmsCreate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) ossService := OssService{client} var requestInfo *oss.Client bucketName := d.Get("bucket").(string) det, err := ossService.DescribeOssBucket(bucketName) if err != nil { return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "alibabacloudstack_oss_bucket", "IsBucketExist", errmsgs.AlibabacloudStackLogGoSdkERROR) } sseAlgorithm := d.Get("sse_algorithm").(string) kmsDateEncryption := "" kmsMasterKeyID := "" if sseAlgorithm == "KMS" { kmsDateEncryption = d.Get("kms_data_encryption").(string) kmsMasterKeyID = d.Get("kms_master_key_id").(string) } if det.BucketInfo.Name == bucketName { request := client.NewCommonRequest("POST", "OneRouter", "2018-12-12", "DoOpenApi", "") mergeMaps(request.QueryParams, map[string]string{ "OpenApiAction": "PutBucketEncryption", "ProductName": "oss", "Params": fmt.Sprintf("{\"%s\":\"%s\"}", "BucketName", bucketName), "Content": fmt.Sprintf("%s%s%s%s%s%s%s", "<ServerSideEncryptionRule><ApplyServerSideEncryptionByDefault><SSEAlgorithm>", sseAlgorithm, "</SSEAlgorithm><KMSDataEncryption>", kmsDateEncryption, "</KMSDataEncryption><KMSMasterKeyID>", kmsMasterKeyID, "</KMSMasterKeyID></ApplyServerSideEncryptionByDefault></ServerSideEncryptionRule>"), }) bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return errmsgs.WrapErrorf(err, "Process Common Request Failed") } if ossNotFoundError(err) { return errmsgs.WrapErrorf(err, errmsgs.NotFoundMsg, errmsgs.AlibabacloudStackLogGoSdkERROR) } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, bucketName, "PutBucketEncryption", errmsgs.AlibabacloudStackLogGoSdkERROR, errmsg) } addDebug("PutBucketEncryption", bresponse, requestInfo, request) if bresponse.GetHttpStatus() != 200 { errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_oss_bucket", "PutBucketEncryption", errmsgs.AlibabacloudStackLogGoSdkERROR, errmsg) } log.Printf("Enter for logging") } if err != nil { return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "alibabacloudstack_oss_bucket", "Bucket Not Found", errmsgs.AlibabacloudStackLogGoSdkERROR) } d.SetId(bucketName) return nil } func resourceAlibabacloudStackOssBucketKmsRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) ossService := OssService{client} var requestInfo *oss.Client bucketName := d.Get("bucket").(string) det, err := ossService.DescribeOssBucket(bucketName) if err != nil { return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "alibabacloudstack_oss_bucket", "IsBucketExist", errmsgs.AlibabacloudStackLogGoSdkERROR) } if det.BucketInfo.Name == bucketName { request := client.NewCommonRequest("GET", "OneRouter", "2018-12-12", "DoOpenApi", "") mergeMaps(request.QueryParams, map[string]string{ "AccountInfo": "123456", "SignatureVersion": "1.0", "OpenApiAction": "GetBucketEncryption", "ProductName": "oss", "Params": fmt.Sprintf("{\"%s\":\"%s\"}", "BucketName", bucketName), }) bresponse, err := client.ProcessCommonRequest(request) log.Printf("Response of GetBucketEncryption: %s", bresponse) if err != nil { if bresponse == nil { return errmsgs.WrapErrorf(err, "Process Common Request Failed") } if ossNotFoundError(err) { return errmsgs.WrapErrorf(err, errmsgs.NotFoundMsg, errmsgs.AlibabacloudStackLogGoSdkERROR) } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, bucketName, "GetBucketEncryption", errmsgs.AlibabacloudStackLogGoSdkERROR, errmsg) } addDebug("BucketEncryption", bresponse, requestInfo, request) log.Printf("Bresponse ossbucket check") log.Printf("Bresponse ossbucket %s", bresponse) if bresponse.GetHttpStatus() != 200 { errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_oss_bucket", "GetBucketEncryption", errmsgs.AlibabacloudStackLogGoSdkERROR, errmsg) } log.Printf("Enter for logging") encryption_data, err := jsonpath.Get("$.Data.ServerSideEncryptionRule.ApplyServerSideEncryptionByDefault", bresponse) if err != nil { return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "alibabacloudstack_oss_bucket", "Bucket Not Found", errmsgs.AlibabacloudStackLogGoSdkERROR) } encryption := encryption_data.(map[string]interface{}) d.Set("sse_algorithm", encryption["SSEAlgorithm"].(string)) d.Set("kms_data_encryption", encryption["KMSDataEncryption"].(string)) } if err != nil { return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "alibabacloudstack_oss_bucket", "Bucket Not Found", errmsgs.AlibabacloudStackLogGoSdkERROR) } return nil } func resourceAlibabacloudStackOssBucketKmsDelete(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) ossService := OssService{client} var requestInfo *oss.Client det, err := ossService.DescribeOssBucket(d.Id()) if err != nil { return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "IsBucketExist", errmsgs.AlibabacloudStackLogGoSdkERROR) } addDebug("IsBucketExist", det.BucketInfo, requestInfo, map[string]string{"bucketName": d.Id()}) if det.BucketInfo.Name == "" { return nil } request := client.NewCommonRequest("DELETE", "OneRouter", "2018-12-12", "DoOpenApi", "") mergeMaps(request.QueryParams, map[string]string{ "OpenApiAction": "DeleteBucketEncryption", "ProductName": "oss", "Params": fmt.Sprintf("{\"%s\":\"%s\"}", "BucketName", d.Id()), }) bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return errmsgs.WrapErrorf(err, "Process Common Request Failed") } if ossNotFoundError(err) { return nil } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) err = errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "OssBucketKms", "DeleteBucketEncryption", errmsgs.AlibabacloudStackSdkGoERROR, errmsg) return err } return nil }