NaverCloudPlatform / terraform-provider-ncloud

Terraform NaverCloud provider
https://registry.terraform.io/providers/NaverCloudPlatform/ncloud/latest/docs
Mozilla Public License 2.0
94 stars 72 forks source link

Error when changing blockstorage with Terraform #339

Closed jaehanbyun closed 10 months ago

jaehanbyun commented 1 year ago

Terraform CLI and Terraform Ncloud Provider Version

Terraform version : v1.5.2
Ncloud Provider version : 2.3.18

Affected Resource(s)

Use Cases

classic 환경에서 instance에 부착된 블록 스토리지를 detach하는 Acceptance Test 과정에서 문제가 발생합니다. 예를 들어 terraform 상에서 block storage의 server_instance_no를 변경하고 apply를 하는 경우나 instance에 부착된 블록 스토리지를 delete할 때, 아래 Debug Output의 에러가 간헐적으로 발생합니다.


func TestAccResourceNcloudBlockStorage_vpc_ChangeServerInstance(t *testing.T) {
    var storageInstance server.BlockStorage
    name := fmt.Sprintf("tf-storage-update-%s", acctest.RandString(5))
    resourceName := "ncloud_block_storage.storage"

    resource.Test(t, resource.TestCase{
        PreCheck:                 func() { TestAccPreCheck(t) },
        ProtoV5ProviderFactories: ProtoV5ProviderFactories,
        CheckDestroy:             testAccCheckBlockStorageDestroy,
        Steps: []resource.TestStep{
            {
                Config: testAccBlockStorageVpcConfigUpdate(name, "ncloud_server.foo.id"),
                Check: resource.ComposeTestCheckFunc(
                    testAccCheckBlockStorageExistsWithProvider(resourceName, &storageInstance, GetTestProvider(true)),
                ),
            },
            {
                Config: testAccBlockStorageVpcConfigUpdate(name, "ncloud_server.bar.id"),
                Check: resource.ComposeTestCheckFunc(
                    testAccCheckBlockStorageExistsWithProvider(resourceName, &storageInstance, GetTestProvider(true)),
                ),
            },
        },
    })
}

Debug Output

go test -run TestAccResourceNcloudBlockStorage_classic_ChangeServerInstance -v -timeout 30m
=== RUN   TestAccResourceNcloudBlockStorage_classic_ChangeServerInstance
    testing_new.go:82: Error running post-test destroy, there may be dangling resources: exit status 1

        Error: Status: 500 Internal Server Error, Body: {
          "responseError": {
            "returnCode": "24002",
            "returnMessage": "It seems that storage tf-storage-update-zol1l-tf is mounted to server tf-storage-update-zol1l-bar. Please unmount the storage and try again."
          }
        }

--- FAIL: TestAccResourceNcloudBlockStorage_classic_ChangeServerInstance (649.59s)
FAIL
exit status 1
FAIL    github.com/terraform-providers/terraform-provider-ncloud/internal/service/server        650.004s

제가 찾아보기로, ncloud api classic deleteBlockStorageInstances에 위 Debug Output의 24002 Error가 명시되어 있어 Delete 간 발생한 에러라고 생각했으나, ncloud api classic detachBlockStorageInstances 호출 시 발생함을 확인하였습니다.
터미널에서 ncloud cli를 통한 detach api 동작 결과가 아래와 같습니다. 첫번째가 실패, 두번째가 성공 예시입니다. 간헐적으로 동작이 성공함을 확인하였습니다. image image

Steps to Reproduce

export TF_ACC=1
export NCLOUD_ACCESS_KEY=XXXXX
export NCLOUD_SECRET_KEY=xxxxx
export TF_ACC=1
go test -run TestAccResourceNcloudBlockStorage_classic -v -timeout=30m

Proposal

VPC 환경에서의 ncloud api vpc detachBlockStorageInstances 요청 시에는 제가 수차례 동작시켜본 바로는 전부 성공적으로 Detach가 행해졌습니다. 따라서 classic 환경에서의 ncloud detach api를 한 번 검토해주시면 좋겠습니다.

youngmn commented 10 months ago