1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

tf ファイルの required_version から tfenv 向けの .terraform-version を生成する

Last updated at Posted at 2022-05-03

背景

tfenv と .terraform-version ファイルを組み合わせることで、指定されたバージョンの Terraform を利用することができる。

.terraform-version ファイルは手動で作成する必要があるが、もうちょっと楽に作りたい。

対応

Terraform のヘルパーライブラリである terraform-config-inspect を利用し、Go を書く。

terraform-config-inspect の tfconfig に LoadModule というファンクションがあり、コールするだけで設定ファイルをパースしてくれる。

import "github.com/hashicorp/terraform-config-inspect/tfconfig"

module, _ := tfconfig.LoadModule(".")
constraint := module.RequiredCore[0]

これだけで constraint には "= 1.1.0" のようなバージョン制約の文字列が入る。
module の構造は以下の通り。

あとは正規表現などでバージョン部分を取り出し Print すれば標準出力できるので、リダイレクトでファイル化するとよい。

tfvergen

上記をバイナリ化した。

$ cat config.tf
terraform {
  required_version = "= 1.0.7"
}
  : (omitted)

のような tf ファイルがカレントディレクトリにある状態でバイナリを実行すると、required_version で指定されている .terraform-version を生成できる。

$ tfvergen > .terraform-version
$ cat .terraform-version
1.0.7

以下のようなワンライナーを実行すると、カレントディレクトリ以下の config.tf があるディレクトリに対して再帰的に .terraform-version を作成することができる (はず)。

$ find . -type f -name 'config.tf' | xargs -L1 bash -c 'cd $(dirname $1) && tfvergen > .terraform-version' _
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?