【问题标题】:Terraform: How to Deal with Optional Input VariableTerraform:如何处理可选输入变量
【发布时间】:2021-07-24 07:07:57
【问题描述】:

所以我遇到了这个普遍的问题,还没有找到答案。

问题:输入值可以有可选变量,如下例所示,group_memberships 是可选输入,目前我将其设为空字符串输入以使其工作。
但是,如果我如下所示将其注释掉并运行它,我会收到错误消息:

The given key does not identify an element in this collection value.

基本上它抱怨我没有list_of_users.test_user.group_memberships。如果输入没有声明,有没有办法告诉terraform,忽略它?我知道我可以保持原样,但用户可能有许多可选值,并且制作大量空输入实际上没有意义。

谢谢!第一个问题,抱歉代码布局不佳:)

在我的 .tfvars 文件中:

  list_of_users = {
  regular_user = {
    email = "pdv@abc.com",
    group_memberships = "regular_group"
  },
  test_user = {
    email = "test@abc.com",
//    group_memberships = ""    <------ Currently can work if not comment out, looking for solution that I can remove those reduent empty declariation
  },
  admin_user = {
    email = "admin@abc.com",
    group_memberships = "admin_group"
  }
}

在 .tf 文件中:

variable "list_of_users" {}
resource "user_api_from_provider" "user_generate" {
  for_each = var.list_of_users
    email = each.value["email"]
    group_memberships = each.value["group_memberships"] !=""? [user_api_from_provider.group_generate[each.value["group_memberships"]].id] : null
}

【问题讨论】:

标签: terraform


【解决方案1】:

Terraform "experiment" 对此提供支持(已实现,但在未来版本中可能会更改或删除)。你必须在你的模块中声明你正在使用这个实验:

terraform {
  # Optional attributes and the defaults function are
  # both experimental, so we must opt in to the experiment.
  experiments = [module_variable_optional_attrs]
}

然后你会像这样在你的情况下使用它:

variable "list_of_users" {
  type = map(object({
    email = string
    group_memberships = optional(string)
  }))
}

现在,如果没有为给定用户定义 group_membership,则该字段的值为 null,因此您现在可以这样做:

resource "user_api_from_provider" "user_generate" {
  ...
  group_memberships = each.value.group_memberships != null ? [user_api_from_provider.group_generate[each.value["group_memberships"]].id] : null
}

或者,如果您不想使用实验,您应该可以这样做(未经测试):

resource "user_api_from_provider" "user_generate" {
  ...
  group_memberships = contains(each.value, "group_memberships") ? [user_api_from_provider.group_generate[each.value["group_memberships"]].id] : null
}

【讨论】:

    猜你喜欢
    • 2019-12-03
    • 2011-09-13
    • 2020-09-05
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2017-01-02
    相关资源
    最近更新 更多