Closed mapk0y closed 7 years ago
以下の組み合わせでも同様の現象を確認
パケットフィルタの複数あるルールのうち一つを削除し terraform apply を実施した際にエラーとなります。
terraform apply
その場合、該当のパケットフィルタは削除され割当されていたサーバのパケットフィルタは未適用となってしまい、terraform plan を再度適用すると新たにパケットフィルタが作成され、サーバにも適用されて想定通りの環境になります。
terraform plan
パケットフィルタのルールに以下のような差分がある場合に発生します。 次に似たようなルールがあることで差分の検出がおかしいのでしょうか。
$ diff -U10 02_packet_filter.tf.before 02_packet_filter.tf.after --- 02_packet_filter.tf.before 2017-07-12 01:19:07.754888809 +0900 +++ 02_packet_filter.tf.after 2017-07-12 14:09:01.635086577 +0900 @@ -26,22 +26,16 @@ allow = true description = "Allow return udp packet from all" } expressions = { protocol = "icmp" source_nw = "0.0.0.0/0" allow = true description = "Allow icmp from all" } expressions = { - protocol = "fragment" - source_nw = "0.0.0.0/0" - allow = true - description = "Allow fragment from all" - } - expressions = { protocol = "ip" source_nw = "0.0.0.0/0" allow = false description = "Deny from all" } }
以下に tf ファイルなどをまとめてあります(今回の再現では不要なファイルも含まれています)。
mapk0y/sakura-terraform-packet-filter-test
ご報告ありがとうございます!
エラーの再現ができました。
パケットフィルタのルール更新時に意図せずリソースの再生成が行われてしまっているようです。
@mapk0y
修正しました。ご報告ありがとうございました!!
環境
以下の組み合わせでも同様の現象を確認
事象
パケットフィルタの複数あるルールのうち一つを削除し
terraform apply
を実施した際にエラーとなります。その場合、該当のパケットフィルタは削除され割当されていたサーバのパケットフィルタは未適用となってしまい、
terraform plan
を再度適用すると新たにパケットフィルタが作成され、サーバにも適用されて想定通りの環境になります。再現方法
パケットフィルタのルールに以下のような差分がある場合に発生します。
次に似たようなルールがあることで差分の検出がおかしいのでしょうか。
以下に tf ファイルなどをまとめてあります(今回の再現では不要なファイルも含まれています)。
mapk0y/sakura-terraform-packet-filter-test
terraform plan/apply を実行したログ
```console $ docker-compose run --rm terraform plan Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. sakuracloud_packet_filter.Rules: Refreshing state... (ID: 112900885360) sakuracloud_ssh_key.setup_keypair: Refreshing state... (ID: 112900885327) data.sakuracloud_archive.ubuntu: Refreshing state... sakuracloud_disk.main_disk: Refreshing state... (ID: 112900885329) sakuracloud_server.main_server: Refreshing state... (ID: 112900885337) The Terraform execution plan has been generated and is shown below. Resources are shown in alphabetical order for quick scanning. Green resources will be created (or destroyed and then created if an existing resource exists), yellow resources are being changed in-place, and red resources will be destroyed. Cyan entries are data sources to be read. Note: You didn't specify an "-out" parameter to save this plan, so when "apply" is called, Terraform can't guarantee this is what will execute. -/+ sakuracloud_packet_filter.Rules description: "Sample Rules" => "Sample Rules" expressions.#: "5" => "4" expressions.0.allow: "true" => "true" expressions.0.description: "Allow return tcp packet from all" => "Allow return tcp packet from all" expressions.0.dest_port: "32768-61000" => "32768-61000" expressions.0.protocol: "tcp" => "tcp" expressions.0.source_nw: "0.0.0.0/0" => "0.0.0.0/0" expressions.1.allow: "true" => "true" expressions.1.description: "Allow return udp packet from all" => "Allow return udp packet from all" expressions.1.dest_port: "32768-61000" => "32768-61000" expressions.1.protocol: "udp" => "udp" expressions.1.source_nw: "0.0.0.0/0" => "0.0.0.0/0" expressions.2.allow: "true" => "true" expressions.2.description: "Allow icmp from all" => "Allow icmp from all" expressions.2.protocol: "icmp" => "icmp" expressions.2.source_nw: "0.0.0.0/0" => "0.0.0.0/0" expressions.3.allow: "true" => "false" expressions.3.description: "Allow fragment from all" => "Deny from all" expressions.3.protocol: "fragment" => "ip" (forces new resource) expressions.3.source_nw: "0.0.0.0/0" => "0.0.0.0/0" expressions.4.allow: "false" => "true" expressions.4.description: "Deny from all" => "" expressions.4.protocol: "ip" => "" (forces new resource) expressions.4.source_nw: "0.0.0.0/0" => "" name: "Rules" => "Rules" zone: "tk1a" => "