【问题标题】:Terraform ignore_changes for resource output用于资源输出的 Terraform ignore_changes
【发布时间】:2020-10-13 03:09:52
【问题描述】:

无论如何可以忽略对资源输出的更改?或者告诉 terraform 不要刷新它?

我正在使用的 terraform 资源返回一个 state_info 输出(字符串映射),可以由 Terraform 之外的进程修改。我想忽略这些变化。这可能吗?

resource "aiven_vpc_peering_connection" "this" {

  lifecycle {
    ignore_changes = [
      state_info
    ]
  }
}

state_info 在 Terraform 之外设置为 null。我在其他 terraform 资源中使用 state_info。在我运行的后续 terraform 计划中,aiven_vpc_peering_connection.this.state_info is empty map of string 失败了

【问题讨论】:

  • 该输出将由 Terraform 在其进程结束时进行垃圾收集。其他非交互进程如何修改它?
  • 它看起来像是来自 REST API。
  • 该错误是否仅在其他资源中引用 aiven_vpc_peering_connection.this.state_info 时发生,或者即使唯一引用在您发布的忽略块中也会发生?如果是前者,那么也许将其他引用包装在 Try 函数中可以让您处理 null?如果是后者,那么我认为需要修复 Aiven 提供程序以处理 null 值。
  • aiven_vpc_peering_connection 是否有可用的数据提供者?如果是,您可以验证state_info,如果它不为空,那么您可以决定是否创建资源..

标签: terraform


【解决方案1】:

ignore_changes 机制指示 Terraform 在将配置中的值与先前状态快照中的值进行比较时忽略特定参数,因此它对的属性没有任何影响由于它们不是显式可配置的,因此保存在先前的状态。

听起来你想要的是让 Terraform 在更新先前状态以匹配远程对象(“刷新”步骤)时忽略特定参数,这样结果最终会混合来自之前保存在状态中的远程 API 和内容。 Terraform 没有实现这一点的机制:刷新后存储在状态中的值正是提供者返回的值。这种保证对于某些资源类型可能很重要,因为为一个参数保留旧值而允许其他参数更改可能会使结果不一致,例如相同的信息以多种不同的方式呈现。

最接近您所描述的是使用上游资源导出的值,然后在您最终使用该值的资源上指定 ignore_changes,告诉 Terraform 忽略比较下游对象与其配置时上游对象的变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2019-02-02
    • 2021-09-24
    • 2021-12-28
    • 2021-10-26
    • 2020-12-20
    • 2018-06-30
    相关资源
    最近更新 更多