2017-03-24 227 views
2

我在地形變量插值中遇到了問題。這是我的terraform配置看起來像。即內建函數內部變量Terraform中的可變插值

variable "key" {} 

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

命令:terraform申請-var '=鍵的〜/ .ssh/id_rsa.pub'

它不從命令行參數讀取的 「鍵」 的值或來自env變量。但是,當我強調在.tf文件中的值,它的工作原理。如下所示。

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

你是否覆蓋變量的命令行和/或env輸入通過硬編碼它在代碼中爲空? –

回答

3

${ ... }語法嵌入的表達到引用字符串時才使用。在這種情況下,你的var.key變量只是被作爲已經內${ ... }序列參數傳遞給函數,你可以直接引用變量名是這樣的:

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

嵌套${ ... }序列有時被用來傳遞一個插入到一個函數的字符串。在這種情況下,首先會有一組嵌套的引號返回到字符串上下文。例如:

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

在這種更復雜的情況下,最裏面的字符串表達式首先計算到兩個變量與/,那麼整個字符串傳遞給file功能結合在一起,與最後作爲結果返回值爲key_data

0

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

-1

它不起作用,因爲您在上述場景中使用了錯誤的標記。

如果要指定一個文件的路徑使用「-var文件」標誌如下:

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

如果你必須使用「-var」標誌,則您必須指定的內容該文件如下:

terraform apply -var 'key=contenctOFPublicKey' 
+0

這並不回答這個問題,而且-var-file和-var這兩個給定的例子用法也是錯誤的。 -var-file用於提供包含變量值的替代文件(而不是terraform.tfvars)。 -var用於將值傳遞給變量(正確地在上面提到),但它不適用於給定的代碼。 –