sacloud / terraform-provider-sakuracloud

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

ディスクリソースの項目長エラーについて #1170

Open fuchigami-strander opened 4 months ago

fuchigami-strander commented 4 months ago

下記のようなシンプルなmain.tfファイルを作成し、

terraform {
  required_providers {
    sakuracloud = {
      source = "sacloud/sakuracloud"
      version = "2.25.0"
    }
  }
}
resource "sakuracloud_disk" "disk01"{
  name = "あいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいう"
  plan = "hdd"
  size = "100"
}

terraform plan を実行すると下記のようにエラーが発生します。

╷
│ Error: expected length of name to be in the range (1 - 64), got あいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいう
│
│   with sakuracloud_disk.disk01,
│   on main.tf line 10, in resource "sakuracloud_disk" "disk01":
│   10:   name = "あいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいう"
│
╵

同名のディスクをさくらクラウドの管理画面から作成すると、文字数エラーは発生しません。

プラグイン内でのバリデートで64文字ではなく64bytesとして取り扱いされているのではないかと推測しています。 ご確認をお願いいたします。

(Terraformのプラグインのコーディングついて知識がないのですが、私もできる限り該当箇所を探してみようと思います。)

fuchigami-strander commented 4 months ago

私、TerraformのプラグインにもGO言語にも明るくないため、 見当外れだったら申し訳ないのですが、

こちらから https://github.com/sacloud/terraform-provider-sakuracloud/blob/5714ff7c16db2ec988e975a2e48a4e1b75e96472/sakuracloud/schema.go#L35

この関数を呼び出しており、関数内で len() によって長さをチェックしているように推測しました https://github.com/hashicorp/terraform-plugin-sdk/blob/main/helper/validation/strings.go#L74

下記情報によると、len() が文字数ではなくバイト数を返すため、 https://zenn.dev/masafumi330/articles/3286ccbad98892

さくらのクラウド管理画面でのバリデーションと食い違っているのではないかと予想しております。 お手数ですが、ご確認のほどよろしくお願いいたします。

lvctr commented 4 months ago

Issue投稿と問題箇所のピンポイントまでありがとうございます。 対応いたしますので少々お待ちいただけると幸いです。 よろしくお願いします。

fuchigami-strander commented 4 months ago

早々にレスポンスいただきありがとうございます。 私の記載した情報が、少しでも調査の役に立っていれば幸いです。

続報のほど、お待ちしております。