首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform使用基于运行时传递的另一个值的变量

Terraform使用基于运行时传递的另一个值的变量
EN

Stack Overflow用户
提问于 2022-04-26 14:47:21
回答 1查看 861关注 0票数 0

在运行时,我想告诉terraform哪些变量将从我的.tfvars文件中使用,我有以下值:

代码语言:javascript
复制
website-review-author                  = "test1/fwsfds/34131"
website-dev-publish                 = "test2/fwsfds/34131"
website-other-dispatcher              = "test3/fwsfds/34131"

因此,我希望data_source_id在运行时根据参数使用这些变量:

代码语言:javascript
复制
resource "azurerm_managed_disk" "datadisk" {
  name                 = "${var.default_prefix}-${var.environment}-datadisk"
  location             = "${var.default_region}"
  resource_group_name  = "${var.permanent_resources_rg}"
  storage_account_type = "${var.disk_type}"
  create_option        = "Copy"
  source_resource_id   = "${var.website_review_publish.id}" ## I need  to be a dynamic variable. So sometimes it will se website_review_author, other time website-dev-publish
  disk_size_gb         = "${var.data_disk_size_gb}"

  tags = "${var.tags}"

  depends_on = [
    azurerm_storage_account.storage
    #azurerm_managed_disk.osdisk
  ]
}

在terrraform中是否有可能在变量之间切换,从而得到适当的值。条件是:

代码语言:javascript
复制
 If (var.environment == website-review-author) ## Can be
 website-dev-publish or #website-other-dispathcer 
  then 
 source_resource_id = var.website-review-author #or other value based
 on the parameter

我对地形还不熟悉,所以还在学习我的生活方式。我需要类似的条件。

EN

回答 1

Stack Overflow用户

发布于 2022-04-26 15:50:36

您可以使用ternary操作符1。如果您决定沿着这条路线走下去,那么代码将如下所示:

代码语言:javascript
复制
resource "azurerm_managed_disk" "datadisk" {
  name                 = "${var.default_prefix}-${var.environment}-datadisk"
  location             = "${var.default_region}"
  resource_group_name  = "${var.permanent_resources_rg}"
  storage_account_type = "${var.disk_type}"
  create_option        = "Copy"
  source_resource_id   = var.environment == website-review-author ? var.website-review-author : var.environment == website-dev-publish ? var.website-dev-publish : var.environment == website-other-dispatcher ? var.website-other-dispatcher : null 
  disk_size_gb         = "${var.data_disk_size_gb}"

  tags = "${var.tags}"

  depends_on = [
    azurerm_storage_account.storage
  ]
}

使用其他逻辑运算符2可以使它变得更加复杂,但是如果您需要所有三个不同的值,那么我建议使用workspaces 3。例如,在这种情况下,您可以使用三元运算符的workspace名称来决定要分配哪个值:

代码语言:javascript
复制
source_resource_id = terraform.workspace == <someworkspacename> ? var.webiste-review-author : var.website-dev-publish

编辑:我添加了所有三个条件。它确实很丑,但它应该能用。我建议创建一个类型为map的不同变量,然后使用它来创建资源。此外,无论何时更改环境值,资源都可能被销毁和重新创建,因此最好使用countfor_each

1

2

3

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72016035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档