sacloud / terraform-provider-sakuracloud

Terraform provider for SakuraCloud
https://docs.usacloud.jp/terraform
Apache License 2.0
71 stars 23 forks source link

Terraform 0.15でリソース削除時の参照解除待ち処理がタイムアウトする #820

Closed yamamoto-febc closed 3 years ago

yamamoto-febc commented 3 years ago
=== CONT  TestAccSakuraCloudServer_interfaces
    resource_sakuracloud_server_test.go:212: Step 4/4 error: Error running apply: exit status 1
        Error: deleting SakuraCloud Switch[100000000073] is failed: Switch[100000000073] is still being used by other resources: context deadline exceeded
        Error: deleting SakuraCloud Switch[100000000072] is failed: Switch[100000000072] is still being used by other resources: context deadline exceeded

Terraform 0.15+FakeドライバーでのAccTestで削除待ち処理がタイムアウトする。 Terraform 0.14+Fakeドライバーだと発生しない。

==UPDATE==

いくつかのリソースではリソースの削除時に他リソースから参照されているかをポーリングで確認、参照されていないことが確認できたら削除という処理を行なっている。

例: スイッチ。他リソースから接続されている場合は接続がなくなるまでポーリングして待つ

この処理がTerraform 0.15になってからタイムアウトするようになった。

yamamoto-febc commented 3 years ago

Fakeドライバー以外でも発生している可能性がある。

yamamoto-febc commented 3 years ago

調査メモ:

Step1:

resource "sakuracloud_server" "foobar" {
  name            = "example"
  private_host_id = sakuracloud_private_host.foobar.id
  network_interface {
    upstream = "shared"
  }

  force_shutdown = true
}
resource "sakuracloud_private_host" "foobar" {
  name        = "example"
}

Step2:

resource "sakuracloud_server" "foobar" {
  name = "example"

  network_interface {
    upstream = "shared"
  }

  force_shutdown = true
}

0.14まではStep2でサーバリソースの更新(プライベートホストからの切断)とプライベートホストの削除が並列で行われていた。
このためプライベートホスト削除時の待ち処理はサーバリソースが更新されるまでポーリングした後正常終了していた。
しかし0.15以降、先にプライベートホストの削除を行おうとしてポーリング処理がいつまでも完了せずにタイムアウトとなっている模様。

試しに以下のようにStep2の前に切断だけするとうまくいく。

resource "sakuracloud_server" "foobar" {
  name            = "example"
  network_interface {
    upstream = "shared"
  }

  force_shutdown = true
}
resource "sakuracloud_private_host" "foobar" {
  name        = "example"
}
yamamoto-febc commented 3 years ago

Step1: graph(apply後)

image

Step2: graph(tfファイル変更後、apply前)

image
yamamoto-febc commented 3 years ago

この変更の影響と思われる https://github.com/hashicorp/terraform/pull/28165

このPRがマージされる前の最新コミット dd380d0b58dc9dda826d5057efc52eecde7c2c4eで動作確認したところタイムアウトは発生しなかった。

yamamoto-febc commented 3 years ago

Fakeドライバー以外でも発生することを確認。テストだけでなく実運用でも影響を受ける可能性があるため優先度をあげて対応する。

yamamoto-febc commented 3 years ago

https://github.com/hashicorp/terraform/issues/28514#issuecomment-826826751

create_before_destroyを指定することで回避可能とのこと。