【问题标题】:How can a nested block have a label in a custom terraform provider?嵌套块如何在自定义 terraform 提供程序中具有标签?
【发布时间】:2021-09-07 18:55:58
【问题描述】:

我正在为 terraform 编写一个提供程序,并且正在尝试研究如何在嵌套块上获取标签。

https://www.terraform.io/docs/language/syntax/configuration.html#blocks 声明“一个特定的块类型可能有任意数量的必需标签,或者它可能不需要嵌套 network_interface 块类型。”

如果我的配置中有这样的东西

resource "myprovider_thing" "test" {
  x = 1

  settings "set1" {
    y = 2
  }
}

架构中的settings 具有schema.TypeSetTypeElem 类型的&schema.Resource。当我尝试一个计划时,我被告知有一个无关标签,并且该块不需要标签。

我找不到任何解释如何设置元素需要标签或如何访问它。

是否可以有一个带有标签的嵌套块或者我误解了配置页面上写的内容?

【问题讨论】:

    标签: terraform


    【解决方案1】:

    您提到的语法文档是对 Terraform 语言语法的一般性陈述,但标记块的机制通常保留用于 Terraform 语言内置的构造,例如我们在您的示例中看到的 resource 块.

    在特定于资源类型的参数中的常用方法是创建映射类型的参数并让用户为它们分配映射值,而不是使用块语法。对于静态定义的标签不够用的情况,这种方法还可以让用户更轻松地动态构建地图,因为他们可以使用任意 Terraform 语言表达式来生成值。

    当前的 Terraform SDK 是围绕 Terraform 所有历史版本的功能构建的,因此由于 Terraform v0.11 及更早版本的设计限制,它仅支持原始类型的映射。这意味着没有办法指定 objects 的映射,这将是最接近带有标签的嵌套块类型的模拟。

    在我写这个答案的时候,有一个名为Terraform Plugin Framework 的新库正在积极开发中,它终止了对 v0.12 之前版本的 Terraform 版本的支持,但作为回报,可以使用其中引入的 Terraform 功能发布,包括在您的提供者模式中声明对象映射的可能性。在我写这篇文章的时候它仍然是实验性的,因为团队仍在迭代代表所有不同功能的最佳方式,但对于一个新的供应商来说,如果你愿意回应,它可能是一个合理的基础在它达到第一个稳定版本的过程中可能发生的任何潜在的重大变化。

    【讨论】:

      猜你喜欢
      • 2019-11-23
      • 2021-03-14
      • 2021-12-28
      • 2020-07-08
      • 2016-08-25
      • 1970-01-01
      • 2018-01-03
      • 2021-05-05
      • 2020-05-16
      相关资源
      最近更新 更多