如何使用 hcl write 设置带 ${} 的表达式?

How to use hcl write to set expressions with ${}?

我正在尝试使用 hclwrite 生成 .tf 文件。

根据hclwrite Example中的例子,我可以生成类似foo = env.PATH的变量,但我不知道如何生成更多形式的表达式。比如下面的。

stage = "prod"
foo   = "hello${var.stage}"

当我用

设置 foo 时
SetAttributeValue("foo", cty.StringVal("hello${bar}"))

我得到

foo = "hello$${bar}"

hclwrite 工具目前没有自动生成任意表达式的功能。它的辅助函数仅限于生成普通引用和文字值。 SetAttributeValue 是文字值,这就是库正确转义字符串中 ${ 序列的原因,以确保按字面解释。

如果您想构造一个更精细的表达式,那么您需要通过组装构成表达式的标记然后调用 SetAttributeRaw 来手动执行此操作。

就您的示例而言,您似乎需要生成以下八个标记:

  • TokenOQuote 字节 "
  • TokenQuotedLit 字节 hello
  • TokenTemplateInterp 字节为 ${
  • TokenIdent 字节 var
  • TokenDot 字节 .
  • TokenIdent 字节为 stage
  • TokenTemplateSeqEnd 字节 }
  • TokenCQuote 字节数 "

SetAttributeValue 函数正在自动生成三个令牌的简单情况:TokenOQuoteTokenQuotedLitTokenCQuote

您可以使用 TokensForTraversal 为该表达式的 var.stage 部分自动创建标记,这是 SetAttributeTraversal 内部所做的。但是,除非您已经有一个代表 var.stage 的已解析 hcl.Traversal,或者除非您需要的东西比您在实践中展示的更加动态,否则我预计构建该输入遍历需要更多代码而不是像我上面显示的那样直接写出三个标记。