cod*_*ard 5 infrastructure configuration-management digital-ocean terraform devops
(请注意:在收到初始答案后,此问题似乎不仅仅是传递变量的问题,而是通过模块化配置,请注意底部我对值进行硬编码,但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
Run Code Online (Sandbox Code Playgroud)
我试图将我的Digital Ocean和Cloudflare令牌作为变量传递给它们各自的模块。根目录下的所有内容均master.tf作为模块加载。
我的varaibles.tfvars文件中包含以下内容:
cloudflare_email ="service@email.com"
cloudflare_token ="TOKEN_STRING"
do_token ="${DO_PAT}"
Run Code Online (Sandbox Code Playgroud)
以下行出现在我的 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}"
}
Run Code Online (Sandbox Code Playgroud)
我的digital_ocean模块看起来像
variable "token" {}
provider "digitalocean" {
token = "${var.token}"
}
Run Code Online (Sandbox Code Playgroud)
而cloudflare提供程序看起来像
variable "email" {}
variable "token" {}
provider "CloudFlare" {
email = "${var.email}"
token = "${var.token}"
}
Run Code Online (Sandbox Code Playgroud)
在DO上设置我的jenkins主服务器
resource "digitalocean_droplet" "jenkins-master" {
...
}
Run Code Online (Sandbox Code Playgroud)
从命令行运行 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}"
Run Code Online (Sandbox Code Playgroud)
使用以上声明,它将使我进入UI模式并提示我输入这些变量,而不是自动读取它们。我已经在Terraform v0.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"
Run Code Online (Sandbox Code Playgroud)
对于CLI,应仅引用变量的值,如下所示:
terraform apply \
-var cloudflare_email="service@email.com" \
-var cloudflare_token="TOKEN_STRING" \
-var do_token="${DO_PAT}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8294 次 |
| 最近记录: |