@@ -219,14 +219,23 @@ func (c *converter) convertUnary(v *hclsyntax.UnaryOpExpr) (interface{}, error)
219219 return ctyjson.SimpleJSONValue {Value : val }, nil
220220}
221221
222+ // Escape sequences that have special meaning in hcl json
223+ // such as ${ that come from literals, that shouldn't have
224+ // real interpolation
225+ func escapeLiteral (lit string ) string {
226+ lit = strings .Replace (lit , "${" , "$${" , - 1 )
227+ lit = strings .Replace (lit , "%{" , "%%{" , - 1 )
228+ return lit
229+ }
230+
222231func (c * converter ) convertTemplate (t * hclsyntax.TemplateExpr ) (string , error ) {
223232 if t .IsStringLiteral () {
224233 // safe because the value is just the string
225234 v , err := t .Value (nil )
226235 if err != nil {
227236 return "" , err
228237 }
229- return v .AsString (), nil
238+ return escapeLiteral ( v .AsString () ), nil
230239 }
231240 var builder strings.Builder
232241 for _ , part := range t .Parts {
@@ -251,7 +260,7 @@ func (c *converter) convertStringPart(expr hclsyntax.Expression) (string, error)
251260 if err != nil {
252261 return "" , err
253262 }
254- return s .AsString (), nil
263+ return escapeLiteral ( s .AsString () ), nil
255264 case * hclsyntax.TemplateExpr :
256265 return c .convertTemplate (v )
257266 case * hclsyntax.TemplateWrapExpr :
0 commit comments