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.
${ ... }
语法仅在将表达式嵌入带引号的字符串时使用。在这种情况下,您的 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'
我在 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.
${ ... }
语法仅在将表达式嵌入带引号的字符串时使用。在这种情况下,您的 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'