結論から書くとasdf-hashicorpに含まれるparse-legacy-fileがrequired_versionパラメータのパースができなくてエラーになっている。
このスクリプトがどのように使われているか正しく理解していないのだが、名前から察するに古いTerraformを使うプロジェクトにおいて使用するソフトウェアのバージョンを正しく検知するためのものだと思う。
rtxにおいてはこのエラーが出てしまうとrtx経由で何も操作できなくなってしまうのでとても困る。。。
これを回避するには ~/.config/rtx/config.toml
に以下の設定を行う。
[settings] legacy_version_file_disable_tools = ["terraform", "packer"]
手元の環境では、main.tfがあるとterraformだけでなくpacker経由のparse-legacy-fileもエラーになっていた(同じスクリプトだからね…)ので両方入れておくと良さそう。
なお、asdfでは ~/.asdfrc
に以下の設定を行うとよいらしい(未検証)。
legacy_version_file = no
別解: require_versionの書き方を変更して回避する
parse-legacy-fileで使われている正規表現をみていると ^=?[[:digit:]]+\.[[:digit:]]+.[[:digit:]]+
っとなっている。
そのため、main.tfにおいて以下のようにrequired_versionが指定されている場合 =
で始めるようにするとエラーがなくなる。
# 🆖 required_version = ">= 1.1.7" # 🆗 require_version = "=1.1.7"
しかしながら元々の意味合いが変わってしまうのでこの方法で回避するなら、asdf/rtx側でlegacy_version_file/legacy_version_file_disable_toolsを無効にしたほうが良いと思う。
おまけ: rtx settings setが動かない?
~/.config/rtx/config.toml
は rtx settings
で操作できるようなのだが、手元の環境ではエラーになってしまった。謎い
$ rtx settings get legacy_version_file_disable_tools [] $ rtx settings set legacy_version_file_disable_tools terraform rtx Unknown setting: legacy_version_file_disable_tools rtx Run with RTX_DEBUG=1 for more information
getはできるのだがsetにするとUnknownと言われてしまううーん。 過去のrtxバージョンで動いていたかは試していない。
$ rtx version 2023.9.1 linux-x64 (c6d59d7 2023-09-13)