【问题标题】:Avoid triggering an update if Resource.Schema attribute changes in Terraform如果 Terraform 中的 Resource.Schema 属性发生更改,请避免触发更新
【发布时间】:2021-04-22 17:22:38
【问题描述】:

我试图弄清楚当 Resource.Schema 属性之一发生更改时是否可以阻止资源更新。

本质上,我正在构建一个管理基础架构的提供商。我有一个更新固件的资源。比如:

resource "redfish_simple_update" "update" {
    transfer_protocol = "HTTP"
    target_firmware_image = "/home/mikeletux/BIOS_FXC54_WN64_1.15.0.EXE"
}

如您所见,target_firmware_image 确实指的是我的固件包的完整路径。我希望能够在不触发更新的情况下更改目录。 IE。例如,通过 /home/mikeletux/Downloads/BIOS_FXC54_WN64_1.15.0.EXEtarget_firmware_image 上进行更改。

我不知道这是否可能。如果我自己进行了研究,我发现要将 CustomDiff 函数添加到架构中,但我认为这与我的场景不匹配。

你觉得我还能做些什么吗?

谢谢!

【问题讨论】:

  • 您可以查看aws_lambda_function 在哪里更改source_code_hash,然后它会触发更新并使资源忽略文件名更改。不过,这种行为确实需要您将文件的哈希值作为参数显式传递给资源。
  • 或者你可以用另一种方式来解决这个问题,只需 gitignore 二进制路径并确保始终将其复制到模块的路径中,然后使用 path.module 引用它,即使你正在运行 Terraform Terraform 代码所在的不同目录结构的不同机器。
  • 嘿@ydaetskcoR,感谢您的回答,我想我会遵循您建议的第二个选项。非常感谢,非常感谢!

标签: terraform hashicorp


【解决方案1】:

只是在这里发布我最终是如何做到的。

为了避免在路径更改而不是文件名更改时触发更新,我发现 DiffSuppressFunc 函数在这里变得非常方便:

"target_firmware_image": {
        Type:     schema.TypeString,
        Required: true,
        Description: "Target firmware image used for firmware update on the redfish instance. " +
            "Make sure you place your firmware packages in the same folder as the module and set it as follows: \"${path.module}/BIOS_FXC54_WN64_1.15.0.EXE\"",
        // DiffSuppressFunc will allow moving fw packages through the filesystem without triggering an update if so.
        // At the moment it uses filename to see if they're the same. We need to strengthen that by somehow using hashing
        DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool {
            if filepath.Base(old) == filepath.Base(new) {
                return true
            }
            return false
        },
    }

通过使用 filepath.Base() 检查新旧值,我可以确定文件名是否相同,无论文件放在哪个路径中。

我想在未来通过实现文件散列来改进这种行为,所以即使是文件名也无关紧要,但这是我将留给新版本的东西。

谢谢!

【讨论】:

    猜你喜欢
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 2017-11-11
    • 2021-03-14
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多