gpt4 book ai didi

Terraform vsphere_tag 不需要的删除

转载 作者:行者123 更新时间:2023-12-04 12:23:15 27 4
gpt4 key购买 nike

我正在使用 Terraform 在我们的 VMware vCenter 基础架构上部署一些开发和生产 VM,并使用 vsphere 标签来定义 VM 的职责。因此,我在(子)模块中添加了以下内容:

  resource "vsphere_tag" "tag" {
name = "SYS-Team"
category_id = "Responsibility"
description = "Systems group"
}

...

resource "vsphere_virtual_machine" "web" {
tags = [vsphere_tag.tag.id]
...
}
现在,当我销毁例如在 dev infra 中,它还删除了 prod vsphere 标记,并使 VM 没有标记。
我试图跳过生命周期中的删除,但随后我需要单独删除我不喜欢的每个资源。
lifecycle {
prevent_destroy = true
}
有没有办法在不让 Terraform 管理资源的情况下添加现有标签?一些硬编码而没有将标签包含为资源的内容,例如:
  resource "vsphere_virtual_machine" "web" {
tags = [{
name = "SYS-Team"
category_id = "Responsibility"
description = "Systems group"
}
]
...
}

最佳答案

您可以使用 Terraform's data sources当您需要从资源中检索某些输出(例如自动生成的 ID)时,指代不受 Terraform 管理或在不同 Terraform 上下文中管理的事物。
在这种情况下,您可以使用 vsphere_tag data source查找 id标签:

data "vsphere_tag_category" "responsibility" {
name = "Responsibility"
}

data "vsphere_tag" "sys_team" {
name = "SYS-Team"
category_id = data.vsphere_tag_category.responsibility.id
}

...

resource "vsphere_virtual_machine" "web" {
tags = [data.vsphere_tag.sys_team.id]
...
}
这将使用在外部创建或由 Terraform 在其他地方管理的 vSphere 标记,让您轻松运行 terraform destroy销毁虚拟机但保留标签。

关于Terraform vsphere_tag 不需要的删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65424328/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com