【问题标题】:Variable Interpolation in TerraformTerraform 中的变量插值
【发布时间】:2017-05-28 20:08:32
【问题描述】:

我在 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")}"

【问题讨论】:

  • 您是否通过在代码中将其硬编码为空来覆盖该变量的命令行和/或 env 输入?

标签: terraform


【解决方案1】:

${ ... } 语法仅在将表达式嵌入到带引号的字符串中时使用。在这种情况下,您的 var.key 变量只是作为参数传递给已经在 ${ ... } 序列中的函数,您可以像这样直接引用变量名称:

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

嵌套的${ ... } 序列有时用于将内插字符串传递给函数。在这种情况下,首先会有一组嵌套的引号返回到字符串上下文。例如:

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

在这种更复杂的情况下,首先计算最里面的字符串表达式以将两个变量与/ 连接在一起,然后将整个字符串传递给file 函数,最后将结果作为值返回key_data.

【讨论】:

【解决方案2】:

它不起作用,因为您在上述场景中使用了错误的标志。

如果要指定文件的路径,请使用“-var-file”标志,如下所示:

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

如果您必须使用“-var”标志,那么您必须指定文件的内容如下:

terraform apply -var 'key=contenctOFPublicKey'

【讨论】:

  • 这没有回答问题,此外,-var-file 和 -var 的给定示例用法也是错误的。 -var-file 用于提供包含变量值的替代文件(而不是 terraform.tfvars)。 -var 用于将值传递给变量(上面正确提到),但它不适用于给定的代码。
【解决方案3】:

ssh_keys -(可选)指定要放置在虚拟机上的路径和 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2018-12-12
    • 1970-01-01
    • 2017-12-24
    • 2021-06-22
    相关资源
    最近更新 更多