Terraform:Heredoc主播中无效的角色



我正在尝试在我的Terraform脚本的provisioner "remote-exec"块中使用多行字符串。但是,每当我使用文档中概述的EOT语法和各种示例时,我会收到一个错误,这些错误抱怨: invalid characters in heredoc anchor

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

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

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

provisioner "remote-exec" {
  inline = [<<EOF
   echo foo
   echo bar
  EOF
  ]
}

请注意,如果要使用在provisioner "remote-exec"块中使用的所有命令,则必须在EOF内部。您不能同时具有eof和non eof。

EOF的第一行必须像这样开始,并且在<<EOF之后您不能在此行中有任何空格,否则它会抱怨拥有invalid characters in heredoc anchor

  inline = [<<EOF

您的EOF必须以与]

相同的EOF这样的结尾
  EOF
  ]

Terraform中的Heredocs对周围的空格特别有趣。

将您的榜样更改为以下似乎摆脱了Heredoc的特定错误:

provisioner "remote-exec" {
  inline = [<<EOF
echo hi
EOF,
<<EOF
echo 
hi
EOF
  ]
}

您根本不需要多个Heredocs,但是由于内联数组是应在远程主机上运行的命令列表。使用跨多行命令的Heredoc对您有效:

provisioner "remote-exec" {
  inline = [<<EOF
echo foo
echo bar
EOF
  ]
}

此处的文档末端 - 末端具有逗号(,)。这是不允许的。

而是尝试一下:

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

我不知道文件的语法要求,但是此处的文档末端示威者需要匹配其开始时使用的单词。

通常(通常在外壳中),定界符需要先到第一位(前面没有空格)。

实际上,Terraform文档说:

多行字符串可以使用shell风格的" there doc"语法,并带有 字符串以诸如<<EOT之类的标记开始,然后是字符串结束 使用EOT在其自己的线上。字符串和末端的线 标记不得缩进。

最新更新