我正在寻找一种方法来找到变量的类型使用go-cty包在hclwrite。
我的目标是生成一个如下所示的变量文件
variable "test_var" {
val1 = bool
val2 = string
val3 = number
}
参考:https://developer.hashicorp.com/terraform/language/values/variables
我使用下面的代码来生成这个。
vars := hclwrite.NewEmptyFile()
vars_root_body := vars.Body()
vars_file, vars_create_err := os.Create("variables.tf")
logErrors(vars_create_err)
vars_block := vars_root_body.AppendNewBlock("variable",[]string{"test_var"})
vars_block_body := vars_block.Body()
vars_block_body.SetAttributeValue("val", cty.Value{})
_, vars_write_err := vars_file.Write(vars.Bytes())
logErrors(vars_write_err)
defer vars_file.Close()
上面的代码生成了这个
variable "test_var" {
val = null
}
我想获取该变量的类型,并根据该类型设置属性值,如上面的参考链接所示。我尝试了很多方法,但没有任何结果。有人能帮助我吗?
我尝试了上面的代码和许多其他方法,如
cty.SetValEmpty(cty.Bool)
但没有成功。
1条答案
按热度按时间xuo3flqw1#
Terraform中
variable
块的预期语法包括一个名为type
的参数,而不是名为val
的参数。Terraform使用的类型约束语法不是HCL的直接组成部分,因此没有任何内置的方法可以在一个步骤中生成该语法。然而,类型约束是从HCL的标识符和函数调用语法构建的,
hclwrite
确实有一些函数可以帮助生成这些单独的部分:TokensForIdentifier
TokensForFunctionCall
以上操作将生成以下内容:
如果你已经有了一个
cty.Value
值,那么你可以使用Type
方法获得它的类型。但是,正如上面提到的,没有任何现成的函数可以将类型转换为类型表达式,所以如果你想为任何值生成一个类型约束,那么你需要自己编写一个函数。 PackageTokensForFunctionCall
和TokensForIdentifier
函数。例如:这个程序将生成与前面例子相同的输出。你可以改变
func main
,将不同的类型传递给typeExprTokens
,看看它在处理一些不同类型时的行为。