使用Terraform生命周期忽略元数据中的SSH密钥

3
当您使用gcloud连接实例时,它会将ssh公钥添加到该实例的元数据中以便于您进入。很棒。
但是,现在terraform想要删除该元数据,因为它不在.tf文件中。我并不关心它是否在.tf文件中,我希望terraform忽略SSH密钥,并且由于安全问题我无法控制,我不能使用项目范围的SSH密钥。
我知道如何设置生命周期策略以忽略所有元数据,但我们仍然希望在hostinit脚本更改时收到通知,因此我正在尝试找到一种仅忽略ssh密钥元数据的方法。
如您所想象的那样,这对于获取良好的谷歌搜索结果来说相当困难,但我已经尝试过了。 有许多类似的问题,但通过启用项目范围的SSH密钥进行解决,而我无法这样做。
1个回答

6

您可以选择忽略所有元数据。

resource "google_compute_instance" "default" {
 
  ...

  lifecycle {
    ignore_changes = [
      metadata
    ]
  }
}

或者只是特定的一些,例如这里的metadata["sshKeys"](在ignore_changes中用于映射元素的语法)

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

您可以使用'ignore_changes'找到有关生命周期自定义的详细信息。您还可以在HashiCorp 讨论论坛中发布您的详细查询,以联系terraform社区。 - Mustafiz
2
使用 Terraform v0.12.29,以下代码可以正常工作:ignore_changes = [metadata["sshKeys"]] - Hüda
1
截至2021年和Terraform 1.x,对我来说是ignore_changes = [metadata["ssh-keys"]] - beatcracker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接