英文:
Difference between variables passed in terraform.Options for Terratest and terraform.tfvars?
问题
我理解你的问题是关于使用terraform.Options
的目的以及如何在其中映射嵌套变量值的问题。
terraform.Options
是用于在Terratest中配置Terraform的选项。它允许你指定Terraform代码的路径以及变量的值。尽管你可以从tfvars文件中获取变量的值,但使用terraform.Options
可以更灵活地控制和定制测试环境。
对于嵌套变量,你可以使用类似于tfvars文件中的嵌套结构来映射它们。在你的示例中,resource_group
是一个嵌套的变量,它包含两个子变量resource_group1
和resource_group2
。你可以在terraform.Options
的Vars
字段中使用相同的嵌套结构来映射这些变量。例如:
terraformOptions := &terraform.Options{
TerraformDir: "../../examples/azure/terraform-azure-resourcegroup-example",
Vars: map[string]interface{}{
"resource_group": map[string]interface{}{
"resource_group1": map[string]interface{}{
"rg_name": "Terratest1",
"location": "us",
"tags": map[string]interface{}{
"foo": "foo",
"bar": "bar",
},
},
"resource_group2": map[string]interface{}{
"rg_name": "Terratest2",
"location": "us",
"tags": map[string]interface{}{
"foo": "foo",
"bar": "bar",
},
},
},
"postfix": uniquePostfix,
},
}
通过这种方式,你可以在terraform.Options
中正确地映射嵌套变量的值,并将其传递给Terratest进行测试。
希望这可以帮助到你!如果你有任何其他问题,请随时问我。
英文:
I get terraform.Options is for testing purposes but what is the purpose of it when my Terratest can get the variable values from the tfvars file? How can I utilize it to it's max ability?
Also, most of my variables in tfvars are nested. How would I map that out in terraform.Options?
#variable in tfvars
resource_group = {
resource_group1 = {
rg_name = "Terratest1"
#resource group location
location = "us"
#tags
tags = {
foo = "foo"
bar = "bar"
}
}
resource_group2= {
rg_name = "Terratest2"
location = "us"
tags = {
foo = "foo"
bar = "bar"
}
}
}
#how would I map in terraform.Options?
terraformOptions := &terraform.Options{
// The path to where our Terraform code is located
TerraformDir: "../../examples/azure/terraform-azure-resourcegroup-example",
Vars: map[string]interface{}{
"postfix": uniquePostfix,
},
}
答案1
得分: 1
terraform.Options
是用于测试目的的,但当我的Terratest可以从tfvars文件中获取变量值时,它的目的是什么?
测试的一个重要方面是变化输入,并根据这些输入验证行为和输出。您可以使用terraform.Options
为模块提供各种输入,然后确定模块的行为和输出是否符合预期。如果这是一个根模块配置,那么该值的重要性就大大降低了。如果这是一个可重用且经常声明的模块,那么它就有很大的价值。
我该如何在terraform.Options
中映射这个?
最简单的方法是使用嵌套类型构造函数:
terraformOptions := &terraform.Options{
// terraform模块的路径
TerraformDir: "../../examples/azure/terraform-azure-resourcegroup-example",
// 模块的输入变量映射
Vars: map[string]interface{}{
"resource_group1": map[string]interface{}{
"rg_name": "Terratest1",
"location": "us",
"tags": map[string]string{
"foo": "foo",
"bar": "bar",
},
},
"resource_group2": map[string]interface{}{
"rg_name": "Terratest2",
"location": "us",
"tags": map[string]string{
"foo": "foo",
"bar": "bar",
},
},
},
}
英文:
> I get terraform.Options is for testing purposes but what is the purpose of it when my Terratest can get the variable values from the tfvars file?
One of the important aspects of testing is to vary the inputs, and validate the behavior and outputs based on those inputs. You can use terraform.Options
to provide a variety of inputs to a module, and then determine that the behavior and outputs of the module are as expected. If this is a root module config, then that value is significantly diminished. If this is a reusable and often declared module, then there is substantial value.
> How would I map that out in terraform.Options?
With nested type constructors most easily:
terraformOptions := &terraform.Options{
// path to terraform module
TerraformDir: "../../examples/azure/terraform-azure-resourcegroup-example",
// map of input variables to module
Vars: map[string]interface{}{
"resource_group1": map[string]interface{}{
"rg_name": "Terratest1",
"location": "us",
"tags ": map[string]string{
"foo": "foo",
"bar": "bar",
},
},
"resource_group2": map[string]interface{}{
"rg_name": "Terratest2",
"location": "us",
"tags ": map[string]string{
"foo": "foo",
"bar": "bar",
},
},
},
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论