web-dev-qa-db-ja.com

Consulで定義されたデフォルト値を使用してTerraformでオプションの変数を定義する方法

いくつかの変数がConsulから読み込まれたTerraformスクリプトがあります。このスクリプトを2つの異なるシナリオで使用したいと思います。

  • シナリオ1.すべてがConsulのデフォルト値を使用して正しく動作します。
  • シナリオ2.一部の変数をオーバーライドする必要があります。

Terraformのドキュメントを確認したところ、Consulで定義された変数を別の変数のデフォルト値として使用できないことがわかりました。だから私は次の回避策に終わった:

## vars.tf
## emulating undefined value using "null" string
variable "my_optional_variable" { default = "null" } 

## main.tf
my_optional_variable = "${var.my_optional_variable == "null" ? data.consul_keys.my_optional_variable : var.my_optional_variable}"

誰かが私にそれを行うより良い方法を教えてもらえますか? 「null」文字列によるハッキングを回避する方法?

ありがとう

5
Maksym Demidas

別のオプションは coalesce で、空の文字列で機能するため、"null"文字列よりも少し優れています。

2つの変数/データソースを使用したシナリオまたは同様のケースを想定

variable "my_default_value" {
  default = "CentOS 7"
}
variable "my_optional_variable" {
  default = ""
}

"指定された引数から最初の空でない値を取得できます。少なくとも2つの引数を指定する必要があります。"

data "openstack_images_image_v2" "bastion_image" {
  name = "${coalesce(var.my_optional_variable, var.my_default_value)}"
}
6
KCD

オーバーライドファイル を使用できます。したがって、vars.tfが含まれている場合:

variable "my_optional_variable" {
  default = "null"
}

そして、以下を含むoverride.tf

variable "my_optional_variable" {
  default = "not null"
}

その場合、${var.my_optional_variable}not nullと等しくなるはずです。オーバーライドファイルは最後に読み込まれ、構成にマージされます。むしろ、ディレクトリ内の他の.tfファイルのように一緒に追加されます。

3
Brandon Miller