【问题标题】:Differentiating between root and calling module providers in Terraform 0.11在 Terraform 0.11 中区分根和调用模块提供程序
【发布时间】:2020-01-27 04:44:00
【问题描述】:

我有一个 Terraform 模块(我们称它为 module1),它使用了 googlegoogle-beta 版本的 2.20 提供程序。

我打算从另一个(由于某种原因)对googlegoogle-beta 提供者的配置有限制的模块(我们称之为module2)调用此模块,如下所示:

provider "google-beta" {
  version = "< 2.12"
}

provider "google" {
  version = "< 2.12"
}

有没有办法让module2 实例化module1(或多或少如下)并保持其提供者的限制?

(假设下面的 sn-p 来自 main.tfmodule2


module mymodule {
  source        = "../../../path/to/module1"
}

provider "google-beta" {
  version = "< 2.12"
}

provider "google" {
  version = "< 2.12"
}

...同时,module1 可以保留自己的 google 提供者版本?

【问题讨论】:

    标签: terraform


    【解决方案1】:

    你可以pass providers explicitly when calling modules

    module2 中定义另外 2 个具有别名和适当版本的提供程序,然后使用这些提供程序显式调用 module1

    module mymodule {
      source        = "../../../path/to/module1"
    
      providers = {
        google-beta = "google-beta.newer"
        google      = "google.newer"
      }
    }
    
    provider "google-beta" {
      version = "< 2.12"
    }
    
    provider "google" {
      version = "< 2.12"
    }
    
    provider "google-beta" {
      version = "~> 2.20"
      alias   = "newer"
    }
    
    provider "google" {
      version = "~> 2.20"
      alias   = "newer"
    }
    

    【讨论】:

    • 由于以下No provider "google-beta" plugins meet the constraint "&lt; 2.12,~&gt; 2.20,~&gt; 2.20".而失败
    • 不知道为什么它会给你这个错误,尤其是当我们使用伪代码时,你是否在module1 中定义了空的提供程序块?我链接到的文档部分的最后一段提到了 terraform 0.11 的一些要求,即在显式传递时需要子模块中的空提供程序块
    猜你喜欢
    • 1970-01-01
    • 2021-01-03
    • 2019-11-23
    • 2021-12-26
    • 2018-12-15
    • 2019-11-24
    • 2018-05-04
    • 2020-02-12
    • 2021-05-03
    相关资源
    最近更新 更多