gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:58:38 24 4
gpt4 key购买 nike

(请注意:收到初步答案后,这个问题似乎不仅仅是传递变量的问题,而是模块化我的配置,请注意在底部我硬编码值但 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com