gpt4 book ai didi

terraform - 如何使用 terraform 0.13.5 检查列表中是否存在该值?

转载 作者:行者123 更新时间:2023-12-04 15:04:16 25 4
gpt4 key购买 nike

我需要检查变量中是否存在值,并基于此我需要创建资源。
value_list没有这些 values('abc','def','ghi')它不应该创建资源。
我在这里尝试的是:

  • 将字符串变量转换为列表
  • 检查列表是否具有值“abc”或“def”或“ghi”。如 value_list包含任何一个值,然后继续下一步以创建资源。
  • value_list没有这些 values('abc','def','ghi')它不应该创建资源。

  • 变量.tf
    variable "value_list" {
    default = "abc,def,ghi"
    type= string
    }
    资源.tf
    resource "azurerm_kubernetes_cluster_node_pool" "user" {
    value_list = ${split(",", var.value_list)}
    count = "${contains(value_list,"abc") ? 1 : 0 || contains(value_list,"def") ? 1 : 0 || contains(value_list,"ghi") ? 1 : 0
    }
    错误:
    该字符未在语言中使用。
    应为表达式的开头,但发现无效的表达式标记。
    如何检查 value_list 是否具有所需的值?

    最佳答案

    Terraform 具有可以帮助解决此问题的功能:

  • https://www.terraform.io/docs/language/functions/contains.html
  • https://www.terraform.io/docs/language/functions/setintersection.html
  • https://www.terraform.io/docs/language/functions/setsubtract.html
  • https://www.terraform.io/docs/language/functions/setunion.html

  • 看起来您正在使用包含,但以一种奇怪的方式,如果您需要拆分某些东西,您可以在本地进行拆分,这样它就可以用于多个资源,而且您的计数中的表达式看起来也不正确,您可能想要查看文档:
    https://www.terraform.io/docs/language/meta-arguments/count.html#using-expressions-in-count
    这是一个示例用法:
    variable "value_list" {
    default = "abc,def,ghi"
    type = string
    }

    locals {
    vlist = split(",", var.value_list)
    }

    resource "null_resource" "test_abc" {
    count = contains(local.vlist, "abc") ? 1 : 0

    provisioner "local-exec" {
    command = "echo FOUND;"
    }
    }

    resource "null_resource" "test_xyz" {
    count = contains(local.vlist, "xyz") ? 1 : 0

    provisioner "local-exec" {
    command = "echo FOUND;"
    }
    }

    resource "null_resource" "test_abc_or_def" {
    count = (contains(local.vlist, "abc") || contains(local.vlist, "def")) ? 1 : 0

    provisioner "local-exec" {
    command = "echo FOUND;"
    }
    }
    查看最后一个资源中的计数: count = (contains(local.vlist, "abc") || contains(local.vlist, "def")) ? 1 : 0这是格式的条件表达式: <CONDITION> ? <TRUE VAL> : <FALSE VAL>条件在您的示例代码中看起来很奇怪,您可以根据需要拥有任意数量的或在您的条件中,但不要混合那里的值
    ( vlist contains "abc" vlist contains "def" )
    ( contains(local.vlist, "abc") || contains(local.vlist, "def") )

    关于terraform - 如何使用 terraform 0.13.5 检查列表中是否存在该值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66453747/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com