gpt4 book ai didi

foreach - 重构后如何保留 terraform 资源以使用 for_each?

转载 作者:行者123 更新时间:2023-12-05 03:33:56 25 4
gpt4 key购买 nike

目前我正在对我们的基础架构进行小规模重构。我的项目的当前版本类似于以下内容:我正在尝试使用 for_each 来重用变量。

resource "google_cloud_scheduler_job" "job" {
name = "Create_All_Dossier_Summary"
description = "desc1"
schedule = "0 19 * * 1"
time_zone = "America/Sao_Paulo"
attempt_deadline = "320s"

retry_config {
retry_count = 1
}

http_target {
http_method = "POST"
uri = "<some-url>"
}
}

我正在尝试将其升级为如下内容:

variable "description" {
default = ["desc1", "desc 2"]
}

resource "google_cloud_scheduler_job" "job" {
for_each = toset(var.description)
name = "Create_All_Dossier_Summary"
description = each.value
schedule = "0 19 * * 1"
time_zone = "America/Sao_Paulo"
attempt_deadline = "320s"

retry_config {
retry_count = 1
}

http_target {
http_method = "POST"
uri = "<some-url>"
}
}

所以,配置没问题,但是在运行 terraform plan 之后,terraform 正在破坏我的旧版本,这不是我想要 terraform 做的,我的目标是它刚刚创建第二个因为第一个已经存在并且配置相同。

有没有办法告诉 Terraform 在进行此重构后不要重新创建第一个资源?

Plan: 2 to add, 0 to change, 1 to destroy.
# google_cloud_scheduler_job.job will be destroyed
# google_cloud_scheduler_job.job["desc 2"] will be created
# google_cloud_scheduler_job.job["desc1"] will be created

顺便说一句:我正在尝试使用一个对象列表,我在这里使用了一个字符串列表,因为它更容易演示。

最佳答案

当资源的 namespace /地址在 Terraform 配置中发生变化时,您必须使用 state mv 子命令重命名其在状态中的相应 id:

terraform state mv google_cloud_scheduler_job.job 'google_cloud_scheduler_job.job["desc 2"]'

请注意,由于语法中使用了 ",第二个资源地址必须完全转换为文字字符串,以便 shell 将其正确解释为参数。

关于foreach - 重构后如何保留 terraform 资源以使用 for_each?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70252615/

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