如何使用 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
函数正在自动生成三个令牌的简单情况:TokenOQuote
、TokenQuotedLit
、TokenCQuote
。
您可以使用 TokensForTraversal
为该表达式的 var.stage
部分自动创建标记,这是 SetAttributeTraversal
内部所做的。但是,除非您已经有一个代表 var.stage
的已解析 hcl.Traversal
,或者除非您需要的东西比您在实践中展示的更加动态,否则我预计构建该输入遍历需要更多代码而不是像我上面显示的那样直接写出三个标记。
我正在尝试使用 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
函数正在自动生成三个令牌的简单情况:TokenOQuote
、TokenQuotedLit
、TokenCQuote
。
您可以使用 TokensForTraversal
为该表达式的 var.stage
部分自动创建标记,这是 SetAttributeTraversal
内部所做的。但是,除非您已经有一个代表 var.stage
的已解析 hcl.Traversal
,或者除非您需要的东西比您在实践中展示的更加动态,否则我预计构建该输入遍历需要更多代码而不是像我上面显示的那样直接写出三个标记。