Terraform:heredoc锚中的无效字符

Ale*_*hen 8 terraform

我试图在provisioner "remote-exec"我的terraform脚本块中使用多行字符串.然而,每当我使用EOT文档和各种示例中概述的语法时,我都会收到一个错误,抱怨:invalid characters in heredoc anchor.

下面是一个provisioner "remote-exec"收到此错误的简单示例(两种类型的EOT在单独尝试时都会收到此错误):

provisioner "remote-exec" {
  inline = [
    << EOT 
    echo hi 
    EOT,

    << EOT 
    echo \
    hi 
    EOT,
  ]
}
Run Code Online (Sandbox Code Playgroud)

更新:这是工作解决方案,如果您遇到此问题,请仔细阅读,因为在EOF方面,terraform非常挑剔:

provisioner "remote-exec" {
  inline = [<<EOF

   echo foo
   echo bar

  EOF
  ]
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果要使用EOF,则provisioner "remote-exec"块中使用的所有命令都必须位于EOF中.你不能同时拥有EOF和非EOF.

EOF的第一行必须像这样开始,你不能在这行中有任何空格,<<EOF否则它会抱怨invalid characters in heredoc anchor:

  inline = [<<EOF
Run Code Online (Sandbox Code Playgroud)

你的EOF必须以这样的方式结束,与之EOF相同的缩进]

  EOF
  ]
Run Code Online (Sandbox Code Playgroud)

yda*_*coR 8

Terraform中的Heredocs对周围的空白特别有趣.

将您的示例更改为以下内容似乎摆脱了heredoc特定错误:

provisioner "remote-exec" {
  inline = [<<EOF
echo hi
EOF,
<<EOF
echo \
hi
EOF
  ]
}
Run Code Online (Sandbox Code Playgroud)

您根本不需要多个heredoc,因为内联数组是应该在远程主机上运行的命令列表.使用带有多行命令的heredoc应该可以正常工作:

provisioner "remote-exec" {
  inline = [<<EOF
echo foo
echo bar
EOF
  ]
}
Run Code Online (Sandbox Code Playgroud)

  • 没什么区别,如果需要,可以使用FOOBAR,问题出在周围的空白区域。EOF只是一个更标准的Heredoc锚,这就是我所使用的。 (2认同)