Terraform中的可变插值

MMA*_*MMA 7 terraform

我在terraform的变量插值方面遇到了麻烦.这是我的terraform配置的样子.即内置函数内的变量

variable "key" {}

    ssh_keys {
        path     = "/home/${var.provider["user"]}/.ssh/authorized_keys"
        key_data = "${file(${var.key})}" 
    }
Run Code Online (Sandbox Code Playgroud)

命令:terraform apply -var'key =〜/ .ssh/id_rsa.pub'

它不是从命令行参数或env变量中读取"key"的值.但是,当我在.tf文件中硬化该值时,它可以工作.如下.

key_data = "${file("~/.ssh/id_rsa.pub")}"
Run Code Online (Sandbox Code Playgroud)

Mar*_*ins 9

所述${ ... }嵌入的表达到引用字符串时的语法仅使用.在这种情况下,您的var.key变量只是作为参数传递给${ ... }序列中已有的函数,您可以直接引用变量名称,如下所示:

key_data = "${file(var.key)}" 
Run Code Online (Sandbox Code Playgroud)

嵌套${ ... }序列有时用于将插值字符串传递给函数.在这种情况下,首先会有一组嵌套的引号返回字符串上下文.例如:

key_data = "${file("${path.module}/${var.key_filename}")}" 
Run Code Online (Sandbox Code Playgroud)

在这个更复杂的情况下,首先计算最里面的字符串表达式,将两个变量用a连接在一起/,然后将整个字符串传递给file函数,最后将结果作为值返回key_data.