【问题标题】:Handling a "Changeset" in a terraform provider在 terraform 提供程序中处理“变更集”
【发布时间】:2021-09-11 23:48:13
【问题描述】:

我有一个 api,其工作原理如下:

  1. 使用 POST /changeset/ 创建变更集,并获取 changeset_id
  2. 使用changeset id 使用POST /record/ 创建记录
  3. 使用changeset id 使用POST /record/ 创建记录
  4. 使用changeset id 创建记录,使用POST /record/(等等...)
  5. 使用 POST /changeset/<id>status: "committed" 提交变更集。然后变更集中的所有记录都“已提交”。

我想将它捆绑在我的 terraform 提供程序中,这样我就可以编写如下内容:

resource my-record "1" {...}

resource my-record "2" {...}

resource my-record "3" {...}

并将所有记录作为一个变更集的一部分提交。对 terraform 实例中记录的任何更改也应遵循以下逻辑:

  1. 创建变更集
  2. 更改一堆记录
  3. 提交变更集

有没有办法在 terraform-plugin-sdk 中实现这一点?就像以某种方式为相同类型的资源创建一个公共上下文?

现在我正在为每条记录创建并提交一个变更集,这很昂贵。

【问题讨论】:

    标签: go terraform terraform0.12+ terraform-template-file


    【解决方案1】:

    很遗憾,目前 terraform 不支持此设置,请参阅相关的 issue

    您可以使用的一种解决方法是将这些资源嵌套到一个“元”资源中,这样您就可以创建一个变更集、添加多条记录并将其提交到一个 terraform 资源中。然后,您的配置将类似于以下内容:

    resource "myprovider_changeset" "test" {
      record {
        name = "1"
        ...
      }
    
      record {
        name = "2"
        ...
      }
    }
    

    实现的基本理念是拥有一个具有schema.TypeSet 属性的元资源,该属性定义嵌套资源的模式,然后在Create/Update/Delete 函数中循环这些集合。

    提供者这样做的一个例子是fastly provider service_v1 resource。您可以查看它是如何实现的:meta resoruceexample of nested resource

    【讨论】:

      猜你喜欢
      • 2022-08-08
      • 2021-05-03
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 2021-03-14
      • 1970-01-01
      相关资源
      最近更新 更多