首页 文章

Terraform中的可变插值

提问于
浏览
3

我在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 回答

  • 6

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

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

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

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

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

  • 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

  • -1

    它不起作用,因为您使用了上述方案的错误标志 .

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

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

    如果必须使用“-var”标志,则必须指定文件的内容,如下所示:

    terraform apply -var 'key=contenctOFPublicKey'
    

相关问题