问题描述
在使用 Terraform 管理 GCE 中的 VM 访问时,尝试将 ssh-keys 放入变量并使用它,但遇到了问题。以下是用户的代码示例:
variable "ssh_keys" {
type = "list"
default = [
{
user = "atolkachev",
key = "ssh-rsa my_key atolkachev"
},
]
}
resource "google_compute_instance" "instance" {
zone = "${var.region}-${var.zone}"
project = "${var.project_name}"
metadata = {
ssh-keys = join("\n", [for user, key in var.ssh_keys : "${user}:${key}"])
}
}
在执行代码时,用户遇到了以下错误:
Error: Invalid template interpolation value on main.tf line 24, in resource "google_compute_instance" "instance":
24: ssh-keys = join("\n", [for user, key in var.ssh_keys : "${user}:${key}"])
用户尝试寻找解决方案,但未成功。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
根据用户的代码和问题描述,您遇到了变量类型的问题。为了解决这个问题,您需要将 variable "ssh_keys"
的类型更改为 "map"
,以便正确处理 ssh-keys。
以下是修正后的代码示例:
variable "ssh_keys" {
type = "map"
default = {
"atolkachev" = "ssh-rsa my_key atolkachev"
}
}
resource "google_compute_instance" "instance" {
zone = "${var.region}-${var.zone}"
project = "${var.project_name}"
metadata = {
ssh-keys = join("\n", [for user, key in var.ssh_keys : "${user}:${key}"])
}
}
在上面的示例中,我们将 variable "ssh_keys"
的类型更改为 "map"
,并更新了默认值。现在,ssh-keys
元数据的构建应该正确无误。
请确保您已经根据您的需求更新了 ssh-keys 的映射关系,并且根据您的实际情况填充了正确的 ssh-keys。
这将使 Terraform 能够正确地处理 ssh-keys,并将其应用于您的 GCE 实例。
总结
通过将 variable "ssh_keys"
的类型更改为 "map"
,您可以解决在使用 Terraform 管理 GCE 中的 VM 访问时遇到的问题。这将允许 Terraform 正确地构建 ssh-keys 的元数据,并将其应用于您的 GCE 实例。
如果您有其他问题或需要进一步的帮助,请随时提问。
正文完