Variable Interpolation in Terraform

一世执手 提交于 2019-12-23 08:53:46

问题


I am having trouble in variable interpolation in terraform. Here is what my terraform configuration looks like. i.e variable inside builtin function

variable "key" {}

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

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

It's not reading the value of "key" from command line argument or from env variable. However when i hardcore the value in .tf file, it works. Like below.

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

回答1:


The ${ ... } syntax is only used when embedding an expression into a quoted string. In this case, where your var.key variable is just being passed as an argument to a function already within a ${ ... } sequence, you can just reference the variable name directly like this:

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

Nested ${ ... } sequences are sometimes used to pass an interpolated string to a function. In that case there would first be a nested set of quotes to return to string context. For example:

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

In this more complicated case, the innermost string expression is first evaluated to join together the two variables with a /, then that whole string is passed to the file function, with the result finally returned as the value of key_data.




回答2:


ssh_keys - (Optional) Specifies a collection of path and key_data to be placed on the virtual machine.

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

refer: AZURERM_VIRTUAL_MACHINE




回答3:


It doesn't work because you were using the wrong flag for the scenario you described above.

If you want to specify a path to a file use the "-var-file" flag as follow:

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

If you must use the "-var" flag then you must specify the content of the file as follow:

terraform apply -var 'key=contenctOFPublicKey'


来源:https://stackoverflow.com/questions/42991690/variable-interpolation-in-terraform

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!