Terraform:如何从YAML文件中将变量读入Terraform?或者像Hiera这样的数据库?

时间:2017-10-09 19:13:13

标签: terraform

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

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

resource "aws_instance" {
    ami = hiera('production') 
    ....
    ....
}

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

2 个答案:

答案 0 :(得分:3)

yamldecode函数可用于读取Yaml文件作为terraform的输入并对其进行解析以供使用。

让我们说如下的test.yml文件

a: 1
b: 2
c: 3

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

output "log" {
  value = "${yamldecode(file("test.yml"))}"
}

如果解析特定值以从yaml文件读取

output "log" {
  value = "${yamldecode(file("test.yml"))["a"}"
}

重要:在terraform的0.12或更高版本中可用,如果使用旧版本的terraform并仍要使用yaml文件,请使用terraform-provider-yaml

答案 1 :(得分:-2)

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

https://www.terraform.io/intro/getting-started/variables.html#from-a-file

  

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

     

access_key =“foo”

     

secret_key =“bar”

     

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