diff --git a/alicloud/resource_alicloud_oss_bucket.go b/alicloud/resource_alicloud_oss_bucket.go index 1d8d9d22e92d..670504e5eb43 100644 --- a/alicloud/resource_alicloud_oss_bucket.go +++ b/alicloud/resource_alicloud_oss_bucket.go @@ -29,8 +29,8 @@ func resourceAlicloudOssBucket() *schema.Resource { Type: schema.TypeString, Optional: true, ForceNew: true, + Computed: true, ValidateFunc: StringLenBetween(3, 63), - Default: resource.PrefixedUniqueId("tf-oss-bucket-"), }, "acl": { @@ -485,7 +485,16 @@ func resourceAlicloudOssBucket() *schema.Resource { func resourceAlicloudOssBucketCreate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) - request := map[string]string{"bucketName": d.Get("bucket").(string)} + var bucketName string + if v, ok := d.GetOk("bucket"); ok && v != "" { + bucketName = v.(string) + } else { + bucketName = resource.PrefixedUniqueId("tf-oss-bucket-") + if len(bucketName) > 63 { + bucketName = bucketName[:63] + } + } + request := map[string]string{"bucketName": bucketName} var requestInfo *oss.Client raw, err := client.WithOssClient(func(ossClient *oss.Client) (interface{}, error) { requestInfo = ossClient @@ -507,7 +516,7 @@ func resourceAlicloudOssBucketCreate(d *schema.ResourceData, meta interface{}) e } req := Request{ - d.Get("bucket").(string), + bucketName, oss.StorageClass(oss.StorageClassType(d.Get("storage_class").(string))), oss.RedundancyType(oss.DataRedundancyType(d.Get("redundancy_type").(string))), oss.ACL(oss.ACLType(d.Get("acl").(string))), @@ -1715,7 +1724,7 @@ func resourceAlicloudOssBucketDelete(d *schema.ResourceData, meta interface{}) e if IsExpectedErrors(err, []string{"BucketNotEmpty"}) { if d.Get("force_destroy").(bool) { raw, er := client.WithOssClient(func(ossClient *oss.Client) (interface{}, error) { - bucket, _ := ossClient.Bucket(d.Get("bucket").(string)) + bucket, _ := ossClient.Bucket(d.Id()) lor, err := bucket.ListObjectVersions() if err != nil { return nil, WrapErrorf(err, DefaultErrorMsg, d.Id(), "ListObjectVersions", AliyunOssGoSdk) diff --git a/alicloud/resource_alicloud_oss_bucket_test.go b/alicloud/resource_alicloud_oss_bucket_test.go index 2ad97d146fc6..d771fdb3b458 100644 --- a/alicloud/resource_alicloud_oss_bucket_test.go +++ b/alicloud/resource_alicloud_oss_bucket_test.go @@ -910,6 +910,53 @@ func TestAccAliCloudOssBucketBasic1(t *testing.T) { }) } +func TestAccAliCloudOssBucketBasic_no_set_name(t *testing.T) { + var v oss.GetBucketInfoResult + + resourceId := "alicloud_oss_bucket.default" + ra := resourceAttrInit(resourceId, ossBucketBasicMap) + + serviceFunc := func() interface{} { + return &OssService{testAccProvider.Meta().(*connectivity.AliyunClient)} + } + rc := resourceCheckInit(resourceId, &v, serviceFunc) + + rac := resourceAttrCheckInit(rc, ra) + + testAccCheck := rac.resourceAttrMapUpdateSet() + rand := acctest.RandIntRange(1000000, 9999999) + name := fmt.Sprintf("tf-testacc-bucket-%d", rand) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceOssBucketConfigBasic) + resource.Test(t, resource.TestCase{ + PreCheck: func() { + testAccPreCheck(t) + }, + // module name + IDRefreshName: resourceId, + Providers: testAccProviders, + CheckDestroy: rac.checkResourceDestroy(), + Steps: []resource.TestStep{ + { + Config: testAccConfig(map[string]interface{}{}), + Check: resource.ComposeTestCheckFunc( + testAccCheck(map[string]string{ + "bucket": CHECKSET, + "acl": "private", + "access_monitor.#": "1", + "access_monitor.0.status": "Disabled", + "resource_group_id": CHECKSET, + }), + ), + }, + { + ResourceName: resourceId, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"force_destroy", "lifecycle_rule_allow_same_action_overlap"}, + }, + }, + }) +} func TestAccAliCloudOssBucketColdArchive(t *testing.T) { var v oss.GetBucketInfoResult