Terraform-provider-local: 添加在销毁时保留 local_file 的功能

创建于 2018-01-05  ·  8评论  ·  资料来源: hashicorp/terraform-provider-local

_这个问题最初由@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

Terraform 配置文件

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"
}

调试输出

不适用

崩溃输出

不适用

预期行为

不适用

实际行为

不适用

重现步骤

不适用

附加上下文

不适用

参考

不适用

enhancement

最有用的评论

嗨@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 在_何时_销毁资源实例时采取的操作。)

所有8条评论

嗨@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时无论如何都会被重写

无论如何 - 使用外部工具围绕行为进行编码对我来说更有效率。

此页面是否有帮助?
0 / 5 - 0 等级