Terraform GCP 实例元数据启动脚本问题

Terraform GCP Instance Metadata Startup Script Issue

我已经使用 Terraform v0.15.4 几个星期了,并且已经掌握了大部分行话。我目前正在尝试在 GCP 上动态创建一个 RHEL 7 实例集群,并且在大多数情况下,已经达到了 运行 好的。

我正在部署一个实例,其中传递了某些元数据,用于机器映像中内置的脚本,以便随后进行配置。此元数据通常只是通过回显传递到文本文件中,然后脚本根据需要获取该文本文件。

这……很简单。 Echo "STUFF" > file...唉,我一遍又一遍地遇到同样的问题,这让我发疯了。我已经 Google 很久了,但我能找到的只是我正在做的事情的例子,唯一的区别是他们的工作,我的不...所以希望我能在这里获得一些帮助。

我的'makes it half-way'代码如下:

resource "google_compute_instance" "GP_Master_Node" {
  ...
  metadata_startup_script = <<-EOF
  echo "hello
  you" > /test.txt
  echo "help
  me" > /test2.txt
  EOF

现在带有此实例的实例确实已成功创建,尽管当我查看该实例时,我得到一个名为“/test.txt? '(或者如果我'ls'文件,它显示为'/test.txt^M')并且没有第二个文件..我可以运行任何命令而不是回显,而第一个完成,第二个+没有。为什么??到底是什么原因造成的??

我也找到了下面的代码,但它对我根本不起作用,有错误,'Blocks of type "metadata" are not expected here.'

resource "google_compute_instance" "GP_Master_Node" {
  ...
  metadata {
    startup-script = "echo test > /test.txt"
  }

好的!事后看来,愚蠢的问题(有点)的简单答案。该文件以某种方式在 DOS 中格式化,这意味着该脚本需要一个行连续字符来正确 运行 (特别是在每个单独命令的末尾 \ )。代码如下:

resource "google_compute_instance" "GP_Master_Node" {
  ...
  metadata_startup_script = <<-EOF
  echo "hello
  you" > /test.txt \
  echo "help
  me" > /test2.txt \
  echo "example1" > /test3.txt \
  echo "and so on..." > /final.txt
  EOF

但是,同样解决我的问题的只是 'refreshing' 文件(可能是这个词,我不知道)。我使用触摸创建了一个全新的文件,将原始文件内容“更多”到屏幕上,然后将它们复制粘贴到新文件中。保存时,它不再像预期的那样是 DOS,然后当我 运行 按预期对代码 运行 进行变形时,不需要在命令末尾使用行继续字符。

感谢评论者的帮助:)