我在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'
它不是从命令行参数或env变量中读取“key”的值 . 但是,当我在.tf文件中硬化该值时,它可以工作 . 如下 .
key_data = "${file("~/.ssh/id_rsa.pub")}"
3 回答
${ ... }
语法仅在将表达式嵌入带引号的字符串时使用 . 在这种情况下,您的var.key
变量只是作为参数传递给${ ... }
序列中的函数,您可以直接引用变量名称,如下所示:嵌套的
${ ... }
序列有时用于将插值字符串传递给函数 . 在这种情况下,首先会有一组嵌套的引号返回字符串上下文 . 例如:在这个更复杂的情况下,首先计算最里面的字符串表达式,将两个变量用
/
连接在一起,然后将整个字符串传递给file
函数,最后返回结果为key_data
的值 .ssh_keys - (可选)指定要放置在虚拟机上的path和key_data的集合 .
参考:AZURERM_VIRTUAL_MACHINE
它不起作用,因为您使用了上述方案的错误标志 .
如果要指定文件的路径,请使用“-var-file”标志,如下所示:
如果必须使用“-var”标志,则必须指定文件的内容,如下所示: