Terraform:如何将变量从 YAML 文件读入 Terraform?还是来自像 Hiera 这样的数据库?

dr_*_*ino 4 terraform

我想从外部 YAML 文件或像 Hiera 这样的数据库将变量读入我的 Terraform 配置文件,我该怎么做?例如:

provider "aws" {
    region = hiera('virginia')    # this should look up for virginia=us-east-1
}

resource "aws_instance" {
    ami = hiera('production') 
    ....
    ....
}
Run Code Online (Sandbox Code Playgroud)

基本上它类似于我们如何使用 hiera 或 YAML 文件查找 Puppet 清单/配置。

Mah*_*tam 13

yamldecode 函数可用于读取 Yaml 文件作为 terraform 的输入并解析它以使用。

假设 test.yml 文件如下

a: 1
b: 2
c: 3
Run Code Online (Sandbox Code Playgroud)

然后下面的代码可以用来读取yaml文件

output "log" {
  value = "${yamldecode(file("test.yml"))}"
}
Run Code Online (Sandbox Code Playgroud)

为了解析从 yaml 文件中读取的特定值

output "log" {
  value = "${yamldecode(file("test.yml"))["a"]}"
}
Run Code Online (Sandbox Code Playgroud)

重要提示:这在 terraform 0.12 或更高版本中可用,如果使用旧版本的 terraform 并且仍想使用 yaml 文件,则使用terraform-provider-yaml


API*_*API 6

您可以将 yaml 文件包含为本地文件:

locals {
  config  = yamldecode(file("${path.module}/configfile.yml"))
}
Run Code Online (Sandbox Code Playgroud)

现在您可以调用所有变量local.config,例如变量project_name

local.config.project_name 
Run Code Online (Sandbox Code Playgroud)


Ans*_*eek -7

您必须将变量移动到 terraform.tfvars 或 *.auto.tfvars 文件。

https://www.terraform.io/language/values/variables#variable-definitions-tfvars-files

要保留变量值,请创建一个文件并在该文件中分配变量。创建一个名为 terraform.tfvars 的文件,其中包含以下内容:

访问密钥=“foo”

Secret_key =“酒吧”

对于当前目录中存在的与 terraform.tfvars 或 *.auto.tfvars 匹配的所有文件,Terraform 会自动加载它们以填充变量。如果文件被命名为其他名称,则可以直接使用 -var-file 标志来指定文件。这些文件与 Terraform 配置文件的语法相同。与 Terraform 配置文件一样,这些文件也可以是 JSON。