【问题标题】:Is it possible to overload a terraform module?是否可以重载 terraform 模块?
【发布时间】:2021-03-25 14:54:20
【问题描述】:

是否可以重载 terraform 模块?

我正在调用一个创建 GKE 集群和节点池的模块。此模块缺少指定 GPU 和 gVisor 功能的选项。我想知道是否可以重载模块?基本上我想向模块正在创建的资源添加/附加更多配置。

提前致谢。

【问题讨论】:

  • 我不知道。您可以复制模块,然后修改以满足您的要求(如果许可证允许)。
  • 不,这是不可能的。您也不能“重载”资源(目前存在于类似的 DSL 中,例如 Puppet)。

标签: terraform google-kubernetes-engine


【解决方案1】:

Terraform 的语言偏爱composition 而不是继承/扩展,因此没有机制可以完全按照您的建议行事。

相反,典型的答案是将单个大模块重构为两个或更多较小的模块,然后让调用配置将这些较小的模块组合在一起以产生所需的效果。理想情况下,如果调用者发现其中一个较小的模块不适合他们的需求,那么他们可以只替换那个模块——用另一个用于类似目的的模块或内联 resource/data 块——但是继续使用其他模块。

在您给出的具体示例中,似乎 GKE 集群与其关联的节点池之间可能存在区别。一种可能的新设计是一个模块,声明一个 GKE 集群,然后内联 resource 块来声明要注册到该集群的节点,或者可能是几个封装不同种类 节点池,如果您的架构包含一组固定的节点原型。

话虽如此,如果您使用的模块是第三方模块,那么您唯一的选择是按照作者的意图使用它,或者编写您自己的模块,可能源自原始模块。创建您自己的模块“分支”将确保未来对原始模块的更改不会使您所做的更改无效。

【讨论】:

    猜你喜欢
    • 2014-06-16
    • 2021-05-27
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 2021-09-13
    • 2017-07-23
    • 2021-11-08
    • 1970-01-01
    相关资源
    最近更新 更多