digital-ocean - 如何通过 CLI 或 tfvars 文件将变量传递给 Terraform 模块?

标签 digital-ocean devops terraform configuration-management infrastructure

(请注意:收到初步答案后,这个问题似乎不仅仅是传递变量的问题,而是模块化我的配置,请注意在底部我硬编码值但 UI 提示我提供值)

Code example here

我有一个项目,我已经分解成以下目录结构

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 token 作为变量传递给它们各自的模块。根目录下的所有内容都加载到 master.tf作为一个模块。

我的 varaibles.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看看模块化它们是否有任何奇怪的行为,具有相同的行为。

我还尝试将值硬编码到提供程序声明中,并且遇到了相同的行为。

最佳答案

您的 variables.tfvars文件应命名为 terraform.tfvars .
根据 the docs :

If a terraform.tfvars file is present in the current directory, Terraform automatically loads it to populate variables. If the file is named something else, you can use the -var-file flag directly to specify a file. These files are the same syntax as Terraform configuration files. And like Terraform configuration files, these files can also be JSON.


如果您想使用自己的文件命名约定,可以使用 -var-file 设置替代 tfvars 文件。像这样的标志(根据 linked docs ):
$ terraform plan \
-var-file="secret.tfvars" \
-var-file="production.tfvars"
对于 CLI,您应该只引用变量的值,如下所示:
terraform apply \ 
-var cloudflare_email="service@email.com" \ 
-var cloudflare_token="TOKEN_STRING" \ 
-var do_token="${DO_PAT}"

关于digital-ocean - 如何通过 CLI 或 tfvars 文件将变量传递给 Terraform 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44878553/

相关文章:

Terraform v0.13 条件资源,值为 "count"

bash - 使用 SSH key 登录在 Git Bash 上不起作用,但在 Windows 命令提示符中起作用

php - 使用 NGINX : "no port in upstream php" error 配置管理员

jenkins - 具有多个命名空间的 Kubernetes 集群上下文

docker - hostpath 中的只读文件系统。因此无法挂载卷

tomcat - 无法获取 "remote-exec"以启动 tomcat

django - 截至 2019 年 9 月,使用从 Let's Encrypt Certbot 获得的 ssl 在 Digital Ocean 上托管 Django 应用程序

linux - 如何通过ssh让node app在 digital ocean 上存活

sonarqube - 无法将 SonarQube 分析结果与 VSTS 集成

azure - 运行 Terraform 脚本时绕过标记强制执行的 Azure 策略分配的最佳方法是什么?