Terraform 中的变量插值

Variable Interpolation in Terraform

我在 terraform 的变量插值中遇到了问题。这是我的 Terraform 配置的样子。即内置函数中的变量

variable "key" {}

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

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

它不是从命令行参数或环境变量中读取 "key" 的值。但是,当我硬核 .tf 文件中的值时,它会起作用。如下所示。

key_data = "${file("~/.ssh/id_rsa.pub")}"

ssh_keys -(可选)指定要放置在虚拟机上的路径和 key_data 的集合。

Note: Please note that the only allowed path is /home/<username>/.ssh/authorized_keys due to a limitation of Azure.

参考:AZURERM_VIRTUAL_MACHINE

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

key_data = "${file(var.key)}" 

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

key_data = "${file("${path.module}/${var.key_filename}")}" 

在这种更复杂的情况下,首先计算最内层的字符串表达式以将两个变量与 / 连接在一起,然后将整个字符串传递给 file 函数,结果为最后 returned 作为 key_data.

的值

它不起作用,因为您在上述场景中使用了错误的标志。

如果要指定文件路径,请使用“-var-file”标志,如下所示:

 terraform apply -var-file=~/.ssh/id_rsa.pub

如果必须使用“-var”标志,则必须按如下方式指定文件内容:

terraform apply -var 'key=contenctOFPublicKey'