读取包含Terraform中变量的外部文件
我正在用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
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'