我在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"的价值。来自命令行参数或来自env变量。但是,当我在.tf文件中硬化该值时,它可以工作。如下所示。
key_data = "${file("~/.ssh/id_rsa.pub")}"
答案 0 :(得分:7)
${ ... }
语法仅在将表达式嵌入带引号的字符串时使用。在这种情况下,您的var.key
变量只是作为参数传递给${ ... }
序列中的函数,您可以直接引用变量名称:
key_data = "${file(var.key)}"
嵌套${ ... }
序列有时用于将插值字符串传递给函数。在这种情况下,首先会有一组嵌套的引号返回字符串上下文。例如:
key_data = "${file("${path.module}/${var.key_filename}")}"
在这个更复杂的情况下,首先计算最里面的字符串表达式,将两个变量与/
连接在一起,然后将整个字符串传递给file
函数,最后返回结果作为key_data
的价值。
答案 1 :(得分:0)
ssh_keys - (可选)指定要放置在虚拟机上的path和key_data的集合。
Note: Please note that the only allowed path is /home/<username>/.ssh/authorized_keys due to a limitation of Azure.
答案 2 :(得分:-1)
它没有用,因为你在上面描述的场景中使用了错误的标志。
如果要指定文件的路径,请使用&#34; -var-file&#34;标志如下:
terraform apply -var-file=~/.ssh/id_rsa.pub
如果你必须使用&#34; -var&#34; flag然后你必须指定文件的内容如下:
terraform apply -var 'key=contenctOFPublicKey'