Closed yamamoto-febc closed 3 years ago
Fakeドライバー以外でも発生している可能性がある。
調査メモ:
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"
}
Step1: graph(apply後)
Step2: graph(tfファイル変更後、apply前)
この変更の影響と思われる https://github.com/hashicorp/terraform/pull/28165
このPRがマージされる前の最新コミット dd380d0b58dc9dda826d5057efc52eecde7c2c4e
で動作確認したところタイムアウトは発生しなかった。
Fakeドライバー以外でも発生することを確認。テストだけでなく実運用でも影響を受ける可能性があるため優先度をあげて対応する。
https://github.com/hashicorp/terraform/issues/28514#issuecomment-826826751
create_before_destroy
を指定することで回避可能とのこと。
Terraform 0.15+FakeドライバーでのAccTestで削除待ち処理がタイムアウトする。 Terraform 0.14+Fakeドライバーだと発生しない。
==UPDATE==
いくつかのリソースではリソースの削除時に他リソースから参照されているかをポーリングで確認、参照されていないことが確認できたら削除という処理を行なっている。
例: スイッチ。他リソースから接続されている場合は接続がなくなるまでポーリングして待つ
この処理がTerraform 0.15になってからタイムアウトするようになった。