用变量替换 terraform 块

Pav*_*uri 4 terraform terraform-provider-azure

如何用变量替换 terraform 脚本的整个块?例如,

resource "azurerm_data_factory_trigger_schedule" "sfa-data-project-agg-pipeline-trigger" {
  name            = "aggregations_pipeline_trigger"
  data_factory_id = var.data_factory_resource_id
  pipeline_name   = "my-pipeline"

  frequency = var.frequency
  schedule {
    hours   = [var.adf_pipeline_schedule_hour]
    minutes = [var.adf_pipeline_schedule_minute]
  }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,如何schedule使用 terraform 变量使整个块可配置?

我尝试过这个,但它不起作用。

schedule = var.schedule
Run Code Online (Sandbox Code Playgroud)

Mar*_*o E 6

不,这是不可能的,因为时间表是一个带有参数的块,并且它本身不是一个参数。映射是聚合类型,并且它们由原始类型(例如,本例中的数字)组成。有关原始类型和聚合类型的更详细解释以及示例可以在 [1] (h/t: Matt Schuchard) 中找到。在这种情况下,我更喜欢这样做:

variable "schedule" {
  type = object({
    hours = number
    minutes = number
  })
  description = "Variable to define the values for hours and minutes."
  
  default = {
    hours = 0
    minutes = 0
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,在资源中:

resource "azurerm_data_factory_trigger_schedule" "sfa-data-project-agg-pipeline-trigger" {
  name            = "aggregations_pipeline_trigger"
  data_factory_id = var.data_factory_resource_id
  pipeline_name   = "my-pipeline"

  frequency = var.frequency
  schedule {
    hours   = [var.schedule.hours]
    minutes = [var.schedule.minutes]
  }
}
Run Code Online (Sandbox Code Playgroud)

[1] https://www.terraform.io/plugin/sdkv2/schemas/schema-types#typemap