(注意:最初の回答を受け取った後、この問題は変数の受け渡しに関する問題だけでなく、構成のモジュール化に関する問題のようです。下部に値をハードコーディングしているのに、UIから値の入力を求められることに注意してください)
次のディレクトリ構造に分割したプロジェクトがあります
master.tf
variables.tfvars
- providers/
-- digital_ocean/
--- digital_ocean.tf
--- variables.tf
-- cloud_flare/
--- cloud_flare.tf
--- variables.tf
- management/
-- jenkins/
--- jenkins-master.tf
Digital OceanトークンとCloudflareトークンを変数として、それぞれのモジュールに渡そうとしています。ルートディレクトリの下にあるものはすべて、モジュールとしてmaster.tf
にロードされます。
Varaibles.tfvarsファイルに次のものがあります。
cloudflare_email ="[email protected]"
cloudflare_token ="TOKEN_STRING"
do_token ="${DO_PAT}"
次の行が私のmaster.tf
に表示されます
variable "do_token" {}
module "digital_ocean" {
source = "./providers/digital_ocean"
token = "${var.do_token}"
}
variable "cloudflare_email" {}
variable "cloudflare_token" {}
module "cloud_flare" {
source = "./providers/cloud_flare"
email = "${var.cloudflare_email}"
token = "${var.cloudflare_token}"
}
私のdigital_oceanモジュールは次のようになります
variable "token" {}
provider "digitalocean" {
token = "${var.token}"
}
そしてcloudflareプロバイダーは次のようになります
variable "email" {}
variable "token" {}
provider "CloudFlare" {
email = "${var.email}"
token = "${var.token}"
}
DOでjenkinsマスターサーバーをセットアップする
resource "digitalocean_droplet" "jenkins-master" {
...
}
コマンドラインから実行していますterraform apply -var-file="variables.tfvars"
または、CLIを介してそれらを渡すことも試みました。
terraform apply \
-var "[email protected]" \
-var "cloudflare_token=TOKEN_STRING" \
-var "do_token=${DO_PAT}"
上記の宣言を使用すると、UIモードになり、変数を自動的に読み取るのではなく、それらの変数の入力を求められます。この動作をTerraformv0.9.8とv0.9.10の両方で複製しました。
すべてを別々のモジュールに分割し始める前は、変数を渡しても問題はありませんでした。
プロバイダー宣言をmaster.tf
にプルして、同じ動作でモジュール化することで奇妙な動作がないかどうかを確認しました。
また、値をプロバイダー宣言にハードコーディングしようとしましたが、同じ動作が発生しています。
variables.tfvars
ファイルの名前はterraform.tfvars
にする必要があります。
あたり ドキュメント :
Terraform.tfvarsファイルが現在のディレクトリに存在する場合、Terraformはそれを自動的にロードして変数を設定します。ファイルに別の名前が付けられている場合は、-var-fileフラグを直接使用してファイルを指定できます。これらのファイルは、Terraform構成ファイルと同じ構文です。また、Terraform構成ファイルと同様に、これらのファイルもJSONにすることができます。
独自のファイル命名規則を使用する場合は、次のように--var-file
フラグを使用して代替のtfvarsファイルを設定できます( リンクされたドキュメント による):
$ terraform plan \
-var-file="secret.tfvars" \
-var-file="production.tfvars"
CLIの場合、次のように変数の値のみを引用する必要があります。
terraform apply \
-var cloudflare_email="[email protected]" \
-var cloudflare_token="TOKEN_STRING" \
-var do_token="${DO_PAT}"
「Digital_oceanモジュール」と「cloudflareプロバイダー」の下で、2つの追加変数(「トークン」と「メール」)を宣言しましたが、変数に対応する値をキャプチャしていません。tfvars
Vairables.tfvarsは、以下のようにトークンと電子メールの値をキャプチャする必要があります。そうすれば、問題なくterraform apply -var-file="variables.tfvars"
を使用できます
cloudflare_email ="[email protected]"
cloudflare_token ="TOKEN_STRING"
do_token ="${DO_PAT}"
token ="token_string"
email ="[email protected]"
または、以下のようにvarで明示的に言及します
terraform apply -var "[email protected]" -var "cloudflare_token=TOKEN_STRING" -var "do_token=${DO_PAT}" -var "token=TOKEN_string -var "[email protected]"
お役に立てば幸いです