_这个问题最初由@alanbchristie作为hashicorp/terraform#17040 打开。 由于提供者拆分,它被迁移到这里。 问题的原始正文如下。_
是否可以在local_file
配置项中添加do_not_destroy
参数,以便在执行terraform destroy
时生成的本地文件保持不变? 原因? 我为销毁后的 Ansible 脚本创建动态内容,保留此剧本的本地生成文件的内容会很有用。
即提供这样做的能力是否可以接受......
resource "local_file" "cleanup_vars" {
content = "${data.template_file.cleanup_vars.rendered}"
filename = "../../../ansible/aws-cleanup/vars.yml"
do_not_destroy = true
}
使用上述如果重新执行terraform apply
完全可以(并且可以预期)覆盖任何现有文件。
Terraform v0.11.1
data "template_file" "cleanup_vars" {
template = "${file("../../../ansible/aws-cleanup/vars.yml.tpl")}"
vars {
aws_region = "${var.aws_region}"
}
}
resource "local_file" "cleanup_vars" {
content = "${data.template_file.cleanup_vars.rendered}"
filename = "../../../ansible/aws-cleanup/vars.yml"
}
不适用
不适用
不适用
不适用
不适用
不适用
不适用
嗨@alanbchristie! 感谢您提出此功能请求,并对延迟回复表示抱歉。
HashiCorp 的 Terraform 团队在不久的将来将无法在此工作,因为我们的重点是其他地方,但如果您或其他人有时间和动机来实施它,我们很乐意审查拉取请求。
对于这样的资源选项有一些先例,通常使用 Terraform 创建它们,但在一段时间后将管理传递给其他系统。 通常,它们的名称类似于verb_on_destroy
,其中“动词”是相关资源的一些合适术语。 对于这种情况,我建议将参数命名为delete_on_destroy
,使其默认为true
,然后将显式配置为delete_on_destroy = false
。 这与nomad_job
deregister_on_destroy
参数等其他类似的现有功能一致。
(这里使用*_on_destroy
术语的原因是,在这种情况下,“破坏”是 Terraform 的操作,这反过来会导致目标系统中的其他操作。调用它do_not_destroy
可能会因为设置它而造成混淆实际上不会阻止 Terraform 销毁资源实例本身。相反,它会调整 Terraform 在_何时_销毁资源实例时采取的操作。)
@apparentlymart我在#10 中尝试了一个解决方案,很高兴收到任何反馈。
你好,
与@alanbchristie 相同的用例和相同的问题。 关于这张票的任何更新? 提前致谢。
感谢您在我们改进 HashiCorp 提供商的分类流程时的耐心等待@abn 。 我想在这里更多地了解您的用例:由于您正在调用terraform destroy
但想要保留此资源,因此它必须是更大配置的一部分,其中包含您确实想要销毁的其他类型的资源。 您能否概述此过程的步骤以及如何使用配置?
@kmoe老实说,我对原始用例的记忆有点粗制滥造。 但是,正如描述所说,导致这种情况的特殊情况是因为我们在 AWS 上创建了一些资源,这些资源生成了令牌和/或配置,这些资源需要用于清理应用后创建的资源tf 状态,在调用 destroy 后需要使用 ansible playbook 进行清理。 简单的要求是不能删除生成的文件; 在其他各种情况下,这通常会派上用场。
同样在这里
这里仍然需要
我想说我仍然对这个问题感兴趣,但我不是。 相反,正如问题开始时所指出的,我使用Ansible作为控制器,因此一旦配置好基础设施,我只需将文件复制出 Terraform 的方式。 然后,在我调用destroy 之后,当控制切换回我的Ansible playbook 时,我拥有删除之前的文件并且可以进行所需的处理。
关于 2020 年的较早问题,为什么有人要保留这样的文件? 与其他资源不同,它是“本地”资源这一事实应该暗示它通常不会在基础设施中发挥关键作用......毕竟它是“本地”的(并且在您运行apply
时无论如何都会被重写
无论如何 - 使用外部工具围绕行为进行编码对我来说更有效率。
最有用的评论
嗨@alanbchristie! 感谢您提出此功能请求,并对延迟回复表示抱歉。
HashiCorp 的 Terraform 团队在不久的将来将无法在此工作,因为我们的重点是其他地方,但如果您或其他人有时间和动机来实施它,我们很乐意审查拉取请求。
对于这样的资源选项有一些先例,通常使用 Terraform 创建它们,但在一段时间后将管理传递给其他系统。 通常,它们的名称类似于
verb_on_destroy
,其中“动词”是相关资源的一些合适术语。 对于这种情况,我建议将参数命名为delete_on_destroy
,使其默认为true
,然后将显式配置为delete_on_destroy = false
。 这与nomad_job
deregister_on_destroy
参数等其他类似的现有功能一致。(这里使用
*_on_destroy
术语的原因是,在这种情况下,“破坏”是 Terraform 的操作,这反过来会导致目标系统中的其他操作。调用它do_not_destroy
可能会因为设置它而造成混淆实际上不会阻止 Terraform 销毁资源实例本身。相反,它会调整 Terraform 在_何时_销毁资源实例时采取的操作。)