Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取包含Terraform中变量的外部文件_Terraform - Fatal编程技术网

读取包含Terraform中变量的外部文件

读取包含Terraform中变量的外部文件,terraform,Terraform,我正在用Terraform部署一个google\u compute\u实例。该实例在创建时应运行脚本。使用属性元数据\u启动\u脚本: resource "google_compute_instance" "couchbase_host" { ... metadata_startup_script = file("vm_setup.sh") } 其中vm\u setup.sh: program --arg ${var.m

我正在用Terraform部署一个
google\u compute\u实例。该实例在创建时应运行脚本。使用属性
元数据\u启动\u脚本

resource "google_compute_instance" "couchbase_host" {
   ...

   metadata_startup_script = file("vm_setup.sh")
}
其中
vm\u setup.sh

program --arg ${var.my_value}
file()
提取原始字符串,表示未填充变量。如何在我的
.sh
中使用地形变量?我试图避免herdoc
类似于从磁盘读取给定文件,但它还将文件内容解释为,因此您可以在其中插入外部值

例如:

   metadata_startup_script = templatefile("${path.module}/vm_setup.sh.tmpl", {
     arg_value = var.my_value
   })
在模板文件中,您可以使用
${arg_value}
将第二个参数中的对象中的给定值替换为
templatefile


请注意,只要直接引用该值,结果就不一定是有效的shell语法——调用方可能会将
var.my_value
设置为shell可能会误解的内容。避免这种情况的一种方法是对值应用单引号,假设此脚本最终将由Unix样式的shell(bash等)进行计算:

如果
arg_value
具有值
I'm a problemmaker
,则上述模板将产生以下结果:

program --arg 'I'\''m a troublemaker'

…其中,字符串中周围的
'
引号字符和
'
的特殊转义应导致shell按照模块调用者提供的方式逐字解释值。

是的,这是可能的。我已经删除了我发布的答案。有一个现有的帖子有TF 12和更早版本的答案。。请检查:
program --arg 'I'\''m a troublemaker'