【发布时间】:2023-02-05 20:59:38
【问题描述】:
根模块:
terraform {
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
version = ">= 1.50.0"
}
}
}
module "ibm-cloud-infr" {
providers = {
ibm = ibm.ibmcloud
}
source = "./modules/ibm-cloud"
}
provider "ibm" {
alias = "ibmcloud"
region = var.region
zone = var.zone
ibmcloud_api_key = var.ibmcloud_api_key
iaas_classic_username = var.iaas_classic_username
iaas_classic_api_key = var.iaas_classic_api_key
}
模块ibm-cloud-infr:
terraform {
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
version = ">= 1.50.0"
}
}
}
resource "ibm_resource_group" "VMware" {
name = "VMware"
}
module "vsphere-site" {
providers = {
# The question is here
}
source = "./modules/vsphere-site"
}
子模块vsphere-site:
terraform {
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
version = ">= 1.50.0"
}
}
}
# Some resources using the provider
问题:子模块 vsphere-site 所需的提供程序需要提供来自模块 ibm-cloud-infr 的资源 (ibm_resource_group.VMware) 的参数。该论点将类似于以下内容,
provider "ibm" {
# ...
resource_group = ibm_resource_group.VMware.id
}
根据 terraform 文档,提供者只能在根模块(第 0 级)中定义,这是有道理的,但在这种情况下,需要传递给提供者的参数之一需要传递给子模块(第 2 级)只是在第一级模块中已知。有没有办法在模块级别 (>=1) 覆盖或将附加参数传递给提供者(从根模块传递)?
【问题讨论】: