【问题标题】:Terraform pass provider arguments from module to submoduleTerraform 将提供者参数从模块传递到子模块
【发布时间】: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) 覆盖或将附加参数传递给提供者(从根模块传递)?

【问题讨论】:

    标签: terraform ibm-cloud


    【解决方案1】:

    您需要在模块块中定义变量。然后它们将用于传递您需要的设置。该示例取自具有 a module to deploy context-based restrictions 的 IBM Cloud 解决方案教程:

    # CBR objects are integrated as optional module
    module "cbr_objects" {
      count                = var.deploy_cbr ? 1 : 0
      source               = "./cbr"
      iks_cluster_name     = var.iks_cluster_name
      cbr_enforcement_mode = var.cbr_enforcement_mode
      cos                  = ibm_resource_instance.cos
      keyprotect           = ibm_resource_instance.keyprotect
      cbr_homezone_iprange = var.cbr_homezone_iprange
    }
    

    同样,您将定义您需要的内容:

    resource_group_vmware_id = ibm_resource_group.VMware.id

    【讨论】:

      猜你喜欢
      • 2018-09-07
      • 2018-02-03
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 2018-09-05
      • 2022-01-20
      相关资源
      最近更新 更多