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
中。
我在我的变量文件variables.tfvars中有以下内容:
cloudflare_email ="service@email.com"
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 "cloudflare_email=service@email.com" \
-var "cloudflare_token=TOKEN_STRING" \
-var "do_token=${DO_PAT}"
通过上述声明,它将进入UI模式并提示我输入这些变量,而不是自动读取它们。我已经在Terraform v0.9.8和v0.9.10上复制了这种行为。
在我开始将所有内容分成单独的模块之前,传递变量没有任何问题。
我尝试将提供者声明移到master.tf
中,以查看是否存在模块化时的任何奇怪行为,结果出现相同的行为。
我还尝试将值硬编码到提供者声明中,并且遇到了相同的行为。
terraform init
命令? - BMWterraform apply \ -var cloudflare_email="service@email.com" \ -var cloudflare_token="TOKEN_STRING" \ -var do_token="${DO_PAT}"
- vageli