diff --git a/alicloud/provider.go b/alicloud/provider.go index 60fe4e8ad3e9..96a15cbeda93 100644 --- a/alicloud/provider.go +++ b/alicloud/provider.go @@ -1588,7 +1588,7 @@ func Provider() terraform.ResourceProvider { "alicloud_ecs_storage_capacity_unit": resourceAlicloudEcsStorageCapacityUnit(), "alicloud_nas_recycle_bin": resourceAlicloudNasRecycleBin(), "alicloud_dbfs_snapshot": resourceAliCloudDbfsSnapshot(), - "alicloud_dbfs_instance_attachment": resourceAlicloudDbfsInstanceAttachment(), + "alicloud_dbfs_instance_attachment": resourceAliCloudDbfsInstanceAttachment(), "alicloud_dts_migration_job": resourceAlicloudDtsMigrationJob(), "alicloud_dts_migration_instance": resourceAlicloudDtsMigrationInstance(), "alicloud_mse_gateway": resourceAlicloudMseGateway(), diff --git a/alicloud/resource_alicloud_dbfs_instance_attachment.go b/alicloud/resource_alicloud_dbfs_instance_attachment.go index 38eb44dd5d26..b0681bfd5762 100644 --- a/alicloud/resource_alicloud_dbfs_instance_attachment.go +++ b/alicloud/resource_alicloud_dbfs_instance_attachment.go @@ -11,11 +11,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/helper/schema" ) -func resourceAlicloudDbfsInstanceAttachment() *schema.Resource { +func resourceAliCloudDbfsInstanceAttachment() *schema.Resource { return &schema.Resource{ - Create: resourceAlicloudDbfsInstanceAttachmentCreate, - Read: resourceAlicloudDbfsInstanceAttachmentRead, - Delete: resourceAlicloudDbfsInstanceAttachmentDelete, + Create: resourceAliCloudDbfsInstanceAttachmentCreate, + Read: resourceAliCloudDbfsInstanceAttachmentRead, + Delete: resourceAliCloudDbfsInstanceAttachmentDelete, Importer: &schema.ResourceImporter{ State: schema.ImportStatePassthrough, }, @@ -24,6 +24,11 @@ func resourceAlicloudDbfsInstanceAttachment() *schema.Resource { Delete: schema.DefaultTimeout(5 * time.Minute), }, Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, "ecs_id": { Type: schema.TypeString, Required: true, @@ -33,17 +38,13 @@ func resourceAlicloudDbfsInstanceAttachment() *schema.Resource { Type: schema.TypeString, Computed: true, }, - "instance_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - }, }, } } -func resourceAlicloudDbfsInstanceAttachmentCreate(d *schema.ResourceData, meta interface{}) error { +func resourceAliCloudDbfsInstanceAttachmentCreate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) + dbfsService := DbfsService{client} var response map[string]interface{} action := "AttachDbfs" request := make(map[string]interface{}) @@ -51,13 +52,14 @@ func resourceAlicloudDbfsInstanceAttachmentCreate(d *schema.ResourceData, meta i if err != nil { return WrapError(err) } - request["ECSInstanceId"] = d.Get("ecs_id") + request["FsId"] = d.Get("instance_id") + request["ECSInstanceId"] = d.Get("ecs_id") runtime := util.RuntimeOptions{} runtime.SetAutoretry(true) wait := incrementalWait(3*time.Second, 3*time.Second) - err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError { + err = resource.Retry(client.GetRetryTimeout(d.Timeout(schema.TimeoutCreate)), func() *resource.RetryError { response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2020-04-18"), StringPointer("AK"), nil, request, &runtime) if err != nil { if NeedRetry(err) { @@ -69,71 +71,73 @@ func resourceAlicloudDbfsInstanceAttachmentCreate(d *schema.ResourceData, meta i return nil }) addDebug(action, response, request) + if err != nil { return WrapErrorf(err, DefaultErrorMsg, "alicloud_dbfs_instance_attachment", action, AlibabaCloudSdkGoERROR) } - d.SetId(fmt.Sprint(request["FsId"], ":", request["ECSInstanceId"])) - dbfsService := DbfsService{client} + d.SetId(fmt.Sprintf("%v:%v", request["FsId"], request["ECSInstanceId"])) + stateConf := BuildStateConf([]string{}, []string{"attached"}, d.Timeout(schema.TimeoutCreate), 5*time.Second, dbfsService.DbfsInstanceStateRefreshFunc(fmt.Sprint(request["FsId"]), []string{})) if _, err := stateConf.WaitForState(); err != nil { return WrapErrorf(err, IdMsg, d.Id()) } - return resourceAlicloudDbfsInstanceAttachmentRead(d, meta) + return resourceAliCloudDbfsInstanceAttachmentRead(d, meta) } -func resourceAlicloudDbfsInstanceAttachmentRead(d *schema.ResourceData, meta interface{}) error { + +func resourceAliCloudDbfsInstanceAttachmentRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) dbfsService := DbfsService{client} - parts, err := ParseResourceId(d.Id(), 2) - if err != nil { - return WrapError(err) - } + object, err := dbfsService.DescribeDbfsInstanceAttachment(d.Id()) if err != nil { - if NotFoundError(err) { + if !d.IsNewResource() && NotFoundError(err) { log.Printf("[DEBUG] Resource alicloud_dbfs_instance_attachment dbfsService.DescribeDbfsInstanceAttachment Failed!!! %s", err) d.SetId("") return nil } return WrapError(err) } - d.Set("status", object["Status"]) - d.Set("instance_id", object["FsId"]) - if ecsListList, ok := object["EcsList"]; ok && ecsListList != nil { - for _, ecsListListItem := range ecsListList.([]interface{}) { - if ecsListListItemMap, ok := ecsListListItem.(map[string]interface{}); ok { - if ok && ecsListListItemMap["EcsId"] == parts[1] { - d.Set("ecs_id", ecsListListItemMap["EcsId"]) - break - } - } - } + + parts, err := ParseResourceId(d.Id(), 2) + if err != nil { + return WrapError(err) } + + d.Set("instance_id", object["FsId"]) + d.Set("ecs_id", parts[1]) + d.Set("status", object["Status"]) + return nil } -func resourceAlicloudDbfsInstanceAttachmentDelete(d *schema.ResourceData, meta interface{}) error { +func resourceAliCloudDbfsInstanceAttachmentDelete(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) dbfsService := DbfsService{client} action := "DetachDbfs" var response map[string]interface{} + conn, err := client.NewDbfsClient() if err != nil { return WrapError(err) } + parts, err := ParseResourceId(d.Id(), 2) if err != nil { return WrapError(err) } + request := map[string]interface{}{ "FsId": parts[0], "ECSInstanceId": parts[1], } + runtime := util.RuntimeOptions{} + runtime.SetAutoretry(true) wait := incrementalWait(3*time.Second, 3*time.Second) - err = resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError { - response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2020-04-18"), StringPointer("AK"), nil, request, &util.RuntimeOptions{}) + err = resource.Retry(client.GetRetryTimeout(d.Timeout(schema.TimeoutDelete)), func() *resource.RetryError { + response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2020-04-18"), StringPointer("AK"), nil, request, &runtime) if err != nil { if NeedRetry(err) { wait() @@ -144,12 +148,15 @@ func resourceAlicloudDbfsInstanceAttachmentDelete(d *schema.ResourceData, meta i return nil }) addDebug(action, response, request) + if err != nil { return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR) } + stateConf := BuildStateConf([]string{}, []string{"unattached"}, d.Timeout(schema.TimeoutDelete), 5*time.Second, dbfsService.DbfsInstanceStateRefreshFunc(parts[0], []string{})) if _, err := stateConf.WaitForState(); err != nil { return WrapErrorf(err, IdMsg, d.Id()) } + return nil } diff --git a/alicloud/resource_alicloud_dbfs_instance_attachment_test.go b/alicloud/resource_alicloud_dbfs_instance_attachment_test.go index 272225d00f46..667939d94d7f 100644 --- a/alicloud/resource_alicloud_dbfs_instance_attachment_test.go +++ b/alicloud/resource_alicloud_dbfs_instance_attachment_test.go @@ -17,10 +17,11 @@ import ( "github.com/stretchr/testify/assert" ) -func TestAccAlicloudDBFSInstanceAttachment_basic0(t *testing.T) { +func TestAccAliCloudDbfsInstanceAttachment_basic0(t *testing.T) { var v map[string]interface{} + checkoutSupportedRegions(t, true, connectivity.DBFSSystemSupportRegions) resourceId := "alicloud_dbfs_instance_attachment.default" - ra := resourceAttrInit(resourceId, AlicloudDBFSInstanceAttachmentMap0) + ra := resourceAttrInit(resourceId, AliCloudDbfsInstanceAttachmentMap0) rc := resourceCheckInitWithDescribeMethod(resourceId, &v, func() interface{} { return &DbfsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDbfsInstanceAttachment") @@ -28,11 +29,10 @@ func TestAccAlicloudDBFSInstanceAttachment_basic0(t *testing.T) { testAccCheck := rac.resourceAttrMapUpdateSet() rand := acctest.RandIntRange(10000, 99999) name := fmt.Sprintf("tf-testacc-dbfsinstanceattachment%d", rand) - testAccConfig := resourceTestAccConfigFunc(resourceId, name, AlicloudDBFSInstanceAttachmentBasicDependence0) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, AliCloudDbfsInstanceAttachmentBasicDependence0) resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) - testAccPreCheckWithRegions(t, true, connectivity.DBFSSystemSupportRegions) }, IDRefreshName: resourceId, Providers: testAccProviders, @@ -40,13 +40,13 @@ func TestAccAlicloudDBFSInstanceAttachment_basic0(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccConfig(map[string]interface{}{ + "instance_id": "${data.alicloud_dbfs_instances.default.instances.0.id}", "ecs_id": "${alicloud_instance.default.id}", - "instance_id": "${alicloud_dbfs_instance.default.id}", }), Check: resource.ComposeTestCheckFunc( testAccCheck(map[string]string{ - "ecs_id": CHECKSET, "instance_id": CHECKSET, + "ecs_id": CHECKSET, }), ), }, @@ -59,59 +59,64 @@ func TestAccAlicloudDBFSInstanceAttachment_basic0(t *testing.T) { }) } -var AlicloudDBFSInstanceAttachmentMap0 = map[string]string{} +var AliCloudDbfsInstanceAttachmentMap0 = map[string]string{ + "status": CHECKSET, +} -func AlicloudDBFSInstanceAttachmentBasicDependence0(name string) string { +func AliCloudDbfsInstanceAttachmentBasicDependence0(name string) string { return fmt.Sprintf(` -variable "name" { - default = "%s" -} -locals { - zone_id = "cn-hangzhou-i" -} -data "alicloud_instance_types" "example" { - availability_zone = local.zone_id - instance_type_family = "ecs.g7se" -} -data "alicloud_images" "example" { - instance_type = data.alicloud_instance_types.example.instance_types[length(data.alicloud_instance_types.example.instance_types) - 1].id - name_regex = "^aliyun_2_1903_x64_20G_alibase_20231221.vhd" - owners = "system" -} + variable "name" { + default = "%s" + } -data "alicloud_vpcs" "default" { - name_regex = "^default-NODELETING$" -} -data "alicloud_vswitches" "default" { - vpc_id = data.alicloud_vpcs.default.ids[0] - zone_id = local.zone_id -} + locals { + zone_id = "cn-hangzhou-i" + } -resource "alicloud_security_group" "example" { - name = var.name - vpc_id = data.alicloud_vpcs.default.ids[0] -} + data "alicloud_dbfs_instances" "default" { + } -resource "alicloud_instance" "default" { - availability_zone = local.zone_id - instance_name = var.name - image_id = data.alicloud_images.example.images.0.id - instance_type = data.alicloud_instance_types.example.instance_types[length(data.alicloud_instance_types.example.instance_types) - 1].id - security_groups = [alicloud_security_group.example.id] - vswitch_id = data.alicloud_vswitches.default.ids.0 - system_disk_category = "cloud_essd" -} -resource "alicloud_dbfs_instance" "default" { - category = "enterprise" - zone_id = alicloud_instance.default.availability_zone - performance_level = "PL1" - instance_name = var.name - size = 100 -} + data "alicloud_instance_types" "default" { + availability_zone = local.zone_id + instance_type_family = "ecs.g7se" + } + + data "alicloud_images" "default" { + instance_type = data.alicloud_instance_types.default.instance_types.0.id + name_regex = "^aliyun_2_19" + owners = "system" + } + + data "alicloud_vpcs" "default" { + name_regex = "^default-NODELETING$" + } + + data "alicloud_vswitches" "default" { + vpc_id = data.alicloud_vpcs.default.ids.0 + zone_id = local.zone_id + } + + resource "alicloud_security_group" "default" { + name = var.name + vpc_id = data.alicloud_vpcs.default.ids.0 + } + + resource "alicloud_instance" "default" { + image_id = data.alicloud_images.default.images.0.id + instance_type = data.alicloud_instance_types.default.instance_types.0.id + security_groups = alicloud_security_group.default.*.id + internet_charge_type = "PayByTraffic" + internet_max_bandwidth_out = "10" + availability_zone = data.alicloud_instance_types.default.instance_types.0.availability_zones.0 + instance_charge_type = "PostPaid" + system_disk_category = "cloud_essd" + vswitch_id = data.alicloud_vswitches.default.ids.0 + instance_name = var.name + } `, name) } -func TestUnitAlicloudDBFSInstanceAttachment(t *testing.T) { +func TestUnitAliCloudDbfsInstanceAttachment(t *testing.T) { p := Provider().(*schema.Provider).ResourcesMap d, _ := schema.InternalMap(p["alicloud_dbfs_instance_attachment"].Schema).Data(nil, nil) dCreate, _ := schema.InternalMap(p["alicloud_dbfs_instance_attachment"].Schema).Data(nil, nil) @@ -202,7 +207,7 @@ func TestUnitAlicloudDBFSInstanceAttachment(t *testing.T) { StatusCode: tea.Int(400), } }) - err := resourceAlicloudDbfsInstanceAttachmentCreate(d, rawClient) + err := resourceAliCloudDbfsInstanceAttachmentCreate(d, rawClient) patches.Reset() assert.NotNil(t, err) }) @@ -219,7 +224,7 @@ func TestUnitAlicloudDBFSInstanceAttachment(t *testing.T) { } return responseMock["CreateNormal"]("") }) - err := resourceAlicloudDbfsInstanceAttachmentCreate(d, rawClient) + err := resourceAliCloudDbfsInstanceAttachmentCreate(d, rawClient) patches.Reset() assert.NotNil(t, err) }) @@ -236,7 +241,7 @@ func TestUnitAlicloudDBFSInstanceAttachment(t *testing.T) { } return responseMock["CreateNormal"]("") }) - err := resourceAlicloudDbfsInstanceAttachmentCreate(dCreate, rawClient) + err := resourceAliCloudDbfsInstanceAttachmentCreate(dCreate, rawClient) patches.Reset() assert.Nil(t, err) }) @@ -256,7 +261,7 @@ func TestUnitAlicloudDBFSInstanceAttachment(t *testing.T) { patchDescribe := gomonkey.ApplyMethod(reflect.TypeOf(&DbfsService{}), "DescribeDbfsInstanceAttachment", func(*DbfsService, string) (map[string]interface{}, error) { return responseMock["NoRetryError"]("NoRetryError") }) - err := resourceAlicloudDbfsInstanceAttachmentCreate(dCreate, rawClient) + err := resourceAliCloudDbfsInstanceAttachmentCreate(dCreate, rawClient) patches.Reset() patchDescribe.Reset() assert.NotNil(t, err) @@ -273,7 +278,7 @@ func TestUnitAlicloudDBFSInstanceAttachment(t *testing.T) { } return responseMock["CreateNormal"]("") }) - err := resourceAlicloudDbfsInstanceAttachmentCreate(d, rawClient) + err := resourceAliCloudDbfsInstanceAttachmentCreate(d, rawClient) patches.Reset() assert.NotNil(t, err) }) @@ -291,7 +296,7 @@ func TestUnitAlicloudDBFSInstanceAttachment(t *testing.T) { StatusCode: tea.Int(400), } }) - err := resourceAlicloudDbfsInstanceAttachmentDelete(d, rawClient) + err := resourceAliCloudDbfsInstanceAttachmentDelete(d, rawClient) patches.Reset() assert.NotNil(t, err) }) @@ -309,7 +314,7 @@ func TestUnitAlicloudDBFSInstanceAttachment(t *testing.T) { } return responseMock["DeleteNormal"]("") }) - err := resourceAlicloudDbfsInstanceAttachmentDelete(d, rawClient) + err := resourceAliCloudDbfsInstanceAttachmentDelete(d, rawClient) patches.Reset() assert.NotNil(t, err) }) @@ -324,7 +329,7 @@ func TestUnitAlicloudDBFSInstanceAttachment(t *testing.T) { } return responseMock["DeleteNormal"]("") }) - err := resourceAlicloudDbfsInstanceAttachmentDelete(d, rawClient) + err := resourceAliCloudDbfsInstanceAttachmentDelete(d, rawClient) patches.Reset() assert.Nil(t, err) }) @@ -342,7 +347,7 @@ func TestUnitAlicloudDBFSInstanceAttachment(t *testing.T) { patchDescribe := gomonkey.ApplyMethod(reflect.TypeOf(&DbfsService{}), "DescribeDbfsInstanceAttachment", func(*DbfsService, string) (map[string]interface{}, error) { return responseMock["NoRetryError"]("NoRetryError") }) - err := resourceAlicloudDbfsInstanceAttachmentDelete(d, rawClient) + err := resourceAliCloudDbfsInstanceAttachmentDelete(d, rawClient) patches.Reset() patchDescribe.Reset() assert.Nil(t, err) @@ -359,7 +364,7 @@ func TestUnitAlicloudDBFSInstanceAttachment(t *testing.T) { } return responseMock["DeleteNormal"]("") }) - err := resourceAlicloudDbfsInstanceAttachmentDelete(d, rawClient) + err := resourceAliCloudDbfsInstanceAttachmentDelete(d, rawClient) patches.Reset() assert.NotNil(t, err) }) @@ -376,7 +381,7 @@ func TestUnitAlicloudDBFSInstanceAttachment(t *testing.T) { } return responseMock["ReadNormal"]("") }) - err := resourceAlicloudDbfsInstanceAttachmentRead(d, rawClient) + err := resourceAliCloudDbfsInstanceAttachmentRead(d, rawClient) patchRequest.Reset() assert.Nil(t, err) }) @@ -391,7 +396,7 @@ func TestUnitAlicloudDBFSInstanceAttachment(t *testing.T) { } return responseMock["ReadNormal"]("") }) - err := resourceAlicloudDbfsInstanceAttachmentRead(d, rawClient) + err := resourceAliCloudDbfsInstanceAttachmentRead(d, rawClient) patcheDorequest.Reset() assert.NotNil(t, err) }) diff --git a/alicloud/service_alicloud_dbfs.go b/alicloud/service_alicloud_dbfs.go index 95a73252a233..ce3370e1613d 100644 --- a/alicloud/service_alicloud_dbfs.go +++ b/alicloud/service_alicloud_dbfs.go @@ -16,16 +16,19 @@ type DbfsService struct { func (s *DbfsService) DescribeDbfsInstance(id string) (object map[string]interface{}, err error) { var response map[string]interface{} + action := "ListDbfs" + conn, err := s.client.NewDbfsClient() if err != nil { return nil, WrapError(err) } - action := "ListDbfs" + request := map[string]interface{}{ "RegionId": s.client.RegionId, - "PageNumber": 1, "PageSize": PageSizeLarge, + "PageNumber": 1, } + idExist := false for { runtime := util.RuntimeOptions{} @@ -43,31 +46,39 @@ func (s *DbfsService) DescribeDbfsInstance(id string) (object map[string]interfa return nil }) addDebug(action, response, request) + if err != nil { return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } - v, err := jsonpath.Get("$.DBFSInfo", response) + + resp, err := jsonpath.Get("$.DBFSInfo", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.DBFSInfo", response) } - if len(v.([]interface{})) < 1 { - return object, WrapErrorf(Error(GetNotFoundMessage("DBFS", id)), NotFoundWithResponse, response) + + if v, ok := resp.([]interface{}); !ok || len(v) < 1 { + return object, WrapErrorf(Error(GetNotFoundMessage("Dbfs:Instance", id)), NotFoundWithResponse, response) } - for _, v := range v.([]interface{}) { + + for _, v := range resp.([]interface{}) { if fmt.Sprint(v.(map[string]interface{})["FsId"]) == id { idExist = true return v.(map[string]interface{}), nil } } - if len(v.([]interface{})) < request["PageSize"].(int) { + + if len(resp.([]interface{})) < request["PageSize"].(int) { break } + request["PageNumber"] = request["PageNumber"].(int) + 1 } + if !idExist { - return object, WrapErrorf(Error(GetNotFoundMessage("DBFS", id)), NotFoundWithResponse, response) + return object, WrapErrorf(Error(GetNotFoundMessage("Dbfs:Instance", id)), NotFoundWithResponse, response) } - return + + return object, nil } func (s *DbfsService) DescribeDbfsInstanceAttachment(id string) (object map[string]interface{}, err error) { @@ -75,10 +86,28 @@ func (s *DbfsService) DescribeDbfsInstanceAttachment(id string) (object map[stri if err != nil { return object, WrapError(err) } + object, err = s.DescribeDbfsInstance(parts[0]) if err != nil { return object, WrapError(err) } + + idExist := false + if ecsList, ok := object["EcsList"]; ok { + for _, ecs := range ecsList.([]interface{}) { + ecsArg := ecs.(map[string]interface{}) + + if ecsId, ok := ecsArg["EcsId"]; ok && fmt.Sprint(ecsId) == parts[1] { + idExist = true + return object, nil + } + } + } + + if !idExist { + return object, WrapErrorf(Error(GetNotFoundMessage("Dbfs:InstanceAttachment", id)), NotFoundMsg, ProviderERROR, fmt.Sprint(object["RequestId"])) + } + return object, nil } @@ -98,6 +127,7 @@ func (s *DbfsService) DbfsInstanceStateRefreshFunc(id string, failStates []strin return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"]))) } } + return object, fmt.Sprint(object["Status"]), nil } } diff --git a/website/docs/r/dbfs_instance_attachment.html.markdown b/website/docs/r/dbfs_instance_attachment.html.markdown index 2f21abdd05ce..b1baecc5ab54 100644 --- a/website/docs/r/dbfs_instance_attachment.html.markdown +++ b/website/docs/r/dbfs_instance_attachment.html.markdown @@ -4,14 +4,14 @@ layout: "alicloud" page_title: "Alicloud: alicloud_dbfs_instance_attachment" sidebar_current: "docs-alicloud-resource-dbfs-instance-attachment" description: |- - Provides a Alicloud DBFS Instance Attachment resource. + Provides a Alicloud Database File System (DBFS) Instance Attachment resource. --- # alicloud_dbfs_instance_attachment -Provides a DBFS Instance Attachment resource. +Provides a Database File System (DBFS) Instance Attachment resource. -For information about DBFS Instance Attachment and how to use it. +For information about Database File System (DBFS) Instance Attachment and how to use it, see [What is Snapshot](https://help.aliyun.com/zh/dbfs/developer-reference/api-dbfs-2020-04-18-attachdbfs). -> **NOTE:** Available since v1.156.0. @@ -27,56 +27,61 @@ Basic Usage ```terraform variable "name" { - default = "tf-example" + default = "terraform-example" } + provider "alicloud" { region = "cn-hangzhou" } + locals { zone_id = "cn-hangzhou-i" } -data "alicloud_instance_types" "example" { + +data "alicloud_dbfs_instances" "default" { +} + +data "alicloud_instance_types" "default" { availability_zone = local.zone_id instance_type_family = "ecs.g7se" } -data "alicloud_images" "example" { - instance_type = data.alicloud_instance_types.example.instance_types[length(data.alicloud_instance_types.example.instance_types) - 1].id - name_regex = "^aliyun_2_1903_x64_20G_alibase_20240628.vhd" + +data "alicloud_images" "default" { + instance_type = data.alicloud_instance_types.default.instance_types.0.id + name_regex = "^aliyun_2_19" owners = "system" } data "alicloud_vpcs" "default" { name_regex = "^default-NODELETING$" } + data "alicloud_vswitches" "default" { - vpc_id = data.alicloud_vpcs.default.ids[0] + vpc_id = data.alicloud_vpcs.default.ids.0 zone_id = local.zone_id } -resource "alicloud_security_group" "example" { +resource "alicloud_security_group" "default" { name = var.name - vpc_id = data.alicloud_vpcs.default.ids[0] + vpc_id = data.alicloud_vpcs.default.ids.0 } resource "alicloud_instance" "default" { - availability_zone = local.zone_id - instance_name = var.name - image_id = data.alicloud_images.example.images.0.id - instance_type = data.alicloud_instance_types.example.instance_types[length(data.alicloud_instance_types.example.instance_types) - 1].id - security_groups = [alicloud_security_group.example.id] - vswitch_id = data.alicloud_vswitches.default.ids.0 - system_disk_category = "cloud_essd" + image_id = data.alicloud_images.default.images.0.id + instance_type = data.alicloud_instance_types.default.instance_types.0.id + security_groups = alicloud_security_group.default.*.id + internet_charge_type = "PayByTraffic" + internet_max_bandwidth_out = "10" + availability_zone = data.alicloud_instance_types.default.instance_types.0.availability_zones.0 + instance_charge_type = "PostPaid" + system_disk_category = "cloud_essd" + vswitch_id = data.alicloud_vswitches.default.ids.0 + instance_name = var.name } -resource "alicloud_dbfs_instance" "default" { - category = "enterprise" - zone_id = alicloud_instance.default.availability_zone - performance_level = "PL1" - fs_name = var.name - size = 100 -} -resource "alicloud_dbfs_instance_attachment" "example" { + +resource "alicloud_dbfs_instance_attachment" "default" { + instance_id = data.alicloud_dbfs_instances.default.instances.0.id ecs_id = alicloud_instance.default.id - instance_id = alicloud_dbfs_instance.default.id } ``` @@ -84,26 +89,26 @@ resource "alicloud_dbfs_instance_attachment" "example" { The following arguments are supported: +* `instance_id` - (Required, ForceNew) The ID of the Database File System. * `ecs_id` - (Required, ForceNew) The ID of the ECS instance. -* `instance_id` - (Required, ForceNew) The ID of the database file system. ## Attributes Reference The following attributes are exported: -* `id` - The resource ID in terraform of Instance Attachment. The value formats as `:`. -* `status` -The status of Database file system. Valid values: `attached`, `attaching`, `unattached`, `detaching`. +* `id` - The resource ID in terraform of Instance Attachment. It formats as `:`. +* `status` -The status of Instance Attachment. ## Timeouts The `timeouts` block allows you to specify [timeouts](https://www.terraform.io/docs/configuration-0-11/resources.html#timeouts) for certain actions: -* `create` - (Defaults to 5 mins) Used when create the Instance. -* `delete` - (Defaults to 5 mins) Used when delete the Instance. +* `create` - (Defaults to 5 mins) Used when create the Instance Attachment . +* `delete` - (Defaults to 5 mins) Used when delete the Instance Attachment . ## Import -DBFS Instance Attachment can be imported using the id, e.g. +Database File System (DBFS) Instance Attachment can be imported using the id, e.g. ```shell $ terraform import alicloud_dbfs_instance_attachment.example :