首页 > 解决方案 > Terraform 生命周期忽略元数据中的 SSH 密钥

问题描述

当您使用 gcloud ssh 到实例时,它会将 ssh pubkey 添加到实例的元数据中以让您进入。太棒了。

除了,现在 terraform 想要删除该元数据,因为它不在 .tf 文件中。我不在乎它不在 .tf 文件中,我希望 terraform 忽略 SSH 密钥,并且由于安全问题我无法控制我无法使用项目范围的 SSH 密钥。

我知道如何设置忽略所有元数据的生命周期策略,但是如果 hostinit 脚本发生更改,我们仍然希望得到通知,所以我试图找到一种只忽略 ssh 密钥元数据的方法。

正如您可以想象的那样,这很难获得好的谷歌结果,但我已经尝试过了。有许多类似的问题,但通过启用我无法做到的项目范围的 SSH 密钥来解决它们。

标签: google-cloud-platformterraform

解决方案


您可以忽略所有元数据

resource "google_compute_instance" "default" {
 
  ...

  lifecycle {
    ignore_changes = [
      metadata
    ]
  }
}

或者只是特定的,例如这里metadata["sshKeys"](地图元素的语法ignore_changes

  lifecycle {
    ignore_changes = [
      metadata["sshKeys"]
    ]
  }

推荐阅读