Closed yamamoto-febc closed 4 years ago
related: #485
親子型リソースにて親リソースがアイコンIDを持つ、かつ子リソースが独立したAPIエンドポイントを持たず親リソースと共通のAPIエンドポイントを用いる場合にエラーとなるケースがある。
resource sakuracloud_icon "icon" { name = "icon" # ... } resource sakuracloud_mobile_gateway "mgw" { name = "example" icon_id = sakuracloud_icon.icon.id # ... } resource sakuracloud_mobile_gateway_static_route "r1" { mobile_gateway_id = sakuracloud_mobile_gateway.mgw.id prefix = "192.168.10.0/24" next_hop = "192.168.11.1" }
# 以下を残して以外は削除 resource sakuracloud_mobile_gateway "mgw" { name = "example" # ... }
この時、以下のAPIが呼ばれる。
DELETE /icon/:id
PUT /appliance/:id
この時、A-B、B-Cはtfファイル 上の依存関係が存在するため操作順序は確定的となるが、 A-Cは直接依存関係になく同時に実行されうる。
Cについて、libsacloud v1ではUpdateSettingなどの対象の値のみを指定するメソッドを利用していたが、libsacloud v2では直接対応する対象となるメソッドが存在せず、代わりにPatchメソッドが提供されている。
UpdateSetting
Patch
しかし、Patchメソッドは内部的にRead->Updateを呼び出しているため、以下のような順でAPI呼び出しが行われる可能性がある。
Read
Update
GET /appliance/:id
Delete /icon/:id
1で取得したアイコンIDを3で用いてしまうことで以下のようなエラーとなる。
&sacloud.APIErrorResponse{ IsFatal:true, Serial:"xxx", Status:"400 Bad Request", ErrorCode:"param_res_not_found", ErrorMessage:"不適切な要求です。パラメータで指定されたリソースが存在しません。IDをご確認ください。" }
開発中のv-next系のみ。 現在リリースされているterraform-provider-sakuracloud v1系では発生しない。
10c28517b313da5058eb1886a6fbbd44c988db12 にてモバイルゲートウェイが対応。 他のリソースにも同様の対応を行う。
他のリソースも対応済みなためクローズ
related: #485
親子型リソースにて親リソースがアイコンIDを持つ、かつ子リソースが独立したAPIエンドポイントを持たず親リソースと共通のAPIエンドポイントを用いる場合にエラーとなるケースがある。
詳細/再現
この時、以下のAPIが呼ばれる。
DELETE /icon/:id
)PUT /appliance/:id
)PUT /appliance/:id
)この時、A-B、B-Cはtfファイル 上の依存関係が存在するため操作順序は確定的となるが、 A-Cは直接依存関係になく同時に実行されうる。
Cについて、libsacloud v1では
UpdateSetting
などの対象の値のみを指定するメソッドを利用していたが、libsacloud v2では直接対応する対象となるメソッドが存在せず、代わりにPatch
メソッドが提供されている。しかし、
Patch
メソッドは内部的にRead
->Update
を呼び出しているため、以下のような順でAPI呼び出しが行われる可能性がある。GET /appliance/:id
Delete /icon/:id
PUT /appliance/:id
1で取得したアイコンIDを3で用いてしまうことで以下のようなエラーとなる。
対象リソース
対象バージョン
開発中のv-next系のみ。 現在リリースされているterraform-provider-sakuracloud v1系では発生しない。