Terraform中的可变插值

时间:2017-03-24 04:55:54

标签: 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"的价值。来自命令行参数或来自env变量。但是,当我在.tf文件中硬化该值时,它可以工作。如下所示。

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

3 个答案:

答案 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.

参考:AZURERM_VIRTUAL_MACHINE

答案 2 :(得分:-1)

它没有用,因为你在上面描述的场景中使用了错误的标志。

如果要指定文件的路径,请使用&#34; -var-file&#34;标志如下:

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

如果你必须使用&#34; -var&#34; flag然后你必须指定文件的内容如下:

terraform apply -var 'key=contenctOFPublicKey'